diff --git a/.github/workflows/build_all_targets.yml b/.github/workflows/build_all_targets.yml index ce4229c5b4..69c82fa11c 100644 --- a/.github/workflows/build_all_targets.yml +++ b/.github/workflows/build_all_targets.yml @@ -54,7 +54,13 @@ jobs: run: echo "::set-output name=timestamp::$(date +"%Y%m%d%H%M%S")" - id: set-branch - run: echo "::set-output name=branchname::${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" + run: | + echo "branchname=${{ + github.event_name == 'pull_request' && + format('pr-{0}', github.event.pull_request.number) || + github.head_ref || + github.ref_name + }}" >> $GITHUB_OUTPUT - name: Debug Matrix Output if: runner.debug == '1' diff --git a/.github/workflows/itcm_check.yml b/.github/workflows/itcm_check.yml new file mode 100644 index 0000000000..94ebab8780 --- /dev/null +++ b/.github/workflows/itcm_check.yml @@ -0,0 +1,61 @@ +name: ITCM check + +permissions: + contents: read + +on: + push: + branches: + - 'main' + paths-ignore: + - 'docs/**' + - '.github/**' + pull_request: + branches: + - '*' + paths-ignore: + - 'docs/**' + - '.github/**' + +jobs: + check_itcm: + name: Checking ${{ matrix.target }} + runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] + container: + image: px4io/px4-dev:v1.16.0-ondemand + strategy: + fail-fast: false + matrix: + include: + - target: px4_fmu-v5x + scripts: > + boards/px4/fmu-v5x/nuttx-config/scripts/itcm_gen_functions.ld + boards/px4/fmu-v5x/nuttx-config/scripts/itcm_static_functions.ld + - target: px4_fmu-v6xrt + scripts: > + boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld + boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_static_functions.ld + - target: nxp_tropic-community + scripts: > + boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld + boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive + + - name: Git ownership workaround + run: git config --system --add safe.directory '*' + + - name: Build Target + run: make ${{ matrix.target }} + + - name: Copy built ELF + run: cp ./build/**/*.elf ./built.elf + + - name: Install itcm-check dependencies + run: pip3 install -r Tools/setup/optional-requirements.txt --break-system-packages + + - name: Execute the itcm-check + run: python3 Tools/itcm_check.py --elf-file built.elf --script-files ${{ matrix.scripts }} diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 426852e7b2..5359184ffd 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -7,33 +7,34 @@ See [the documentation on Maintainers](https://docs.px4.io/main/en/contribute/ma | Name | Sector | GitHub | Chat | email |-------------------------|--------|--------|------|---------------- -| Lorenz Meier | Founder | [LorenzMeier][LorenzMeier] | | -| Daniel Agar | Architecture | [dagar][dagar] | daniel_agar | -| Beat Küng | Architecture | [bkueng][bkueng] | beatkueng | -| Ramón Roche | CI / Testing | [mrpollo][mrpollo] | rroche | -| Mathieu Bresciani | State Estimation | [bresch][bresch] | mbresch | -| Paul Riseborough | State Estimation | [priseborough][priseborough] | | -| David Sidrane | RTOS / NuttX | [davids5][davids5] | david_s5 | -| Jayoung Lim | Simulation | [Jaeyoung-Lim][Jaeyoung-Lim] | jaeyounglim. | -| Beniamino Pozzan | ROS 2 | [beniaminopozzan][beniaminopozzan] | beniaminopozzan | -| Matthias Grob | Multirotor | [MaEtUgR][MaEtUgR] | maetugr | -| Silvan Fuhrer | Fixed-Wing / VTOL | [sfuhrer][sfuhrer] | sfuhrer | -| Christian Friedrich | Rover | [chfriedrich98][chfriedrich98] | christian982564 | -| Pedro Roque | Spacecraft | [Pedro-Roque][Pedro-Roque] | .pedroroque | +| Lorenz Meier | Founder | [@LorenzMeier](https://github.com/LorenzMeier) | | +| Daniel Agar | Architecture | [@dagar](https://github.com/dagar) | daniel_agar | +| Beat Küng | Architecture | [@bkueng](https://github.com/bkueng) | beatkueng | +| Ramón Roche | CI / Testing | [@mrpollo](https://github.com/mrpollo) | rroche | +| Mathieu Bresciani | State Estimation | [@bresch](https://github.com/bresch) | mbresch | +| Paul Riseborough | State Estimation | [@priseborough](https://github.com/priseborough) | | +| David Sidrane | RTOS / NuttX | [@davids5](https://github.com/davids5) | david_s5 | +| Jayoung Lim | Simulation | [@Jaeyoung-Lim](https://github.com/Jaeyoung-Lim) | jaeyounglim. | +| Beniamino Pozzan | ROS 2 | [@beniaminopozzan](https://github.com/beniaminopozzan) | beniaminopozzan | +| Matthias Grob | Multirotor | [@MaEtUgR](https://github.com/MaEtUgR) | maetugr | +| Silvan Fuhrer | Fixed-Wing / VTOL | [@sfuhrer](https://github.com/sfuhrer) | sfuhrer | +| Christian Friedrich | Rover | [@chfriedrich98](https://github.com/chfriedrich98) | christian982564 | +| Pedro Roque | Spacecraft | [@Pedro-Roque](https://github.com/Pedro-Roque) | .pedroroque | +| Jacob Dahl | Simulation | [@dakejahl](https://github.com/dakejahl) | dakejahl | **Documentation Maintainers** | Name | GitHub | Chat | email |------|--------|------|---------------------- -| Hamish Willee | [hamishwillee][hamishwillee] | hamishwillee | +| Hamish Willee | [@hamishwillee](https://github.com/hamishwillee) | hamishwillee | **Release Managers** | Name | GitHub | Chat | email |------|--------|------|---------------------- -| Ramón Roche | [mrpollo][mrpollo] | rroche | -| Daniel Agar | [dagar][dagar] | daniel_agar | +| Ramón Roche | [@mrpollo](https://github.com/mrpollo) | rroche | +| Daniel Agar | [@dagar](https://github.com/dagar) | daniel_agar | **Retired Maintainers** diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex b/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex new file mode 100644 index 0000000000..36ae9a26d7 --- /dev/null +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10044_sihsim_hex @@ -0,0 +1,47 @@ +#!/bin/sh +# +# @name HexarotorX SITL for SIH +# +# @type Hexarotor x +# @class Copter +# +# @maintainer Matthias Grob +# + +. ${R}etc/init.d/rc.mc_defaults + +PX4_SIMULATOR=${PX4_SIMULATOR:=sihsim} +PX4_SIM_MODEL=${PX4_SIM_MODEL:=hex} + +param set-default SENS_EN_GPSSIM 1 +param set-default SENS_EN_BAROSIM 1 +param set-default SENS_EN_MAGSIM 1 + +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 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 +param set-default PWM_MAIN_FUNC5 105 +param set-default PWM_MAIN_FUNC6 106 + +param set-default EKF2_GPS_DELAY 0 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt b/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt index b4e107799f..ff72e5e468 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt @@ -109,6 +109,7 @@ px4_add_romfs_files( 10041_sihsim_airplane 10042_sihsim_xvert 10043_sihsim_standard_vtol + 10044_sihsim_hex 17001_flightgear_tf-g1 17002_flightgear_tf-g2 diff --git a/ROMFS/px4fmu_common/init.d-posix/px4-rc.gzsim b/ROMFS/px4fmu_common/init.d-posix/px4-rc.gzsim index f610c19af0..ee24d195a7 100644 --- a/ROMFS/px4fmu_common/init.d-posix/px4-rc.gzsim +++ b/ROMFS/px4fmu_common/init.d-posix/px4-rc.gzsim @@ -110,25 +110,36 @@ if [ -n "${PX4_SIM_MODEL#*gz_}" ] && [ -z "${PX4_GZ_MODEL_NAME}" ]; then MODEL_NAME="${PX4_SIM_MODEL#*gz_}" MODEL_NAME_INSTANCE="${MODEL_NAME}_${px4_instance}" - POSE_ARG="" - if [ -n "${PX4_GZ_MODEL_POSE}" ]; then - pos_x=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $1}') - pos_y=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $2}') - pos_z=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $3}') - pos_x=${pos_x:-0} - pos_y=${pos_y:-0} - pos_z=${pos_z:-0} + sdf_pose_str="" - POSE_ARG=", pose: { position: { x: ${pos_x}, y: ${pos_y}, z: ${pos_z} } }" - echo "INFO [init] Spawning model at position: ${pos_x} ${pos_y} ${pos_z}" + if [ -n "${PX4_GZ_MODEL_POSE}" ]; then + pose_x=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $1}') + pose_y=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $2}') + pose_z=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $3}') + pose_roll=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $4}') + pose_pitch=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $5}') + pose_yaw=$(echo "${PX4_GZ_MODEL_POSE}" | awk -F',' '{print $6}') + + pose_x=${pose_x:-0} + pose_y=${pose_y:-0} + pose_z=${pose_z:-0} + pose_roll=${pose_roll:-0} + pose_pitch=${pose_pitch:-0} + pose_yaw=${pose_yaw:-0} + + sdf_pose_str=" ${pose_x} ${pose_y} ${pose_z} ${pose_roll} ${pose_pitch} ${pose_yaw} " + echo "INFO [init] Gazebo model pose: ${pose_x} ${pose_y} ${pose_z} ${pose_roll} ${pose_pitch} ${pose_yaw}" fi - echo "INFO [init] Spawning model" + echo "INFO [init] Spawning Gazebo model" + + # include the actual SDF in this one, containing the pose if given + sdf_str=" file://${PX4_GZ_MODELS}/${MODEL_NAME}/model.sdf ${sdf_pose_str} " # Spawn model ${gz_command} service -s "/world/${PX4_GZ_WORLD}/create" --reqtype gz.msgs.EntityFactory \ --reptype gz.msgs.Boolean --timeout 5000 \ - --req "sdf_filename: \"${PX4_GZ_MODELS}/${MODEL_NAME}/model.sdf\", name: \"${MODEL_NAME_INSTANCE}\", allow_renaming: false${POSE_ARG}" > /dev/null 2>&1 + --req "name: \"${MODEL_NAME_INSTANCE}\", allow_renaming: false, sdf: '${sdf_str}'" > /dev/null 2>&1 # Wait for model to spawn sleep 1 diff --git a/ROMFS/px4fmu_common/init.d-posix/rcS b/ROMFS/px4fmu_common/init.d-posix/rcS index 3619e17d03..e40647b9b4 100644 --- a/ROMFS/px4fmu_common/init.d-posix/rcS +++ b/ROMFS/px4fmu_common/init.d-posix/rcS @@ -295,10 +295,15 @@ then # for multi intances setup, add namespace prefix uxrce_dds_ns="-n px4_$px4_instance" fi -if [ -n "$PX4_UXRCE_DDS_NS" ] -then - # Override namespace if environment variable is defined - uxrce_dds_ns="-n $PX4_UXRCE_DDS_NS" +if [ "${PX4_UXRCE_DDS_NS+x}" ]; then + # Override, as variable is set (empty or not) + if [ -n "$PX4_UXRCE_DDS_NS" ]; then + # Override namespace if environment variable is non-empty + uxrce_dds_ns="-n $PX4_UXRCE_DDS_NS" + else + # Clear namespace if variable is empty + uxrce_dds_ns="" + fi fi if [ -n "$ROS_DOMAIN_ID" ] then diff --git a/ROMFS/px4fmu_common/init.d/rc.fw_apps b/ROMFS/px4fmu_common/init.d/rc.fw_apps index 81af5e1acd..7597c989b3 100644 --- a/ROMFS/px4fmu_common/init.d/rc.fw_apps +++ b/ROMFS/px4fmu_common/init.d/rc.fw_apps @@ -15,7 +15,8 @@ control_allocator start # fw_rate_control start fw_att_control start -fw_pos_control start +fw_mode_manager start +fw_lat_lon_control start airspeed_selector start # diff --git a/ROMFS/px4fmu_common/init.d/rc.fw_defaults b/ROMFS/px4fmu_common/init.d/rc.fw_defaults index e6271d8144..9d0db56e7c 100644 --- a/ROMFS/px4fmu_common/init.d/rc.fw_defaults +++ b/ROMFS/px4fmu_common/init.d/rc.fw_defaults @@ -13,8 +13,6 @@ param set-default MAV_TYPE 1 # # Default parameters for fixed wing UAVs. # -# there is a 2.5 factor applied on the _FS thresholds if for invalidation -param set-default COM_POS_FS_EPH 50 param set-default COM_VEL_FS_EVH 3 param set-default COM_POS_LOW_EPH 50 diff --git a/ROMFS/px4fmu_common/init.d/rc.mc_defaults b/ROMFS/px4fmu_common/init.d/rc.mc_defaults index db11cedbb3..995e9ddbab 100644 --- a/ROMFS/px4fmu_common/init.d/rc.mc_defaults +++ b/ROMFS/px4fmu_common/init.d/rc.mc_defaults @@ -20,7 +20,5 @@ param set-default NAV_ACC_RAD 2 param set-default RTL_RETURN_ALT 30 param set-default RTL_DESCEND_ALT 10 -param set-default GPS_UBX_DYNMODEL 6 - # lower RNG_FOG since MC are expected to fly closer over obstacles param set-default EKF2_RNG_FOG 1.0 diff --git a/ROMFS/px4fmu_common/init.d/rc.vtol_apps b/ROMFS/px4fmu_common/init.d/rc.vtol_apps index c28adef56a..16fb6ee5d6 100644 --- a/ROMFS/px4fmu_common/init.d/rc.vtol_apps +++ b/ROMFS/px4fmu_common/init.d/rc.vtol_apps @@ -27,7 +27,8 @@ fi fw_rate_control start vtol fw_att_control start vtol -fw_pos_control start vtol +fw_mode_manager start +fw_lat_lon_control start vtol fw_autotune_attitude_control start vtol # Start Land Detector diff --git a/ROMFS/px4fmu_common/init.d/rc.vtol_defaults b/ROMFS/px4fmu_common/init.d/rc.vtol_defaults index b666d59bb8..b4b4b665e6 100644 --- a/ROMFS/px4fmu_common/init.d/rc.vtol_defaults +++ b/ROMFS/px4fmu_common/init.d/rc.vtol_defaults @@ -10,9 +10,6 @@ set VEHICLE_TYPE vtol # MAV_TYPE_VTOL_FIXEDROTOR 22 param set-default MAV_TYPE 22 -# there is a 2.5 factor applied on COM_POS_FS_EPH if for invalidation -param set-default COM_POS_FS_EPH 50 - param set-default COM_POS_LOW_EPH 50 param set-default MIS_TAKEOFF_ALT 20 diff --git a/ROMFS/px4fmu_common/init.d/rcS b/ROMFS/px4fmu_common/init.d/rcS index f182d31eff..a22cb9c734 100644 --- a/ROMFS/px4fmu_common/init.d/rcS +++ b/ROMFS/px4fmu_common/init.d/rcS @@ -39,7 +39,7 @@ set VEHICLE_TYPE none # 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. -# e.g. add line "set PARAM_DEFAULTS_VER 2" in your airframe file to build the first update that enfoces a reset. +# e.g. add line "set PARAM_DEFAULTS_VER 2" in your airframe file to build the first update that enforces a reset. set PARAM_DEFAULTS_VER 1 # diff --git a/Tools/ci/check_msg_versioning.sh b/Tools/ci/check_msg_versioning.sh index 37c593d277..508a344ee6 100755 --- a/Tools/ci/check_msg_versioning.sh +++ b/Tools/ci/check_msg_versioning.sh @@ -27,9 +27,9 @@ do # - An old .msg version exists # - A translation header exists and is included - # Ignore changes to comments or constants - content_a=$(git show "${BASE_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v =) - content_b=$(git show "${HEAD_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v =) + # Ignore changes to comments or constants and trim whitespace + content_a=$(git show "${BASE_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v = | sed 's/^ *//;s/[ \t]*$//') + content_b=$(git show "${HEAD_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v = | sed 's/^ *//;s/[ \t]*$//') if [ "${content_a}" == "${content_b}" ]; then echo "No version update required for ${file}" continue diff --git a/Tools/docker_run.sh b/Tools/docker_run.sh index ad140f9f3c..121c659225 100755 --- a/Tools/docker_run.sh +++ b/Tools/docker_run.sh @@ -2,19 +2,7 @@ if [ -z ${PX4_DOCKER_REPO+x} ]; then echo "guessing PX4_DOCKER_REPO based on input"; - if [[ $@ =~ .*px4_fmu.* ]]; then - # nuttx-px4fmu-v{1,2,3,4,5} - PX4_DOCKER_REPO="px4io/px4-dev-nuttx-focal:2022-08-12" - elif [[ $@ =~ .*navio2.* ]] || [[ $@ =~ .*raspberry.* ]] || [[ $@ =~ .*beaglebone.* ]] || [[ $@ =~ .*pilotpi.default ]] || [[ $@ =~ .*navigator.* ]]; then - # beaglebone_blue_default, emlid_navio2_default, px4_raspberrypi_default, scumaker_pilotpi_default, bluerobotics_navigator_default - PX4_DOCKER_REPO="px4io/px4-dev-armhf:2023-06-26" - elif [[ $@ =~ .*pilotpi.arm64 ]]; then - # scumaker_pilotpi_arm64 - PX4_DOCKER_REPO="px4io/px4-dev-aarch64:2022-08-12" - elif [[ $@ =~ .*navio2.* ]] || [[ $@ =~ .*raspberry.* ]] || [[ $@ =~ .*bebop.* ]]; then - # posix_rpi_cross, posix_bebop_default - PX4_DOCKER_REPO="px4io/px4-dev-armhf:2023-06-26" - elif [[ $@ =~ .*clang.* ]] || [[ $@ =~ .*scan-build.* ]]; then + if [[ $@ =~ .*clang.* ]] || [[ $@ =~ .*scan-build.* ]]; then # clang tools PX4_DOCKER_REPO="px4io/px4-dev-clang:2021-02-04" elif [[ $@ =~ .*tests* ]]; then @@ -27,17 +15,9 @@ fi # otherwise default to nuttx if [ -z ${PX4_DOCKER_REPO+x} ]; then - PX4_DOCKER_REPO="px4io/px4-dev-nuttx-focal:2022-08-12" + PX4_DOCKER_REPO="px4io/px4-dev:v1.16.0-ondemand" fi -# docker hygiene - -#Delete all stopped containers (including data-only containers) -# docker container prune - -#Delete all 'untagged/dangling' () images -# docker image prune - echo "PX4_DOCKER_REPO: $PX4_DOCKER_REPO"; PWD=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) diff --git a/Tools/itcm_check.py b/Tools/itcm_check.py new file mode 100644 index 0000000000..ac1ffa63b7 --- /dev/null +++ b/Tools/itcm_check.py @@ -0,0 +1,185 @@ +#! /usr/bin/env python3 + +""" +Checks if the functions that should be mapped to ITCM are contained in the built ELF file. + +This helps against linker scripts that "rot" as the linker does not warn in case of a function +not existing. Thus, it is possible to forget to update the linker script after a code update. + +The tool uses the DWARF debug info and the ELF symbol table section to identify which functions +exist in the built ELF file. + +It is expected that the linker scripts that are analyzed by the tool are linker script include +files that only contain the name of the sections (functions) that should be mapped to ITCM in +the following format: +``` +*(.text.arm_ack_irq) +*(.text.arm_doirq) +*(.text._ZN4uORB12DeviceMaster19getDeviceNodeLockedEPK12orb_metadatah) +*(.text._ZN3Ekf20controlGravityFusionERKN9estimator9imuSampleE) +[...] +``` + +A specific entry in the linker script file can be ignored by adding a comment, as shown in the following example: +``` +*(.text.arm_ack_irq) /* itcm-check-ignore */ +``` +""" + +import argparse +import re +from elftools.elf.elffile import ELFFile +from elftools.elf.sections import SymbolTableSection +from elftools.dwarf.die import DIE +from pathlib import Path +from typing import List, Set + + +def die_get_funcs_rec(die: DIE, ret: Set[str]): + """ + Recursively gets the mangled and demangled name of all functions in the given `die`. + + :param die: DIE to be processed. Is gathered recursively after passing a top DIE. + :param ret: Output set where all function names are added to. + """ + if die.tag in ("DW_TAG_subprogram", "DW_TAG_inlined_subroutine"): + link_name_att = die.attributes.get("DW_AT_linkage_name") + name_att = die.attributes.get("DW_AT_name") + if link_name_att: + ret.add(link_name_att.value.decode("utf-8")) + if name_att: + ret.add(name_att.value.decode("utf-8")) + + # Recurse into the DIE children + for child in die.iter_children(): + die_get_funcs_rec(child, ret) + + +def get_elf_symbols_from_debug(elf_path: Path) -> Set[str]: + """ + Gets all functions contained in the built ELF file using the DWARF debug info. + + :param elf_path: Path to the ELF file. + + :return: The names of the contained functions. + """ + ret = set() + with open(elf_path, 'rb') as f: + elf = ELFFile(f) + if not elf.has_dwarf_info(): + print("ELF does not have debug info. Compile with debug info.") + exit(1) + dwarf_info = elf.get_dwarf_info() + for CU in dwarf_info.iter_CUs(): + top_die = CU.get_top_DIE() + die_get_funcs_rec(top_die, ret) + + return ret + + +def get_elf_symbols_from_sections(elf_path: Path) -> Set[str]: + """ + Gets all functions contained in the built ELF file using the symbol table section. + + :param elf_path: Path to the ELF file. + + :return: The names of the contained functions. + """ + ret = set() + with open(elf_path, 'rb') as f: + elf = ELFFile(f) + for section in elf.iter_sections(): + if isinstance(section, SymbolTableSection): + for sym in section.iter_symbols(): + ret.add(sym.name) + return ret + + +def is_section_supported(section: str) -> bool: + """ + Returns whether this type of section can be checked. + + :param section: Name of the section that should be checked for support. + + :return: Whether the type of section is supported. + """ + not_supported_sections = [".isra", ".part", ".constprop"] + return not any(not_supported in section for not_supported in not_supported_sections) + + +def get_input_sections(script_path: Path) -> List[str]: + """ + Gets all sections (named after the functions) that should be mapped to ITCM according + to the linker script. + + :param script_path: Path of the linker script. + + :return: The names of the sections + """ + ret = [] + section_pattern = re.compile(r"^\*\(\.([a-zA-Z0-9_\.]+)\)$") + ignored_marker = "itcm-check-ignore" + with open(script_path, 'r') as f: + for line in f: + match = section_pattern.match(line) + if match and ignored_marker not in line: + section_name = match.group(1).replace("text.", "") + if is_section_supported(section_name): + ret.append(section_name) + return ret + + +def check_itcm(elf_path: Path, script_paths: List[Path]): + """ + Checks if all the functions that should be mapped to ITCM are contained in the built ELF file. + + :param elf_path: Path of the ELF file. + :param script_paths: Path of all linker scripts that should be checked. + """ + elf_symbols_from_debug = get_elf_symbols_from_debug(elf_path) + elf_symbols_from_sections = get_elf_symbols_from_sections(elf_path) + elf_symbols = elf_symbols_from_debug.union(elf_symbols_from_sections) + input_sections = [] + for script_path in script_paths: + script_input_sections = get_input_sections(script_path) + if script_input_sections: + input_sections.extend(script_input_sections) + else: + print(f"No input sections found in {script_path}, please check if the path is correct.") + + check_passed = True + for input_section in input_sections: + if input_section not in elf_symbols: + check_passed = False + print(f"Section: {input_section} not found in the ELF file!") + + if check_passed: + print("ITCM check passed!") + exit(0) + else: + print("ITCM check failed!") + exit(1) + + +def main(): + parser = argparse.ArgumentParser(description="Checks if functions marked for ITCM mapping exist in the ELF file.") + parser.add_argument( + "--elf-file", + help="Path of the compiled ELF file", + type=Path, + required=True + ) + parser.add_argument( + "--script-files", + help="Paths of the linker script files", + nargs="+", + type=Path, + required=True + ) + + args = parser.parse_args() + check_itcm(args.elf_file, args.script_files) + + +if __name__ == '__main__': + main() diff --git a/Tools/msg/generate_msg_docs.py b/Tools/msg/generate_msg_docs.py index 193c56431f..18308aed9c 100755 --- a/Tools/msg/generate_msg_docs.py +++ b/Tools/msg/generate_msg_docs.py @@ -2,6 +2,7 @@ """ Generate docs from .msg files +Also generates docs/en/middleware/dds_topics.md from dds_topics.yaml """ import os @@ -9,6 +10,99 @@ import argparse import sys +import yaml + +def generate_dds_yaml_doc(allMessageFiles, output_file = 'dds_topics.md'): + """ + Generates human readable version of dds_topics.yaml. + Default output is to docs/en/middleware/dds_topics.md + """ + + dds_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../src/modules/uxrce_dds_client/dds_topics.yaml") + output_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),f"../../docs/en/middleware/{output_file}") + + try: + with open(dds_file_path, 'r') as file: + data = yaml.safe_load(file) + + # Get messages and topics that are not published by default + # Start by getting all that are published. + all_messages_in_source = set() + all_message_types =set() + all_topics =set() + for message in data["publications"]: + all_message_types.add(message['type'].split("::")[-1]) + all_topics.add(message['topic'].split('/')[-1]) + 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 allMessageFiles: + all_messages_in_source.add(message.split('/')[-1].split('.')[0]) + messagesNotExported = all_messages_in_source - all_message_types + + # write out the dds file + dds_markdown="""# dds_topics.yaml — PX4 Topics Exposed to ROS 2 + +::: info +This document is [auto-generated](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/msg/generate_msg_docs.py) from the source code. +::: + + +The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default). + +This document shows a markdown-rendered version of [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), listing the publications, subscriptions, and so on. + +## Publications + +Topic | Type| Rate Limit +--- | --- | --- +""" + + for message in data["publications"]: + type = message['type'] + px4Type=type.split("::")[-1] + dds_markdown += f"`{message['topic']}` | [{type}](../msg_docs/{px4Type}.md) | {message.get('rate_limit','')}\n" + + dds_markdown += "\n## Subscriptions\n\nTopic | Type\n--- | ---\n" + + for message in data["subscriptions"]: + type = message['type'] + px4Type=type.split("::")[-1] + dds_markdown += f"{message['topic']} | [{type}](../msg_docs/{px4Type}.md)\n" + + dds_markdown += "\n## Subscriptions Multi\n\n" + + if not data["subscriptions_multi"]: # There is none now + 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" + + if messagesNotExported: + # Print the topics that are not exported to DDS + dds_markdown += "\n## Not Exported\n\nThese messages are not listed in the yaml file.\nThey are not build into the module, and hence are neither published or subscribed." + dds_markdown += "\n\n::: details See messages\n" + for item in messagesNotExported: + dds_markdown += f"\n- [{item}](../msg_docs/{item}.md)" + dds_markdown += "\n:::\n" # End of details block + + #print(dds_markdown) + with open(output_file_path, 'w') as content_file: + content_file.write(dds_markdown) + + except yaml.YAMLError as exc: + print(f"Error parsing YAML: {exc}") + except FileNotFoundError: + print(f"Error: {dds_file_path} not found.") + + def get_msgs_list(msgdir): """ Makes a list of relative paths of .msg files in the given directory @@ -30,6 +124,7 @@ def get_msgs_list(msgdir): if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Generate docs from .msg files') parser.add_argument('-d', dest='dir', help='output directory', required=True) args = parser.parse_args() @@ -132,3 +227,5 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m index_file = os.path.join(output_dir, 'index.md') with open(index_file, 'w') as content_file: content_file.write(index_text) + + generate_dds_yaml_doc(msg_files) diff --git a/Tools/px4moduledoc/markdownout.py b/Tools/px4moduledoc/markdownout.py index 469e031a63..783ee620b0 100644 --- a/Tools/px4moduledoc/markdownout.py +++ b/Tools/px4moduledoc/markdownout.py @@ -40,25 +40,25 @@ The generated files will be written to the `modules` directory. ## Categories """ for category in sorted(module_groups): - result += "- [%s](modules_%s.md)\n" % (category.capitalize(), category) + result += f"- [{category.capitalize()}](modules_{category}.md)\n" self._outputs['main'] = result for category in sorted(module_groups): - result = "# Modules Reference: %s\n" % category.capitalize() + result = f"# Modules Reference: {category.capitalize()}\n\n" subcategories = module_groups[category] + if len(subcategories) > 1: - result += 'Subcategories:\n' - for subcategory in subcategories: + result += 'Subcategories:\n\n' + for subcategory in sorted(subcategories): if subcategory == '': continue subcategory_label = subcategory.replace('_', ' ').title() subcategory_file_name = category+'_'+subcategory - result += '- [%s](modules_%s.md)\n' % (subcategory_label, subcategory_file_name) + result += f'- [{subcategory_label}](modules_{subcategory_file_name}.md)\n' # add a sub-page for the subcategory - result_subpage = '# Modules Reference: %s (%s)\n' % \ - (subcategory_label, category.capitalize()) + result_subpage = f'# Modules Reference: {subcategory_label} ({category.capitalize()})\n' result_subpage += self._ProcessModules(subcategories[subcategory]) self._outputs[subcategory_file_name] = result_subpage @@ -68,14 +68,14 @@ The generated files will be written to the `modules` directory. def _ProcessModules(self, module_list): result = '' for module in module_list: - result += "## %s\n" % module.name() - result += "Source: [%s](https://github.com/PX4/PX4-Autopilot/tree/main/src/%s)\n\n" % (module.scope(), module.scope()) + result += f"\n## {module.name()}\n\n" + result += f"Source: [{module.scope()}](https://github.com/PX4/PX4-Autopilot/tree/main/src/{module.scope()})\n\n" doc = module.documentation() if len(doc) > 0: - result += "%s\n" % doc + result += f"{doc}\n" usage_string = module.usage_string() if len(usage_string) > 0: - result += '\n### Usage\n```\n%s\n```\n' % (module.name(), usage_string) + result += f'### Usage {{#{module.name()}_usage}}\n\n```\n{usage_string}\n```\n' return result def Save(self, dirname): diff --git a/Tools/px4moduledoc/srcparser.py b/Tools/px4moduledoc/srcparser.py index 4937f67b7e..8b56e7bb08 100644 --- a/Tools/px4moduledoc/srcparser.py +++ b/Tools/px4moduledoc/srcparser.py @@ -12,11 +12,11 @@ class ModuleDocumentation(object): """ # If you add categories or subcategories, they also need to be added to the - # TOC in https://github.com/PX4/PX4-user_guide/blob/main/en/SUMMARY.md + # TOC in https://github.com/PX4/PX4-Autopilot/blob/main/docs/en/SUMMARY.md valid_categories = ['driver', 'estimator', 'controller', 'system', 'communication', 'command', 'template', 'simulation', 'autotune'] valid_subcategories = ['', 'camera', 'distance_sensor', 'imu', 'ins', 'airspeed_sensor', - 'magnetometer', 'baro', 'optical_flow', 'rpm_sensor', 'transponder'] + 'magnetometer', 'baro', 'optical_flow', 'radio_control','rpm_sensor', 'transponder'] max_line_length = 80 # wrap lines that are longer than this diff --git a/Tools/setup/optional-requirements.txt b/Tools/setup/optional-requirements.txt index 844ad80bb5..57c243a237 100644 --- a/Tools/setup/optional-requirements.txt +++ b/Tools/setup/optional-requirements.txt @@ -1 +1,2 @@ +pyelftools>=0.32,<1 symforce>=0.9.0 diff --git a/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board b/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board index 549ba99b73..bbb20fd252 100644 --- a/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board +++ b/boards/3dr/ctrl-zero-h7-oem-revg/default.px4board @@ -10,6 +10,7 @@ CONFIG_DRIVERS_BAROMETER_DPS310=y CONFIG_DRIVERS_BATT_SMBUS=y CONFIG_DRIVERS_CAMERA_CAPTURE=y CONFIG_DRIVERS_CAMERA_TRIGGER=y +CONFIG_DRIVERS_CDCACM_AUTOSTART=y CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y CONFIG_COMMON_DISTANCE_SENSOR=y CONFIG_DRIVERS_DSHOT=y @@ -41,7 +42,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/airmind/mindpx-v2/default.px4board b/boards/airmind/mindpx-v2/default.px4board index 33ad75b695..67c4a57dd4 100644 --- a/boards/airmind/mindpx-v2/default.px4board +++ b/boards/airmind/mindpx-v2/default.px4board @@ -46,7 +46,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/ark/fmu-v6x/default.px4board b/boards/ark/fmu-v6x/default.px4board index 0ec7b49c42..64b2ff9838 100644 --- a/boards/ark/fmu-v6x/default.px4board +++ b/boards/ark/fmu-v6x/default.px4board @@ -56,7 +56,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/ark/fpv/default.px4board b/boards/ark/fpv/default.px4board index 7692aaeef3..79f3ab19da 100644 --- a/boards/ark/fpv/default.px4board +++ b/boards/ark/fpv/default.px4board @@ -37,7 +37,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y @@ -56,9 +57,11 @@ CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y CONFIG_MODULES_MC_POS_CONTROL=y CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y +CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y CONFIG_MODULES_SENSORS=y CONFIG_MODULES_UXRCE_DDS_CLIENT=y +CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y CONFIG_SYSTEMCMDS_BSONDUMP=y CONFIG_SYSTEMCMDS_DMESG=y diff --git a/boards/ark/fpv/nuttx-config/include/board_dma_map.h b/boards/ark/fpv/nuttx-config/include/board_dma_map.h index adbaaffc20..d1e6f5bd6a 100644 --- a/boards/ark/fpv/nuttx-config/include/board_dma_map.h +++ b/boards/ark/fpv/nuttx-config/include/board_dma_map.h @@ -34,75 +34,25 @@ #pragma once // DMAMUX1 Using at most 8 Channels on DMA1 -------- Assigned -// V - -// Timer 4 Channel 1 /* DMA1:29 TIM4CH1 */ - -#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* 1 DMA1:37 IIM-42653 */ -#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* 2 DMA1:38 IIM-42653 */ - -//#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 /* 3 DMA1:39 ICM-42688-P */ -//#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* 4 DMA1:40 ICM-42688-P */ - -#define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_0 /* DMA1:41 GPS1 */ -#define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_0 /* DMA1:42 GPS1 */ - -//#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_0 /* DMA1:45 DEBUG */ -//#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_0 /* DMA1:46 DEBUG */ - -// Timer 8 Channel 1 /* DMA1:47 TIM8CH1 */ -// Timer 8 Channel 2 /* DMA1:48 TIM8CH2 */ -// Timer 8 Channel 3 /* DMA1:49 TIM8CH3 */ -// Timer 8 Channel 4 /* DMA1:50 TIM8CH4 */ - -// Timer 5 Channel 1 /* DMA1:55 TIM5CH1 */ -// Timer 5 Channel 2 /* DMA1:56 TIM5CH2 */ -// Timer 5 Channel 3 /* DMA1:57 TIM5CH3 */ -// Timer 5 Channel 4 /* DMA1:58 TIM5CH4 */ - -// #define DMAMAP_UART4_RX DMAMAP_DMA12_UART4RX_0 /* DMA1:63 UART4 */ -// #define DMAMAP_UART4_TX DMAMAP_DMA12_UART4TX_0 /* DMA1:64 UART4 */ - -#define DMAMAP_USART6_RX DMAMAP_DMA12_USART6RX_0 /* 5 DMA1:71 RC */ -// #define DMAMAP_USART6_TX DMAMAP_DMA12_USART6TX_0 /* 6 DMA1:72 RC */ - -// Assigned in timer_config.cpp - -// Timer 4 /* 7 DMA1:32 TIM4UP */ -// Timer 5 /* 8 DMA1:50 TIM5UP */ +#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 // 1 DMA1:37 IIM-42653 +#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 // 2 DMA1:38 IIM-42653 +#define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_0 // 3 DMA1:41 GPS1 +#define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_0 // 4 DMA1:42 GPS1 +#define DMAMAP_USART6_RX DMAMAP_DMA12_USART6RX_0 // 5 DMA1:71 RC +#define DMAMAP_USART6_TX DMAMAP_DMA12_USART6TX_0 // 6 DMA1:72 RC +// Timer 4 (DMAMAP_DMA12_TIM4UP_0) // 7 DMA1:32 TIM4UP/TIM4CH1-4 +// Timer 5 (DMAMAP_DMA12_TIM5UP_0) // 8 DMA1:50 TIM5UP/TIM5CH1-4 // DMAMUX2 Using at most 8 Channels on DMA2 -------- Assigned -// V - -// Timer 4 Channel 1 /* DMA2:29 TIM4CH1 */ - -#define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_1 /* 3 DMA2:43 TELEM3 */ -#define DMAMAP_USART2_TX DMAMAP_DMA12_USART2TX_1 /* 4 DMA2:44 TELEM3 */ - -#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_1 /* 3 DMA2:45 DEBUG */ -#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_1 /* 4 DMA2:46 DEBUG */ - -// Timer 8 Channel 1 /* DMA2:47 TIM8CH1 */ -// Timer 8 Channel 2 /* DMA2:48 TIM8CH2 */ -// Timer 8 Channel 3 /* DMA2:49 TIM8CH3 */ -// Timer 8 Channel 4 /* DMA2:50 TIM8CH4 */ - -// Timer 5 Channel 1 /* DMA2:55 TIM5CH1 */ -// Timer 5 Channel 2 /* DMA2:56 TIM5CH2 */ -// Timer 5 Channel 3 /* DMA2:57 TIM5CH3 */ -// Timer 5 Channel 4 /* DMA2:58 TIM5CH4 */ - -//#define DMAMAP_SPI3_RX DMAMAP_DMA12_SPI3RX_1 /* 1 DMA2:61 BMI088 */ -//#define DMAMAP_SPI3_TX DMAMAP_DMA12_SPI3TX_1 /* 2 DMA2:62 BMI088 */ - -#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 */ +#define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_1 // 1 DMA2:43 VTX +#define DMAMAP_UART5_RX DMAMAP_DMA12_UART5RX_1 // 2 DMA2:65 VTX +#define DMAMAP_UART5_TX DMAMAP_DMA12_UART5TX_1 // 3 DMA2:66 VTX +#define DMAMAP_UART7_RX DMAMAP_DMA12_UART7RX_1 // 4 DMA2:79 TELEM1 +#define DMAMAP_UART7_TX DMAMAP_DMA12_UART7TX_1 // 5 DMA2:80 TELEM1 +#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_1 // 6 DMA2:45 DEBUG +#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_1 // 7 DMA2:46 DEBUG +// available // 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 */ +#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/ark/fpv/nuttx-config/nsh/defconfig b/boards/ark/fpv/nuttx-config/nsh/defconfig index bf82ccc0b1..e008f43be1 100644 --- a/boards/ark/fpv/nuttx-config/nsh/defconfig +++ b/boards/ark/fpv/nuttx-config/nsh/defconfig @@ -260,8 +260,6 @@ CONFIG_USART1_TXDMA=y CONFIG_USART2_BAUD=57600 CONFIG_USART2_RXBUFSIZE=600 CONFIG_USART2_RXDMA=y -CONFIG_USART2_TXBUFSIZE=1500 -CONFIG_USART2_TXDMA=y CONFIG_USART3_BAUD=57600 CONFIG_USART3_RXBUFSIZE=180 CONFIG_USART3_RXDMA=y @@ -272,6 +270,7 @@ CONFIG_USART6_BAUD=57600 CONFIG_USART6_RXBUFSIZE=600 CONFIG_USART6_RXDMA=y CONFIG_USART6_TXBUFSIZE=1500 +CONFIG_USART6_TXDMA=y CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y CONFIG_USBDEV_MAXPOWER=500 diff --git a/boards/auterion/fmu-v6s/default.px4board b/boards/auterion/fmu-v6s/default.px4board index bb1bd7fdc0..d99a2ae6a1 100644 --- a/boards/auterion/fmu-v6s/default.px4board +++ b/boards/auterion/fmu-v6s/default.px4board @@ -37,7 +37,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_FIGURE_OF_EIGHT=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y diff --git a/boards/auterion/fmu-v6s/init/rc.board_defaults b/boards/auterion/fmu-v6s/init/rc.board_defaults index b68b2b1b98..0a568ec30a 100644 --- a/boards/auterion/fmu-v6s/init/rc.board_defaults +++ b/boards/auterion/fmu-v6s/init/rc.board_defaults @@ -26,3 +26,6 @@ nshterm /dev/ttyS3 & # Start the time_persistor to cyclically store the RTC in FRAM time_persistor start + +# Start the ESC telemetry +dshot telemetry -d /dev/ttyS5 -x diff --git a/boards/auterion/fmu-v6s/multicopter.px4board b/boards/auterion/fmu-v6s/multicopter.px4board index 296a35c21f..69617bda0c 100644 --- a/boards/auterion/fmu-v6s/multicopter.px4board +++ b/boards/auterion/fmu-v6s/multicopter.px4board @@ -3,7 +3,8 @@ CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=n CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_VTOL_ATT_CONTROL=n CONFIG_COMMON_RC=y diff --git a/boards/auterion/fmu-v6s/rover.px4board b/boards/auterion/fmu-v6s/rover.px4board index f754c54e36..2709b271b6 100644 --- a/boards/auterion/fmu-v6s/rover.px4board +++ b/boards/auterion/fmu-v6s/rover.px4board @@ -2,7 +2,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/av/x-v1/default.px4board b/boards/av/x-v1/default.px4board index 86db7c85a3..1ad68a8f71 100644 --- a/boards/av/x-v1/default.px4board +++ b/boards/av/x-v1/default.px4board @@ -42,7 +42,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/beaglebone/blue/default.px4board b/boards/beaglebone/blue/default.px4board index 79e0d80b92..1e7db4fae5 100644 --- a/boards/beaglebone/blue/default.px4board +++ b/boards/beaglebone/blue/default.px4board @@ -30,7 +30,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/bluerobotics/navigator/default.px4board b/boards/bluerobotics/navigator/default.px4board index 49ff0a2aba..8812f00366 100644 --- a/boards/bluerobotics/navigator/default.px4board +++ b/boards/bluerobotics/navigator/default.px4board @@ -49,7 +49,8 @@ CONFIG_MODULES_UUV_ATT_CONTROL=y CONFIG_MODULES_UUV_POS_CONTROL=y CONFIG_MODULES_FW_ATT_CONTROL=y CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y -CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_MANUAL_CONTROL=y CONFIG_MODULES_MC_ATT_CONTROL=y diff --git a/boards/corvon/743v1/default.px4board b/boards/corvon/743v1/default.px4board index 149bcaff21..ac84a53cd6 100644 --- a/boards/corvon/743v1/default.px4board +++ b/boards/corvon/743v1/default.px4board @@ -38,7 +38,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/cuav/7-nano/default.px4board b/boards/cuav/7-nano/default.px4board index f6e4511ae2..eb1dc29bc3 100644 --- a/boards/cuav/7-nano/default.px4board +++ b/boards/cuav/7-nano/default.px4board @@ -42,7 +42,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/cuav/nora/default.px4board b/boards/cuav/nora/default.px4board index 675ffa54cb..b0db9a1735 100644 --- a/boards/cuav/nora/default.px4board +++ b/boards/cuav/nora/default.px4board @@ -50,7 +50,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/cuav/x7pro/default.px4board b/boards/cuav/x7pro/default.px4board index c7c30b1a1e..eafa964372 100644 --- a/boards/cuav/x7pro/default.px4board +++ b/boards/cuav/x7pro/default.px4board @@ -50,7 +50,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/cubepilot/cubeorange/default.px4board b/boards/cubepilot/cubeorange/default.px4board index 9bb4f368f9..f10622bb3f 100644 --- a/boards/cubepilot/cubeorange/default.px4board +++ b/boards/cubepilot/cubeorange/default.px4board @@ -49,7 +49,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/cubepilot/cubeorangeplus/default.px4board b/boards/cubepilot/cubeorangeplus/default.px4board index ba6ed0b34f..8b2c0839b9 100644 --- a/boards/cubepilot/cubeorangeplus/default.px4board +++ b/boards/cubepilot/cubeorangeplus/default.px4board @@ -50,7 +50,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/cubepilot/cubeyellow/default.px4board b/boards/cubepilot/cubeyellow/default.px4board index 62cf898af9..8d0dc3eee3 100644 --- a/boards/cubepilot/cubeyellow/default.px4board +++ b/boards/cubepilot/cubeyellow/default.px4board @@ -46,7 +46,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/emlid/navio2/default.px4board b/boards/emlid/navio2/default.px4board index 722f42b410..6498bf7820 100644 --- a/boards/emlid/navio2/default.px4board +++ b/boards/emlid/navio2/default.px4board @@ -32,7 +32,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/hkust/nxt-dual/default.px4board b/boards/hkust/nxt-dual/default.px4board index 4327646414..97b19358e5 100644 --- a/boards/hkust/nxt-dual/default.px4board +++ b/boards/hkust/nxt-dual/default.px4board @@ -39,7 +39,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/hkust/nxt-dual/init/rc.board_extras b/boards/hkust/nxt-dual/init/rc.board_extras index 780b13dc96..4611dbae46 100644 --- a/boards/hkust/nxt-dual/init/rc.board_extras +++ b/boards/hkust/nxt-dual/init/rc.board_extras @@ -10,4 +10,4 @@ # fi # DShot telemetry is always on UART7 -# dshot telemetry /dev/ttyS5 +# dshot telemetry -d /dev/ttyS5 diff --git a/boards/hkust/nxt-v1/default.px4board b/boards/hkust/nxt-v1/default.px4board index b721607758..0690280eea 100644 --- a/boards/hkust/nxt-v1/default.px4board +++ b/boards/hkust/nxt-v1/default.px4board @@ -41,7 +41,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/hkust/nxt-v1/init/rc.board_extras b/boards/hkust/nxt-v1/init/rc.board_extras index 780b13dc96..4611dbae46 100644 --- a/boards/hkust/nxt-v1/init/rc.board_extras +++ b/boards/hkust/nxt-v1/init/rc.board_extras @@ -10,4 +10,4 @@ # fi # DShot telemetry is always on UART7 -# dshot telemetry /dev/ttyS5 +# dshot telemetry -d /dev/ttyS5 diff --git a/boards/holybro/durandal-v1/default.px4board b/boards/holybro/durandal-v1/default.px4board index ecc1bc8101..627917d186 100644 --- a/boards/holybro/durandal-v1/default.px4board +++ b/boards/holybro/durandal-v1/default.px4board @@ -44,7 +44,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/holybro/kakutef7/init/rc.board_extras b/boards/holybro/kakutef7/init/rc.board_extras index 5822cd2945..33af1f8226 100644 --- a/boards/holybro/kakutef7/init/rc.board_extras +++ b/boards/holybro/kakutef7/init/rc.board_extras @@ -9,4 +9,4 @@ then fi # DShot telemetry is always on UART7 -dshot telemetry /dev/ttyS5 +dshot telemetry -d /dev/ttyS5 diff --git a/boards/holybro/kakuteh7-wing/default.px4board b/boards/holybro/kakuteh7-wing/default.px4board index f8440af002..97e9d53b52 100644 --- a/boards/holybro/kakuteh7-wing/default.px4board +++ b/boards/holybro/kakuteh7-wing/default.px4board @@ -13,13 +13,11 @@ CONFIG_DRIVERS_CDCACM_AUTOSTART=y CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y CONFIG_COMMON_DISTANCE_SENSOR=y CONFIG_DRIVERS_DSHOT=y -CONFIG_DRIVERS_GNSS_SEPTENTRIO=y CONFIG_DRIVERS_GPS=y CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y CONFIG_DRIVERS_OSD_ATXXXX=y CONFIG_COMMON_LIGHT=y CONFIG_COMMON_MAGNETOMETER=y -CONFIG_COMMON_OPTICAL_FLOW=y CONFIG_DRIVERS_PWM_OUT=y CONFIG_DRIVERS_RC_INPUT=y CONFIG_COMMON_TELEMETRY=y @@ -37,7 +35,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y @@ -57,9 +56,7 @@ CONFIG_MODULES_MC_RATE_CONTROL=y CONFIG_MODULES_NAVIGATOR=y CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000 CONFIG_MODULES_RC_UPDATE=y -CONFIG_MODULES_ROVER_POS_CONTROL=y CONFIG_MODULES_SENSORS=y -CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=y CONFIG_MODULES_VTOL_ATT_CONTROL=y CONFIG_SYSTEMCMDS_BSONDUMP=y CONFIG_SYSTEMCMDS_DMESG=y @@ -69,6 +66,7 @@ CONFIG_SYSTEMCMDS_MFT=y CONFIG_SYSTEMCMDS_NSHTERM=y CONFIG_SYSTEMCMDS_PARAM=y CONFIG_SYSTEMCMDS_REBOOT=y +CONFIG_SYSTEMCMDS_SD_BENCH=y CONFIG_SYSTEMCMDS_SYSTEM_TIME=y CONFIG_SYSTEMCMDS_TOP=y CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y diff --git a/boards/holybro/kakuteh7-wing/firmware.prototype b/boards/holybro/kakuteh7-wing/firmware.prototype index 5c3a914540..109266ad37 100644 --- a/boards/holybro/kakuteh7-wing/firmware.prototype +++ b/boards/holybro/kakuteh7-wing/firmware.prototype @@ -7,7 +7,7 @@ "summary": "KAKUTEH7-WING", "version": "0.1", "image_size": 0, - "image_maxsize": 1835008, + "image_maxsize": 1703936, "git_identity": "", "board_revision": 0 } diff --git a/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld b/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld index ae07f4bfca..31780fad15 100644 --- a/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld +++ b/boards/holybro/kakuteh7-wing/nuttx-config/scripts/script.ld @@ -110,7 +110,7 @@ MEMORY { ITCM_RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 64K - FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 1792K /* params in last sector */ + FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 1664K /* params in last two sectors */ DTCM1_RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K DTCM2_RAM (rwx) : ORIGIN = 0x20010000, LENGTH = 64K diff --git a/boards/holybro/kakuteh7-wing/src/board_config.h b/boards/holybro/kakuteh7-wing/src/board_config.h index 3e70a227f4..2583282495 100644 --- a/boards/holybro/kakuteh7-wing/src/board_config.h +++ b/boards/holybro/kakuteh7-wing/src/board_config.h @@ -114,7 +114,6 @@ #define BOARD_NUMBER_BRICKS 2 -// TODO: fix #define GPIO_nVDD_BRICK1_VALID (1) /* Brick 1 Is Chosen */ #define GPIO_nVDD_BRICK2_VALID (0) /* Brick 2 Is Chosen */ @@ -129,17 +128,20 @@ */ #define UAVCAN_NUM_IFACES_RUNTIME 1 -#define GPIO_VDD_5V_PERIPH_nEN /* PE2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN2) -#define GPIO_VDD_5V_PERIPH_nOC /* PE3 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTE|GPIO_PIN3) -#define GPIO_VDD_5V_HIPOWER_nEN /* PC10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN10) -#define GPIO_VDD_5V_HIPOWER_nOC /* PC11 */ (GPIO_INPUT |GPIO_FLOAT|GPIO_PORTC|GPIO_PIN11) -#define GPIO_VDD_3V3_SENSORS_EN /* PB2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN2) +#define GPIO_VDD_3V3_SENSORS_EN /* PB2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN2) + +#define GPIO_VTX_9V_EN /* PE3 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN3) + +#define GPIO_CAM_SWITCH /* PC13 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTC|GPIO_PIN13) /* Define True logic Power Control in arch agnostic form */ -#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_SENSORS_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 VTX_9V_EN(on_true) px4_arch_gpiowrite(GPIO_VTX_9V_EN, (on_true)) + +#define CAM_SWITCH_CAM1 px4_arch_gpiowrite(GPIO_CAM_SWITCH, false) // low is CAM1 +#define CAM_SWITCH_CAM2 px4_arch_gpiowrite(GPIO_CAM_SWITCH, true) // high is CAM2 /* Tone alarm output */ @@ -196,11 +198,10 @@ #define BOARD_ADC_SERVO_VALID (1) -#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_BRICK1_VALID (1) +#define BOARD_ADC_BRICK2_VALID (1) -#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)) +#define BOARD_ADC_SERVO_VALID (1) /* This board provides a DMA pool and APIs */ @@ -217,6 +218,8 @@ GPIO_VDD_3V3_SENSORS_EN, \ GPIO_TONE_ALARM_IDLE, \ GPIO_PPM_IN, \ + GPIO_VTX_9V_EN, \ + GPIO_CAM_SWITCH, \ } #define BOARD_ENABLE_CONSOLE_BUFFER diff --git a/boards/holybro/kakuteh7-wing/src/init.c b/boards/holybro/kakuteh7-wing/src/init.c index 0e3d27db7d..5fbe50c6a6 100644 --- a/boards/holybro/kakuteh7-wing/src/init.c +++ b/boards/holybro/kakuteh7-wing/src/init.c @@ -108,21 +108,21 @@ __END_DECLS ************************************************************************************/ __EXPORT void board_peripheral_reset(int ms) { - /* set the peripheral rails off */ + /* off */ + VTX_9V_EN(false); + VDD_3V3_SENSORS_EN(false); - VDD_5V_PERIPH_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_SENSORS_EN(true); + VTX_9V_EN(true); + CAM_SWITCH_CAM1; } /************************************************************************************ @@ -210,10 +210,6 @@ __EXPORT int board_app_initialize(uintptr_t arg) { #if !defined(BOOTLOADER) - /* Power on Interfaces */ - VDD_5V_PERIPH_EN(true); - VDD_5V_HIPOWER_EN(true); - /* Need hrt running before using the ADC */ px4_platform_init(); @@ -254,6 +250,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) #if defined(FLASH_BASED_PARAMS) static sector_descriptor_t params_sector_map[] = { + {14, 128 * 1024, 0x081C0000}, {15, 128 * 1024, 0x081E0000}, {0, 0, 0}, }; diff --git a/boards/holybro/kakuteh7/default.px4board b/boards/holybro/kakuteh7/default.px4board index f4a8e0c824..fed11068e6 100644 --- a/boards/holybro/kakuteh7/default.px4board +++ b/boards/holybro/kakuteh7/default.px4board @@ -45,7 +45,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/holybro/kakuteh7/init/rc.board_extras b/boards/holybro/kakuteh7/init/rc.board_extras index 3423728dab..3629cd2958 100644 --- a/boards/holybro/kakuteh7/init/rc.board_extras +++ b/boards/holybro/kakuteh7/init/rc.board_extras @@ -9,4 +9,4 @@ then fi # DShot telemetry is always on UART7 -dshot telemetry /dev/ttyS5 +dshot telemetry -d /dev/ttyS5 diff --git a/boards/holybro/kakuteh7dualimu/default.px4board b/boards/holybro/kakuteh7dualimu/default.px4board index fbecd9f5af..5b4f4710a4 100644 --- a/boards/holybro/kakuteh7dualimu/default.px4board +++ b/boards/holybro/kakuteh7dualimu/default.px4board @@ -48,7 +48,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/holybro/kakuteh7dualimu/init/rc.board_extras b/boards/holybro/kakuteh7dualimu/init/rc.board_extras index 3423728dab..3629cd2958 100644 --- a/boards/holybro/kakuteh7dualimu/init/rc.board_extras +++ b/boards/holybro/kakuteh7dualimu/init/rc.board_extras @@ -9,4 +9,4 @@ then fi # DShot telemetry is always on UART7 -dshot telemetry /dev/ttyS5 +dshot telemetry -d /dev/ttyS5 diff --git a/boards/holybro/kakuteh7mini/default.px4board b/boards/holybro/kakuteh7mini/default.px4board index c023eae04f..06bc5ffe7e 100644 --- a/boards/holybro/kakuteh7mini/default.px4board +++ b/boards/holybro/kakuteh7mini/default.px4board @@ -45,7 +45,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/holybro/kakuteh7mini/init/rc.board_extras b/boards/holybro/kakuteh7mini/init/rc.board_extras index 3423728dab..3629cd2958 100644 --- a/boards/holybro/kakuteh7mini/init/rc.board_extras +++ b/boards/holybro/kakuteh7mini/init/rc.board_extras @@ -9,4 +9,4 @@ then fi # DShot telemetry is always on UART7 -dshot telemetry /dev/ttyS5 +dshot telemetry -d /dev/ttyS5 diff --git a/boards/holybro/kakuteh7v2/default.px4board b/boards/holybro/kakuteh7v2/default.px4board index 0f1b80b250..8821361a69 100644 --- a/boards/holybro/kakuteh7v2/default.px4board +++ b/boards/holybro/kakuteh7v2/default.px4board @@ -45,7 +45,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/holybro/kakuteh7v2/init/rc.board_extras b/boards/holybro/kakuteh7v2/init/rc.board_extras index 3423728dab..3629cd2958 100644 --- a/boards/holybro/kakuteh7v2/init/rc.board_extras +++ b/boards/holybro/kakuteh7v2/init/rc.board_extras @@ -9,4 +9,4 @@ then fi # DShot telemetry is always on UART7 -dshot telemetry /dev/ttyS5 +dshot telemetry -d /dev/ttyS5 diff --git a/boards/holybro/pix32v5/default.px4board b/boards/holybro/pix32v5/default.px4board index 0093ee2dcf..01c28a922c 100644 --- a/boards/holybro/pix32v5/default.px4board +++ b/boards/holybro/pix32v5/default.px4board @@ -50,7 +50,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/matek/h743-mini/default.px4board b/boards/matek/h743-mini/default.px4board index 22efafcfdb..965fec5459 100644 --- a/boards/matek/h743-mini/default.px4board +++ b/boards/matek/h743-mini/default.px4board @@ -30,7 +30,8 @@ CONFIG_MODULES_EKF2=y CONFIG_MODULES_EVENTS=y CONFIG_MODULES_FLIGHT_MODE_MANAGER=y CONFIG_MODULES_FW_ATT_CONTROL=y -CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/matek/h743-mini/init/rc.board_extras b/boards/matek/h743-mini/init/rc.board_extras index 66e2936464..68ccc31a1d 100644 --- a/boards/matek/h743-mini/init/rc.board_extras +++ b/boards/matek/h743-mini/init/rc.board_extras @@ -11,4 +11,4 @@ atxxxx start -s # DShot telemetry is always on UART7 -# dshot telemetry /dev/ttyS5 +# dshot telemetry -d /dev/ttyS5 diff --git a/boards/matek/h743-slim/default.px4board b/boards/matek/h743-slim/default.px4board index 48e937fc43..9cf0909725 100644 --- a/boards/matek/h743-slim/default.px4board +++ b/boards/matek/h743-slim/default.px4board @@ -33,7 +33,8 @@ CONFIG_MODULES_EKF2=y CONFIG_MODULES_EVENTS=y CONFIG_MODULES_FLIGHT_MODE_MANAGER=y CONFIG_MODULES_FW_ATT_CONTROL=y -CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/matek/h743-slim/init/rc.board_extras b/boards/matek/h743-slim/init/rc.board_extras index bba363769c..61c6c0afb0 100644 --- a/boards/matek/h743-slim/init/rc.board_extras +++ b/boards/matek/h743-slim/init/rc.board_extras @@ -12,4 +12,4 @@ atxxxx start -s # DShot telemetry is always on UART7 -# dshot telemetry /dev/ttyS5 +# dshot telemetry -d /dev/ttyS5 diff --git a/boards/matek/h743/default.px4board b/boards/matek/h743/default.px4board index 71024fea5c..e61c9b6014 100644 --- a/boards/matek/h743/default.px4board +++ b/boards/matek/h743/default.px4board @@ -32,7 +32,8 @@ CONFIG_MODULES_EKF2=y CONFIG_MODULES_EVENTS=y CONFIG_MODULES_FLIGHT_MODE_MANAGER=y CONFIG_MODULES_FW_ATT_CONTROL=y -CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/matek/h743/init/rc.board_extras b/boards/matek/h743/init/rc.board_extras index bba363769c..61c6c0afb0 100644 --- a/boards/matek/h743/init/rc.board_extras +++ b/boards/matek/h743/init/rc.board_extras @@ -12,4 +12,4 @@ atxxxx start -s # DShot telemetry is always on UART7 -# dshot telemetry /dev/ttyS5 +# dshot telemetry -d /dev/ttyS5 diff --git a/boards/micoair/h743-aio/default.px4board b/boards/micoair/h743-aio/default.px4board index 2d92e89d96..5e68a6dbc5 100644 --- a/boards/micoair/h743-aio/default.px4board +++ b/boards/micoair/h743-aio/default.px4board @@ -39,7 +39,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/micoair/h743-v2/default.px4board b/boards/micoair/h743-v2/default.px4board index 74f1e2de29..821021a753 100644 --- a/boards/micoair/h743-v2/default.px4board +++ b/boards/micoair/h743-v2/default.px4board @@ -40,7 +40,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/micoair/h743/default.px4board b/boards/micoair/h743/default.px4board index 149bcaff21..ac84a53cd6 100644 --- a/boards/micoair/h743/default.px4board +++ b/boards/micoair/h743/default.px4board @@ -38,7 +38,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/modalai/fc-v1/default.px4board b/boards/modalai/fc-v1/default.px4board index b73fdd18f8..12623c2c87 100644 --- a/boards/modalai/fc-v1/default.px4board +++ b/boards/modalai/fc-v1/default.px4board @@ -49,7 +49,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/modalai/fc-v2/default.px4board b/boards/modalai/fc-v2/default.px4board index f95c859e8c..38a9641d33 100644 --- a/boards/modalai/fc-v2/default.px4board +++ b/boards/modalai/fc-v2/default.px4board @@ -40,7 +40,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/ctrl-zero-classic/default.px4board b/boards/mro/ctrl-zero-classic/default.px4board index 665fbc8626..16cac64d3f 100644 --- a/boards/mro/ctrl-zero-classic/default.px4board +++ b/boards/mro/ctrl-zero-classic/default.px4board @@ -46,7 +46,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/ctrl-zero-f7-oem/default.px4board b/boards/mro/ctrl-zero-f7-oem/default.px4board index 9fe340b87f..5d35d0b04f 100644 --- a/boards/mro/ctrl-zero-f7-oem/default.px4board +++ b/boards/mro/ctrl-zero-f7-oem/default.px4board @@ -44,7 +44,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/ctrl-zero-f7/default.px4board b/boards/mro/ctrl-zero-f7/default.px4board index d09ca8a5b5..8e33ae6bb9 100644 --- a/boards/mro/ctrl-zero-f7/default.px4board +++ b/boards/mro/ctrl-zero-f7/default.px4board @@ -44,7 +44,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/ctrl-zero-h7-oem/default.px4board b/boards/mro/ctrl-zero-h7-oem/default.px4board index ec6c59888d..bbb20fd252 100644 --- a/boards/mro/ctrl-zero-h7-oem/default.px4board +++ b/boards/mro/ctrl-zero-h7-oem/default.px4board @@ -42,7 +42,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/ctrl-zero-h7/default.px4board b/boards/mro/ctrl-zero-h7/default.px4board index 7bb96d3aca..d858efba21 100644 --- a/boards/mro/ctrl-zero-h7/default.px4board +++ b/boards/mro/ctrl-zero-h7/default.px4board @@ -43,7 +43,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/pixracerpro/default.px4board b/boards/mro/pixracerpro/default.px4board index fb49c90866..77c80f8de4 100644 --- a/boards/mro/pixracerpro/default.px4board +++ b/boards/mro/pixracerpro/default.px4board @@ -43,7 +43,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/x21-777/default.px4board b/boards/mro/x21-777/default.px4board index cec5dd074a..8512dd375e 100644 --- a/boards/mro/x21-777/default.px4board +++ b/boards/mro/x21-777/default.px4board @@ -45,7 +45,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/mro/x21/default.px4board b/boards/mro/x21/default.px4board index 8640bff623..749c36e211 100644 --- a/boards/mro/x21/default.px4board +++ b/boards/mro/x21/default.px4board @@ -46,7 +46,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/nxp/fmuk66-e/default.px4board b/boards/nxp/fmuk66-e/default.px4board index 749e62e5d5..70f4c16968 100644 --- a/boards/nxp/fmuk66-e/default.px4board +++ b/boards/nxp/fmuk66-e/default.px4board @@ -47,7 +47,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/nxp/fmuk66-v3/default.px4board b/boards/nxp/fmuk66-v3/default.px4board index 268e89c70f..a8edef6f01 100644 --- a/boards/nxp/fmuk66-v3/default.px4board +++ b/boards/nxp/fmuk66-v3/default.px4board @@ -48,7 +48,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/nxp/mr-canhubk3/fmu.px4board b/boards/nxp/mr-canhubk3/fmu.px4board index 48a7883fe2..a1a3d9ddd1 100644 --- a/boards/nxp/mr-canhubk3/fmu.px4board +++ b/boards/nxp/mr-canhubk3/fmu.px4board @@ -33,7 +33,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/nxp/mr-canhubk3/sysview.px4board b/boards/nxp/mr-canhubk3/sysview.px4board index 2089b09931..a101423cf9 100644 --- a/boards/nxp/mr-canhubk3/sysview.px4board +++ b/boards/nxp/mr-canhubk3/sysview.px4board @@ -20,7 +20,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/nxp/mr-canhubk3/zenoh.px4board b/boards/nxp/mr-canhubk3/zenoh.px4board index fe2297a554..9bc71357c4 100644 --- a/boards/nxp/mr-canhubk3/zenoh.px4board +++ b/boards/nxp/mr-canhubk3/zenoh.px4board @@ -24,7 +24,8 @@ CONFIG_MODULES_ESC_BATTERY=y CONFIG_MODULES_EVENTS=y CONFIG_MODULES_FW_ATT_CONTROL=y CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y -CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GYRO_CALIBRATION=y CONFIG_MODULES_GYRO_FFT=y diff --git a/boards/nxp/tropic-community/default.px4board b/boards/nxp/tropic-community/default.px4board index c7fcb205e0..f36d388a49 100644 --- a/boards/nxp/tropic-community/default.px4board +++ b/boards/nxp/tropic-community/default.px4board @@ -15,15 +15,19 @@ CONFIG_DRIVERS_CDCACM_AUTOSTART=y CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y CONFIG_COMMON_DISTANCE_SENSOR=y CONFIG_DRIVERS_DSHOT=y +CONFIG_DRIVERS_GNSS_SEPTENTRIO=y CONFIG_DRIVERS_GPS=y CONFIG_DRIVERS_IMU_BOSCH_BMI088=y CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y +CONFIG_DRIVERS_IMU_INVENSENSE_ICM45686=y CONFIG_COMMON_INS=y CONFIG_COMMON_LIGHT=y CONFIG_DRIVERS_LIGHTS_RGBLED_PWM=y CONFIG_COMMON_MAGNETOMETER=y -CONFIG_DRIVERS_OSD_MSP_OSD=y +CONFIG_DRIVERS_MAGNETOMETER_BOSCH_BMM350=y +CONFIG_COMMON_OPTICAL_FLOW=y +CONFIG_COMMON_OSD=y CONFIG_DRIVERS_POWER_MONITOR_INA226=y CONFIG_DRIVERS_POWER_MONITOR_INA228=y CONFIG_DRIVERS_POWER_MONITOR_INA238=y diff --git a/boards/nxp/tropic-community/nuttx-config/nsh/defconfig b/boards/nxp/tropic-community/nuttx-config/nsh/defconfig index 15122b439d..c184a37415 100644 --- a/boards/nxp/tropic-community/nuttx-config/nsh/defconfig +++ b/boards/nxp/tropic-community/nuttx-config/nsh/defconfig @@ -30,7 +30,7 @@ CONFIG_ARM_MPU=y CONFIG_ARM_MPU_RESET=y CONFIG_BOARDCTL_RESET=y CONFIG_BOARD_ASSERT_RESET_VALUE=0 -CONFIG_BOARD_LOOPSPERMSEC=114325 +CONFIG_BOARD_LOOPSPERMSEC=115000 CONFIG_BOARD_RESET_ON_ASSERT=2 CONFIG_BUILTIN=y CONFIG_CDCACM=y @@ -73,6 +73,7 @@ CONFIG_HAVE_CXXINITIALIZE=y CONFIG_I2C=y CONFIG_I2C_RESET=y CONFIG_IDLETHREAD_STACKSIZE=2048 +CONFIG_IMXRT_DTCM_HEAP=y CONFIG_IMXRT_EDMA=y CONFIG_IMXRT_EDMA_EDBG=y CONFIG_IMXRT_EDMA_ELINK=y @@ -140,6 +141,7 @@ CONFIG_MEMSET_64BIT=y CONFIG_MEMSET_OPTSPEED=y CONFIG_MMCSD=y CONFIG_MMCSD_SDIO=y +CONFIG_MM_REGIONS=2 CONFIG_MTD=y CONFIG_MTD_BYTE_WRITE=y CONFIG_MTD_PARTITION=y diff --git a/boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld b/boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld index 60a76f97e1..0e6701aae2 100644 --- a/boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld +++ b/boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld @@ -2,7 +2,7 @@ *(.text._ZN4uORB7Manager27orb_add_internal_subscriberE6ORB_IDhPj) *(.text._ZN13MavlinkStream6updateERKy) *(.text._ZN7Mavlink16update_rate_multEv) -*(.text._ZN3sym17PredictCovarianceIfEEN6matrix6MatrixIT_Lj23ELj23EEERKNS2_IS3_Lj24ELj1EEERKS4_RKNS2_IS3_Lj3ELj1EEES3_SC_SC_S3_S3_) +*(.text._ZN3sym17PredictCovarianceIfEEN6matrix6MatrixIT_Lj23ELj23EEERKNS2_IS3_Lj24ELj1EEERKS4_RKNS2_IS3_Lj3ELj1EEES3_SC_SC_S3_S3_) /* itcm-check-ignore */ *(.text._ZN13MavlinkStream12get_size_avgEv) *(.text._ZN16ControlAllocator3RunEv) *(.text._ZN22MulticopterRateControl3RunEv.part.0) @@ -57,7 +57,6 @@ *(.text._ZN3px49WorkQueue3AddEPNS_8WorkItemE) *(.text._ZN4EKF220PublishLocalPositionERKy) *(.text._mav_finalize_message_chan_send) -*(.text._ZN3Ekf19fixCovarianceErrorsEb) *(.text._ZN7sensors22VehicleAngularVelocity16ParametersUpdateEb) *(.text._ZN6events12SendProtocol6updateERKy) *(.text._ZN6device3SPI8transferEPhS1_j) @@ -68,7 +67,7 @@ *(.text.nx_poll) *(.text._ZN15MavlinkReceiver3runEv) *(.text._ZN9ICM42688P18ProcessTemperatureEPKN20InvenSense_ICM42688P4FIFO4DATAEh) -*(.text._ZN15OutputPredictor19correctOutputStatesEyRKN6matrix10QuaternionIfEERKNS0_7Vector3IfEES8_S8_S8_) +*(.text._ZN15OutputPredictor19correctOutputStatesEyRKN6matrix10QuaternionIfEERKNS0_7Vector3IfEERK9LatLonAltS8_S8_) *(.text._ZN3Ekf12predictStateERKN9estimator9imuSampleE) *(.text._ZN3px46logger6Logger3runEv) *(.text._ZN4uORB20SubscriptionInterval7updatedEv) @@ -99,7 +98,6 @@ *(.text.file_vioctl) *(.text._ZN7sensors18VotedSensorsUpdate11sensorsPollER17sensor_combined_s) *(.text.nxsig_nanosleep) -*(.text.imxrt_lpspi1select) *(.text.sem_wait) *(.text.perf_count_interval.part.0) *(.text._ZN16ControlAllocator37update_effectiveness_matrix_if_neededE25EffectivenessUpdateReason) @@ -122,7 +120,6 @@ *(.text._ZN22MulticopterRateControl28updateActuatorControlsStatusERK25vehicle_torque_setpoint_sf) *(.text._ZN11RateControl6updateERKN6matrix7Vector3IfEES4_S4_fb) *(.text._ZN39ControlAllocationSequentialDesaturation19desaturateActuatorsERN6matrix6VectorIfLj16EEERKS2_b) -*(.text._ZN22MavlinkStreamCollision4sendEv) *(.text.imxrt_lpi2c_transfer) *(.text.uart_putxmitchar) *(.text.clock_nanosleep) @@ -154,7 +151,6 @@ *(.text._ZN3Ekf20updateIMUBiasInhibitERKN9estimator9imuSampleE) *(.text._ZN9Commander13dataLinkCheckEv) *(.text._ZN17FlightModeManager10switchTaskE15FlightTaskIndex) -*(.text._ZNK3Ekf26get_innovation_test_statusERtRfS1_S1_S1_S1_S1_S1_) *(.text._ZN12PX4Gyroscope9set_scaleEf) *(.text._ZN12FailsafeBase6updateERKyRKNS_5StateEbbRK16failsafe_flags_s) *(.text._ZN18MavlinkStreamDebug4sendEv) @@ -167,11 +163,10 @@ *(.text._ZN13land_detector23MulticopterLandDetector25_get_ground_contact_stateEv) *(.text.imxrt_dmach_start) *(.text._ZN3ADC19update_system_powerEy) -*(.text._ZNK3Ekf19get_ekf_soln_statusEPt) +*(.text._ZNK3Ekf19get_ekf_soln_statusEv) *(.text._ZN3px46logger15watchdog_updateERNS0_15watchdog_data_tEb) *(.text.imxrt_gpio_read) *(.text._ZN32MavlinkStreamNavControllerOutput4sendEv) -*(.text._ZN15ArchPX4IOSerial13_bus_exchangeEP8IOPacket) *(.text._ZN39MavlinkStreamGimbalDeviceAttitudeStatus4sendEv) *(.text._ZNK10ConstLayer3getEt) *(.text.__aeabi_uldivmod) @@ -194,11 +189,9 @@ *(.text._ZN22MavlinkStreamGPSStatus4sendEv) *(.text._ZN4EKF220UpdateAirspeedSampleER17ekf2_timestamps_s) *(.text._ZN23MavlinkStreamStatustext4sendEv) -*(.text._ZN3Ekf15constrainStatesEv) -*(.text._ZN12PX4IO_serial4readEjPvj) *(.text.uart_poll) *(.text._ZN24MavlinkParametersManager4sendEv) -*(.text._ZN26MulticopterPositionControl18set_vehicle_statesERK24vehicle_local_position_s) +*(.text._ZN26MulticopterPositionControl18set_vehicle_statesERK24vehicle_local_position_sf) *(.text.file_poll) *(.text.hrt_elapsed_time) *(.text._ZN7Mavlink11send_finishEv) @@ -232,8 +225,7 @@ *(.text._ZN6matrix5EulerIfEC1ERKNS_10QuaternionIfEE) *(.text.imxrt_queuedtd) *(.text._ZN27MavlinkStreamDistanceSensor8get_sizeEv) -*(.text._ZN3Ekf16fuseVelPosHeightEffi) -*(.text._ZN3Ekf23controlBaroHeightFusionEv) +*(.text._ZN3Ekf23controlBaroHeightFusionERKN9estimator9imuSampleE) *(.text._ZN16PX4Accelerometer9set_scaleEf) *(.text._ZN11ControlMath11constrainXYERKN6matrix7Vector2IfEES4_RKf) *(.text._ZN22MavlinkStreamEfiStatus4sendEv) @@ -243,13 +235,11 @@ *(.text._ZN15PositionControl11_inputValidEv) *(.text._ZN7sensors14VehicleAirData3RunEv) *(.text.perf_count) -*(.text._ZN3Ekf16controlMagFusionEv) +*(.text._ZN3Ekf16controlMagFusionERKN9estimator9imuSampleE) *(.text.pthread_sem_give) *(.text._ZN7sensors10VehicleIMU16ParametersUpdateEb) -*(.text._ZN30MavlinkStreamUTMGlobalPosition4sendEv) *(.text._ZN4uORB20SubscriptionInterval4copyEPv) *(.text._ZN12I2CSPIDriverI9ICM42688PE3RunEv) -*(.text._ZN17ObstacleAvoidanceC1EP12ModuleParams) *(.text.imxrt_epcomplete.constprop.0) *(.text._ZNK6matrix6MatrixIfLj3ELj1EEmiERKS1_) *(.text._ZN9Commander30handleModeIntentionAndFailsafeEv) @@ -260,7 +250,6 @@ *(.text._ZN29MavlinkStreamHygrometerSensor8get_sizeEv) *(.text.pthread_mutex_add) *(.text._ZN12HomePosition6updateEbb) -*(.text._ZN5PX4IO3RunEv) *(.text.poll_fdsetup) *(.text._ZN15PositionControl20_accelerationControlEv) *(.text._ZN3Ekf19controlHeightFusionERKN9estimator9imuSampleE) @@ -280,7 +269,7 @@ *(.text._ZN6matrix6MatrixIfLj3ELj1EEC1ERKS1_) *(.text.udp_pollsetup) *(.text._ZL14timer_callbackPv) -*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj23EEEf) +*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf) *(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi) *(.text.nxsem_wait_irq) *(.text._ZN20MavlinkCommandSender4lockEv) @@ -299,7 +288,7 @@ *(.text._ZN25MavlinkStreamHomePosition4sendEv) *(.text._ZN24MavlinkParametersManager8send_oneEv) *(.text._ZN15OutputPredictor29applyCorrectionToOutputBufferERKN6matrix7Vector3IfEES4_) -*(.text._ZN21HealthAndArmingChecks6updateEb) +*(.text._ZN21HealthAndArmingChecks6updateEbb) *(.text._ZThn24_N22MulticopterRateControl3RunEv) *(.text._ZN26MavlinkStreamManualControl4sendEv) *(.text._ZN27MavlinkStreamOpticalFlowRad4sendEv) @@ -307,14 +296,11 @@ *(.text._ZN4uORB7Manager11orb_publishEPK12orb_metadataPvPKv) *(.text._ZN24MavlinkParametersManager18send_untransmittedEv) *(.text._ZN10MavlinkFTP4sendEv) -*(.text._ZN15ArchPX4IOSerial13_do_interruptEv) -*(.text._ZN3Ekf27controlExternalVisionFusionEv) +*(.text._ZN3Ekf27controlExternalVisionFusionERKN9estimator9imuSampleE) *(.text.clock_gettime) *(.text._ZN3ADC17update_adc_reportEy) -*(.text._ZN3sym25ComputeYaw312InnovVarAndHIfEEvRKN6matrix6MatrixIT_Lj24ELj1EEERKNS2_IS3_Lj23ELj23EEES3_S3_PS3_PNS2_IS3_Lj23ELj1EEE) -*(.text._ZN3Ekf19runTerrainEstimatorERKN9estimator9imuSampleE) *(.text._ZN32MavlinkStreamGimbalManagerStatus4sendEv) -*(.text._ZN9LockGuardD1Ev) +*(.text._ZN9LockGuardD1Ev) /* itcm-check-ignore */ *(.text._ZN4EKF213PublishStatesERKy) *(.text._ZN3ADC3RunEv) *(.text._ZN6BMP38815compensate_dataEhPK16bmp3_uncomp_dataP9bmp3_data) @@ -336,13 +322,11 @@ *(.text._ZThn16_N7sensors22VehicleAngularVelocity3RunEv) *(.text._ZN29MavlinkStreamObstacleDistance4sendEv) *(.text._ZN24MavlinkStreamOrbitStatus4sendEv) -*(.text._ZN16PreFlightChecker26preFlightCheckHeightFailedERK23estimator_innovations_sf) *(.text._ZN9Navigator3runEv) *(.text._ZN24MavlinkParametersManager11send_paramsEv) *(.text._ZN17MavlinkLogHandler4sendEv) *(.text._ZN7control10SuperBlock5setDtEf) *(.text._ZN29MavlinkStreamMountOrientation8get_sizeEv) -*(.text._ZN5PX4IO13io_get_statusEv) *(.text._ZN26MulticopterAttitudeControl3RunEv) *(.text._ZThn16_N31ActuatorEffectivenessMultirotor22getEffectivenessMatrixERN21ActuatorEffectiveness13ConfigurationE25EffectivenessUpdateReason) *(.text._ZN4EKF218PublishStatusFlagsERKy) @@ -350,13 +334,12 @@ *(.text._ZN15FailureDetector6updateERK16vehicle_status_sRK22vehicle_control_mode_s) *(.text._ZN7Mavlink10send_startEi) *(.text.imxrt_lpspi_setbits) -*(.text._ZN15OutputPredictor37applyCorrectionToVerticalOutputBufferEf) +*(.text._ZN15OutputPredictor37applyCorrectionToVerticalOutputBufferEff) *(.text._ZN4EKF222UpdateAccelCalibrationERKy) *(.text._ZN7sensors19VehicleMagnetometer3RunEv) *(.text._ZN29MavlinkStreamMountOrientation4sendEv) *(.text._ZN13land_detector12LandDetector19UpdateVehicleAtRestEv) *(.text._ZN10FlightTask29_evaluateVehicleLocalPositionEv) -*(.text.board_autoled_off) *(.text.__aeabi_f2lz) *(.text._ZN32MavlinkStreamCameraImageCaptured4sendEv) *(.text._ZN21MavlinkStreamOdometry8get_sizeEv) @@ -365,24 +348,19 @@ *(.text.poll) *(.text._ZN14FlightTaskAutoD1Ev) *(.text._ZN4uORB10DeviceNode22get_initial_generationEv) -*(.text._ZN3Ekf23controlGnssHeightFusionERKN9estimator9gpsSampleE) +*(.text._ZN3Ekf23controlGnssHeightFusionERKN9estimator10gnssSampleE) *(.text._ZN3Ekf40updateOnGroundMotionForOpticalFlowChecksEv) *(.text._ZN6matrix6MatrixIfLj3ELj1EEC1Ev) *(.text._ZN14ZeroGyroUpdate6updateER3EkfRKN9estimator9imuSampleE) *(.text._ZN30MavlinkStreamOpenDroneIdSystem4sendEv) *(.text._ZN22MavlinkStreamScaledIMU4sendEv) -*(.text._ZN46MavlinkStreamTrajectoryRepresentationWaypoints4sendEv) *(.text.imxrt_ioctl) -*(.text._ZN3Ekf25checkMagBiasObservabilityEv) *(.text._ZN36MavlinkStreamGimbalDeviceSetAttitude4sendEv) -*(.text._ZN16PreFlightChecker6updateEfRK23estimator_innovations_s) *(.text._ZN4math13expo_deadzoneIfEEKT_RS2_S3_S3_.isra.0) *(.text._ZN19StickAccelerationXYC1EP12ModuleParams) *(.text.imxrt_epsubmit) *(.text._ZN15PositionControl6updateEf) -*(.text._ZN3Ekf29checkVerticalAccelerationBiasERKN9estimator9imuSampleE) *(.text._ZN23MavlinkStreamScaledIMU24sendEv) -*(.text._ZN5PX4IO10io_reg_getEhhPtj) *(.text.imxrt_dma_send) *(.text._ZN20MavlinkStreamWindCov4sendEv) *(.text._ZN7sensors18VotedSensorsUpdate13checkFailoverERNS0_10SensorDataEPKcN6events3px45enums13sensor_type_tE) @@ -405,7 +383,7 @@ *(.text._ZN9Commander11updateTunesEv) *(.text._ZN4EKF215UpdateMagSampleER17ekf2_timestamps_s) *(.text._ZN18DataValidatorGroup3putEjyPKfmh) -*(.text._ZNK3Ekf19get_ekf_ctrl_limitsEPfS0_S0_S0_) +*(.text._ZNK3Ekf19get_ekf_ctrl_limitsEPfS0_S0_S0_S0_) *(.text._ZN12FailsafeBase13checkFailsafeEibbRKNS_13ActionOptionsE) *(.text._ZN17FlightTaskDescendD1Ev) *(.text._ZN30MavlinkStreamOpenDroneIdSystem8get_sizeEv) @@ -413,7 +391,6 @@ *(.text._ZN24FlightTaskManualAltitudeD1Ev) *(.text._Z35px4_indicate_external_reset_lockout16LockoutComponentb) *(.text.uart_pollnotify) -*(.text._ZN3Ekf11predictHaglERKN9estimator9imuSampleE) *(.text._ZN4EKF215PublishBaroBiasERKy) *(.text._ZN4EKF221UpdateGyroCalibrationERKy) *(.text._ZN6matrix9constrainIfLj3ELj1EEENS_6MatrixIT_XT0_EXT1_EEERKS3_S2_S2_) @@ -444,7 +421,7 @@ *(.text.clock_systime_timespec) *(.text._ZN4uORB10DeviceNode26remove_internal_subscriberEv) *(.text._ZThn16_N4EKF23RunEv) -*(.text._ZNK3Ekf22computeYawInnovVarAndHEfRfRN6matrix6VectorIfLj23EEE) +*(.text._ZNK3Ekf22computeYawInnovVarAndHEfRfRN6matrix6VectorIfLj24EEE) *(.text._ZN12ActuatorTest6updateEif) *(.text._ZN17VelocitySmoothingC1Efff) *(.text._ZN13AnalogBattery19get_voltage_channelEv) @@ -459,11 +436,10 @@ *(.text._ZN14FlightTaskAuto17_evaluateTripletsEv) *(.text._ZN11calibration9Gyroscope23SensorCorrectionsUpdateEb) *(.text._ZN25MavlinkStreamMagCalReport4sendEv) -*(.text._ZN16PreFlightChecker27preFlightCheckHeadingFailedERK23estimator_innovations_sf) *(.text.imxrt_config_gpio) *(.text.nxsig_timeout) *(.text._ZN11RateControl19setSaturationStatusERKN6matrix7Vector3IbEES4_) -*(.text._ZN3Ekf17measurementUpdateERN6matrix6VectorIfLj23EEEff) +*(.text._ZN3Ekf17measurementUpdateERN6matrix6VectorIfLj24EEERKS2_ff) *(.text.dq_addlast) *(.text._ZN19MavlinkStreamVFRHUD4sendEv) *(.text.hrt_call_reschedule) @@ -487,14 +463,13 @@ *(.text._ZNK6matrix6MatrixIfLj3ELj1EE5emultERKS1_) *(.text.mallinfo_handler) *(.text._ZN13land_detector23MulticopterLandDetector14_update_topicsEv) -*(.text._ZN24ManualVelocitySmoothingZC1Ev) +*(.text._ZN24ManualVelocitySmoothingZC1Ev) /* itcm-check-ignore */ *(.text._ZN3ADC6sampleEj) *(.text._ZNK3Ekf22isTerrainEstimateValidEv) -*(.text._ZN15EstimatorChecks23setModeRequirementFlagsERK7ContextbbRK24vehicle_local_position_sRK12sensor_gps_sR16failsafe_flags_sR6Report) +*(.text._ZN15EstimatorChecks23setModeRequirementFlagsERK7ContextbbbRK24vehicle_local_position_sRK12sensor_gps_sR16failsafe_flags_sR6Report) *(.text._ZN11ControlMath11addIfNotNanERff) *(.text._ZN9Commander21checkForMissionUpdateEv) *(.text._Z8set_tunei) -*(.text._ZN3Ekf13stopGpsFusionEv) *(.text._ZNK6matrix7Vector3IfE5crossERKNS_6MatrixIfLj3ELj1EEE) *(.text._ZN10FlightTask22_checkEkfResetCountersEv) *(.text._ZNK6matrix6MatrixIfLj3ELj1EE11isAllFiniteEv) @@ -516,7 +491,6 @@ *(.text.MEM_DataCopy2_2) *(.text._ZN10FlightTask8activateERK21trajectory_setpoint_s) *(.text.sock_file_poll) -*(.text._ZN3Ekf20controlHaglRngFusionEv) *(.text._ZN10Ringbuffer9pop_frontEPhj) *(.text.nx_write) *(.text._ZN9Commander18manualControlCheckEv) @@ -527,18 +501,15 @@ *(.text.sem_clockwait) *(.text.inet_poll) *(.text._ZN6BMP3887collectEv) -*(.text._ZN15ArchPX4IOSerial19_do_rx_dma_callbackEbi) -*(.text._ZN15ArchPX4IOSerial10_abort_dmaEv) *(.text._ZNK15PositionControl24getLocalPositionSetpointER33vehicle_local_position_setpoint_s) *(.text._ZN3Ekf16controlGpsFusionERKN9estimator9imuSampleE) *(.text._ZN23MavlinkStreamRCChannels8get_sizeEv) *(.text._ZN20MavlinkStreamESCInfo8get_sizeEv) *(.text._ZNK6matrix6VectorIfLj2EE4normEv) *(.text._Z15arm_auth_updateyb) -*(.text._ZN3LED5ioctlEP4fileim) +*(.text._ZN3LED5ioctlEP4fileim) /* itcm-check-ignore */ *(.text._ZNK3px46logger9LogWriter20had_file_write_errorEv) *(.text._ZN29MavlinkStreamLocalPositionNED4sendEv) -*(.text._ZN6matrix6MatrixIfLj2ELj1EEC1ILj3ELj1EEERKNS_5SliceIfLj2ELj1EXT_EXT0_EEE) *(.text._ZNK6matrix6VectorIfLj3EE3dotERKNS_6MatrixIfLj3ELj1EEE) *(.text.imxrt_lpi2c_setclock) *(.text._ZN6matrix12typeFunction9constrainIfEET_S2_S2_S2_.part.0) @@ -559,16 +530,13 @@ *(.text._ZN6BMP38815get_sensor_dataEhP9bmp3_data) *(.text._ZN18MavlinkRateLimiter5checkERKy) *(.text._ZThn24_N26MulticopterAttitudeControl3RunEv) -*(.text._ZN15ArchPX4IOSerial10_interruptEiPvS0_) *(.text.imxrt_periphclk_configure) -*(.text._ZN3Ekf8initHaglEv) *(.text._ZN4EKF218UpdateAuxVelSampleER17ekf2_timestamps_s) *(.text._ZN3RTL11on_inactiveEv) *(.text._ZN12FailsafeBase10modeCanRunERK16failsafe_flags_sh) *(.text._ZN4EKF216PublishEvPosBiasERKy) *(.text._ZN21MavlinkStreamAttitude8get_sizeEv) *(.text._ZThn16_N7sensors19VehicleAcceleration3RunEv) -*(.text._ZN3Ekf24controlRangeHeightFusionEv) *(.text._ZN33MavlinkStreamTimeEstimateToTarget4sendEv) *(.text._ZN6matrix6MatrixIfLj3ELj1EE6setAllEf) *(.text._ZN12ModuleParamsD1Ev) @@ -586,22 +554,19 @@ *(.text._ZN26MulticopterPositionControl3RunEv) *(.text._ZN8Failsafe21fromQuadchuteActParamEi) *(.text._ZN24VariableLengthRingbuffer9pop_frontEPhj) -*(.text._ZN7control15BlockDerivative6updateEf) -*(.text._ZN5PX4IO10io_reg_getEhh) +*(.text._ZN7control15BlockDerivative6updateEf) /* itcm-check-ignore */ *(.text._ZN9Commander18safetyButtonUpdateEv) *(.text._ZN13BatteryChecks14checkAndReportERK7ContextR6Report) *(.text._ZN18DataValidatorGroup16get_sensor_stateEj) *(.text.uart_xmitchars_done) *(.text._ZN4EKF225PublishYawEstimatorStatusERKy) *(.text.sin) -*(.text._ZN16PreFlightChecker27preFlightCheckVertVelFailedERK23estimator_innovations_sf) *(.text._ZN6Safety19safetyButtonHandlerEv) -*(.text._ZN3Ekf19controlAuxVelFusionEv) +*(.text._ZN3Ekf19controlAuxVelFusionERKN9estimator9imuSampleE) *(.text._ZNK6matrix6MatrixIfLj2ELj1EEplERKS1_) *(.text._ZThn24_N7Sensors3RunEv) *(.text._ZN6matrix6MatrixIfLj2ELj1EEC1ERKS1_) *(.text._ZN10FlightTask10reActivateEv) -*(.text._ZN5PX4IO17io_publish_raw_rcEv) *(.text._ZNK15PositionControl19getAttitudeSetpointER27vehicle_attitude_setpoint_s) *(.text._ZN4cdev4CDev4pollEP4fileP6pollfdb) *(.text._ZN9Commander20offboardControlCheckEv) @@ -613,7 +578,6 @@ *(.text._ZN8Failsafe17updateArmingStateERKybRK16failsafe_flags_s) *(.text.imxrt_lpi2c_modifyreg) *(.text.up_flush_dcache) -*(.text._ZN5PX4IO16io_handle_statusEt) *(.text._ZN15GyroCalibration3RunEv) *(.text.mavlink_start_uart_send) *(.text.MEM_DataCopy2) @@ -647,7 +611,6 @@ *(.text._ZN12FailsafeBase11updateDelayERKy) *(.text._ZN10FlightTask25_evaluateDistanceToGroundEv) *(.text._ZN4EKF218PublishGnssHgtBiasERKy) -*(.text._ZN3Ekf21controlHaglFlowFusionEv) *(.text._ZN6matrix6VectorIfLj3EE9normalizeEv) *(.text._ZThn16_N7sensors10VehicleIMU3RunEv) *(.text.__kernel_cos) @@ -659,22 +622,18 @@ *(.text._Z15blink_msg_statev) *(.text._ZN19AccelerometerChecks14checkAndReportERK7ContextR6Report) *(.text._ZN8Failsafe14fromGfActParamEi) -*(.text._ZN3Ekf27checkAndFixCovarianceUpdateERKN6matrix12SquareMatrixIfLj23EEE) *(.text._ZN3Ekf17controlBetaFusionERKN9estimator9imuSampleE) -*(.text._ZN36do_not_explicitly_use_this_namespace5ParamIfLN3px46paramsE919EEC1Ev) +*(.text._ZN36do_not_explicitly_use_this_namespace5ParamIfLN3px46paramsE919EEC1Ev) /* itcm-check-ignore */ *(.text._ZN22MavlinkStreamHeartbeat8get_sizeEv) *(.text._ZN6matrix6MatrixIfLj3ELj1EEdVEf) *(.text._ZN17FlightTaskDescendC1Ev) *(.text._ZN26MavlinkStreamCameraTrigger8get_sizeEv) *(.text.iob_navail) *(.text._ZN12FailsafeBase25removeNonActivatedActionsEv) -*(.text._ZN16PreFlightChecker28preFlightCheckHorizVelFailedERK23estimator_innovations_sf) *(.text._ZN15TakeoffHandling10updateRampEff) *(.text._Z7led_offi) -*(.text._ZN16PreFlightChecker22selectHeadingTestLimitEv) *(.text.led_off) *(.text.udp_wrbuffer_test) -*(.text._ZNK3Ekf34updateVerticalPositionAidSrcStatusERKyfffR24estimator_aid_source1d_s) *(.text._ZNK4math17WelfordMeanVectorIfLj3EE8varianceEv) *(.text._ZN27MavlinkStreamAttitudeTarget4sendEv) *(.text._ZN12MixingOutput19updateSubscriptionsEb) @@ -683,7 +642,6 @@ *(.text._ZN18MavlinkStreamDebug8get_sizeEv) *(.text._ZN12GPSDriverUBX7receiveEj) *(.text._ZN13BatteryStatus21parameter_update_pollEb) -*(.text._ZN3Ekf26checkYawAngleObservabilityEv) *(.text._ZN3RTL18updateDatamanCacheEv) *(.text.__ieee754_sqrtf) *(.text._ZThn24_N18mag_bias_estimator16MagBiasEstimator3RunEv) @@ -701,11 +659,9 @@ *(.text._ZN12SystemChecks14checkAndReportERK7ContextR6Report) *(.text._ZN6matrix6MatrixIfLj3ELj1EEC1EPKf) *(.text.imxrt_padmux_address) -*(.text._ZN3Ekf15setVelPosStatusEib) *(.text._ZN19MavlinkStreamVFRHUD8get_sizeEv) *(.text._ZN15EstimatorChecks15checkSensorBiasERK7ContextR6Report8NavModes) *(.text._ZN20ImuConsistencyChecks14checkAndReportERK7ContextR6Report) -*(.text._ZN17ObstacleAvoidanceD1Ev) *(.text._ZN28MavlinkStreamGpsGlobalOrigin8get_sizeEv) *(.text.MEM_DataCopy2_1) *(.text._ZN6BMP3887measureEv) @@ -713,7 +669,7 @@ *(.text._ZN36MavlinkStreamPositionTargetGlobalInt8get_sizeEv) *(.text._ZN28MavlinkStreamEstimatorStatus8get_sizeEv) *(.text.up_clean_dcache) -*(.text._ZThn56_N26MulticopterPositionControl3RunEv) +*(.text._ZThn24_N26MulticopterPositionControl3RunEv) *(.text._ZN16FlightTimeChecks14checkAndReportERK7ContextR6Report) *(.text._ZN13ManualControl12processInputEy) *(.text._ZN17CpuResourceChecks14checkAndReportERK7ContextR6Report) @@ -725,9 +681,8 @@ *(.text._ZN32MavlinkStreamNavControllerOutput8get_sizeEv) *(.text._ZN6matrix8wrap_2piIfEET_S1_) *(.text._ZN4uORB7Manager30orb_remove_internal_subscriberEPv) -*(.text._ZN10BMP388_I2C7get_regEh) +*(.text._ZN10BMP388_I2C7get_regEhPh) *(.text._ZN4math17WelfordMeanVectorIfLj3EE5resetEv) -*(.text._ZN30MavlinkStreamUTMGlobalPosition10const_rateEv) *(.text._ZN27MavlinkStreamScaledPressure8get_sizeEv) *(.text._ZN3RTL17parameters_updateEv) *(.text._ZN18EstimatorInterface11setBaroDataERKN9estimator10baroSampleE.part.0) @@ -741,7 +696,6 @@ *(.text._ZN4uORB10DeviceNode10poll_stateEP4file) *(.text._ZN4uORB7Manager8orb_copyEPK12orb_metadataiPv) *(.text._ZN27MavlinkStreamServoOutputRawILi0EE8get_sizeEv) -*(.text._ZN30MavlinkStreamUTMGlobalPosition8get_sizeEv) *(.text._ZN8Geofence3runEv) *(.text._ZN15EstimatorChecks25checkEstimatorStatusFlagsERK7ContextR6ReportRK18estimator_status_sRK24vehicle_local_position_s) *(.text._ZN18MagnetometerChecks14checkAndReportERK7ContextR6Report) @@ -752,7 +706,6 @@ *(.text.read) *(.text._ZN4uORB15PublicationBaseD1Ev) *(.text._ZN22MavlinkStreamDebugVect8get_sizeEv) -*(.text._ZN22MavlinkStreamCollision8get_sizeEv) *(.text._ZN7Mission11on_inactiveEv) *(.text._ZN7sensors19VehicleMagnetometer20UpdateMagCalibrationEv) *(.text._ZN11calibration27FindCurrentCalibrationIndexEPKcm) diff --git a/boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld b/boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld index 2f6259209a..a14521a6b5 100644 --- a/boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld +++ b/boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld @@ -3,7 +3,6 @@ *(.text.arm_doirq) *(.text.arm_svcall) *(.text.arm_switchcontext) -*(.text.board_autoled_on) *(.text.clock_timer) *(.text.exception_common) *(.text.flexio_irq_handler) @@ -20,7 +19,6 @@ *(.text.imxrt_endwait) *(.text.imxrt_enet_interrupt) *(.text.imxrt_enet_interrupt_work) -*(.text.imxrt_gpio3_16_31_interrupt) *(.text.imxrt_interrupt) *(.text.imxrt_lpi2c_isr) *(.text.imxrt_lpspi_exchange) @@ -105,13 +103,12 @@ *(.text.devif_event_trigger) *(.text.devif_poll_icmp) *(.text.icmp_poll) -*(.text.devif_packet_conversion) *(.text.arp_out) *(.text.arp_find) *(.text.arp_format) -*(.text.net_ipv4addr_hdrcmp) -*(.text.net_ipv4addr_copy) -*(.text.net_ipv4addr_broadcast) +*(.text.net_ipv4addr_hdrcmp) /* itcm-check-ignore */ +*(.text.net_ipv4addr_copy) /* itcm-check-ignore */ +*(.text.net_ipv4addr_broadcast) /* itcm-check-ignore */ *(.text.wd_start) *(.text.arp_arpin) *(.text.ipv4_input) diff --git a/boards/nxp/tropic-community/nuttx-config/scripts/script.ld b/boards/nxp/tropic-community/nuttx-config/scripts/script.ld index 01d2e8d951..9c25a7e1a2 100644 --- a/boards/nxp/tropic-community/nuttx-config/scripts/script.ld +++ b/boards/nxp/tropic-community/nuttx-config/scripts/script.ld @@ -1,5 +1,5 @@ /**************************************************************************** - * boards/arm/imxrt/teensy-4.x/scripts/flash.ld + * boards/nxp/tropic-community/nuttx-config/scripts/script.ld * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -67,6 +67,7 @@ SECTIONS _sitcmfuncs = ABSOLUTE(.); FILL(0xFF) . = 0x40 ; + *(.ram_vectors) INCLUDE "itcm_static_functions.ld" INCLUDE "itcm_functions_includes.ld" . = ALIGN(8); @@ -75,19 +76,6 @@ SECTIONS _fitcmfuncs = LOADADDR(.itcmfunc); - /* The RAM vector table (if present) should lie at the beginning of SRAM */ - - .ram_vectors (COPY) : { - *(.ram_vectors) - } > dtcm - - - /* Workaround for ethernet issue, by placing g_desc_pool into DTCM, - which effectively puts it into a no-cache region */ - .dtcm : { - *(.bss.g_desc_pool) - } > dtcm - .text : { _stext = ABSOLUTE(.); diff --git a/boards/px4/fmu-v2/fixedwing.px4board b/boards/px4/fmu-v2/fixedwing.px4board index 0bde0c7e07..b6fd9c743b 100644 --- a/boards/px4/fmu-v2/fixedwing.px4board +++ b/boards/px4/fmu-v2/fixedwing.px4board @@ -8,5 +8,6 @@ CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_LASER_I2C=y CONFIG_DRIVERS_DISTANCE_SENSOR_LIGHTWARE_LASER_SERIAL=y CONFIG_MODULES_AIRSPEED_SELECTOR=y CONFIG_MODULES_FW_ATT_CONTROL=y -CONFIG_MODULES_FW_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y diff --git a/boards/px4/fmu-v3/default.px4board b/boards/px4/fmu-v3/default.px4board index 5dec8fda22..386b363aa6 100644 --- a/boards/px4/fmu-v3/default.px4board +++ b/boards/px4/fmu-v3/default.px4board @@ -51,7 +51,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v4/default.px4board b/boards/px4/fmu-v4/default.px4board index e7906db52c..48ecf1b2c2 100644 --- a/boards/px4/fmu-v4/default.px4board +++ b/boards/px4/fmu-v4/default.px4board @@ -52,7 +52,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v4pro/default.px4board b/boards/px4/fmu-v4pro/default.px4board index ff8455c285..a30e386ea9 100644 --- a/boards/px4/fmu-v4pro/default.px4board +++ b/boards/px4/fmu-v4pro/default.px4board @@ -47,7 +47,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v5/default.px4board b/boards/px4/fmu-v5/default.px4board index 1132a48bbf..e5da7855a7 100644 --- a/boards/px4/fmu-v5/default.px4board +++ b/boards/px4/fmu-v5/default.px4board @@ -55,7 +55,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v5/protected.px4board b/boards/px4/fmu-v5/protected.px4board index 7ea307124c..9f8eb32888 100644 --- a/boards/px4/fmu-v5/protected.px4board +++ b/boards/px4/fmu-v5/protected.px4board @@ -17,7 +17,8 @@ CONFIG_MODULES_CAMERA_FEEDBACK=n CONFIG_MODULES_ESC_BATTERY=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_ROVER_POS_CONTROL=n CONFIG_MODULES_SIMULATION_SIMULATOR_SIH=n CONFIG_MODULES_TEMPERATURE_COMPENSATION=n diff --git a/boards/px4/fmu-v5/rover.px4board b/boards/px4/fmu-v5/rover.px4board index 2c9e2d20d3..1d4d56e9a7 100644 --- a/boards/px4/fmu-v5/rover.px4board +++ b/boards/px4/fmu-v5/rover.px4board @@ -4,7 +4,8 @@ CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/px4/fmu-v5/stackcheck.px4board b/boards/px4/fmu-v5/stackcheck.px4board index e8bcadebd7..8e96a2ff79 100644 --- a/boards/px4/fmu-v5/stackcheck.px4board +++ b/boards/px4/fmu-v5/stackcheck.px4board @@ -29,7 +29,8 @@ CONFIG_MODULES_ESC_BATTERY=n CONFIG_MODULES_EVENTS=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_GIMBAL=n CONFIG_MODULES_GYRO_CALIBRATION=n diff --git a/boards/px4/fmu-v5x/default.px4board b/boards/px4/fmu-v5x/default.px4board index 8ba41726c0..77a92afc7f 100644 --- a/boards/px4/fmu-v5x/default.px4board +++ b/boards/px4/fmu-v5x/default.px4board @@ -59,7 +59,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v5x/init/rc.board_defaults b/boards/px4/fmu-v5x/init/rc.board_defaults index e0381e9886..1880b95d6a 100644 --- a/boards/px4/fmu-v5x/init/rc.board_defaults +++ b/boards/px4/fmu-v5x/init/rc.board_defaults @@ -13,6 +13,9 @@ then param set-default UXRCE_DDS_PTCFG 2 param set-default UXRCE_DDS_AG_IP 170461697 param set-default UXRCE_DDS_CFG 1000 + + # The buzzer draws too much power (0.2A) on the GPS power rail (limit 0.45A). + param set-default CBRK_BUZZER 782097 else # Mavlink ethernet (CFG 1000) param set-default MAV_2_CONFIG 1000 diff --git a/boards/px4/fmu-v5x/rover.px4board b/boards/px4/fmu-v5x/rover.px4board index 42f8ec21ce..916b009897 100644 --- a/boards/px4/fmu-v5x/rover.px4board +++ b/boards/px4/fmu-v5x/rover.px4board @@ -3,7 +3,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/px4/fmu-v6c/default.px4board b/boards/px4/fmu-v6c/default.px4board index e6b812fffd..e3aa477534 100644 --- a/boards/px4/fmu-v6c/default.px4board +++ b/boards/px4/fmu-v6c/default.px4board @@ -47,7 +47,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v6c/rover.px4board b/boards/px4/fmu-v6c/rover.px4board index 9eed13c665..ee2e5a13e5 100644 --- a/boards/px4/fmu-v6c/rover.px4board +++ b/boards/px4/fmu-v6c/rover.px4board @@ -2,7 +2,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/px4/fmu-v6u/default.px4board b/boards/px4/fmu-v6u/default.px4board index be90aca727..e72a584fd8 100644 --- a/boards/px4/fmu-v6u/default.px4board +++ b/boards/px4/fmu-v6u/default.px4board @@ -47,7 +47,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v6u/rover.px4board b/boards/px4/fmu-v6u/rover.px4board index 9eed13c665..ee2e5a13e5 100644 --- a/boards/px4/fmu-v6u/rover.px4board +++ b/boards/px4/fmu-v6u/rover.px4board @@ -2,7 +2,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/px4/fmu-v6x/default.px4board b/boards/px4/fmu-v6x/default.px4board index ba42e02a9d..778eb50198 100644 --- a/boards/px4/fmu-v6x/default.px4board +++ b/boards/px4/fmu-v6x/default.px4board @@ -57,7 +57,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v6x/init/rc.board_defaults b/boards/px4/fmu-v6x/init/rc.board_defaults index bdc99a68e7..2d9a6ea49a 100644 --- a/boards/px4/fmu-v6x/init/rc.board_defaults +++ b/boards/px4/fmu-v6x/init/rc.board_defaults @@ -15,6 +15,9 @@ then param set-default UXRCE_DDS_PTCFG 2 param set-default UXRCE_DDS_AG_IP 170461697 param set-default UXRCE_DDS_CFG 1000 + + # The buzzer draws too much power (0.2A) on the GPS power rail (limit 0.45A). + param set-default CBRK_BUZZER 782097 else # Mavlink ethernet (CFG 1000) param set-default MAV_2_CONFIG 1000 diff --git a/boards/px4/fmu-v6x/multicopter.px4board b/boards/px4/fmu-v6x/multicopter.px4board index 9f540f567d..147297d55e 100644 --- a/boards/px4/fmu-v6x/multicopter.px4board +++ b/boards/px4/fmu-v6x/multicopter.px4board @@ -3,7 +3,8 @@ CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=n CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_VTOL_ATT_CONTROL=n CONFIG_COMMON_RC=y diff --git a/boards/px4/fmu-v6x/rover.px4board b/boards/px4/fmu-v6x/rover.px4board index 9eed13c665..ee2e5a13e5 100644 --- a/boards/px4/fmu-v6x/rover.px4board +++ b/boards/px4/fmu-v6x/rover.px4board @@ -2,7 +2,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/px4/fmu-v6xrt/default.px4board b/boards/px4/fmu-v6xrt/default.px4board index 477ba76ed8..b990cc48ae 100644 --- a/boards/px4/fmu-v6xrt/default.px4board +++ b/boards/px4/fmu-v6xrt/default.px4board @@ -57,7 +57,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld b/boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld index 0a4e0faa6a..a52a3b46b0 100644 --- a/boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld +++ b/boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld @@ -2,7 +2,7 @@ *(.text._ZN4uORB7Manager27orb_add_internal_subscriberE6ORB_IDhPj) *(.text._ZN13MavlinkStream6updateERKy) *(.text._ZN7Mavlink16update_rate_multEv) -*(.text._ZN3sym17PredictCovarianceIfEEN6matrix6MatrixIT_Lj23ELj23EEERKNS2_IS3_Lj24ELj1EEERKS4_RKNS2_IS3_Lj3ELj1EEES3_SC_SC_S3_S3_) +*(.text._ZN3sym17PredictCovarianceIfEEN6matrix6MatrixIT_Lj23ELj23EEERKNS2_IS3_Lj24ELj1EEERKS4_RKNS2_IS3_Lj3ELj1EEES3_SC_SC_S3_S3_) /* itcm-check-ignore */ *(.text._ZN13MavlinkStream12get_size_avgEv) *(.text._ZN16ControlAllocator3RunEv) *(.text._ZN22MulticopterRateControl3RunEv.part.0) @@ -57,7 +57,6 @@ *(.text._ZN3px49WorkQueue3AddEPNS_8WorkItemE) *(.text._ZN4EKF220PublishLocalPositionERKy) *(.text._mav_finalize_message_chan_send) -*(.text._ZN3Ekf19fixCovarianceErrorsEb) *(.text._ZN7sensors22VehicleAngularVelocity16ParametersUpdateEb) *(.text._ZN6events12SendProtocol6updateERKy) *(.text._ZN6device3SPI8transferEPhS1_j) @@ -68,7 +67,7 @@ *(.text.nx_poll) *(.text._ZN15MavlinkReceiver3runEv) *(.text._ZN9ICM42688P18ProcessTemperatureEPKN20InvenSense_ICM42688P4FIFO4DATAEh) -*(.text._ZN15OutputPredictor19correctOutputStatesEyRKN6matrix10QuaternionIfEERKNS0_7Vector3IfEES8_S8_S8_) +*(.text._ZN15OutputPredictor19correctOutputStatesEyRKN6matrix10QuaternionIfEERKNS0_7Vector3IfEERK9LatLonAltS8_S8_) *(.text._ZN3Ekf12predictStateERKN9estimator9imuSampleE) *(.text._ZN3px46logger6Logger3runEv) *(.text._ZN4uORB20SubscriptionInterval7updatedEv) @@ -122,7 +121,6 @@ *(.text._ZN22MulticopterRateControl28updateActuatorControlsStatusERK25vehicle_torque_setpoint_sf) *(.text._ZN11RateControl6updateERKN6matrix7Vector3IfEES4_S4_fb) *(.text._ZN39ControlAllocationSequentialDesaturation19desaturateActuatorsERN6matrix6VectorIfLj16EEERKS2_b) -*(.text._ZN22MavlinkStreamCollision4sendEv) *(.text.imxrt_lpi2c_transfer) *(.text.uart_putxmitchar) *(.text.clock_nanosleep) @@ -166,7 +164,7 @@ *(.text._ZN13land_detector23MulticopterLandDetector25_get_ground_contact_stateEv) *(.text.imxrt_dmach_start) *(.text._ZN3ADC19update_system_powerEy) -*(.text._ZNK3Ekf19get_ekf_soln_statusEPt) +*(.text._ZNK3Ekf19get_ekf_soln_statusEv) *(.text._ZN3px46logger15watchdog_updateERNS0_15watchdog_data_tEb) *(.text.imxrt_gpio_read) *(.text._ZN32MavlinkStreamNavControllerOutput4sendEv) @@ -193,11 +191,10 @@ *(.text._ZN22MavlinkStreamGPSStatus4sendEv) *(.text._ZN4EKF220UpdateAirspeedSampleER17ekf2_timestamps_s) *(.text._ZN23MavlinkStreamStatustext4sendEv) -*(.text._ZN3Ekf15constrainStatesEv) *(.text._ZN12PX4IO_serial4readEjPvj) *(.text.uart_poll) *(.text._ZN24MavlinkParametersManager4sendEv) -*(.text._ZN26MulticopterPositionControl18set_vehicle_statesERK24vehicle_local_position_s) +*(.text._ZN26MulticopterPositionControl18set_vehicle_statesERK24vehicle_local_position_sf) *(.text.file_poll) *(.text.hrt_elapsed_time) *(.text._ZN7Mavlink11send_finishEv) @@ -231,8 +228,7 @@ *(.text._ZN6matrix5EulerIfEC1ERKNS_10QuaternionIfEE) *(.text.imxrt_queuedtd) *(.text._ZN27MavlinkStreamDistanceSensor8get_sizeEv) -*(.text._ZN3Ekf16fuseVelPosHeightEffi) -*(.text._ZN3Ekf23controlBaroHeightFusionEv) +*(.text._ZN3Ekf23controlBaroHeightFusionERKN9estimator9imuSampleE) *(.text._ZN16PX4Accelerometer9set_scaleEf) *(.text._ZN11ControlMath11constrainXYERKN6matrix7Vector2IfEES4_RKf) *(.text._ZN22MavlinkStreamEfiStatus4sendEv) @@ -242,13 +238,11 @@ *(.text._ZN15PositionControl11_inputValidEv) *(.text._ZN7sensors14VehicleAirData3RunEv) *(.text.perf_count) -*(.text._ZN3Ekf16controlMagFusionEv) +*(.text._ZN3Ekf16controlMagFusionERKN9estimator9imuSampleE) *(.text.pthread_sem_give) *(.text._ZN7sensors10VehicleIMU16ParametersUpdateEb) -*(.text._ZN30MavlinkStreamUTMGlobalPosition4sendEv) *(.text._ZN4uORB20SubscriptionInterval4copyEPv) *(.text._ZN12I2CSPIDriverI9ICM42688PE3RunEv) -*(.text._ZN17ObstacleAvoidanceC1EP12ModuleParams) *(.text.imxrt_epcomplete.constprop.0) *(.text._ZNK6matrix6MatrixIfLj3ELj1EEmiERKS1_) *(.text._ZN9Commander30handleModeIntentionAndFailsafeEv) @@ -279,7 +273,7 @@ *(.text._ZN6matrix6MatrixIfLj3ELj1EEC1ERKS1_) *(.text.udp_pollsetup) *(.text._ZL14timer_callbackPv) -*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj23EEEf) +*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf) *(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi) *(.text.nxsem_wait_irq) *(.text._ZN20MavlinkCommandSender4lockEv) @@ -298,7 +292,7 @@ *(.text._ZN25MavlinkStreamHomePosition4sendEv) *(.text._ZN24MavlinkParametersManager8send_oneEv) *(.text._ZN15OutputPredictor29applyCorrectionToOutputBufferERKN6matrix7Vector3IfEES4_) -*(.text._ZN21HealthAndArmingChecks6updateEb) +*(.text._ZN21HealthAndArmingChecks6updateEbb) *(.text._ZThn24_N22MulticopterRateControl3RunEv) *(.text._ZN26MavlinkStreamManualControl4sendEv) *(.text._ZN27MavlinkStreamOpticalFlowRad4sendEv) @@ -307,13 +301,11 @@ *(.text._ZN24MavlinkParametersManager18send_untransmittedEv) *(.text._ZN10MavlinkFTP4sendEv) *(.text._ZN15ArchPX4IOSerial13_do_interruptEv) -*(.text._ZN3Ekf27controlExternalVisionFusionEv) +*(.text._ZN3Ekf27controlExternalVisionFusionERKN9estimator9imuSampleE) *(.text.clock_gettime) *(.text._ZN3ADC17update_adc_reportEy) -*(.text._ZN3sym25ComputeYaw312InnovVarAndHIfEEvRKN6matrix6MatrixIT_Lj24ELj1EEERKNS2_IS3_Lj23ELj23EEES3_S3_PS3_PNS2_IS3_Lj23ELj1EEE) -*(.text._ZN3Ekf19runTerrainEstimatorERKN9estimator9imuSampleE) *(.text._ZN32MavlinkStreamGimbalManagerStatus4sendEv) -*(.text._ZN9LockGuardD1Ev) +*(.text._ZN9LockGuardD1Ev) /* itcm-check-ignore */ *(.text._ZN4EKF213PublishStatesERKy) *(.text._ZN3ADC3RunEv) *(.text._ZN6BMP38815compensate_dataEhPK16bmp3_uncomp_dataP9bmp3_data) @@ -348,7 +340,7 @@ *(.text._ZN15FailureDetector6updateERK16vehicle_status_sRK22vehicle_control_mode_s) *(.text._ZN7Mavlink10send_startEi) *(.text.imxrt_lpspi_setbits) -*(.text._ZN15OutputPredictor37applyCorrectionToVerticalOutputBufferEf) +*(.text._ZN15OutputPredictor37applyCorrectionToVerticalOutputBufferEff) *(.text._ZN4EKF222UpdateAccelCalibrationERKy) *(.text._ZN7sensors19VehicleMagnetometer3RunEv) *(.text._ZN29MavlinkStreamMountOrientation4sendEv) @@ -363,15 +355,13 @@ *(.text.poll) *(.text._ZN14FlightTaskAutoD1Ev) *(.text._ZN4uORB10DeviceNode22get_initial_generationEv) -*(.text._ZN3Ekf23controlGnssHeightFusionERKN9estimator9gpsSampleE) +*(.text._ZN3Ekf23controlGnssHeightFusionERKN9estimator10gnssSampleE) *(.text._ZN3Ekf40updateOnGroundMotionForOpticalFlowChecksEv) *(.text._ZN6matrix6MatrixIfLj3ELj1EEC1Ev) *(.text._ZN14ZeroGyroUpdate6updateER3EkfRKN9estimator9imuSampleE) *(.text._ZN30MavlinkStreamOpenDroneIdSystem4sendEv) *(.text._ZN22MavlinkStreamScaledIMU4sendEv) -*(.text._ZN46MavlinkStreamTrajectoryRepresentationWaypoints4sendEv) *(.text.imxrt_ioctl) -*(.text._ZN3Ekf25checkMagBiasObservabilityEv) *(.text._ZN36MavlinkStreamGimbalDeviceSetAttitude4sendEv) *(.text._ZN4math13expo_deadzoneIfEEKT_RS2_S3_S3_.isra.0) *(.text._ZN19StickAccelerationXYC1EP12ModuleParams) @@ -401,7 +391,7 @@ *(.text._ZN9Commander11updateTunesEv) *(.text._ZN4EKF215UpdateMagSampleER17ekf2_timestamps_s) *(.text._ZN18DataValidatorGroup3putEjyPKfmh) -*(.text._ZNK3Ekf19get_ekf_ctrl_limitsEPfS0_S0_S0_) +*(.text._ZNK3Ekf19get_ekf_ctrl_limitsEPfS0_S0_S0_S0_) *(.text._ZN12FailsafeBase13checkFailsafeEibbRKNS_13ActionOptionsE) *(.text._ZN17FlightTaskDescendD1Ev) *(.text._ZN30MavlinkStreamOpenDroneIdSystem8get_sizeEv) @@ -409,7 +399,6 @@ *(.text._ZN24FlightTaskManualAltitudeD1Ev) *(.text._Z35px4_indicate_external_reset_lockout16LockoutComponentb) *(.text.uart_pollnotify) -*(.text._ZN3Ekf11predictHaglERKN9estimator9imuSampleE) *(.text._ZN4EKF215PublishBaroBiasERKy) *(.text._ZN4EKF221UpdateGyroCalibrationERKy) *(.text._ZN6matrix9constrainIfLj3ELj1EEENS_6MatrixIT_XT0_EXT1_EEERKS3_S2_S2_) @@ -440,7 +429,7 @@ *(.text.clock_systime_timespec) *(.text._ZN4uORB10DeviceNode26remove_internal_subscriberEv) *(.text._ZThn16_N4EKF23RunEv) -*(.text._ZNK3Ekf22computeYawInnovVarAndHEfRfRN6matrix6VectorIfLj23EEE) +*(.text._ZNK3Ekf22computeYawInnovVarAndHEfRfRN6matrix6VectorIfLj24EEE) *(.text._ZN12ActuatorTest6updateEif) *(.text._ZN17VelocitySmoothingC1Efff) *(.text._ZN13AnalogBattery19get_voltage_channelEv) @@ -458,7 +447,7 @@ *(.text.imxrt_config_gpio) *(.text.nxsig_timeout) *(.text._ZN11RateControl19setSaturationStatusERKN6matrix7Vector3IbEES4_) -*(.text._ZN3Ekf17measurementUpdateERN6matrix6VectorIfLj23EEEff) +*(.text._ZN3Ekf17measurementUpdateERN6matrix6VectorIfLj24EEERKS2_ff) *(.text.dq_addlast) *(.text._ZN19MavlinkStreamVFRHUD4sendEv) *(.text.hrt_call_reschedule) @@ -482,14 +471,13 @@ *(.text._ZNK6matrix6MatrixIfLj3ELj1EE5emultERKS1_) *(.text.mallinfo_handler) *(.text._ZN13land_detector23MulticopterLandDetector14_update_topicsEv) -*(.text._ZN24ManualVelocitySmoothingZC1Ev) +*(.text._ZN24ManualVelocitySmoothingZC1Ev) /* itcm-check-ignore */ *(.text._ZN3ADC6sampleEj) *(.text._ZNK3Ekf22isTerrainEstimateValidEv) -*(.text._ZN15EstimatorChecks23setModeRequirementFlagsERK7ContextbbRK24vehicle_local_position_sRK12sensor_gps_sR16failsafe_flags_sR6Report) +*(.text._ZN15EstimatorChecks23setModeRequirementFlagsERK7ContextbbbRK24vehicle_local_position_sRK12sensor_gps_sR16failsafe_flags_sR6Report) *(.text._ZN11ControlMath11addIfNotNanERff) *(.text._ZN9Commander21checkForMissionUpdateEv) *(.text._Z8set_tunei) -*(.text._ZN3Ekf13stopGpsFusionEv) *(.text._ZNK6matrix7Vector3IfE5crossERKNS_6MatrixIfLj3ELj1EEE) *(.text._ZN10FlightTask22_checkEkfResetCountersEv) *(.text._ZNK6matrix6MatrixIfLj3ELj1EE11isAllFiniteEv) @@ -511,7 +499,6 @@ *(.text.MEM_DataCopy2_2) *(.text._ZN10FlightTask8activateERK21trajectory_setpoint_s) *(.text.sock_file_poll) -*(.text._ZN3Ekf20controlHaglRngFusionEv) *(.text._ZN10Ringbuffer9pop_frontEPhj) *(.text.nx_write) *(.text._ZN9Commander18manualControlCheckEv) @@ -533,7 +520,6 @@ *(.text._ZN3LED5ioctlEP4fileim) *(.text._ZNK3px46logger9LogWriter20had_file_write_errorEv) *(.text._ZN29MavlinkStreamLocalPositionNED4sendEv) -*(.text._ZN6matrix6MatrixIfLj2ELj1EEC1ILj3ELj1EEERKNS_5SliceIfLj2ELj1EXT_EXT0_EEE) *(.text._ZNK6matrix6VectorIfLj3EE3dotERKNS_6MatrixIfLj3ELj1EEE) *(.text.imxrt_lpi2c_setclock) *(.text._ZN6matrix12typeFunction9constrainIfEET_S2_S2_S2_.part.0) @@ -556,14 +542,12 @@ *(.text._ZThn24_N26MulticopterAttitudeControl3RunEv) *(.text._ZN15ArchPX4IOSerial10_interruptEiPvS0_) *(.text.imxrt_periphclk_configure) -*(.text._ZN3Ekf8initHaglEv) *(.text._ZN4EKF218UpdateAuxVelSampleER17ekf2_timestamps_s) *(.text._ZN3RTL11on_inactiveEv) *(.text._ZN12FailsafeBase10modeCanRunERK16failsafe_flags_sh) *(.text._ZN4EKF216PublishEvPosBiasERKy) *(.text._ZN21MavlinkStreamAttitude8get_sizeEv) *(.text._ZThn16_N7sensors19VehicleAcceleration3RunEv) -*(.text._ZN3Ekf24controlRangeHeightFusionEv) *(.text._ZN33MavlinkStreamTimeEstimateToTarget4sendEv) *(.text._ZN6matrix6MatrixIfLj3ELj1EE6setAllEf) *(.text._ZN12ModuleParamsD1Ev) @@ -581,7 +565,7 @@ *(.text._ZN26MulticopterPositionControl3RunEv) *(.text._ZN8Failsafe21fromQuadchuteActParamEi) *(.text._ZN24VariableLengthRingbuffer9pop_frontEPhj) -*(.text._ZN7control15BlockDerivative6updateEf) +*(.text._ZN7control15BlockDerivative6updateEf) /* itcm-check-ignore */ *(.text._ZN5PX4IO10io_reg_getEhh) *(.text._ZN9Commander18safetyButtonUpdateEv) *(.text._ZN13BatteryChecks14checkAndReportERK7ContextR6Report) @@ -590,7 +574,7 @@ *(.text._ZN4EKF225PublishYawEstimatorStatusERKy) *(.text.sin) *(.text._ZN6Safety19safetyButtonHandlerEv) -*(.text._ZN3Ekf19controlAuxVelFusionEv) +*(.text._ZN3Ekf19controlAuxVelFusionERKN9estimator9imuSampleE) *(.text._ZNK6matrix6MatrixIfLj2ELj1EEplERKS1_) *(.text._ZThn24_N7Sensors3RunEv) *(.text._ZN6matrix6MatrixIfLj2ELj1EEC1ERKS1_) @@ -641,7 +625,6 @@ *(.text._ZN12FailsafeBase11updateDelayERKy) *(.text._ZN10FlightTask25_evaluateDistanceToGroundEv) *(.text._ZN4EKF218PublishGnssHgtBiasERKy) -*(.text._ZN3Ekf21controlHaglFlowFusionEv) *(.text._ZN6matrix6VectorIfLj3EE9normalizeEv) *(.text._ZThn16_N7sensors10VehicleIMU3RunEv) *(.text.__kernel_cos) @@ -653,9 +636,8 @@ *(.text._Z15blink_msg_statev) *(.text._ZN19AccelerometerChecks14checkAndReportERK7ContextR6Report) *(.text._ZN8Failsafe14fromGfActParamEi) -*(.text._ZN3Ekf27checkAndFixCovarianceUpdateERKN6matrix12SquareMatrixIfLj23EEE) *(.text._ZN3Ekf17controlBetaFusionERKN9estimator9imuSampleE) -*(.text._ZN36do_not_explicitly_use_this_namespace5ParamIfLN3px46paramsE919EEC1Ev) +*(.text._ZN36do_not_explicitly_use_this_namespace5ParamIfLN3px46paramsE919EEC1Ev) /* itcm-check-ignore */ *(.text._ZN22MavlinkStreamHeartbeat8get_sizeEv) *(.text._ZN6matrix6MatrixIfLj3ELj1EEdVEf) *(.text._ZN17FlightTaskDescendC1Ev) @@ -666,7 +648,6 @@ *(.text._Z7led_offi) *(.text.led_off) *(.text.udp_wrbuffer_test) -*(.text._ZNK3Ekf34updateVerticalPositionAidSrcStatusERKyfffR24estimator_aid_source1d_s) *(.text._ZNK4math17WelfordMeanVectorIfLj3EE8varianceEv) *(.text._ZN27MavlinkStreamAttitudeTarget4sendEv) *(.text._ZN12MixingOutput19updateSubscriptionsEb) @@ -692,11 +673,9 @@ *(.text._ZN12SystemChecks14checkAndReportERK7ContextR6Report) *(.text._ZN6matrix6MatrixIfLj3ELj1EEC1EPKf) *(.text.imxrt_padmux_address) -*(.text._ZN3Ekf15setVelPosStatusEib) *(.text._ZN19MavlinkStreamVFRHUD8get_sizeEv) *(.text._ZN15EstimatorChecks15checkSensorBiasERK7ContextR6Report8NavModes) *(.text._ZN20ImuConsistencyChecks14checkAndReportERK7ContextR6Report) -*(.text._ZN17ObstacleAvoidanceD1Ev) *(.text._ZN28MavlinkStreamGpsGlobalOrigin8get_sizeEv) *(.text.MEM_DataCopy2_1) *(.text._ZN6BMP3887measureEv) @@ -704,7 +683,7 @@ *(.text._ZN36MavlinkStreamPositionTargetGlobalInt8get_sizeEv) *(.text._ZN28MavlinkStreamEstimatorStatus8get_sizeEv) *(.text.up_clean_dcache) -*(.text._ZThn56_N26MulticopterPositionControl3RunEv) +*(.text._ZThn24_N26MulticopterPositionControl3RunEv) *(.text._ZN16FlightTimeChecks14checkAndReportERK7ContextR6Report) *(.text._ZN13ManualControl12processInputEy) *(.text._ZN17CpuResourceChecks14checkAndReportERK7ContextR6Report) @@ -716,9 +695,8 @@ *(.text._ZN32MavlinkStreamNavControllerOutput8get_sizeEv) *(.text._ZN6matrix8wrap_2piIfEET_S1_) *(.text._ZN4uORB7Manager30orb_remove_internal_subscriberEPv) -*(.text._ZN10BMP388_I2C7get_regEh) +*(.text._ZN10BMP388_I2C7get_regEhPh) *(.text._ZN4math17WelfordMeanVectorIfLj3EE5resetEv) -*(.text._ZN30MavlinkStreamUTMGlobalPosition10const_rateEv) *(.text._ZN27MavlinkStreamScaledPressure8get_sizeEv) *(.text._ZN3RTL17parameters_updateEv) *(.text._ZN18EstimatorInterface11setBaroDataERKN9estimator10baroSampleE.part.0) @@ -732,7 +710,6 @@ *(.text._ZN4uORB10DeviceNode10poll_stateEP4file) *(.text._ZN4uORB7Manager8orb_copyEPK12orb_metadataiPv) *(.text._ZN27MavlinkStreamServoOutputRawILi0EE8get_sizeEv) -*(.text._ZN30MavlinkStreamUTMGlobalPosition8get_sizeEv) *(.text._ZN8Geofence3runEv) *(.text._ZN15EstimatorChecks25checkEstimatorStatusFlagsERK7ContextR6ReportRK18estimator_status_sRK24vehicle_local_position_s) *(.text._ZN18MagnetometerChecks14checkAndReportERK7ContextR6Report) @@ -743,7 +720,6 @@ *(.text.read) *(.text._ZN4uORB15PublicationBaseD1Ev) *(.text._ZN22MavlinkStreamDebugVect8get_sizeEv) -*(.text._ZN22MavlinkStreamCollision8get_sizeEv) *(.text._ZN7Mission11on_inactiveEv) *(.text._ZN7sensors19VehicleMagnetometer20UpdateMagCalibrationEv) *(.text._ZN11calibration27FindCurrentCalibrationIndexEPKcm) diff --git a/boards/px4/fmu-v6xrt/rover.px4board b/boards/px4/fmu-v6xrt/rover.px4board index 7b8ed3bd1f..458ebe7d08 100644 --- a/boards/px4/fmu-v6xrt/rover.px4board +++ b/boards/px4/fmu-v6xrt/rover.px4board @@ -3,7 +3,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=n diff --git a/boards/px4/raspberrypi/default.px4board b/boards/px4/raspberrypi/default.px4board index ade7dd4235..484a66beff 100644 --- a/boards/px4/raspberrypi/default.px4board +++ b/boards/px4/raspberrypi/default.px4board @@ -30,7 +30,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/px4/sitl/default.px4board b/boards/px4/sitl/default.px4board index f85c03e23a..28c16f931f 100644 --- a/boards/px4/sitl/default.px4board +++ b/boards/px4/sitl/default.px4board @@ -19,7 +19,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_FIGURE_OF_EIGHT=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y diff --git a/boards/px4/sitl/spacecraft.px4board b/boards/px4/sitl/spacecraft.px4board index 56c966598b..44ac04d7dd 100644 --- a/boards/px4/sitl/spacecraft.px4board +++ b/boards/px4/sitl/spacecraft.px4board @@ -2,7 +2,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n CONFIG_MODULES_FLIGHT_MODE_MANAGER=n CONFIG_MODULES_FW_ATT_CONTROL=n CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n -CONFIG_MODULES_FW_POS_CONTROL=n +CONFIG_MODULES_FW_MODE_MANAGER=n +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n CONFIG_MODULES_FW_RATE_CONTROL=n CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y CONFIG_MODULES_MC_ATT_CONTROL=n diff --git a/boards/scumaker/pilotpi/default.px4board b/boards/scumaker/pilotpi/default.px4board index b72da494da..d9d35ab25d 100644 --- a/boards/scumaker/pilotpi/default.px4board +++ b/boards/scumaker/pilotpi/default.px4board @@ -32,7 +32,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/siyi/n7/default.px4board b/boards/siyi/n7/default.px4board index 2a7a232581..3dafcc85a1 100644 --- a/boards/siyi/n7/default.px4board +++ b/boards/siyi/n7/default.px4board @@ -38,7 +38,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/sky-drones/smartap-airlink/default.px4board b/boards/sky-drones/smartap-airlink/default.px4board index fdfdcdea6a..b2cd40a7ba 100644 --- a/boards/sky-drones/smartap-airlink/default.px4board +++ b/boards/sky-drones/smartap-airlink/default.px4board @@ -46,7 +46,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/thepeach/k1/default.px4board b/boards/thepeach/k1/default.px4board index d760279546..cc519b968d 100644 --- a/boards/thepeach/k1/default.px4board +++ b/boards/thepeach/k1/default.px4board @@ -44,7 +44,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/thepeach/r1/default.px4board b/boards/thepeach/r1/default.px4board index d760279546..cc519b968d 100644 --- a/boards/thepeach/r1/default.px4board +++ b/boards/thepeach/r1/default.px4board @@ -44,7 +44,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/x-mav/ap-h743v2/default.px4board b/boards/x-mav/ap-h743v2/default.px4board index 09a32b78c5..33f81262d3 100644 --- a/boards/x-mav/ap-h743v2/default.px4board +++ b/boards/x-mav/ap-h743v2/default.px4board @@ -40,7 +40,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/boards/x-mav/ap-h743v2/init/rc.board_extras b/boards/x-mav/ap-h743v2/init/rc.board_extras index 780b13dc96..4611dbae46 100644 --- a/boards/x-mav/ap-h743v2/init/rc.board_extras +++ b/boards/x-mav/ap-h743v2/init/rc.board_extras @@ -10,4 +10,4 @@ # fi # DShot telemetry is always on UART7 -# dshot telemetry /dev/ttyS5 +# dshot telemetry -d /dev/ttyS5 diff --git a/boards/zeroone/x6/default.px4board b/boards/zeroone/x6/default.px4board index ba05f4ab5f..20677f9d1f 100644 --- a/boards/zeroone/x6/default.px4board +++ b/boards/zeroone/x6/default.px4board @@ -47,7 +47,8 @@ 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_POS_CONTROL=y +CONFIG_MODULES_FW_MODE_MANAGER=y +CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y CONFIG_MODULES_FW_RATE_CONTROL=y CONFIG_MODULES_GIMBAL=y CONFIG_MODULES_GYRO_CALIBRATION=y diff --git a/docs/_link_checker_sc/ignore_errors.json b/docs/_link_checker_sc/ignore_errors.json index 3e06929dec..2914c56f27 100644 --- a/docs/_link_checker_sc/ignore_errors.json +++ b/docs/_link_checker_sc/ignore_errors.json @@ -956,5 +956,59 @@ "type": "PageNotLinkedInternally", "fileRelativeToRoot": "en\\config\\_autotune.md", "hideReason": "Page is intended to be an orphan" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\computer_vision\\path_planning_interface.md", + "link": { + "url": "https://docs.px4.io/v1.14/en/computer_vision/path_planning_interface.html", + "text": "PX4 v1.14 docs" + }, + "hideReason": "Intended" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\dev_log\\log_encryption.md", + "link": { + "url": "https://docs.px4.io/v1.15/en/dev_log/log_encryption.html", + "text": "Log Encryption (PX4 v1.15)" + }, + "hideReason": "Intended" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\1.16.md", + "link": { + "url": "https://docs.px4.io/main/en/releases/main.html", + "text": "See the latest version" + }, + "hideReason": "intended" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\releases\\main.md", + "link": { + "url": "https://docs.px4.io/main/en/releases/main.html", + "text": "See the latest version" + }, + "hideReason": "intended" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\robotics\\index.md", + "link": { + "url": "https://docs.px4.io/v1.12/en/robotics/dronekit.html", + "text": "PX4 v1.12 > DroneKit" + }, + "hideReason": "Intended" + }, + { + "type": "UrlToLocalSite", + "fileRelativeToRoot": "en\\ros2\\user_guide.md", + "link": { + "url": "https://docs.px4.io/v1.13/en/ros/ros2_comm.html", + "text": "PX4 v1.13 Docs" + }, + "hideReason": "intended" } ] \ No newline at end of file diff --git a/docs/assets/airframes/vtol/foxtech_loong_2160/loong.params b/docs/assets/airframes/vtol/foxtech_loong_2160/loong.params index cbe7060990..0f0c012b79 100644 --- a/docs/assets/airframes/vtol/foxtech_loong_2160/loong.params +++ b/docs/assets/airframes/vtol/foxtech_loong_2160/loong.params @@ -2,7 +2,7 @@ # # Stack: PX4 Pro # Vehicle: VTOL -# Version: 1.13.0 +# Version: 1.13.0 # Git Revision: 89b7373cb202071a # # Vehicle-Id Component-Id Name Value Type @@ -39,7 +39,7 @@ 1 1 FW_AIRSPD_TRIM 17.000000000000000000 9 1 1 FW_PR_FF 0.300000011920928955 9 1 1 FW_PR_I 0.500000000000000000 9 -1 1 FW_PR_P 0.400000005960464478 9 +1 1 FW_PR_P 0.3 9 1 1 FW_PSP_OFF 3.000000000000000000 9 1 1 FW_P_LIM_MAX 30.000000000000000000 9 1 1 FW_P_TC 0.349999994039535522 9 @@ -124,4 +124,4 @@ 1 1 VT_F_TR_OL_TM 9.000000000000000000 9 1 1 VT_LND_PITCH_MIN 0.000000000000000000 9 1 1 VT_PITCH_MIN 3.000000000000000000 9 -1 1 VT_TRANS_MIN_TM 5.000000000000000000 9 \ No newline at end of file +1 1 VT_TRANS_MIN_TM 5.000000000000000000 9 diff --git a/docs/assets/flight_controller/pixhawk6c_mini/pixhawk6c_mini_hero.jpg b/docs/assets/flight_controller/pixhawk6c_mini/pixhawk6c_mini_hero.jpg deleted file mode 100644 index cdd3185e69..0000000000 Binary files a/docs/assets/flight_controller/pixhawk6c_mini/pixhawk6c_mini_hero.jpg and /dev/null differ diff --git a/docs/assets/flight_controller/pixhawk6x/pixhawk_6x_internal_Architecture.png b/docs/assets/flight_controller/pixhawk6x/pixhawk_6x_internal_Architecture.png deleted file mode 100644 index 90bf35d4e7..0000000000 Binary files a/docs/assets/flight_controller/pixhawk6x/pixhawk_6x_internal_Architecture.png and /dev/null differ diff --git a/docs/assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg b/docs/assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg new file mode 100644 index 0000000000..3e9a8df721 --- /dev/null +++ b/docs/assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg @@ -0,0 +1,4 @@ + + + +
External Flight Mode
Simplified PX4 Fixed Wing 
Lateral/Longitudinal Controller


Course Setpoint
Airspeed Direction Computation
Airspeed Direction Controller 
Roll Angle Computation
Airspeed Direction Setpoint
Lateral Acceleration Setpoint
+
Diagram illustrates interaction between external inputs and PX4. Does not show all inputs and intermediate steps within the controller.
Equivalent Airspeed Setpoint
Altitude Setpoint
Height Rate Setpoint
Altitude Controller
Airspeed Controller
TECS
pitch setpoint
throttle setpoint
\ No newline at end of file diff --git a/docs/assets/toolchain/gazebo_classic_takeoff.png b/docs/assets/toolchain/gazebo_classic_takeoff.png deleted file mode 100644 index 9bc9ff90d7..0000000000 Binary files a/docs/assets/toolchain/gazebo_classic_takeoff.png and /dev/null differ diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index a1bc71b818..a94d3c15ea 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -456,6 +456,7 @@ - [Vehicles](sim_gazebo_gz/vehicles.md) - [Advanced Lift Drag Tool](sim_gazebo_gz/tools_avl_automation.md) - [Worlds](sim_gazebo_gz/worlds.md) + - [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) - [Gazebo Classic Simulation](sim_gazebo_classic/index.md) @@ -488,12 +489,17 @@ - [Versioned](msg_docs/versioned_messages.md) - [ActuatorMotors](msg_docs/ActuatorMotors.md) - [ActuatorServos](msg_docs/ActuatorServos.md) + - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [ArmingCheckReply](msg_docs/ArmingCheckReply.md) - [ArmingCheckRequest](msg_docs/ArmingCheckRequest.md) - [BatteryStatus](msg_docs/BatteryStatus.md) - [ConfigOverrides](msg_docs/ConfigOverrides.md) + - [FixedWingLateralSetpoint](msg_docs/FixedWingLateralSetpoint.md) + - [FixedWingLongitudinalSetpoint](msg_docs/FixedWingLongitudinalSetpoint.md) - [GotoSetpoint](msg_docs/GotoSetpoint.md) - [HomePosition](msg_docs/HomePosition.md) + - [LateralControlConfiguration](msg_docs/LateralControlConfiguration.md) + - [LongitudinalControlConfiguration](msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](msg_docs/ManualControlSetpoint.md) - [ModeCompleted](msg_docs/ModeCompleted.md) - [RegisterExtComponentReply](msg_docs/RegisterExtComponentReply.md) @@ -522,10 +528,8 @@ - [ActuatorTest](msg_docs/ActuatorTest.md) - [AdcReport](msg_docs/AdcReport.md) - [Airspeed](msg_docs/Airspeed.md) - - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [AirspeedWind](msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](msg_docs/AutotuneAttitudeControlStatus.md) - - [Buffer128](msg_docs/Buffer128.md) - [ButtonEvent](msg_docs/ButtonEvent.md) - [CameraCapture](msg_docs/CameraCapture.md) - [CameraStatus](msg_docs/CameraStatus.md) @@ -564,6 +568,9 @@ - [FailsafeFlags](msg_docs/FailsafeFlags.md) - [FailureDetectorStatus](msg_docs/FailureDetectorStatus.md) - [FigureEightStatus](msg_docs/FigureEightStatus.md) + - [FixedWingLateralGuidanceStatus](msg_docs/FixedWingLateralGuidanceStatus.md) + - [FixedWingLateralStatus](msg_docs/FixedWingLateralStatus.md) + - [FixedWingRunwayControl](msg_docs/FixedWingRunwayControl.md) - [FlightPhaseEstimation](msg_docs/FlightPhaseEstimation.md) - [FollowTarget](msg_docs/FollowTarget.md) - [FollowTargetEstimator](msg_docs/FollowTargetEstimator.md) @@ -616,7 +623,6 @@ - [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) - [NavigatorStatus](msg_docs/NavigatorStatus.md) - [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) - - [NpfgStatus](msg_docs/NpfgStatus.md) - [ObstacleDistance](msg_docs/ObstacleDistance.md) - [OffboardControlMode](msg_docs/OffboardControlMode.md) - [OnboardComputerStatus](msg_docs/OnboardComputerStatus.md) @@ -652,13 +658,12 @@ - [RcParameterMap](msg_docs/RcParameterMap.md) - [RoverAttitudeSetpoint](msg_docs/RoverAttitudeSetpoint.md) - [RoverAttitudeStatus](msg_docs/RoverAttitudeStatus.md) - - [RoverMecanumGuidanceStatus](msg_docs/RoverMecanumGuidanceStatus.md) - - [RoverMecanumSetpoint](msg_docs/RoverMecanumSetpoint.md) - - [RoverMecanumStatus](msg_docs/RoverMecanumStatus.md) + - [RoverPositionSetpoint](msg_docs/RoverPositionSetpoint.md) - [RoverRateSetpoint](msg_docs/RoverRateSetpoint.md) - [RoverRateStatus](msg_docs/RoverRateStatus.md) - [RoverSteeringSetpoint](msg_docs/RoverSteeringSetpoint.md) - [RoverThrottleSetpoint](msg_docs/RoverThrottleSetpoint.md) + - [RoverVelocitySetpoint](msg_docs/RoverVelocitySetpoint.md) - [RoverVelocityStatus](msg_docs/RoverVelocityStatus.md) - [Rpm](msg_docs/Rpm.md) - [RtlStatus](msg_docs/RtlStatus.md) @@ -690,6 +695,7 @@ - [TelemetryStatus](msg_docs/TelemetryStatus.md) - [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) - [TimesyncStatus](msg_docs/TimesyncStatus.md) + - [TrajectorySetpoint6dof](msg_docs/TrajectorySetpoint6dof.md) - [TransponderReport](msg_docs/TransponderReport.md) - [TuneControl](msg_docs/TuneControl.md) - [UavcanParameterRequest](msg_docs/UavcanParameterRequest.md) @@ -713,13 +719,16 @@ - [WheelEncoders](msg_docs/WheelEncoders.md) - [Wind](msg_docs/Wind.md) - [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) + - [AirspeedValidatedV0](msg_docs/AirspeedValidatedV0.md) + - [VehicleAttitudeSetpointV0](msg_docs/VehicleAttitudeSetpointV0.md) - [VehicleStatusV0](msg_docs/VehicleStatusV0.md) - - [MAVLink Messaging](middleware/mavlink.md) + - [MAVLink Messaging](mavlink/index.md) - [Adding Messages](mavlink/adding_messages.md) - [Streaming Messages](mavlink/streaming_messages.md) - [Receiving Messages](mavlink/receiving_messages.md) - [Custom MAVLink Messages](mavlink/custom_messages.md) - - [Standard Modes Protocol](mavlink/standard_modes.md) + - [Protocols/Microservices](mavlink/protocols.md) + - [Standard Modes Protocol](mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) - [Modules & Commands](modules/modules_main.md) - [Autotune](modules/modules_autotune.md) @@ -736,6 +745,7 @@ - [Magnetometer](modules/modules_driver_magnetometer.md) - [Optical Flow](modules/modules_driver_optical_flow.md) - [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + - [Radio Control](modules/modules_driver_radio_control.md) - [Transponder](modules/modules_driver_transponder.md) - [Estimators](modules/modules_estimator.md) - [Simulations](modules/modules_simulation.md) @@ -845,6 +855,7 @@ - [Licenses](contribute/licenses.md) - [Releases](releases/index.md) - [main (alpha)](releases/main.md) + - [1.16 (release candidate)](releases/1.16.md) - [1.15 (stable)](releases/1.15.md) - [1.14](releases/1.14.md) - [1.13](releases/1.13.md) diff --git a/docs/en/_sidebar.md b/docs/en/_sidebar.md index 6d5a2976c7..16955fac10 100644 --- a/docs/en/_sidebar.md +++ b/docs/en/_sidebar.md @@ -42,8 +42,9 @@ - [MindRacer BNF & RTF](/complete_vehicles_mc/mindracer_BNF_RTF.md) - [MindRacer 210](/complete_vehicles_mc/mindracer210.md) - [NanoMind 110](/complete_vehicles_mc/nanomind110.md) - - [Holybro Kopis 2](/complete_vehicles_mc/holybro_kopis2.md) - [Bitcraze Crazyflie 2.1](/complete_vehicles_mc/crazyflie21.md) + - [Holybro Kopis 2](/complete_vehicles_mc/holybro_kopis2.md) + - [Amov F410 Drone](/complete_vehicles_mc/amov_F410_drone.md) - [Kits](/frames_multicopter/kits.md) - [X500 v2 (Pixhawk 6C)](/frames_multicopter/holybro_x500v2_pixhawk6c.md) - [X500 v2 (Pixhawk 5X)](/frames_multicopter/holybro_x500V2_pixhawk5x.md) @@ -166,7 +167,7 @@ - [AirMind MindPX](/flight_controller/mindpx.md) - [AirMind MindRacer](/flight_controller/mindracer.md) - [ARK Electronics ARKV6X](/flight_controller/ark_v6x.md) - - [ARK FPV Flight Controller](/flight_controller/ark_fpv.md) + - [ARK FPV Flight Controller](/flight_controller/ark_fpv.md) - [ARK Pi6X Flow Flight Controller](/flight_controller/ark_pi6x.md) - [CUAV X7](/flight_controller/cuav_x7.md) - [CUAV Nora](/flight_controller/cuav_nora.md) @@ -182,7 +183,7 @@ - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) - - [Holybro Kakute H7 Wing](flight_controller/kakuteh7-wing.md) + - [Holybro Kakute H7 Wing](/flight_controller/kakuteh7-wing.md) - [Holybro Durandal](/flight_controller/durandal.md) - [Wiring Quickstart](/assembly/quick_start_durandal.md) - [Holybro Pix32 v5](/flight_controller/holybro_pix32_v5.md) @@ -255,7 +256,7 @@ - [GNSS (GPS)](/gps_compass/index.md) - [ARK GPS (CAN)](/dronecan/ark_gps.md) - [ARK SAM GPS](/gps_compass/ark_sam_gps.md) - - [ARK TESEO GPS](/dronecan/ark_teseo_gps.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) - [CUAV NEO 3X GPS (CAN)](/gps_compass/gps_cuav_neo_3x.md) @@ -328,7 +329,9 @@ - [ARK Electron Microhard Serial Telemetry Radio](/telemetry/ark_microhard_serial.md) - [Holybro Microhard P900 Telemetry Radio](/telemetry/holybro_microhard_p900_radio.md) - [CUAV P8 Telemetry Radio](/telemetry/cuav_p8_radio.md) + - [J.Fi Wireless Telemetry Module](/telemetry/jfi_telemetry.md) - [HolyBro XBP9X - Discontinued](/telemetry/holybro_xbp9x_radio.md) + - [FrSky Telemetry](/peripherals/frsky_telemetry.md) - [TBS Crossfire (CRSF) Telemetry](/telemetry/crsf_telemetry.md) - [Satellite Comms (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) @@ -454,6 +457,7 @@ - [Vehicles](/sim_gazebo_gz/vehicles.md) - [Advanced Lift Drag Tool](/sim_gazebo_gz/tools_avl_automation.md) - [Worlds](/sim_gazebo_gz/worlds.md) + - [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) - [Gazebo Classic Simulation](/sim_gazebo_classic/index.md) @@ -713,6 +717,10 @@ - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) - [MAVLink Messaging](/middleware/mavlink.md) + - [Adding Messages](/mavlink/adding_messages.md) + - [Streaming Messages](/mavlink/streaming_messages.md) + - [Receiving Messages](/mavlink/receiving_messages.md) + - [Custom MAVLink Messages](/mavlink/custom_messages.md) - [Standard Modes Protocol](/mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](/middleware/uxrce_dds.md) - [Modules & Commands](/modules/modules_main.md) @@ -730,6 +738,7 @@ - [Magnetometer](/modules/modules_driver_magnetometer.md) - [Optical Flow](/modules/modules_driver_optical_flow.md) - [Rpm Sensor](/modules/modules_driver_rpm_sensor.md) + - [Radio Control](/modules/modules_driver_radio_control.md) - [Transponder](/modules/modules_driver_transponder.md) - [Estimators](/modules/modules_estimator.md) - [Simulations](/modules/modules_simulation.md) @@ -801,8 +810,10 @@ - [Test MC_05 - Indoor Flight (Manual Modes)](/test_cards/mc_05_indoor_flight_manual_modes.md) - [Unit Tests](/test_and_ci/unit_tests.md) - [Continuous Integration](/test_and_ci/continous_integration.md) - - [MAVSDK Integration Testing](/test_and_ci/integration_testing_mavsdk.md) - - [ROS Integration Testing](/test_and_ci/integration_testing.md) + - [Integration Testing](/test_and_ci/integration_testing.md) + - [MAVSDK Integration Testing](/test_and_ci/integration_testing_mavsdk.md) + - [PX4 ROS2 Interface Library Integration Testing](/test_and_ci/integration_testing_px4_ros2_interface.md) + - [ROS 1 Integration Testing](/test_and_ci/integration_testing_ros1_mavros.md) - [Docker Containers](/test_and_ci/docker.md) - [Maintenance](/test_and_ci/maintenance.md) - [Drone Apps & APIs](/robotics/index.md) @@ -840,4 +851,4 @@ - [1.15 (stable)](/releases/1.15.md) - [1.14](/releases/1.14.md) - [1.13](/releases/1.13.md) - - [1.12](/releases/1.12.md) \ No newline at end of file + - [1.12](/releases/1.12.md) diff --git a/docs/en/advanced_config/parameter_reference.md b/docs/en/advanced_config/parameter_reference.md index c0fedadfc9..191aeceafb 100644 --- a/docs/en/advanced_config/parameter_reference.md +++ b/docs/en/advanced_config/parameter_reference.md @@ -17304,14 +17304,6 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 0.2 | 1.0 | 0.05 | 0.4 | s -### FW_SPOILERS_LND (`FLOAT`) {#FW_SPOILERS_LND} - -Spoiler landing setting. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 1.0 | 0.01 | 0. | norm - ### FW_WR_FF (`FLOAT`) {#FW_WR_FF} Wheel steering rate feed forward. @@ -17378,6 +17370,16 @@ Reboot | minValue | maxValue | increment | default | unit ## FW Auto Landing +### FW_FLAPS_LND_SCL (`FLOAT`) {#FW_FLAPS_LND_SCL} + +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 + ### FW_LND_ABORT (`INT32`) {#FW_LND_ABORT} Bit mask to set the automatic landing abort conditions. @@ -17536,29 +17538,25 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 0 | 2 | | 1 | -## FW Geometry +### FW_SPOILERS_LND (`FLOAT`) {#FW_SPOILERS_LND} -### FW_WING_HEIGHT (`FLOAT`) {#FW_WING_HEIGHT} - -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) +Spoiler landing setting. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.0 | | 1 | 0.5 | m +  | 0.0 | 1.0 | 0.01 | 0. | norm -### FW_WING_SPAN (`FLOAT`) {#FW_WING_SPAN} +## FW Auto Takeoff -The aircraft's wing span (length from tip to tip). +### FW_FLAPS_TO_SCL (`FLOAT`) {#FW_FLAPS_TO_SCL} -This is used for limiting the roll setpoint near the ground. (if multiple wings, take the longest span) +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.1 | | 0.1 | 3.0 | m - -## FW Launch detection +  | 0.0 | 1.0 | 0.01 | 0.0 | norm ### FW_LAUN_AC_T (`FLOAT`) {#FW_LAUN_AC_T} @@ -17600,6 +17598,374 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 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 + +### FW_TKO_PITCH_MIN (`FLOAT`) {#FW_TKO_PITCH_MIN} + +Minimum pitch during takeoff. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | -5.0 | 30.0 | 0.5 | 10.0 | deg + +## FW General + +### FW_GPSF_LT (`INT32`) {#FW_GPSF_LT} + +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. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0 | 3600 | | 30 | s + +### FW_GPSF_R (`FLOAT`) {#FW_GPSF_R} + +GPS failure fixed roll angle. + +Roll angle in GPS failure loiter mode. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0.0 | 30.0 | 0.5 | 15.0 | deg + +### FW_POS_STK_CONF (`INT32`) {#FW_POS_STK_CONF} + +Custom stick configuration. + +Applies in manual Position and Altitude flight modes. + +**Bitmask:** + +- `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 | + +### FW_P_LIM_MAX (`FLOAT`) {#FW_P_LIM_MAX} + +Maximum pitch angle setpoint. + +Applies in any altitude controlled flight mode. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0.0 | 60.0 | 0.5 | 30.0 | deg + +### FW_P_LIM_MIN (`FLOAT`) {#FW_P_LIM_MIN} + +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 + +### FW_R_LIM (`FLOAT`) {#FW_R_LIM} + +Maximum roll angle setpoint. + +Applies in any altitude controlled flight mode. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 35.0 | 65.0 | 0.5 | 50.0 | deg + +### FW_THR_IDLE (`FLOAT`) {#FW_THR_IDLE} + +Idle throttle. + +This is the minimum throttle while on the ground ("landed") in auto modes. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0.0 | 0.4 | 0.01 | 0.0 | norm + +### FW_THR_MAX (`FLOAT`) {#FW_THR_MAX} + +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 + +### FW_THR_MIN (`FLOAT`) {#FW_THR_MIN} + +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. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0.0 | 1.0 | 0.01 | 0.0 | norm + +### FW_T_CLMB_R_SP (`FLOAT`) {#FW_T_CLMB_R_SP} + +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.5 | 15 | 0.01 | 3.0 | m/s + +### FW_T_SINK_R_SP (`FLOAT`) {#FW_T_SINK_R_SP} + +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.5 | 15 | 0.01 | 2.0 | m/s + +### FW_T_SPDWEIGHT (`FLOAT`) {#FW_T_SPDWEIGHT} + +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) + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0.0 | 2.0 | 1.0 | 1.0 | + +### FW_WING_HEIGHT (`FLOAT`) {#FW_WING_HEIGHT} + +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 + +### FW_WING_SPAN (`FLOAT`) {#FW_WING_SPAN} + +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 + +## FW Lateral Control + +### FW_PN_R_SLEW_MAX (`FLOAT`) {#FW_PN_R_SLEW_MAX} + +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 + +## FW Longitudinal Control + +### FW_GND_SPD_MIN (`FLOAT`) {#FW_GND_SPD_MIN} + +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 + +### FW_THR_SLEW_MAX (`FLOAT`) {#FW_THR_SLEW_MAX} + +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 | + +### 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 | + +### FW_T_F_ALT_ERR (`FLOAT`) {#FW_T_F_ALT_ERR} + +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 | + +### 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 | + +### FW_T_I_GAIN_PIT (`FLOAT`) {#FW_T_I_GAIN_PIT} + +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 | + +### 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 | + +### FW_T_RLL2THR (`FLOAT`) {#FW_T_RLL2THR} + +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. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 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 | + +### 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 + +### FW_T_STE_R_TC (`FLOAT`) {#FW_T_STE_R_TC} + +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 | + +### 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 | + +### FW_T_THR_DAMPING (`FLOAT`) {#FW_T_THR_DAMPING} + +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 | + +### FW_T_THR_INTEG (`FLOAT`) {#FW_T_THR_INTEG} + +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 | + +### FW_T_THR_LOW_HGT (`FLOAT`) {#FW_T_THR_LOW_HGT} + +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. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | -1 | | 1 | -1. | m + +### FW_T_VERT_ACC (`FLOAT`) {#FW_T_VERT_ACC} + +Maximum vertical acceleration. + +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 + +### FW_WIND_ARSP_SC (`FLOAT`) {#FW_WIND_ARSP_SC} + +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. + +Reboot | minValue | maxValue | increment | default | unit +--- | --- | --- | --- | --- | --- +  | 0 | | 0.01 | 0. | + ## FW NPFG Control ### NPFG_DAMPING (`FLOAT`) {#NPFG_DAMPING} @@ -17612,24 +17978,6 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 0.10 | 1.00 | 0.01 | 0.7 | -### NPFG_EN_MIN_GSP (`INT32`) {#NPFG_EN_MIN_GSP} - -Enable minimum forward ground speed maintaining excess wind handling logic. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | | | | Enabled (1) | - -### NPFG_GSP_MAX_TK (`FLOAT`) {#NPFG_GSP_MAX_TK} - -Maximum, minimum forward ground speed for track keeping in excess wind. - -The maximum value of the minimum forward ground speed that may be commanded by the track keeping excess wind handling logic. Commanded in full at the normalized track error fraction of the track error boundary and reduced to zero on track. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 10.0 | 0.5 | 5.0 | m/s - ### NPFG_LB_PERIOD (`INT32`) {#NPFG_LB_PERIOD} Enable automatic lower bound on the NPFG period. @@ -17680,14 +18028,6 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 0.1 | 1.0 | 0.01 | 0.32 | -### NPFG_TRACK_KEEP (`INT32`) {#NPFG_TRACK_KEEP} - -Enable track keeping excess wind handling logic. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | | | | Enabled (1) | - ### NPFG_UB_PERIOD (`INT32`) {#NPFG_UB_PERIOD} Enable automatic upper bound on the NPFG period. @@ -17698,64 +18038,18 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | | | | Enabled (1) | -### NPFG_WIND_REG (`INT32`) {#NPFG_WIND_REG} - -Enable wind excess regulation. - -Disabling this parameter further disables all other airspeed incrementation options. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | | | | Enabled (1) | - -## FW Path Control - -### FW_PN_R_SLEW_MAX (`FLOAT`) {#FW_PN_R_SLEW_MAX} - -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 - -### FW_POS_STK_CONF (`INT32`) {#FW_POS_STK_CONF} - -Custom stick configuration. - -Applies in manual Position and Altitude flight modes. - -**Bitmask:** - -- `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 | - -### FW_R_LIM (`FLOAT`) {#FW_R_LIM} - -Maximum roll angle setpoint. - -Applies in any altitude controlled flight mode. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 35.0 | 65.0 | 0.5 | 50.0 | deg - -### FW_TKO_PITCH_MIN (`FLOAT`) {#FW_TKO_PITCH_MIN} - -Minimum pitch during takeoff. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | -5.0 | 30.0 | 0.5 | 10.0 | deg - ## FW Performance +### FW_AIRSPD_FLP_SC (`FLOAT`) {#FW_AIRSPD_FLP_SC} + +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. | + ### FW_AIRSPD_MAX (`FLOAT`) {#FW_AIRSPD_MAX} Maximum Airspeed (CAS). @@ -17992,26 +18286,6 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | -0.5 | 0.5 | 0.01 | 0.0 | -### FW_FLAPS_LND_SCL (`FLOAT`) {#FW_FLAPS_LND_SCL} - -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 - -### FW_FLAPS_TO_SCL (`FLOAT`) {#FW_FLAPS_TO_SCL} - -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 - ### FW_MAN_P_SC (`FLOAT`) {#FW_MAN_P_SC} Manual pitch scale. @@ -18207,286 +18481,6 @@ Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 0.0 | 10 | 0.005 | 0.05 | %/rad/s -## FW TECS - -### FW_GND_SPD_MIN (`FLOAT`) {#FW_GND_SPD_MIN} - -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 - -### FW_P_LIM_MAX (`FLOAT`) {#FW_P_LIM_MAX} - -Maximum pitch angle setpoint. - -Applies in any altitude controlled flight mode. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 60.0 | 0.5 | 30.0 | deg - -### FW_P_LIM_MIN (`FLOAT`) {#FW_P_LIM_MIN} - -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 - -### FW_THR_IDLE (`FLOAT`) {#FW_THR_IDLE} - -Idle throttle. - -This is the minimum throttle while on the ground ("landed") in auto modes. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 0.4 | 0.01 | 0.0 | norm - -### FW_THR_MAX (`FLOAT`) {#FW_THR_MAX} - -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 - -### FW_THR_MIN (`FLOAT`) {#FW_THR_MIN} - -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. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 1.0 | 0.01 | 0.0 | norm - -### FW_THR_SLEW_MAX (`FLOAT`) {#FW_THR_SLEW_MAX} - -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 | - -### 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 - -### 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 | - -### FW_T_CLMB_R_SP (`FLOAT`) {#FW_T_CLMB_R_SP} - -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.5 | 15 | 0.01 | 3.0 | m/s - -### FW_T_F_ALT_ERR (`FLOAT`) {#FW_T_F_ALT_ERR} - -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 | - -### 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 | - -### FW_T_I_GAIN_PIT (`FLOAT`) {#FW_T_I_GAIN_PIT} - -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 | - -### 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 | - -### FW_T_RLL2THR (`FLOAT`) {#FW_T_RLL2THR} - -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. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 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 | - -### 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_SINK_R_SP (`FLOAT`) {#FW_T_SINK_R_SP} - -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.5 | 15 | 0.01 | 2.0 | m/s - -### FW_T_SPDWEIGHT (`FLOAT`) {#FW_T_SPDWEIGHT} - -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) - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 2.0 | 1.0 | 1.0 | - -### 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 - -### FW_T_STE_R_TC (`FLOAT`) {#FW_T_STE_R_TC} - -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 | - -### 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 | - -### FW_T_THR_DAMPING (`FLOAT`) {#FW_T_THR_DAMPING} - -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 | - -### FW_T_THR_INTEG (`FLOAT`) {#FW_T_THR_INTEG} - -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 | - -### FW_T_THR_LOW_HGT (`FLOAT`) {#FW_T_THR_LOW_HGT} - -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. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | -1 | | 1 | -1. | m - -### FW_T_VERT_ACC (`FLOAT`) {#FW_T_VERT_ACC} - -Maximum vertical acceleration. - -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 - -### FW_WIND_ARSP_SC (`FLOAT`) {#FW_WIND_ARSP_SC} - -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. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0 | | 0.01 | 0. | - ## Failure Detector ### FD_ACT_EN (`INT32`) {#FD_ACT_EN} @@ -23288,26 +23282,6 @@ Reboot | minValue | maxValue | increment | default | unit ## Mission -### FW_GPSF_LT (`INT32`) {#FW_GPSF_LT} - -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. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0 | 3600 | | 30 | s - -### FW_GPSF_R (`FLOAT`) {#FW_GPSF_R} - -GPS failure fixed roll angle. - -Roll angle in GPS failure loiter mode. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0.0 | 30.0 | 0.5 | 15.0 | deg - ### MIS_COMMAND_TOUT (`FLOAT`) {#MIS_COMMAND_TOUT} Timeout to allow the payload to execute the mission command. @@ -23957,7 +23931,7 @@ Limits the acceleration of the yaw setpoint to avoid large control output and mi Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 5 | 360 | 5 | 60. | deg/s^2 +  | 5 | 360 | 5 | 20. | deg/s^2 ### MPC_YAWRAUTO_MAX (`FLOAT`) {#MPC_YAWRAUTO_MAX} @@ -23967,7 +23941,7 @@ Limits the rate of change of the yaw setpoint to avoid large control output and Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 5 | 360 | 5 | 45. | deg/s +  | 5 | 360 | 5 | 60. | deg/s ## Multicopter Position Control @@ -28072,38 +28046,14 @@ Reboot | minValue | maxValue | increment | default | unit ## Runway Takeoff -### RWTO_HDG (`INT32`) {#RWTO_HDG} - -Specifies which heading should be held during the runway takeoff ground roll. - -0: airframe heading when takeoff is initiated 1: position control along runway direction (bearing defined from vehicle position on takeoff initiation to MAV_CMD_TAKEOFF position defined by operator) - -**Values:** - -- `0`: Airframe -- `1`: Runway - - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 0 | 1 | | 0 | - ### RWTO_MAX_THR (`FLOAT`) {#RWTO_MAX_THR} -Max throttle during runway takeoff. +Throttle during runway takeoff. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | ---   | 0.0 | 1.0 | 0.01 | 1.0 | norm -### RWTO_NPFG_PERIOD (`FLOAT`) {#RWTO_NPFG_PERIOD} - -NPFG period while steering on runway. - -Reboot | minValue | maxValue | increment | default | unit ---- | --- | --- | --- | --- | --- -  | 1.0 | 100.0 | 0.1 | 5.0 | s - ### RWTO_NUDGE (`INT32`) {#RWTO_NUDGE} Enable use of yaw stick for nudging the wheel during runway ground roll. @@ -28274,11 +28224,12 @@ This integer bitmask controls the set and rates of logged topics. The default al - `8`: Raw FIFO high-rate IMU (Gyro) - `9`: Raw FIFO high-rate IMU (Accel) - `10`: Mavlink tunnel message logging +- `11`: High rate sensors Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -✓ | 0 | 2047 | | 1 | +✓ | 0 | 4095 | | 1 | ### SDLOG_UTC_OFFSET (`INT32`) {#SDLOG_UTC_OFFSET} @@ -30755,7 +30706,7 @@ INA226 Power Monitor Config. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0 | 65535 | 1 | 18139 | +✓ | 0 | 65535 | 1 | 18139 | ### INA226_CURRENT (`FLOAT`) {#INA226_CURRENT} @@ -30763,7 +30714,7 @@ INA226 Power Monitor Max Current. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.1 | 200.0 | 0.1 | 164.0 | +✓ | 0.1 | 200.0 | 0.1 | 164.0 | ### INA226_SHUNT (`FLOAT`) {#INA226_SHUNT} @@ -30771,7 +30722,7 @@ INA226 Power Monitor Shunt. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.000000001 | 0.1 | .000000001 | 0.0005 | +✓ | 0.000000001 | 0.1 | .000000001 | 0.0005 | ### INA228_CONFIG (`INT32`) {#INA228_CONFIG} @@ -30779,7 +30730,7 @@ INA228 Power Monitor Config. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0 | 65535 | 1 | 63779 | +✓ | 0 | 65535 | 1 | 63779 | ### INA228_CURRENT (`FLOAT`) {#INA228_CURRENT} @@ -30787,7 +30738,7 @@ INA228 Power Monitor Max Current. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.1 | 327.68 | 0.1 | 327.68 | +✓ | 0.1 | 327.68 | 0.1 | 327.68 | ### INA228_SHUNT (`FLOAT`) {#INA228_SHUNT} @@ -30795,7 +30746,7 @@ INA228 Power Monitor Shunt. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.000000001 | 0.1 | .000000001 | 0.0005 | +✓ | 0.000000001 | 0.1 | .000000001 | 0.0005 | ### INA238_CURRENT (`FLOAT`) {#INA238_CURRENT} @@ -30803,7 +30754,7 @@ INA238 Power Monitor Max Current. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.1 | 327.68 | 0.1 | 327.68 | +✓ | 0.1 | 327.68 | 0.1 | 327.68 | ### INA238_SHUNT (`FLOAT`) {#INA238_SHUNT} @@ -30811,7 +30762,7 @@ INA238 Power Monitor Shunt. Reboot | minValue | maxValue | increment | default | unit --- | --- | --- | --- | --- | --- -  | 0.000000001 | 0.1 | .000000001 | 0.0003 | +✓ | 0.000000001 | 0.1 | .000000001 | 0.0005 | ### PCF8583_MAGNET (`INT32`) {#PCF8583_MAGNET} @@ -33642,10 +33593,11 @@ Vehicle type. **Values:** -- `0`: Multicopter +- `0`: Quadcopter - `1`: Fixed-Wing - `2`: Tailsitter - `3`: Standard VTOL +- `4`: Hexacopter Reboot | minValue | maxValue | increment | default | unit diff --git a/docs/en/config/safety.md b/docs/en/config/safety.md index e20991146f..af6c309cd4 100644 --- a/docs/en/config/safety.md +++ b/docs/en/config/safety.md @@ -187,7 +187,23 @@ The following settings also apply, but are not displayed in the QGC UI. ## Position (GNSS) Loss Failsafe -The _Position Loss Failsafe_ is triggered if the quality of the PX4 global position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. +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: +- 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). + +The relevant parameters shown below. + +| Parameter | Description | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| [EKF2_NOAID_TOUT](../advanced_config/parameter_reference.md#EKF2_NOAID_TOUT) | Maximum inertial dead-reckoning time, so the time after the last data sample was received of any sensor that constrains the velocity drift [microseconds]. | +| [COM_POS_FS_EPH](../advanced_config/parameter_reference.md#COM_POS_FS_EPH) | Horizontal position error threshold for hovering vehicles (Multicopters and VTOLs in hover). Fixed-wing vehicles have this value set to infinity.| + +### Position Loss Failsafe Action The failure action is controlled by [COM_POSCTL_NAVL](../advanced_config/parameter_reference.md#COM_POSCTL_NAVL), based on whether RC control is assumed to be available (and altitude information): diff --git a/docs/en/contribute/docs.md b/docs/en/contribute/docs.md index 2538e58184..0202b86914 100644 --- a/docs/en/contribute/docs.md +++ b/docs/en/contribute/docs.md @@ -174,11 +174,19 @@ Build the library locally to test that any changes you have made have rendered p 1. 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, on Windows command line you can enable VSCode as your default editor by entering: + For example, you can enable VSCode as your default editor by entering: - ```sh - set EDITOR=code - ``` + - Windows: + + ```sh + set EDITOR=code + ``` + + - Linux: + + ```sh + export EDITOR=code + ``` 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). diff --git a/docs/en/dev_log/log_encryption.md b/docs/en/dev_log/log_encryption.md index a2d3122390..bc93913d32 100644 --- a/docs/en/dev_log/log_encryption.md +++ b/docs/en/dev_log/log_encryption.md @@ -12,7 +12,7 @@ To use it you will need to build firmware with this feature enabled and then upl ::: ::: tip -Log encryption was has been improved in PX4 main (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). +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). diff --git a/docs/en/flight_controller/kakuteh7-wing.md b/docs/en/flight_controller/kakuteh7-wing.md index 5d9a29cea6..775eca078b 100644 --- a/docs/en/flight_controller/kakuteh7-wing.md +++ b/docs/en/flight_controller/kakuteh7-wing.md @@ -1,4 +1,6 @@ -# Holybro Kakute H7 V2 +# Holybro Kakute H743-Wing + + :::warning PX4 does not manufacture this (or any) autopilot. @@ -33,9 +35,7 @@ The board can be bought from one of the following shops (for example): | Buz-, Buz+ | Piezo buzzer | | | M1 to M14 | Motor signal outputs | | - - -## PX4 Bootloader Update +## PX4 Bootloader Update {#bootloader} The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). Before the PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. @@ -52,7 +52,7 @@ make holybro_kakuteh7-wing_default ## Installing PX4 Firmware ::: info -KakuteH7-wing is supported with PX4 master & PX4 v1.16 or newer.. +KakuteH7-wing is supported in PX4 v1.16 or newer. Prior to that release you will need to manually build and install the firmware. ::: diff --git a/docs/en/flight_modes_fw/land.md b/docs/en/flight_modes_fw/land.md index 3c294e95f0..43d8ff9294 100644 --- a/docs/en/flight_modes_fw/land.md +++ b/docs/en/flight_modes_fw/land.md @@ -45,6 +45,7 @@ Land mode behaviour can be configured using the parameters below. | [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | The loiter radius that the controller tracks for the whole landing sequence. | | [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | The flight path angle setpoint. | | [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | The airspeed setpoint. | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_LND_AIRSPD is below FW_AIRSPD_MIN. ## See Also diff --git a/docs/en/flight_modes_fw/takeoff.md b/docs/en/flight_modes_fw/takeoff.md index ea82c74d60..a59413394d 100644 --- a/docs/en/flight_modes_fw/takeoff.md +++ b/docs/en/flight_modes_fw/takeoff.md @@ -50,6 +50,7 @@ Parameters that affect both catapult/hand-launch and runway takeoffs: | [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | This is the minimum pitch angle setpoint during the climbout phase | | [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Maximum climb rate. | | [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Flaps setpoint during takeoff | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_TKO_AIRSPD is below FW_AIRSPD_MIN. | ::: info The vehicle always respects normal FW max/min throttle settings during takeoff ([FW_THR_MIN](../advanced_config/parameter_reference.md#FW_THR_MIN), [FW_THR_MAX](../advanced_config/parameter_reference.md#FW_THR_MAX)). @@ -101,7 +102,7 @@ The _runway takeoff mode_ has the following phases: ::: info For a smooth takeoff, the runway wheel controller possibly needs to be tuned. -It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)) and an outer loop that calculates heading setpoints from course errors and can be tuned via [RWTO_NPFG_PERIOD](#RWTO_NPFG_PERIOD). +It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)). ::: ### Parameters (Runway Takeoff) @@ -120,7 +121,6 @@ Runway takeoff is affected by the following parameters: | [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Enable wheel controller nudging while on the runway | | [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | The wingspan of the vehicle. Used to prevent wingstrikes. | | [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | The height of the wings above ground (ground clearance). Used to prevent wingstrikes. | -| [RWTO_NPFG_PERIOD](../advanced_config/parameter_reference.md#RWTO_NPFG_PERIOD) | L1 period while steering on runway. Increase for less aggressive response to course errors. | ## See Also diff --git a/docs/en/flight_modes_rover/ackermann.md b/docs/en/flight_modes_rover/ackermann.md index 4115252e4e..d19f24eb3e 100644 --- a/docs/en/flight_modes_rover/ackermann.md +++ b/docs/en/flight_modes_rover/ackermann.md @@ -135,7 +135,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | Command | Description | | ------------------- | ------------------------------------------------------------ | ------------------------------------------------- | diff --git a/docs/en/flight_modes_rover/differential.md b/docs/en/flight_modes_rover/differential.md index 8917ad3924..78548e54ef 100644 --- a/docs/en/flight_modes_rover/differential.md +++ b/docs/en/flight_modes_rover/differential.md @@ -114,7 +114,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | Command | Description | | ------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- | diff --git a/docs/en/flight_modes_rover/mecanum.md b/docs/en/flight_modes_rover/mecanum.md index 3286d42328..fc5783f3dc 100644 --- a/docs/en/flight_modes_rover/mecanum.md +++ b/docs/en/flight_modes_rover/mecanum.md @@ -139,7 +139,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | Command | Description | | ------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------- | diff --git a/docs/en/frames_plane/reptile_dragon_2.md b/docs/en/frames_plane/reptile_dragon_2.md index 0aaa509958..ceed4a5854 100644 --- a/docs/en/frames_plane/reptile_dragon_2.md +++ b/docs/en/frames_plane/reptile_dragon_2.md @@ -314,7 +314,7 @@ Access to this cable can be accomplished by simply removing the rear hatch and u ## Firmware Build -You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. +You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver_radio_control.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. These require some custom configuration to enable. diff --git a/docs/en/frames_rover/ackermann.md b/docs/en/frames_rover/ackermann.md index f3f4497a60..8ef32c8496 100644 --- a/docs/en/frames_rover/ackermann.md +++ b/docs/en/frames_rover/ackermann.md @@ -1,6 +1,6 @@ # Ackermann Rovers - + An _Ackermann rover_ controls its direction by pointing the front wheels in the direction of travel — the [Ackermann steering geometry](https://en.wikipedia.org/wiki/Ackermann_steering_geometry) compensates for the fact that wheels on the inside and outside of the turn move at different rates. This kind of steering is used on most commercial vehicles, including cars, trucks etc. diff --git a/docs/en/frames_rover/differential.md b/docs/en/frames_rover/differential.md index a74fbd1d50..95ffe04993 100644 --- a/docs/en/frames_rover/differential.md +++ b/docs/en/frames_rover/differential.md @@ -1,6 +1,6 @@ # Differential Rovers - + A differential rover's motion is controlled using a differential drive mechanism, where the left and right wheel speeds are adjusted independently to achieve the desired forward speed and yaw rate. Forward motion is achieved by driving both wheels at the same speed in the same direction. diff --git a/docs/en/frames_rover/mecanum.md b/docs/en/frames_rover/mecanum.md index 7d9a249156..548e7bcf4c 100644 --- a/docs/en/frames_rover/mecanum.md +++ b/docs/en/frames_rover/mecanum.md @@ -1,6 +1,6 @@ # Mecanum Rovers - + A Mecanum rover is a type of mobile robot that uses Mecanum wheels to achieve omnidirectional movement. These wheels are unique because they have rollers mounted at a 45-degree angle around their circumference, allowing the rover to move not only forward and backward but also side-to-side and diagonally without needing to rotate first. Each wheel is driven by its own motor, and by controlling the speed and direction of each motor, the rover can move in any direction or spin in place. diff --git a/docs/en/mavlink/index.md b/docs/en/mavlink/index.md new file mode 100644 index 0000000000..fd364c33a2 --- /dev/null +++ b/docs/en/mavlink/index.md @@ -0,0 +1,89 @@ +# MAVLink Messaging + +[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. + +PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. + +This topic provides a brief overview of fundamental MAVLink concepts, such as messages, commands, and microservices. +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) +- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) +- [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Protocols/Microservices](../mavlink/protocols.md) + +::: info +We do not yet cover _command_ handling and sending, or how to implement your own microservices. +::: + +## MAVLink Overview + +MAVLink is a lightweight protocol that was designed for efficiently sending messages over unreliable low-bandwidth radio links. + +_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. +They are deliberately lightweight, with a constrained size, and no semantics for resending and acknowledgement. +Stand-alone messages are commonly used for streaming telemetry or status information, and for sending commands where no acknowledgement is required - such as setpoint commands sent at high rate. + +[Microservices](../mavlink/protocols.md) are "meta protocols" built on top of MAVLink messages. +They are used to communicate information that cannot be sent in a single message. + +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) is a service for sending commands that may need acknowledgement and retransmission (quality of service). +Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. +The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. +The command is automatically resent a number of times if no acknowledgment is received. +Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. + +Others services include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html), [Parameter Protocol](https://mavlink.io/en/services/parameter.html), and [Mission Protocol](https://mavlink.io/en/services/mission.html). +For more information on what PX4 supports see [Microservices](../mavlink/protocols.md). + +MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). +The MAVLink toolchain includes code generators that create programming-language-specific libraries from these definitions for sending and receiving messages. +Note that most generated libraries do not create code to implement microservices. + +The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): + +- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. + The definitions move to `common.xml` if accepted following testing. +- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. + These are supported by many flight stacks, ground stations, and MAVLink peripherals. + Flight stacks that use these definitions are more likely to interoperate. +- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. + They are present on the vast majority of flight stacks and implemented in the same way. +- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. + +The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. + +The protocol relies on each end of the communication having a shared definition of what messages are being sent. +What this means is that in order to communicate both ends of the communication must use libraries generated from the same XML definition. + + + +## PX4 and MAVLink + +PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. +In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. + +::: info +To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). +During development you can use definitions in `development.xml`. +You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. +::: + +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/). + +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`: + +- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). + You can change this to any other definition file, but the file must include `common.xml`. +- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). + +The files are generated into the build directory: `/build//mavlink/`. diff --git a/docs/en/mavlink/protocols.md b/docs/en/mavlink/protocols.md new file mode 100644 index 0000000000..9dac078fb9 --- /dev/null +++ b/docs/en/mavlink/protocols.md @@ -0,0 +1,51 @@ +# MAVLink Microservices (Protocols) + +MAVLink "microservices" are a protocols that use multiple messages exchanged between components to communicate more complicated information. +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) provides an efficient mechanism for packaging a command in a (particular) message and receiving acknowledgement of the command in another message. + +MAVLink microservices are documented the [MAVLink Guide](https://mavlink.io/en/services/) (this is not exhaustive: not all messages are grouped into protocols and not all protocols are documented). + +This section lists the services known to be supported/not supported by PX4 in this version. + +## Supported Microservices + +These services are known to be supported in some form: + +- [Battery Protocol](https://mavlink.io/en/services/battery.html) + - [BATTERY_STATUS](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) and [BATTERY_INFO](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) are streamed. +- Camera Protocols + - [Camera Protocol v2](https://mavlink.io/en/services/camera.html) + - [Camera Definition](https://mavlink.io/en/services/camera_def.html) +- [Command Protocol](https://mavlink.io/en/services/command.html) +- [Component Metadata Protocol](https://mavlink.io/en/services/component_information.html) +- [Events Interface](https://mavlink.io/en/services/events.html) +- [File Transfer Protocol (FTP)](https://mavlink.io/en/services/ftp.html) +- Gimbal Protocols + - [Gimbal Protocol v2](https://mavlink.io/en/services/gimbal_v2.html) + - Can be enabled by [Gimbal Configuration](../advanced/gimbal_control.md#mavlink-gimbal-mnt-mode-out-mavlink) + - PX4 an act as a MAVLink Gimbal for one FC-connected Gimbal +- [Heartbeat/Connection Protocol](https://mavlink.io/en/services/heartbeat.html) +- [High Latency Protocol](https://mavlink.io/en/services/high_latency.html) — PX4 streams [HIGH_LATENCY2](https://mavlink.io/en/messages/common.html#HIGH_LATENCY2) +- [Image Transmission Protocol](https://mavlink.io/en/services/image_transmission.html) +- [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) +- [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)) +- [Parameter Protocol](https://mavlink.io/en/services/parameter.html) +- [Parameter Protocol Extended](https://mavlink.io/en/services/parameter_ext.html) — Allows setting string parameters. Used for setting string parameters set in camera definition files. +- [Payload Protocol](https://mavlink.io/en/services/payload.html) +- [Ping Protocol](https://mavlink.io/en/services/ping.html) +- [Standard Modes Protocol](../mavlink/standard_modes.md) +- [Terrain Protocol](https://mavlink.io/en/services/terrain.html) +- [Time Synchronization](https://mavlink.io/en/services/timesync.html) +- [Traffic Management (UTM/ADS-B)](https://mavlink.io/en/services/traffic_management.html) +- [Arm Authorization Protocol](https://mavlink.io/en/services/arm_authorization.html) + +## Unsupported + +These services are not supported/used by PX4: + +- [Illuminator Protocol](https://mavlink.io/en/services/illuminator.html) +- [Tunnel Protocol](https://mavlink.io/en/services/tunnel.html) diff --git a/docs/en/middleware/mavlink.md b/docs/en/middleware/mavlink.md index f79efa9c0b..c88fc7840e 100644 --- a/docs/en/middleware/mavlink.md +++ b/docs/en/middleware/mavlink.md @@ -1,87 +1 @@ -# MAVLink Messaging - -[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. - -PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. - -This topic provides a brief overview of fundamental MAVLink concepts, such as messages, commands, and microservices. -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) -- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) -- [Custom MAVLink Messages](../mavlink/custom_messages.md) - -::: info -We do not yet cover _command_ handling and sending, or how to implement your own microservices. -::: - -## MAVLink Overview - -MAVLink is a lightweight protocol that was designed for efficiently sending messages over unreliable low-bandwidth radio links. - -_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. -They are deliberately lightweight, with a constrained size, and no semantics for resending and acknowledgement. -Stand-alone messages are commonly used for streaming telemetry or status information, and for sending commands where no acknowledgement is required - such as setpoint commands sent at high rate. - -The [Command Protocol](https://mavlink.io/en/services/command.html) is a higher level protocol for sending commands that may need acknowledgement. -Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. -The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. -The command is resent automatically if no acknowledgment is received. -Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. - -[Microservices](https://mavlink.io/en/services/) are other higher level protocols built on top of MAVLink messages. -They are used to communicate information that cannot be sent in a single message, and to deliver features such as reliable communication. -The command protocol described above is one such service. -Others include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html) and [Mission Protocol](https://mavlink.io/en/services/mission.html). - -MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). -The MAVLink toolchain includes code generators that create programming-language-specific libraries from these definitions for sending and receiving messages. -Note that most generated libraries do not create code to implement microservices. - -The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): - -- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. - The definitions move to `common.xml` if accepted following testing. -- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. - These are supported by many flight stacks, ground stations, and MAVLink peripherals. - Flight stacks that use these definitions are more likely to interoperate. -- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. - They are present on the vast majority of flight stacks and implemented in the same way. -- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. - -The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. - -The protocol relies on each end of the communication having a shared definition of what messages are being sent. -What this means is that in order to communicate both ends of the communication must use libraries generated from the same XML definition. - - - -## PX4 and MAVLink - -PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. -In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. - -::: info -To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). -During development you can use definitions in `development.xml`. -You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. -::: - -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/). - -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`: - -- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). - You can change this to any other definition file, but the file must include `common.xml`. -- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). - -The files are generated into the build directory: `/build//mavlink/`. + diff --git a/docs/en/middleware/uorb.md b/docs/en/middleware/uorb.md index e5f61f2567..a164abadae 100644 --- a/docs/en/middleware/uorb.md +++ b/docs/en/middleware/uorb.md @@ -116,9 +116,9 @@ As there are external tools using uORB messages from log files, such as [Flight ## Message Versioning - + -Optional message versioning was introduced in the `main` branch (planned for PX4 v1.16+) to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. +Optional message versioning was introduced PX4 v1.16 to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. Versioned messages are designed to remain more stable over time compared to their non-versioned counterparts, as they are intended to be used across multiple releases of PX4 and external systems, ensuring greater compatibility over longer periods. Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, where `x` corresponds to the current version of the message. diff --git a/docs/en/middleware/uxrce_dds.md b/docs/en/middleware/uxrce_dds.md index 1872c447d3..5af708102b 100644 --- a/docs/en/middleware/uxrce_dds.md +++ b/docs/en/middleware/uxrce_dds.md @@ -423,14 +423,17 @@ publications: - topic: /fmu/out/collision_constraints type: px4_msgs::msg::CollisionConstraints + rate_limit: 50. # Limit max publication rate to 50 Hz ... - topic: /fmu/out/vehicle_odometry type: px4_msgs::msg::VehicleOdometry + # Use default publication rate limit of 100 Hz - topic: /fmu/out/vehicle_status type: px4_msgs::msg::VehicleStatus + rate_limit: 5. - topic: /fmu/out/vehicle_trajectory_waypoint_desired type: px4_msgs::msg::VehicleTrajectoryWaypoint @@ -465,6 +468,8 @@ Each (`topic`,`type`) pairs defines: - `/fmu/out/` for topics that are _published_ by PX4. - `/fmu/in/` for topics that are _subscribed_ by PX4. 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. `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. 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. diff --git a/docs/en/modules/modules_autotune.md b/docs/en/modules/modules_autotune.md index 69df6b4280..2292dd7494 100644 --- a/docs/en/modules/modules_autotune.md +++ b/docs/en/modules/modules_autotune.md @@ -1,14 +1,17 @@ # Modules Reference: Autotune + + ## fw_autotune_attitude_control + Source: [modules/fw_autotune_attitude_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_autotune_attitude_control) ### Description - -### Usage +### Usage {#fw_autotune_attitude_control_usage} + ``` fw_autotune_attitude_control [arguments...] Commands: @@ -19,15 +22,17 @@ fw_autotune_attitude_control [arguments...] status print status info ``` + ## mc_autotune_attitude_control + Source: [modules/mc_autotune_attitude_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mc_autotune_attitude_control) ### Description - -### Usage +### Usage {#mc_autotune_attitude_control_usage} + ``` mc_autotune_attitude_control [arguments...] Commands: diff --git a/docs/en/modules/modules_command.md b/docs/en/modules/modules_command.md index 4a37e7e5c5..4bba93f042 100644 --- a/docs/en/modules/modules_command.md +++ b/docs/en/modules/modules_command.md @@ -1,6 +1,9 @@ # Modules Reference: Command + + ## actuator_test + Source: [systemcmds/actuator_test](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/actuator_test) @@ -8,8 +11,8 @@ Utility to test actuators. WARNING: remove all props before using this command. - -### Usage +### Usage {#actuator_test_usage} + ``` actuator_test [arguments...] Commands: @@ -27,12 +30,14 @@ actuator_test [arguments...] iterate-servos Iterate all servos deflecting one after the other ``` + ## bl_update + Source: [systemcmds/bl_update](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bl_update) Utility to flash the bootloader from a file - -### Usage +### Usage {#bl_update_usage} + ``` bl_update [arguments...] setopt Set option bits to unlock the FLASH (only needed if in locked @@ -40,27 +45,33 @@ bl_update [arguments...] Bootloader bin file ``` + ## bsondump + Source: [systemcmds/bsondump](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bsondump) Utility to read BSON from a file and print or output document size. - -### Usage +### Usage {#bsondump_usage} + ``` bsondump [arguments...] The BSON file to decode and print. ``` + ## dumpfile + Source: [systemcmds/dumpfile](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dumpfile) Dump file utility. Prints file size and contents in binary mode (don't replace LF with CR LF) to stdout. - -### Usage +### Usage {#dumpfile_usage} + ``` dumpfile [arguments...] File to dump ``` + ## dyn + Source: [systemcmds/dyn](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dyn) @@ -73,14 +84,16 @@ dyn ./hello.px4mod start ``` - -### Usage +### Usage {#dyn_usage} + ``` dyn [arguments...] File containing the module [arguments...] Arguments to the module ``` + ## failure + Source: [systemcmds/failure](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/failure) @@ -95,8 +108,8 @@ Test the GPS failsafe by stopping GPS: failure gps off - -### Usage +### Usage {#failure_usage} + ``` failure [arguments...] help Show this help text @@ -107,7 +120,9 @@ failure [arguments...] [-i ] sensor instance (0=all) default: 0 ``` + ## gpio + Source: [systemcmds/gpio](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/gpio) @@ -136,8 +151,8 @@ gpio write /dev/gpio1 1 ``` - -### Usage +### Usage {#gpio_usage} + ``` gpio [arguments...] read @@ -151,15 +166,17 @@ gpio [arguments...] [PUSHPULL|OPENDRAIN] Pushpull/Opendrain [--force] Force (ignore board gpio list) ``` + ## hardfault_log + Source: [systemcmds/hardfault_log](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log) Hardfault utility Used in startup scripts to handle hardfaults - -### Usage +### Usage {#hardfault_log_usage} + ``` hardfault_log [arguments...] Commands: @@ -180,27 +197,33 @@ hardfault_log [arguments...] reset Reset the reboot counter ``` + ## hist + Source: [systemcmds/hist](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hist) Command-line tool to show the px4 message history. There are no arguments. - -### Usage +### Usage {#hist_usage} + ``` hist [arguments...] ``` + ## i2cdetect + Source: [systemcmds/i2cdetect](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/i2cdetect) Utility to scan for I2C devices on a particular bus. - -### Usage +### Usage {#i2cdetect_usage} + ``` i2cdetect [arguments...] [-b ] I2C bus default: 1 ``` + ## led_control + Source: [systemcmds/led_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/led_control) @@ -220,8 +243,8 @@ led_control blink -c blue -l 0 -n 5 ``` - -### Usage +### Usage {#led_control_usage} + ``` led_control [arguments...] Commands: @@ -251,7 +274,9 @@ led_control [arguments...] [-p ] Priority default: 2 ``` + ## listener + Source: [systemcmds/topic_listener](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/topic_listener) @@ -259,8 +284,8 @@ Utility to listen on uORB topics and print the data to the console. The listener can be exited any time by pressing Ctrl+C, Esc, or Q. - -### Usage +### Usage {#listener_usage} + ``` listener [arguments...] Commands: @@ -272,23 +297,27 @@ listener [arguments...] [-r ] Subscription rate (unlimited if 0) default: 0 ``` + ## mfd + Source: [systemcmds/mft](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft) Utility interact with the manifest - -### Usage +### Usage {#mfd_usage} + ``` mfd [arguments...] Commands: query Returns true if not existed ``` + ## mft_cfg + Source: [systemcmds/mft_cfg](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft_cfg) Tool to set and get manifest configuration - -### Usage +### Usage {#mft_cfg_usage} + ``` mft_cfg [arguments...] Commands: @@ -301,12 +330,14 @@ mft_cfg [arguments...] -i argument to set extended hardware id (id == version for , id == revision for ) ``` + ## mtd + Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) - -### Usage +### Usage {#mtd_usage} + ``` mtd [arguments...] Commands: @@ -326,7 +357,9 @@ mtd [arguments...] [ [ ...]] Partition names (eg. /fs/mtd_params), use system default if not provided ``` + ## nshterm + Source: [systemcmds/nshterm](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/nshterm) Start an NSH shell on a given port. @@ -334,13 +367,15 @@ Start an NSH shell on a given port. This was previously used to start a shell on the USB serial port. Now there runs mavlink, and it is possible to use a shell over mavlink. - -### Usage +### Usage {#nshterm_usage} + ``` nshterm [arguments...] Device on which to start the shell (eg. /dev/ttyACM0) ``` + ## param + Source: [systemcmds/param](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/param) @@ -368,8 +403,8 @@ param set SYS_AUTOCONFIG 1 reboot ``` - -### Usage +### Usage {#param_usage} + ``` param [arguments...] Commands: @@ -436,7 +471,9 @@ param [arguments...] find Show index of a param param name ``` + ## payload_deliverer + Source: [modules/payload_deliverer](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/payload_deliverer) @@ -445,8 +482,8 @@ Handles payload delivery with either Gripper or a Winch with an appropriate time and communicates back the delivery result as an acknowledgement internally - -### Usage +### Usage {#payload_deliverer_usage} + ``` payload_deliverer [arguments...] Commands: @@ -462,12 +499,14 @@ payload_deliverer [arguments...] status print status info ``` + ## perf + Source: [systemcmds/perf](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/perf) Tool to print performance counters - -### Usage +### Usage {#perf_usage} + ``` perf [arguments...] reset Reset all counters @@ -476,24 +515,28 @@ perf [arguments...] Prints all performance counters if no arguments given ``` + ## reboot + Source: [systemcmds/reboot](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/reboot) Reboot the system - -### Usage +### Usage {#reboot_usage} + ``` reboot [arguments...] [-b] Reboot into bootloader [-i] Reboot into ISP (1st stage bootloader) [lock|unlock] Take/release the shutdown lock (for testing) ``` + ## sd_bench + Source: [systemcmds/sd_bench](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_bench) Test the speed of an SD Card - -### Usage +### Usage {#sd_bench_usage} + ``` sd_bench [arguments...] [-b ] Block size for each read/write @@ -508,12 +551,14 @@ sd_bench [arguments...] [-U] Test performance with forced byte unaligned data [-v] Verify data and block number ``` + ## sd_stress + Source: [systemcmds/sd_stress](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_stress) Test operations on an SD Card - -### Usage +### Usage {#sd_stress_usage} + ``` sd_stress [arguments...] [-r ] Number of runs @@ -521,15 +566,17 @@ sd_stress [arguments...] [-b ] Number of bytes default: 100 ``` + ## serial_passthru + Source: [systemcmds/serial_passthru](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/serial_passthru) Pass data from one device to another. This can be used to use u-center connected to USB with a GPS on a serial port. - -### Usage +### Usage {#serial_passthru_usage} + ``` serial_passthru [arguments...] -e External device path @@ -540,7 +587,9 @@ serial_passthru [arguments...] default: 115200 [-t] Track the External devices baudrate on internal device ``` + ## system_time + Source: [systemcmds/system_time](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/system_time) @@ -556,8 +605,8 @@ system_time set 1600775044 system_time get ``` - -### Usage +### Usage {#system_time_usage} + ``` system_time [arguments...] Commands: @@ -565,32 +614,38 @@ system_time [arguments...] get Get the system time ``` + ## top + Source: [systemcmds/top](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/top) Monitor running processes and their CPU, stack usage, priority and state - -### Usage +### Usage {#top_usage} + ``` top [arguments...] once print load only once ``` + ## usb_connected + Source: [systemcmds/usb_connected](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/usb_connected) Utility to check if USB is connected. Was previously used in startup scripts. A return value of 0 means USB is connected, 1 otherwise. - -### Usage +### Usage {#usb_connected_usage} + ``` usb_connected [arguments...] ``` + ## ver + Source: [systemcmds/ver](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/ver) Tool to print various version information - -### Usage +### Usage {#ver_usage} + ``` ver [arguments...] Commands: diff --git a/docs/en/modules/modules_communication.md b/docs/en/modules/modules_communication.md index 45670a0018..840e9af3be 100644 --- a/docs/en/modules/modules_communication.md +++ b/docs/en/modules/modules_communication.md @@ -1,11 +1,14 @@ # Modules Reference: Communication + + ## frsky_telemetry + Source: [drivers/telemetry/frsky_telemetry](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/frsky_telemetry) FrSky Telemetry support. Auto-detects D or S.PORT protocol. - -### Usage +### Usage {#frsky_telemetry_usage} + ``` frsky_telemetry [arguments...] Commands: @@ -22,7 +25,9 @@ frsky_telemetry [arguments...] status ``` + ## mavlink + Source: [modules/mavlink](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mavlink) @@ -57,8 +62,8 @@ mavlink start -u 14556 -r 1000000 mavlink stream -u 14556 -s HIGHRES_IMU -r 50 ``` - -### Usage +### Usage {#mavlink_usage} + ``` mavlink [arguments...] Commands: @@ -113,7 +118,9 @@ mavlink [arguments...] boot_complete Enable sending of messages. (Must be) called as last step in startup script. ``` + ## uorb + Source: [systemcmds/uorb](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/uorb) @@ -137,8 +144,8 @@ Monitor topic publication rates. Besides `top`, this is an important command for uorb top ``` - -### Usage +### Usage {#uorb_usage} + ``` uorb [arguments...] Commands: diff --git a/docs/en/modules/modules_controller.md b/docs/en/modules/modules_controller.md index 580bb33b11..049a5659df 100644 --- a/docs/en/modules/modules_controller.md +++ b/docs/en/modules/modules_controller.md @@ -1,6 +1,9 @@ # Modules Reference: Controller + + ## airship_att_control + Source: [modules/airship_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/airship_att_control) @@ -15,8 +18,8 @@ Currently it is feeding the `manual_control_setpoint` topic directly to the actu To reduce control latency, the module directly polls on the gyro topic published by the IMU driver. - -### Usage +### Usage {#airship_att_control_usage} + ``` airship_att_control [arguments...] Commands: @@ -26,7 +29,9 @@ airship_att_control [arguments...] status print status info ``` + ## control_allocator + Source: [modules/control_allocator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/control_allocator) @@ -34,8 +39,8 @@ Source: [modules/control_allocator](https://github.com/PX4/PX4-Autopilot/tree/ma This implements control allocation. It takes torque and thrust setpoints as inputs and outputs actuator setpoint messages. - -### Usage +### Usage {#control_allocator_usage} + ``` control_allocator [arguments...] Commands: @@ -45,7 +50,9 @@ control_allocator [arguments...] status print status info ``` + ## flight_mode_manager + Source: [modules/flight_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/flight_mode_manager) @@ -54,8 +61,8 @@ This implements the setpoint generation for all modes. It takes the current mode and outputs setpoints for controllers. - -### Usage +### Usage {#flight_mode_manager_usage} + ``` flight_mode_manager [arguments...] Commands: @@ -65,7 +72,9 @@ flight_mode_manager [arguments...] status print status info ``` + ## fw_att_control + Source: [modules/fw_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_att_control) @@ -73,8 +82,8 @@ Source: [modules/fw_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/ fw_att_control is the fixed wing attitude controller. - -### Usage +### Usage {#fw_att_control_usage} + ``` fw_att_control [arguments...] Commands: @@ -85,18 +94,20 @@ fw_att_control [arguments...] status print status info ``` -## fw_pos_control -Source: [modules/fw_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_pos_control) + +## fw_lat_lon_control + +Source: [modules/fw_lateral_longitudinal_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_lateral_longitudinal_control) ### Description -fw_pos_control is the fixed-wing position controller. +fw_lat_lon_control computes attitude and throttle setpoints from lateral and longitudinal control setpoints. - -### Usage +### Usage {#fw_lat_lon_control_usage} + ``` -fw_pos_control [arguments...] +fw_lat_lon_control [arguments...] Commands: start [vtol] VTOL mode @@ -105,7 +116,32 @@ fw_pos_control [arguments...] status print status info ``` + +## fw_mode_manager + +Source: [modules/fw_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_mode_manager) + + +### Description +This implements the setpoint generation for all PX4-internal fixed-wing modes, height-rate control and higher. +It takes the current mode state of the vehicle as input and outputs setpoints consumed by the fixed-wing +lateral-longitudinal controller and and controllers below that (attitude, rate). + + +### Usage {#fw_mode_manager_usage} + +``` +fw_mode_manager [arguments...] + Commands: + start + + stop + + status print status info +``` + ## fw_rate_control + Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_rate_control) @@ -113,8 +149,8 @@ Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main fw_rate_control is the fixed-wing rate controller. - -### Usage +### Usage {#fw_rate_control_usage} + ``` fw_rate_control [arguments...] Commands: @@ -125,7 +161,9 @@ fw_rate_control [arguments...] status print status info ``` + ## mc_att_control + Source: [modules/mc_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mc_att_control) @@ -143,8 +181,8 @@ Institute for Dynamic Systems and Control (IDSC), ETH Zurich https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/154099/eth-7387-01.pdf - -### Usage +### Usage {#mc_att_control_usage} + ``` mc_att_control [arguments...] Commands: @@ -155,7 +193,9 @@ mc_att_control [arguments...] status print status info ``` + ## mc_pos_control + Source: [modules/mc_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mc_pos_control) @@ -167,8 +207,8 @@ Output of the velocity controller is thrust vector that is split to thrust direc The controller doesn't use Euler angles for its work, they are generated only for more human-friendly control and logging. - -### Usage +### Usage {#mc_pos_control_usage} + ``` mc_pos_control [arguments...] Commands: @@ -179,7 +219,9 @@ mc_pos_control [arguments...] status print status info ``` + ## mc_rate_control + Source: [modules/mc_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mc_rate_control) @@ -190,8 +232,8 @@ via `manual_control_setpoint` topic) as inputs and outputs actuator control mess The controller has a PID loop for angular rate error. - -### Usage +### Usage {#mc_rate_control_usage} + ``` mc_rate_control [arguments...] Commands: @@ -202,7 +244,9 @@ mc_rate_control [arguments...] status print status info ``` + ## navigator + Source: [modules/navigator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/navigator) @@ -219,8 +263,8 @@ Navigator publishes position setpoint triplets (`position_setpoint_triplet_s`), controller. - -### Usage +### Usage {#navigator_usage} + ``` navigator [arguments...] Commands: @@ -234,15 +278,17 @@ navigator [arguments...] status print status info ``` + ## rover_ackermann + Source: [modules/rover_ackermann](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/rover_ackermann) ### Description Rover ackermann module. - -### Usage +### Usage {#rover_ackermann_usage} + ``` rover_ackermann [arguments...] Commands: @@ -252,15 +298,17 @@ rover_ackermann [arguments...] status print status info ``` + ## rover_differential + Source: [modules/rover_differential](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/rover_differential) ### Description Rover differential module. - -### Usage +### Usage {#rover_differential_usage} + ``` rover_differential [arguments...] Commands: @@ -270,15 +318,17 @@ rover_differential [arguments...] status print status info ``` + ## rover_mecanum + Source: [modules/rover_mecanum](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/rover_mecanum) ### Description Rover mecanum module. - -### Usage +### Usage {#rover_mecanum_usage} + ``` rover_mecanum [arguments...] Commands: @@ -288,7 +338,9 @@ rover_mecanum [arguments...] status print status info ``` + ## rover_pos_control + Source: [modules/rover_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/rover_pos_control) @@ -313,8 +365,8 @@ rover_pos_control stop ``` - -### Usage +### Usage {#rover_pos_control_usage} + ``` rover_pos_control [arguments...] Commands: @@ -324,7 +376,9 @@ rover_pos_control [arguments...] status print status info ``` + ## spacecraft + Source: [modules/spacecraft](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/spacecraft) @@ -333,8 +387,8 @@ Source: [modules/spacecraft](https://github.com/PX4/PX4-Autopilot/tree/main/src/ It takes torque and thrust setpoints as inputs and outputs actuator setpoint messages. - -### Usage +### Usage {#spacecraft_usage} + ``` spacecraft [arguments...] Commands: @@ -344,7 +398,9 @@ spacecraft [arguments...] status print status info ``` + ## uuv_att_control + Source: [modules/uuv_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/uuv_att_control) @@ -368,8 +424,8 @@ uuv_att_control stop ``` - -### Usage +### Usage {#uuv_att_control_usage} + ``` uuv_att_control [arguments...] Commands: @@ -379,7 +435,9 @@ uuv_att_control [arguments...] status print status info ``` + ## uuv_pos_control + Source: [modules/uuv_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/uuv_pos_control) @@ -398,8 +456,8 @@ uuv_pos_control status uuv_pos_control stop ``` - -### Usage +### Usage {#uuv_pos_control_usage} + ``` uuv_pos_control [arguments...] Commands: @@ -409,15 +467,17 @@ uuv_pos_control [arguments...] status print status info ``` + ## vtol_att_control + Source: [modules/vtol_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/vtol_att_control) ### Description fw_att_control is the fixed wing attitude controller. - -### Usage +### Usage {#vtol_att_control_usage} + ``` vtol_att_control [arguments...] Commands: diff --git a/docs/en/modules/modules_driver.md b/docs/en/modules/modules_driver.md index f41731b0f2..1b8d7d6f2f 100644 --- a/docs/en/modules/modules_driver.md +++ b/docs/en/modules/modules_driver.md @@ -1,21 +1,26 @@ # Modules Reference: Driver + Subcategories: + - [Airspeed Sensor](modules_driver_airspeed_sensor.md) -- [Transponder](modules_driver_transponder.md) -- [Imu](modules_driver_imu.md) -- [Rpm Sensor](modules_driver_rpm_sensor.md) -- [Magnetometer](modules_driver_magnetometer.md) +- [Baro](modules_driver_baro.md) - [Camera](modules_driver_camera.md) - [Distance Sensor](modules_driver_distance_sensor.md) -- [Optical Flow](modules_driver_optical_flow.md) +- [Imu](modules_driver_imu.md) - [Ins](modules_driver_ins.md) -- [Baro](modules_driver_baro.md) +- [Magnetometer](modules_driver_magnetometer.md) +- [Optical Flow](modules_driver_optical_flow.md) +- [Radio Control](modules_driver_radio_control.md) +- [Rpm Sensor](modules_driver_rpm_sensor.md) +- [Transponder](modules_driver_transponder.md) + ## MCP23009 + Source: [drivers/gpio/mcp23009](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gpio/mcp23009) - -### Usage +### Usage {#MCP23009_usage} + ``` MCP23009 [arguments...] Commands: @@ -41,7 +46,9 @@ MCP23009 [arguments...] status print status info ``` + ## adc + Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/board_adc) @@ -49,8 +56,8 @@ Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/s ADC driver. - -### Usage +### Usage {#adc_usage} + ``` adc [arguments...] Commands: @@ -63,7 +70,9 @@ adc [arguments...] status print status info ``` + ## ads1115 + Source: [drivers/adc/ads1115](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/ads1115) @@ -81,8 +90,8 @@ parameter, and is disabled by default. If enabled, internal ADCs are not used. - -### Usage +### Usage {#ads1115_usage} + ``` ads1115 [arguments...] Commands: @@ -100,7 +109,9 @@ ads1115 [arguments...] status print status info ``` + ## atxxxx + Source: [drivers/osd/atxxxx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/osd/atxxxx) @@ -109,8 +120,8 @@ OSD driver for the ATXXXX chip that is mounted on the OmnibusF4SD board for exam It can be enabled with the OSD_ATXXXX_CFG parameter. - -### Usage +### Usage {#atxxxx_usage} + ``` atxxxx [arguments...] Commands: @@ -128,7 +139,9 @@ atxxxx [arguments...] status print status info ``` + ## batmon + Source: [drivers/smart_battery/batmon](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/smart_battery/batmon) @@ -142,8 +155,8 @@ batmon start -X -a 11 -b 4 ``` - -### Usage +### Usage {#batmon_usage} + ``` batmon [arguments...] Commands: @@ -167,7 +180,9 @@ batmon [arguments...] status print status info ``` + ## batt_smbus + Source: [drivers/batt_smbus](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/batt_smbus) @@ -181,8 +196,8 @@ batt_smbus -X write_flash 19069 2 27 0 ``` - -### Usage +### Usage {#batt_smbus_usage} + ``` batt_smbus [arguments...] Commands: @@ -217,11 +232,13 @@ batt_smbus [arguments...] status print status info ``` + ## bst + Source: [drivers/telemetry/bst](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/bst) - -### Usage +### Usage {#bst_usage} + ``` bst [arguments...] Commands: @@ -239,28 +256,9 @@ bst [arguments...] status print status info ``` -## crsf_rc -Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) - -### Description -This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data - - - -### Usage -``` -crsf_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` ## dshot + Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/dshot) @@ -284,15 +282,17 @@ 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 +### Usage {#dshot_usage} + ``` dshot [arguments...] Commands: start telemetry Enable Telemetry on a UART - UART device + -d UART device + values: + [-x] Swap RX/TX pins reverse Reverse motor direction [-m ] Motor index (1-based, default=all) @@ -331,38 +331,17 @@ dshot [arguments...] status print status info ``` -## dsm_rc -Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) - -### Description -This module does Spektrum DSM RC input parsing. - - - -### Usage -``` -dsm_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` ## fake_gps + Source: [examples/fake_gps](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_gps) ### Description - -### Usage +### Usage {#fake_gps_usage} + ``` fake_gps [arguments...] Commands: @@ -372,15 +351,17 @@ fake_gps [arguments...] status print status info ``` + ## fake_imu + Source: [examples/fake_imu](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_imu) ### Description - -### Usage +### Usage {#fake_imu_usage} + ``` fake_imu [arguments...] Commands: @@ -390,7 +371,9 @@ fake_imu [arguments...] status print status info ``` + ## fake_magnetometer + Source: [examples/fake_magnetometer](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_magnetometer) @@ -398,8 +381,8 @@ Source: [examples/fake_magnetometer](https://github.com/PX4/PX4-Autopilot/tree/m Publish the earth magnetic field as a fake magnetometer (sensor_mag). Requires vehicle_attitude and vehicle_gps_position. - -### Usage +### Usage {#fake_magnetometer_usage} + ``` fake_magnetometer [arguments...] Commands: @@ -409,7 +392,9 @@ fake_magnetometer [arguments...] status print status info ``` + ## ft_technologies_serial + Source: [drivers/wind_sensor/ft_technologies](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/wind_sensor/ft_technologies) @@ -431,8 +416,8 @@ Stop driver ft_technologies_serial stop ``` - -### Usage +### Usage {#ft_technologies_serial_usage} + ``` ft_technologies_serial [arguments...] Commands: @@ -441,28 +426,9 @@ ft_technologies_serial [arguments...] stop Stop driver ``` -## ghst_rc -Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) - -### Description -This module does Ghost (GHST) RC input parsing. - - - -### Usage -``` -ghst_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` ## gimbal + Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gimbal) @@ -478,8 +444,8 @@ Test the output by setting a angles (all omitted axes are set to 0): gimbal test pitch -45 yaw 30 ``` - -### Usage +### Usage {#gimbal_usage} + ``` gimbal [arguments...] Commands: @@ -500,7 +466,9 @@ gimbal [arguments...] status print status info ``` + ## gps + Source: [drivers/gps](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gps) @@ -528,8 +496,8 @@ Initiate warm restart of GPS device gps reset warm ``` - -### Usage +### Usage {#gps_usage} + ``` gps [arguments...] Commands: @@ -556,15 +524,17 @@ gps [arguments...] reset Reset GPS device cold|warm|hot Specify reset type ``` + ## gz_bridge + Source: [modules/simulation/gz_bridge](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_bridge) ### Description - -### Usage +### Usage {#gz_bridge_usage} + ``` gz_bridge [arguments...] Commands: @@ -576,7 +546,9 @@ gz_bridge [arguments...] status print status info ``` + ## ina220 + Source: [drivers/power_monitor/ina220](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/ina220) @@ -593,8 +565,8 @@ every 0.5 seconds. With this flag set, you can plug in a battery after the drive this flag set, the battery must be plugged in before starting the driver. - -### Usage +### Usage {#ina220_usage} + ``` ina220 [arguments...] Commands: @@ -617,7 +589,9 @@ ina220 [arguments...] status print status info ``` + ## ina226 + Source: [drivers/power_monitor/ina226](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/ina226) @@ -634,8 +608,8 @@ every 0.5 seconds. With this flag set, you can plug in a battery after the drive this flag set, the battery must be plugged in before starting the driver. - -### Usage +### Usage {#ina226_usage} + ``` ina226 [arguments...] Commands: @@ -656,7 +630,9 @@ ina226 [arguments...] status print status info ``` + ## ina228 + Source: [drivers/power_monitor/ina228](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/ina228) @@ -673,8 +649,8 @@ every 0.5 seconds. With this flag set, you can plug in a battery after the drive this flag set, the battery must be plugged in before starting the driver. - -### Usage +### Usage {#ina228_usage} + ``` ina228 [arguments...] Commands: @@ -695,7 +671,9 @@ ina228 [arguments...] status print status info ``` + ## ina238 + Source: [drivers/power_monitor/ina238](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/ina238) @@ -712,8 +690,8 @@ every 0.5 seconds. With this flag set, you can plug in a battery after the drive this flag set, the battery must be plugged in before starting the driver. - -### Usage +### Usage {#ina238_usage} + ``` ina238 [arguments...] Commands: @@ -734,7 +712,9 @@ ina238 [arguments...] status print status info ``` + ## iridiumsbd + Source: [drivers/telemetry/iridiumsbd](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/iridiumsbd) @@ -743,8 +723,8 @@ IridiumSBD driver. Creates a virtual serial port that another module can use for communication (e.g. mavlink). - -### Usage +### Usage {#iridiumsbd_usage} + ``` iridiumsbd [arguments...] Commands: @@ -760,11 +740,13 @@ iridiumsbd [arguments...] status print status info ``` + ## irlock + Source: [drivers/irlock](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/irlock) - -### Usage +### Usage {#irlock_usage} + ``` irlock [arguments...] Commands: @@ -782,15 +764,17 @@ irlock [arguments...] status print status info ``` + ## linux_pwm_out + Source: [drivers/linux_pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/linux_pwm_out) ### Description Linux PWM output driver with board-specific backend implementation. - -### Usage +### Usage {#linux_pwm_out_usage} + ``` linux_pwm_out [arguments...] Commands: @@ -800,11 +784,13 @@ linux_pwm_out [arguments...] status print status info ``` + ## lsm303agr + Source: [drivers/magnetometer/lsm303agr](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm303agr) - -### Usage +### Usage {#lsm303agr_usage} + ``` lsm303agr [arguments...] Commands: @@ -824,7 +810,9 @@ lsm303agr [arguments...] status print status info ``` + ## msp_osd + Source: [drivers/osd/msp_osd](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/osd/msp_osd) @@ -841,8 +829,8 @@ msp_osd ``` - -### Usage +### Usage {#msp_osd_usage} + ``` msp_osd [arguments...] Commands: @@ -850,7 +838,9 @@ msp_osd [arguments...] status print status info ``` + ## newpixel + Source: [drivers/lights/neopixel](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/neopixel) @@ -864,8 +854,8 @@ neopixel -n 8 ``` To drive all available leds. - -### Usage +### Usage {#newpixel_usage} + ``` newpixel [arguments...] Commands: @@ -873,11 +863,13 @@ newpixel [arguments...] status print status info ``` + ## paa3905 + Source: [drivers/optical_flow/paa3905](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paa3905) - -### Usage +### Usage {#paa3905_usage} + ``` paa3905 [arguments...] Commands: @@ -897,11 +889,13 @@ paa3905 [arguments...] status print status info ``` + ## paw3902 + Source: [drivers/optical_flow/paw3902](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paw3902) - -### Usage +### Usage {#paw3902_usage} + ``` paw3902 [arguments...] Commands: @@ -921,7 +915,9 @@ paw3902 [arguments...] status print status info ``` + ## pca9685_pwm_out + Source: [drivers/pca9685_pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/pca9685_pwm_out) @@ -941,8 +937,8 @@ pca9685_pwm_out start -a 0x40 -b 1 ``` - -### Usage +### Usage {#pca9685_pwm_out_usage} + ``` pca9685_pwm_out [arguments...] Commands: @@ -956,7 +952,9 @@ pca9685_pwm_out [arguments...] status print status info ``` + ## pm_selector_auterion + Source: [drivers/power_monitor/pm_selector_auterion](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/pm_selector_auterion) @@ -964,8 +962,8 @@ Source: [drivers/power_monitor/pm_selector_auterion](https://github.com/PX4/PX4- Driver for starting and auto-detecting different power monitors. - -### Usage +### Usage {#pm_selector_auterion_usage} + ``` pm_selector_auterion [arguments...] Commands: @@ -975,11 +973,13 @@ pm_selector_auterion [arguments...] status print status info ``` + ## pmw3901 + Source: [drivers/optical_flow/pmw3901](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/pmw3901) - -### Usage +### Usage {#pmw3901_usage} + ``` pmw3901 [arguments...] Commands: @@ -999,7 +999,9 @@ pmw3901 [arguments...] status print status info ``` + ## pps_capture + Source: [drivers/pps_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/pps_capture) @@ -1007,8 +1009,8 @@ Source: [drivers/pps_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src This implements capturing PPS information from the GNSS module and calculates the drift between PPS and Real-time clock. - -### Usage +### Usage {#pps_capture_usage} + ``` pps_capture [arguments...] Commands: @@ -1018,7 +1020,9 @@ pps_capture [arguments...] status print status info ``` + ## pwm_out + Source: [drivers/pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/pwm_out) @@ -1028,8 +1032,8 @@ This module is responsible for driving the output pins. For boards without a sep px4io driver is used for main ones. - -### Usage +### Usage {#pwm_out_usage} + ``` pwm_out [arguments...] Commands: @@ -1039,7 +1043,9 @@ pwm_out [arguments...] status print status info ``` + ## pwm_out_sim + Source: [modules/simulation/pwm_out_sim](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/pwm_out_sim) @@ -1053,8 +1059,8 @@ mix them with any loaded mixer and output the result to the It is used in SITL and HITL. - -### Usage +### Usage {#pwm_out_sim_usage} + ``` pwm_out_sim [arguments...] Commands: @@ -1066,11 +1072,13 @@ pwm_out_sim [arguments...] status print status info ``` + ## px4flow + Source: [drivers/optical_flow/px4flow](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/px4flow) - -### Usage +### Usage {#px4flow_usage} + ``` px4flow [arguments...] Commands: @@ -1088,15 +1096,17 @@ px4flow [arguments...] status print status info ``` + ## px4io + Source: [drivers/px4io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/px4io) ### Description Output driver communicating with the IO co-processor. - -### Usage +### Usage {#px4io_usage} + ``` px4io [arguments...] Commands: @@ -1128,40 +1138,13 @@ px4io [arguments...] status print status info ``` -## rc_input -Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) - -### Description -This module does the RC input parsing and auto-selecting the method. Supported methods are: -- PPM -- SBUS -- DSM -- SUMD -- ST24 -- TBS Crossfire (CRSF) - - - -### Usage -``` -rc_input [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` ## rgbled + Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) - -### Usage +### Usage {#rgbled_usage} + ``` rgbled [arguments...] Commands: @@ -1181,11 +1164,13 @@ rgbled [arguments...] status print status info ``` + ## rgbled_is31fl3195 + Source: [drivers/lights/rgbled_is31fl3195](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_is31fl3195) - -### Usage +### Usage {#rgbled_is31fl3195_usage} + ``` rgbled_is31fl3195 [arguments...] Commands: @@ -1207,7 +1192,9 @@ rgbled_is31fl3195 [arguments...] status print status info ``` + ## rgbled_lp5562 + Source: [drivers/lights/rgbled_lp5562](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_lp5562) @@ -1218,8 +1205,8 @@ This used in some GPS modules by Holybro for [PX4 status notification](../gettin The driver is included by default in firmware (KConfig key DRIVERS_LIGHTS_RGBLED_LP5562) and is always enabled. - -### Usage +### Usage {#rgbled_lp5562_usage} + ``` rgbled_lp5562 [arguments...] Commands: @@ -1239,7 +1226,9 @@ rgbled_lp5562 [arguments...] status print status info ``` + ## roboclaw + Source: [drivers/roboclaw](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/roboclaw) @@ -1258,8 +1247,8 @@ the address `RBCLW_ADDRESS` needs to match the ESC configuration. The command to start this driver is: `$ roboclaw start ` - -### Usage +### Usage {#roboclaw_usage} + ``` roboclaw [arguments...] Commands: @@ -1269,11 +1258,13 @@ roboclaw [arguments...] status print status info ``` + ## rpm_capture + Source: [drivers/rpm_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm_capture) - -### Usage +### Usage {#rpm_capture_usage} + ``` rpm_capture [arguments...] Commands: @@ -1283,7 +1274,9 @@ rpm_capture [arguments...] status print status info ``` + ## safety_button + Source: [drivers/safety_button](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/safety_button) @@ -1292,8 +1285,8 @@ This module is responsible for the safety button. Pressing the safety button 3 times quickly will trigger a GCS pairing request. - -### Usage +### Usage {#safety_button_usage} + ``` safety_button [arguments...] Commands: @@ -1303,28 +1296,9 @@ safety_button [arguments...] status print status info ``` -## sbus_rc -Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) - -### Description -This module does SBUS RC input parsing. - - - -### Usage -``` -sbus_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` ## septentrio + Source: [drivers/gnss/septentrio](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gnss/septentrio) @@ -1353,8 +1327,8 @@ Perform warm reset of the receivers: gps reset warm ``` - -### Usage +### Usage {#septentrio_usage} + ``` septentrio [arguments...] Commands: @@ -1375,7 +1349,9 @@ septentrio [arguments...] reset Reset connected receiver cold|warm|hot Specify reset type ``` + ## sht3x + Source: [drivers/hygrometer/sht3x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/hygrometer/sht3x) @@ -1405,8 +1381,8 @@ sht3x reset Reinitialize senzor, reset flags - -### Usage +### Usage {#sht3x_usage} + ``` sht3x [arguments...] Commands: @@ -1429,7 +1405,9 @@ sht3x [arguments...] reset Reinitialize sensor ``` + ## tap_esc + Source: [drivers/tap_esc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tap_esc) @@ -1451,8 +1429,8 @@ The module is typically started with: tap_esc start -d /dev/ttyS2 -n <1-8> ``` - -### Usage +### Usage {#tap_esc_usage} + ``` tap_esc [arguments...] Commands: @@ -1462,7 +1440,9 @@ tap_esc [arguments...] [-n ] Number of ESCs default: 4 ``` + ## tone_alarm + Source: [drivers/tone_alarm](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tone_alarm) @@ -1470,8 +1450,8 @@ Source: [drivers/tone_alarm](https://github.com/PX4/PX4-Autopilot/tree/main/src/ This module is responsible for the tone alarm. - -### Usage +### Usage {#tone_alarm_usage} + ``` tone_alarm [arguments...] Commands: @@ -1481,7 +1461,9 @@ tone_alarm [arguments...] status print status info ``` + ## uwb + Source: [drivers/uwb/uwb_sr150](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/uwb/uwb_sr150) @@ -1498,8 +1480,8 @@ Start the driver with a given device: uwb start -d /dev/ttyS2 ``` - -### Usage +### Usage {#uwb_usage} + ``` uwb [arguments...] Commands: @@ -1513,11 +1495,13 @@ uwb [arguments...] status ``` + ## vertiq_io + Source: [drivers/actuators/vertiq_io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/actuators/vertiq_io) - -### Usage +### Usage {#vertiq_io_usage} + ``` vertiq_io [arguments...] Commands: @@ -1528,7 +1512,9 @@ vertiq_io [arguments...] status print status info ``` + ## voxl2_io + Source: [drivers/voxl2_io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/voxl2_io) @@ -1538,8 +1524,8 @@ This module is responsible for driving the output pins. For boards without a sep px4io driver is used for main ones. - -### Usage +### Usage {#voxl2_io_usage} + ``` voxl2_io [arguments...] Commands: @@ -1557,7 +1543,9 @@ voxl2_io [arguments...] status print status info ``` + ## voxl_esc + Source: [drivers/actuators/voxl_esc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/actuators/voxl_esc) @@ -1574,8 +1562,8 @@ todo ``` - -### Usage +### Usage {#voxl_esc_usage} + ``` voxl_esc [arguments...] Commands: @@ -1616,11 +1604,13 @@ voxl_esc [arguments...] status print status info ``` + ## voxlpm + Source: [drivers/power_monitor/voxlpm](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/voxlpm) - -### Usage +### Usage {#voxlpm_usage} + ``` voxlpm [arguments...] start @@ -1640,7 +1630,9 @@ voxlpm [arguments...] status print status info ``` + ## zenoh + Source: [modules/zenoh](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/zenoh) @@ -1648,8 +1640,8 @@ Source: [modules/zenoh](https://github.com/PX4/PX4-Autopilot/tree/main/src/modul Zenoh demo bridge - -### Usage +### Usage {#zenoh_usage} + ``` zenoh [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_airspeed_sensor.md b/docs/en/modules/modules_driver_airspeed_sensor.md index 2aede657f5..a1545bfe53 100644 --- a/docs/en/modules/modules_driver_airspeed_sensor.md +++ b/docs/en/modules/modules_driver_airspeed_sensor.md @@ -1,5 +1,7 @@ # Modules Reference: Airspeed Sensor (Driver) + ## asp5033 + Source: [drivers/differential_pressure/asp5033](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/asp5033) @@ -11,8 +13,8 @@ This is not included by default in firmware. It can be included with terminal co or in default.px4board with adding the line: "CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033=y" It can be enabled with the "SENS_EN_ASP5033" parameter set to 1. - -### Usage +### Usage {#asp5033_usage} + ``` asp5033 [arguments...] Commands: @@ -30,11 +32,13 @@ asp5033 [arguments...] status print status info ``` + ## auav + Source: [drivers/differential_pressure/auav](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/auav) - -### Usage +### Usage {#auav_usage} + ``` auav [arguments...] Commands: @@ -54,11 +58,13 @@ auav [arguments...] status print status info ``` + ## ets_airspeed + Source: [drivers/differential_pressure/ets](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ets) - -### Usage +### Usage {#ets_airspeed_usage} + ``` ets_airspeed [arguments...] Commands: @@ -76,11 +82,13 @@ ets_airspeed [arguments...] status print status info ``` + ## ms4515 + Source: [drivers/differential_pressure/ms4515](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4515) - -### Usage +### Usage {#ms4515_usage} + ``` ms4515 [arguments...] Commands: @@ -98,11 +106,13 @@ ms4515 [arguments...] status print status info ``` + ## ms4525do + Source: [drivers/differential_pressure/ms4525do](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4525do) - -### Usage +### Usage {#ms4525do_usage} + ``` ms4525do [arguments...] Commands: @@ -120,11 +130,13 @@ ms4525do [arguments...] status print status info ``` + ## ms5525dso + Source: [drivers/differential_pressure/ms5525dso](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms5525dso) - -### Usage +### Usage {#ms5525dso_usage} + ``` ms5525dso [arguments...] Commands: @@ -142,11 +154,13 @@ ms5525dso [arguments...] status print status info ``` + ## sdp3x + Source: [drivers/differential_pressure/sdp3x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/sdp3x) - -### Usage +### Usage {#sdp3x_usage} + ``` sdp3x [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_baro.md b/docs/en/modules/modules_driver_baro.md index d54acc9201..be32c800ed 100644 --- a/docs/en/modules/modules_driver_baro.md +++ b/docs/en/modules/modules_driver_baro.md @@ -1,9 +1,11 @@ # Modules Reference: Baro (Driver) + ## bmp280 + Source: [drivers/barometer/bmp280](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp280) - -### Usage +### Usage {#bmp280_usage} + ``` bmp280 [arguments...] Commands: @@ -33,11 +35,13 @@ bmp280 [arguments...] status print status info ``` + ## bmp388 + Source: [drivers/barometer/bmp388](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp388) - -### Usage +### Usage {#bmp388_usage} + ``` bmp388 [arguments...] Commands: @@ -59,11 +63,13 @@ bmp388 [arguments...] status print status info ``` + ## bmp581 + Source: [drivers/barometer/bmp581](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp581) - -### Usage +### Usage {#bmp581_usage} + ``` bmp581 [arguments...] Commands: @@ -85,11 +91,13 @@ bmp581 [arguments...] status print status info ``` + ## dps310 + Source: [drivers/barometer/dps310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/dps310) - -### Usage +### Usage {#dps310_usage} + ``` dps310 [arguments...] Commands: @@ -119,11 +127,13 @@ dps310 [arguments...] status print status info ``` + ## icp101xx + Source: [drivers/barometer/invensense/icp101xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp101xx) - -### Usage +### Usage {#icp101xx_usage} + ``` icp101xx [arguments...] Commands: @@ -141,11 +151,13 @@ icp101xx [arguments...] status print status info ``` + ## icp201xx + Source: [drivers/barometer/invensense/icp201xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp201xx) - -### Usage +### Usage {#icp201xx_usage} + ``` icp201xx [arguments...] Commands: @@ -163,11 +175,13 @@ icp201xx [arguments...] status print status info ``` + ## lps22hb + Source: [drivers/barometer/lps22hb](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps22hb) - -### Usage +### Usage {#lps22hb_usage} + ``` lps22hb [arguments...] Commands: @@ -187,11 +201,13 @@ lps22hb [arguments...] status print status info ``` + ## lps25h + Source: [drivers/barometer/lps25h](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps25h) - -### Usage +### Usage {#lps25h_usage} + ``` lps25h [arguments...] Commands: @@ -211,11 +227,13 @@ lps25h [arguments...] status print status info ``` + ## lps33hw + Source: [drivers/barometer/lps33hw](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps33hw) - -### Usage +### Usage {#lps33hw_usage} + ``` lps33hw [arguments...] Commands: @@ -238,11 +256,13 @@ lps33hw [arguments...] status print status info ``` + ## mpc2520 + Source: [drivers/barometer/maiertek/mpc2520](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/maiertek/mpc2520) - -### Usage +### Usage {#mpc2520_usage} + ``` mpc2520 [arguments...] Commands: @@ -260,11 +280,13 @@ mpc2520 [arguments...] status print status info ``` + ## mpl3115a2 + Source: [drivers/barometer/mpl3115a2](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/mpl3115a2) - -### Usage +### Usage {#mpl3115a2_usage} + ``` mpl3115a2 [arguments...] Commands: @@ -282,11 +304,13 @@ mpl3115a2 [arguments...] status print status info ``` + ## ms5611 + Source: [drivers/barometer/ms5611](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5611) - -### Usage +### Usage {#ms5611_usage} + ``` ms5611 [arguments...] Commands: @@ -316,11 +340,13 @@ ms5611 [arguments...] status print status info ``` + ## ms5837 + Source: [drivers/barometer/ms5837](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5837) - -### Usage +### Usage {#ms5837_usage} + ``` ms5837 [arguments...] Commands: @@ -336,11 +362,13 @@ ms5837 [arguments...] status print status info ``` + ## spa06 + Source: [drivers/barometer/goertek/spa06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spa06) - -### Usage +### Usage {#spa06_usage} + ``` spa06 [arguments...] Commands: @@ -370,11 +398,13 @@ spa06 [arguments...] status print status info ``` + ## spl06 + Source: [drivers/barometer/goertek/spl06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spl06) - -### Usage +### Usage {#spl06_usage} + ``` spl06 [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_camera.md b/docs/en/modules/modules_driver_camera.md index a214259a98..58f3cfb45d 100644 --- a/docs/en/modules/modules_driver_camera.md +++ b/docs/en/modules/modules_driver_camera.md @@ -1,5 +1,7 @@ # Modules Reference: Camera (Driver) + ## camera_trigger + Source: [drivers/camera_trigger](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/camera_trigger) @@ -33,8 +35,8 @@ In particular: [Setup/usage information](../camera/index.md). - -### Usage +### Usage {#camera_trigger_usage} + ``` camera_trigger [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_distance_sensor.md b/docs/en/modules/modules_driver_distance_sensor.md index 96c88fc6fc..6d34f31794 100644 --- a/docs/en/modules/modules_driver_distance_sensor.md +++ b/docs/en/modules/modules_driver_distance_sensor.md @@ -1,5 +1,7 @@ # Modules Reference: Distance Sensor (Driver) + ## afbrs50 + Source: [drivers/distance_sensor/broadcom/afbrs50](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/broadcom/afbrs50) @@ -18,8 +20,8 @@ Stop driver afbrs50 stop ``` - -### Usage +### Usage {#afbrs50_usage} + ``` afbrs50 [arguments...] Commands: @@ -32,11 +34,13 @@ afbrs50 [arguments...] stop Stop driver ``` + ## gy_us42 + Source: [drivers/distance_sensor/gy_us42](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/gy_us42) - -### Usage +### Usage {#gy_us42_usage} + ``` gy_us42 [arguments...] Commands: @@ -54,7 +58,9 @@ gy_us42 [arguments...] status print status info ``` + ## leddar_one + Source: [drivers/distance_sensor/leddar_one](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/leddar_one) @@ -77,8 +83,8 @@ Stop driver leddar_one stop ``` - -### Usage +### Usage {#leddar_one_usage} + ``` leddar_one [arguments...] Commands: @@ -89,7 +95,9 @@ leddar_one [arguments...] 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) @@ -99,8 +107,8 @@ I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF1 Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html - -### Usage +### Usage {#lightware_laser_i2c_usage} + ``` lightware_laser_i2c [arguments...] Commands: @@ -120,7 +128,9 @@ lightware_laser_i2c [arguments...] status print status info ``` + ## lightware_laser_serial + Source: [drivers/distance_sensor/lightware_laser_serial](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_laser_serial) @@ -143,8 +153,8 @@ Stop driver lightware_laser_serial stop ``` - -### Usage +### Usage {#lightware_laser_serial_usage} + ``` lightware_laser_serial [arguments...] Commands: @@ -155,7 +165,9 @@ lightware_laser_serial [arguments...] stop Stop driver ``` + ## lightware_sf45_serial + Source: [drivers/distance_sensor/lightware_sf45_serial](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/lightware_sf45_serial) @@ -175,8 +187,8 @@ Stop driver lightware_sf45_serial stop ``` - -### Usage +### Usage {#lightware_sf45_serial_usage} + ``` lightware_sf45_serial [arguments...] Commands: @@ -185,7 +197,9 @@ lightware_sf45_serial [arguments...] stop Stop driver ``` + ## ll40ls + Source: [drivers/distance_sensor/ll40ls_pwm](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/ll40ls_pwm) @@ -197,8 +211,8 @@ The sensor/driver must be enabled using the parameter SENS_EN_LL40LS. Setup/usage information: https://docs.px4.io/main/en/sensor/lidar_lite.html - -### Usage +### Usage {#ll40ls_usage} + ``` ll40ls [arguments...] Commands: @@ -210,11 +224,13 @@ ll40ls [arguments...] stop Stop driver ``` + ## mappydot + Source: [drivers/distance_sensor/mappydot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mappydot) - -### Usage +### Usage {#mappydot_usage} + ``` mappydot [arguments...] Commands: @@ -230,11 +246,13 @@ mappydot [arguments...] status print status info ``` + ## mb12xx + Source: [drivers/distance_sensor/mb12xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mb12xx) - -### Usage +### Usage {#mb12xx_usage} + ``` mb12xx [arguments...] Commands: @@ -254,7 +272,9 @@ mb12xx [arguments...] status print status info ``` + ## pga460 + Source: [drivers/distance_sensor/pga460](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/pga460) @@ -270,8 +290,8 @@ running. A simple algorithm to detect false readings is implemented at the drive the quality of data that is being published. The driver will not publish data at all if it deems the sensor data to be invalid or unstable. - -### Usage +### Usage {#pga460_usage} + ``` pga460 [arguments...] Commands: @@ -284,11 +304,13 @@ pga460 [arguments...] help ``` + ## srf02 + Source: [drivers/distance_sensor/srf02](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/srf02) - -### Usage +### Usage {#srf02_usage} + ``` srf02 [arguments...] Commands: @@ -308,7 +330,9 @@ srf02 [arguments...] status print status info ``` + ## srf05 + Source: [drivers/distance_sensor/srf05](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/srf05) @@ -319,8 +343,8 @@ Source: [drivers/distance_sensor/srf05](https://github.com/PX4/PX4-Autopilot/tre The sensor/driver must be enabled using the parameter SENS_EN_HXSRX0X. - -### Usage +### Usage {#srf05_usage} + ``` srf05 [arguments...] Commands: @@ -336,7 +360,9 @@ srf05 [arguments...] status print status info ``` + ## teraranger + Source: [drivers/distance_sensor/teraranger](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/teraranger) @@ -348,8 +374,8 @@ The sensor/driver must be enabled using the parameter SENS_EN_TRANGER. Setup/usage information: https://docs.px4.io/main/en/sensor/rangefinders.html#teraranger-rangefinders - -### Usage +### Usage {#teraranger_usage} + ``` teraranger [arguments...] Commands: @@ -369,11 +395,13 @@ teraranger [arguments...] status print status info ``` + ## tf02pro + Source: [drivers/distance_sensor/tf02pro](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/tf02pro) - -### Usage +### Usage {#tf02pro_usage} + ``` tf02pro [arguments...] Commands: @@ -393,7 +421,9 @@ tf02pro [arguments...] status print status info ``` + ## tfmini + Source: [drivers/distance_sensor/tfmini](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/tfmini) @@ -416,8 +446,8 @@ Stop driver tfmini stop ``` - -### Usage +### Usage {#tfmini_usage} + ``` tfmini [arguments...] Commands: @@ -432,7 +462,9 @@ tfmini [arguments...] status Print driver status ``` + ## ulanding_radar + Source: [drivers/distance_sensor/ulanding_radar](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/ulanding_radar) @@ -453,8 +485,8 @@ Stop driver ulanding_radar stop ``` - -### Usage +### Usage {#ulanding_radar_usage} + ``` ulanding_radar [arguments...] Commands: @@ -466,11 +498,13 @@ ulanding_radar [arguments...] stop Stop driver ``` + ## vl53l0x + Source: [drivers/distance_sensor/vl53l0x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l0x) - -### Usage +### Usage {#vl53l0x_usage} + ``` vl53l0x [arguments...] Commands: @@ -490,11 +524,13 @@ vl53l0x [arguments...] status print status info ``` + ## vl53l1x + Source: [drivers/distance_sensor/vl53l1x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l1x) - -### Usage +### Usage {#vl53l1x_usage} + ``` vl53l1x [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_imu.md b/docs/en/modules/modules_driver_imu.md index 32d7a9bc24..67f9a2713b 100644 --- a/docs/en/modules/modules_driver_imu.md +++ b/docs/en/modules/modules_driver_imu.md @@ -1,9 +1,11 @@ # Modules Reference: Imu (Driver) + ## adis16448 + Source: [drivers/imu/analog_devices/adis16448](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16448) - -### Usage +### Usage {#adis16448_usage} + ``` adis16448 [arguments...] Commands: @@ -23,11 +25,13 @@ adis16448 [arguments...] status print status info ``` + ## adis16470 + Source: [drivers/imu/analog_devices/adis16470](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16470) - -### Usage +### Usage {#adis16470_usage} + ``` adis16470 [arguments...] Commands: @@ -47,11 +51,13 @@ adis16470 [arguments...] status print status info ``` + ## adis16477 + Source: [drivers/imu/analog_devices/adis16477](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16477) - -### Usage +### Usage {#adis16477_usage} + ``` adis16477 [arguments...] Commands: @@ -71,11 +77,13 @@ adis16477 [arguments...] status print status info ``` + ## adis16497 + Source: [drivers/imu/analog_devices/adis16497](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16497) - -### Usage +### Usage {#adis16497_usage} + ``` adis16497 [arguments...] Commands: @@ -95,11 +103,13 @@ adis16497 [arguments...] status print status info ``` + ## adis16507 + Source: [drivers/imu/analog_devices/adis16507](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16507) - -### Usage +### Usage {#adis16507_usage} + ``` adis16507 [arguments...] Commands: @@ -119,11 +129,13 @@ adis16507 [arguments...] status print status info ``` + ## bmi055 + Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) - -### Usage +### Usage {#bmi055_usage} + ``` bmi055 [arguments...] Commands: @@ -145,11 +157,13 @@ bmi055 [arguments...] status print status info ``` + ## bmi085 + Source: [drivers/imu/bosch/bmi085](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi085) - -### Usage +### Usage {#bmi085_usage} + ``` bmi085 [arguments...] Commands: @@ -171,11 +185,13 @@ bmi085 [arguments...] status print status info ``` + ## bmi088 + Source: [drivers/imu/bosch/bmi088](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088) - -### Usage +### Usage {#bmi088_usage} + ``` bmi088 [arguments...] Commands: @@ -197,11 +213,13 @@ bmi088 [arguments...] status print status info ``` + ## bmi088_i2c + Source: [drivers/imu/bosch/bmi088_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088_i2c) - -### Usage +### Usage {#bmi088_i2c_usage} + ``` bmi088_i2c [arguments...] Commands: @@ -223,11 +241,13 @@ bmi088_i2c [arguments...] status print status info ``` + ## bmi270 + Source: [drivers/imu/bosch/bmi270](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi270) - -### Usage +### Usage {#bmi270_usage} + ``` bmi270 [arguments...] Commands: @@ -247,11 +267,13 @@ bmi270 [arguments...] status print status info ``` + ## fxas21002c + Source: [drivers/imu/nxp/fxas21002c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxas21002c) - -### Usage +### Usage {#fxas21002c_usage} + ``` fxas21002c [arguments...] Commands: @@ -279,11 +301,13 @@ fxas21002c [arguments...] status print status info ``` + ## fxos8701cq + Source: [drivers/imu/nxp/fxos8701cq](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxos8701cq) - -### Usage +### Usage {#fxos8701cq_usage} + ``` fxos8701cq [arguments...] Commands: @@ -311,11 +335,13 @@ fxos8701cq [arguments...] status print status info ``` + ## iam20680hp + Source: [drivers/imu/invensense/iam20680hp](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iam20680hp) - -### Usage +### Usage {#iam20680hp_usage} + ``` iam20680hp [arguments...] Commands: @@ -335,11 +361,13 @@ iam20680hp [arguments...] status print status info ``` + ## icm20602 + Source: [drivers/imu/invensense/icm20602](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20602) - -### Usage +### Usage {#icm20602_usage} + ``` icm20602 [arguments...] Commands: @@ -359,11 +387,13 @@ icm20602 [arguments...] status print status info ``` + ## icm20608g + Source: [drivers/imu/invensense/icm20608g](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20608g) - -### Usage +### Usage {#icm20608g_usage} + ``` icm20608g [arguments...] Commands: @@ -383,11 +413,13 @@ icm20608g [arguments...] status print status info ``` + ## icm20649 + Source: [drivers/imu/invensense/icm20649](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20649) - -### Usage +### Usage {#icm20649_usage} + ``` icm20649 [arguments...] Commands: @@ -407,11 +439,13 @@ icm20649 [arguments...] status print status info ``` + ## icm20689 + Source: [drivers/imu/invensense/icm20689](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20689) - -### Usage +### Usage {#icm20689_usage} + ``` icm20689 [arguments...] Commands: @@ -431,11 +465,13 @@ icm20689 [arguments...] status print status info ``` + ## icm20948 + Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - -### Usage +### Usage {#icm20948_usage} + ``` icm20948 [arguments...] Commands: @@ -456,11 +492,13 @@ icm20948 [arguments...] status print status info ``` + ## icm20948_i2c_passthrough + Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - -### Usage +### Usage {#icm20948_i2c_passthrough_usage} + ``` icm20948_i2c_passthrough [arguments...] Commands: @@ -478,11 +516,13 @@ icm20948_i2c_passthrough [arguments...] status print status info ``` + ## icm40609d + Source: [drivers/imu/invensense/icm40609d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm40609d) - -### Usage +### Usage {#icm40609d_usage} + ``` icm40609d [arguments...] Commands: @@ -502,11 +542,13 @@ icm40609d [arguments...] status print status info ``` + ## icm42605 + Source: [drivers/imu/invensense/icm42605](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42605) - -### Usage +### Usage {#icm42605_usage} + ``` icm42605 [arguments...] Commands: @@ -526,11 +568,13 @@ icm42605 [arguments...] status print status info ``` + ## icm42670p + Source: [drivers/imu/invensense/icm42670p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42670p) - -### Usage +### Usage {#icm42670p_usage} + ``` icm42670p [arguments...] Commands: @@ -550,11 +594,13 @@ icm42670p [arguments...] status print status info ``` + ## icm42688p + Source: [drivers/imu/invensense/icm42688p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42688p) - -### Usage +### Usage {#icm42688p_usage} + ``` icm42688p [arguments...] Commands: @@ -577,11 +623,13 @@ icm42688p [arguments...] status print status info ``` + ## icm45686 + Source: [drivers/imu/invensense/icm45686](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm45686) - -### Usage +### Usage {#icm45686_usage} + ``` icm45686 [arguments...] Commands: @@ -603,11 +651,13 @@ icm45686 [arguments...] status print status info ``` + ## iim42652 + Source: [drivers/imu/invensense/iim42652](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42652) - -### Usage +### Usage {#iim42652_usage} + ``` iim42652 [arguments...] Commands: @@ -629,11 +679,13 @@ iim42652 [arguments...] status print status info ``` + ## iim42653 + Source: [drivers/imu/invensense/iim42653](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42653) - -### Usage +### Usage {#iim42653_usage} + ``` iim42653 [arguments...] Commands: @@ -655,11 +707,13 @@ iim42653 [arguments...] status print status info ``` + ## l3gd20 + Source: [drivers/imu/st/l3gd20](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/l3gd20) - -### Usage +### Usage {#l3gd20_usage} + ``` l3gd20 [arguments...] Commands: @@ -683,11 +737,13 @@ l3gd20 [arguments...] status print status info ``` + ## lsm303d + Source: [drivers/imu/st/lsm303d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm303d) - -### Usage +### Usage {#lsm303d_usage} + ``` lsm303d [arguments...] Commands: @@ -707,11 +763,13 @@ lsm303d [arguments...] status print status info ``` + ## lsm9ds1 + Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) - -### Usage +### Usage {#lsm9ds1_usage} + ``` lsm9ds1 [arguments...] Commands: @@ -731,11 +789,13 @@ lsm9ds1 [arguments...] status print status info ``` + ## mpu6000 + Source: [drivers/imu/invensense/mpu6000](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6000) - -### Usage +### Usage {#mpu6000_usage} + ``` mpu6000 [arguments...] Commands: @@ -755,11 +815,13 @@ mpu6000 [arguments...] status print status info ``` + ## mpu9250 + Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - -### Usage +### Usage {#mpu9250_usage} + ``` mpu9250 [arguments...] Commands: @@ -780,11 +842,13 @@ mpu9250 [arguments...] status print status info ``` + ## mpu9250_i2c + Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - -### Usage +### Usage {#mpu9250_i2c_usage} + ``` mpu9250_i2c [arguments...] Commands: @@ -804,11 +868,13 @@ mpu9250_i2c [arguments...] status print status info ``` + ## mpu9520 + Source: [drivers/imu/invensense/mpu6500](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6500) - -### Usage +### Usage {#mpu9520_usage} + ``` mpu9520 [arguments...] Commands: @@ -828,11 +894,13 @@ mpu9520 [arguments...] status print status info ``` + ## sch16t + Source: [drivers/imu/murata/sch16t](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/murata/sch16t) - -### Usage +### Usage {#sch16t_usage} + ``` sch16t [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_ins.md b/docs/en/modules/modules_driver_ins.md index a108ed5057..5425ab01f2 100644 --- a/docs/en/modules/modules_driver_ins.md +++ b/docs/en/modules/modules_driver_ins.md @@ -1,5 +1,7 @@ # Modules Reference: Ins (Driver) + ## vectornav + Source: [drivers/ins/vectornav](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/ins/vectornav) @@ -22,8 +24,8 @@ Stop driver vectornav stop ``` - -### Usage +### Usage {#vectornav_usage} + ``` vectornav [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_magnetometer.md b/docs/en/modules/modules_driver_magnetometer.md index 45719cfa1e..8d527cfa4e 100644 --- a/docs/en/modules/modules_driver_magnetometer.md +++ b/docs/en/modules/modules_driver_magnetometer.md @@ -1,9 +1,11 @@ # Modules Reference: Magnetometer (Driver) + ## ak09916 + Source: [drivers/magnetometer/akm/ak09916](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak09916) - -### Usage +### Usage {#ak09916_usage} + ``` ak09916 [arguments...] Commands: @@ -23,11 +25,13 @@ ak09916 [arguments...] status print status info ``` + ## ak8963 + Source: [drivers/magnetometer/akm/ak8963](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak8963) - -### Usage +### Usage {#ak8963_usage} + ``` ak8963 [arguments...] Commands: @@ -47,11 +51,13 @@ ak8963 [arguments...] status print status info ``` + ## bmm150 + Source: [drivers/magnetometer/bosch/bmm150](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm150) - -### Usage +### Usage {#bmm150_usage} + ``` bmm150 [arguments...] Commands: @@ -71,11 +77,13 @@ bmm150 [arguments...] status print status info ``` + ## bmm350 + Source: [drivers/magnetometer/bosch/bmm350](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm350) - -### Usage +### Usage {#bmm350_usage} + ``` bmm350 [arguments...] Commands: @@ -95,11 +103,13 @@ bmm350 [arguments...] status print status info ``` + ## hmc5883 + Source: [drivers/magnetometer/hmc5883](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/hmc5883) - -### Usage +### Usage {#hmc5883_usage} + ``` hmc5883 [arguments...] Commands: @@ -122,11 +132,13 @@ hmc5883 [arguments...] status print status info ``` + ## iis2mdc + Source: [drivers/magnetometer/st/iis2mdc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/st/iis2mdc) - -### Usage +### Usage {#iis2mdc_usage} + ``` iis2mdc [arguments...] Commands: @@ -144,11 +156,13 @@ iis2mdc [arguments...] status print status info ``` + ## ist8308 + Source: [drivers/magnetometer/isentek/ist8308](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8308) - -### Usage +### Usage {#ist8308_usage} + ``` ist8308 [arguments...] Commands: @@ -168,11 +182,13 @@ ist8308 [arguments...] status print status info ``` + ## ist8310 + Source: [drivers/magnetometer/isentek/ist8310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8310) - -### Usage +### Usage {#ist8310_usage} + ``` ist8310 [arguments...] Commands: @@ -192,11 +208,13 @@ ist8310 [arguments...] status print status info ``` + ## lis3mdl + Source: [drivers/magnetometer/lis3mdl](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lis3mdl) - -### Usage +### Usage {#lis3mdl_usage} + ``` lis3mdl [arguments...] Commands: @@ -222,11 +240,13 @@ lis3mdl [arguments...] status print status info ``` + ## lsm9ds1_mag + Source: [drivers/magnetometer/lsm9ds1_mag](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm9ds1_mag) - -### Usage +### Usage {#lsm9ds1_mag_usage} + ``` lsm9ds1_mag [arguments...] Commands: @@ -246,11 +266,13 @@ lsm9ds1_mag [arguments...] status print status info ``` + ## mmc5983ma + Source: [drivers/magnetometer/memsic/mmc5983ma](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/memsic/mmc5983ma) - -### Usage +### Usage {#mmc5983ma_usage} + ``` mmc5983ma [arguments...] Commands: @@ -276,11 +298,13 @@ mmc5983ma [arguments...] status print status info ``` + ## qmc5883l + Source: [drivers/magnetometer/qmc5883l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/qmc5883l) - -### Usage +### Usage {#qmc5883l_usage} + ``` qmc5883l [arguments...] Commands: @@ -300,11 +324,13 @@ qmc5883l [arguments...] status print status info ``` + ## rm3100 + Source: [drivers/magnetometer/rm3100](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/rm3100) - -### Usage +### Usage {#rm3100_usage} + ``` rm3100 [arguments...] Commands: @@ -326,11 +352,13 @@ rm3100 [arguments...] status print status info ``` + ## vcm1193l + Source: [drivers/magnetometer/vtrantech/vcm1193l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/vtrantech/vcm1193l) - -### Usage +### Usage {#vcm1193l_usage} + ``` vcm1193l [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_optical_flow.md b/docs/en/modules/modules_driver_optical_flow.md index 2d2b25e45b..2c734b5c3f 100644 --- a/docs/en/modules/modules_driver_optical_flow.md +++ b/docs/en/modules/modules_driver_optical_flow.md @@ -1,5 +1,7 @@ # Modules Reference: Optical Flow (Driver) + ## thoneflow + Source: [drivers/optical_flow/thoneflow](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/thoneflow) @@ -22,8 +24,8 @@ Stop driver thoneflow stop ``` - -### Usage +### Usage {#thoneflow_usage} + ``` thoneflow [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_radio_control.md b/docs/en/modules/modules_driver_radio_control.md new file mode 100644 index 0000000000..98489438e5 --- /dev/null +++ b/docs/en/modules/modules_driver_radio_control.md @@ -0,0 +1,126 @@ +# Modules Reference: Radio Control (Driver) + +## crsf_rc + +Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) + + +### Description +This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data + + +### Usage {#crsf_rc_usage} + +``` +crsf_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## dsm_rc + +Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) + + +### Description +This module does Spektrum DSM RC input parsing. + + +### Usage {#dsm_rc_usage} + +``` +dsm_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## ghst_rc + +Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) + + +### Description +This module does Ghost (GHST) RC input parsing. + + +### Usage {#ghst_rc_usage} + +``` +ghst_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## rc_input + +Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) + + +### Description +This module does the RC input parsing and auto-selecting the method. Supported methods are: +- PPM +- SBUS +- DSM +- SUMD +- ST24 +- TBS Crossfire (CRSF) + + +### Usage {#rc_input_usage} + +``` +rc_input [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## sbus_rc + +Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) + + +### Description +This module does SBUS RC input parsing. + + +### Usage {#sbus_rc_usage} + +``` +sbus_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` diff --git a/docs/en/modules/modules_driver_rpm_sensor.md b/docs/en/modules/modules_driver_rpm_sensor.md index f5cf246161..b4d7b95243 100644 --- a/docs/en/modules/modules_driver_rpm_sensor.md +++ b/docs/en/modules/modules_driver_rpm_sensor.md @@ -1,9 +1,11 @@ # Modules Reference: Rpm Sensor (Driver) + ## pcf8583 + Source: [drivers/rpm/pcf8583](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm/pcf8583) - -### Usage +### Usage {#pcf8583_usage} + ``` pcf8583 [arguments...] Commands: diff --git a/docs/en/modules/modules_driver_transponder.md b/docs/en/modules/modules_driver_transponder.md index 9f7d8ffaa9..799f9a9179 100644 --- a/docs/en/modules/modules_driver_transponder.md +++ b/docs/en/modules/modules_driver_transponder.md @@ -1,5 +1,7 @@ # Modules Reference: Transponder (Driver) + ## sagetech_mxs + Source: [drivers/transponder/sagetech_mxs](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/transponder/sagetech_mxs) @@ -21,8 +23,8 @@ Source: [drivers/transponder/sagetech_mxs](https://github.com/PX4/PX4-Autopilot/ Set the Squawk Code $ sagetech_mxs squawk 1200 - -### Usage +### Usage {#sagetech_mxs_usage} + ``` sagetech_mxs [arguments...] Commands: diff --git a/docs/en/modules/modules_estimator.md b/docs/en/modules/modules_estimator.md index 5af631e9f6..71041bcd50 100644 --- a/docs/en/modules/modules_estimator.md +++ b/docs/en/modules/modules_estimator.md @@ -1,6 +1,9 @@ # Modules Reference: Estimator + + ## AttitudeEstimatorQ + Source: [modules/attitude_estimator_q](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/attitude_estimator_q) @@ -8,8 +11,8 @@ Source: [modules/attitude_estimator_q](https://github.com/PX4/PX4-Autopilot/tree Attitude estimator q. - -### Usage +### Usage {#AttitudeEstimatorQ_usage} + ``` AttitudeEstimatorQ [arguments...] Commands: @@ -19,7 +22,9 @@ AttitudeEstimatorQ [arguments...] status print status info ``` + ## airspeed_estimator + Source: [modules/airspeed_selector](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/airspeed_selector) @@ -33,8 +38,8 @@ the estimation of a scale factor from IAS to CAS, it runs several wind estimator and also publishes those. - -### Usage +### Usage {#airspeed_estimator_usage} + ``` airspeed_estimator [arguments...] Commands: @@ -44,7 +49,9 @@ airspeed_estimator [arguments...] status print status info ``` + ## ekf2 + Source: [modules/ekf2](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/ekf2) @@ -57,8 +64,8 @@ ekf2 can be started in replay mode (`-r`): in this mode, it does not access the timestamps from the sensor topics. - -### Usage +### Usage {#ekf2_usage} + ``` ekf2 [arguments...] Commands: @@ -73,7 +80,9 @@ ekf2 [arguments...] select_instance Request switch to new estimator instance Specify desired estimator instance ``` + ## local_position_estimator + Source: [modules/local_position_estimator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/local_position_estimator) @@ -81,8 +90,8 @@ Source: [modules/local_position_estimator](https://github.com/PX4/PX4-Autopilot/ Attitude and position estimator using an Extended Kalman Filter. - -### Usage +### Usage {#local_position_estimator_usage} + ``` local_position_estimator [arguments...] Commands: @@ -92,15 +101,17 @@ local_position_estimator [arguments...] status print status info ``` + ## mc_hover_thrust_estimator + Source: [modules/mc_hover_thrust_estimator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mc_hover_thrust_estimator) ### Description - -### Usage +### Usage {#mc_hover_thrust_estimator_usage} + ``` mc_hover_thrust_estimator [arguments...] Commands: diff --git a/docs/en/modules/modules_simulation.md b/docs/en/modules/modules_simulation.md index e1e1d1333b..18c267517b 100644 --- a/docs/en/modules/modules_simulation.md +++ b/docs/en/modules/modules_simulation.md @@ -1,6 +1,9 @@ # Modules Reference: Simulation + + ## simulator_sih + Source: [modules/simulation/simulator_sih](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/simulator_sih) @@ -22,8 +25,8 @@ Most of the variables are declared global in the .hpp file to avoid stack overfl - -### Usage +### Usage {#simulator_sih_usage} + ``` simulator_sih [arguments...] Commands: diff --git a/docs/en/modules/modules_system.md b/docs/en/modules/modules_system.md index caf39dbede..051b7137db 100644 --- a/docs/en/modules/modules_system.md +++ b/docs/en/modules/modules_system.md @@ -1,6 +1,9 @@ # Modules Reference: System + + ## battery_simulator + Source: [modules/simulation/battery_simulator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/battery_simulator) @@ -8,8 +11,8 @@ Source: [modules/simulation/battery_simulator](https://github.com/PX4/PX4-Autopi - -### Usage +### Usage {#battery_simulator_usage} + ``` battery_simulator [arguments...] Commands: @@ -19,7 +22,9 @@ battery_simulator [arguments...] status print status info ``` + ## battery_status + Source: [modules/battery_status](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/battery_status) @@ -33,8 +38,8 @@ The provided functionality includes: It runs in its own thread and polls on the currently selected gyro topic. - -### Usage +### Usage {#battery_status_usage} + ``` battery_status [arguments...] Commands: @@ -44,7 +49,9 @@ battery_status [arguments...] status print status info ``` + ## camera_feedback + Source: [modules/camera_feedback](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/camera_feedback) @@ -71,8 +78,8 @@ For the topics that are not discarded it creates a `CameraCapture` topic with th from the `CameraTrigger` and position information from the vehicle. - -### Usage +### Usage {#camera_feedback_usage} + ``` camera_feedback [arguments...] Commands: @@ -82,7 +89,9 @@ camera_feedback [arguments...] status print status info ``` + ## cdcacm_autostart + Source: [drivers/cdcacm_autostart](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/cdcacm_autostart) @@ -92,8 +101,8 @@ The supported protocols are: MAVLink, nsh, and ublox serial passthrough. If the the module will only try to start mavlink as long as the USB VBUS is detected. Otherwise it will spin and continue to check for VBUS and start mavlink once it is detected. - -### Usage +### Usage {#cdcacm_autostart_usage} + ``` cdcacm_autostart [arguments...] Commands: @@ -103,15 +112,17 @@ cdcacm_autostart [arguments...] status print status info ``` + ## commander + Source: [modules/commander](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/commander) ### Description The commander module contains the state machine for mode switching and failsafe behavior. - -### Usage +### Usage {#commander_usage} + ``` commander [arguments...] Commands: @@ -157,7 +168,9 @@ commander [arguments...] status print status info ``` + ## dataman + Source: [modules/dataman](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/dataman) @@ -174,8 +187,8 @@ Each type has a specific type and a fixed maximum amount of storage items, so th Reading and writing a single item is always atomic. - -### Usage +### Usage {#dataman_usage} + ``` dataman [arguments...] Commands: @@ -191,7 +204,9 @@ dataman [arguments...] status print status info ``` + ## dmesg + Source: [systemcmds/dmesg](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dmesg) @@ -207,14 +222,16 @@ Keep printing all messages in the background: dmesg -f & ``` - -### Usage +### Usage {#dmesg_usage} + ``` dmesg [arguments...] Commands: [-f] Follow: wait for new messages ``` + ## esc_battery + Source: [modules/esc_battery](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/esc_battery) @@ -222,8 +239,8 @@ Source: [modules/esc_battery](https://github.com/PX4/PX4-Autopilot/tree/main/src This implements using information from the ESC status and publish it as battery status. - -### Usage +### Usage {#esc_battery_usage} + ``` esc_battery [arguments...] Commands: @@ -233,7 +250,9 @@ esc_battery [arguments...] status print status info ``` + ## gyro_calibration + Source: [modules/gyro_calibration](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gyro_calibration) @@ -241,8 +260,8 @@ Source: [modules/gyro_calibration](https://github.com/PX4/PX4-Autopilot/tree/mai Simple online gyroscope calibration. - -### Usage +### Usage {#gyro_calibration_usage} + ``` gyro_calibration [arguments...] Commands: @@ -252,15 +271,17 @@ gyro_calibration [arguments...] status print status info ``` + ## gyro_fft + Source: [modules/gyro_fft](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gyro_fft) ### Description - -### Usage +### Usage {#gyro_fft_usage} + ``` gyro_fft [arguments...] Commands: @@ -270,7 +291,9 @@ gyro_fft [arguments...] status print status info ``` + ## heater + Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/heater) @@ -279,8 +302,8 @@ Background process running periodically on the LP work queue to regulate IMU tem This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. - -### Usage +### Usage {#heater_usage} + ``` heater [arguments...] Commands: @@ -290,7 +313,9 @@ heater [arguments...] status print status info ``` + ## i2c_launcher + Source: [systemcmds/i2c_launcher](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/i2c_launcher) @@ -298,19 +323,22 @@ Source: [systemcmds/i2c_launcher](https://github.com/PX4/PX4-Autopilot/tree/main Daemon that starts drivers based on found I2C devices. - -### Usage +### Usage {#i2c_launcher_usage} + ``` i2c_launcher [arguments...] Commands: start -b Bus number + -t battery index for calibration values (1 or 3) stop status print status info ``` + ## internal_combustion_engine_control + Source: [modules/internal_combustion_engine_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/internal_combustion_engine_control) @@ -363,8 +391,8 @@ The architecture is as shown below: - -### Usage +### Usage {#internal_combustion_engine_control_usage} + ``` internal_combustion_engine_control [arguments...] Commands: @@ -374,7 +402,9 @@ internal_combustion_engine_control [arguments...] status print status info ``` + ## land_detector + Source: [modules/land_detector](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/land_detector) @@ -401,8 +431,8 @@ position controller sets the thrust setpoint to zero. The module runs periodically on the HP work queue. - -### Usage +### Usage {#land_detector_usage} + ``` land_detector [arguments...] Commands: @@ -413,7 +443,9 @@ land_detector [arguments...] status print status info ``` + ## load_mon + Source: [modules/load_mon](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/load_mon) @@ -424,8 +456,8 @@ usage and publish the `cpuload` topic. On NuttX it also checks the stack usage of each process and if it falls below 300 bytes, a warning is output, which will also appear in the log file. - -### Usage +### Usage {#load_mon_usage} + ``` load_mon [arguments...] Commands: @@ -435,7 +467,9 @@ load_mon [arguments...] status print status info ``` + ## logger + Source: [modules/logger](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/logger) @@ -475,8 +509,8 @@ Or if already running: logger on ``` - -### Usage +### Usage {#logger_usage} + ``` logger [arguments...] Commands: @@ -509,15 +543,17 @@ logger [arguments...] status print status info ``` + ## mag_bias_estimator + Source: [modules/mag_bias_estimator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mag_bias_estimator) ### Description Online magnetometer bias estimator. - -### Usage +### Usage {#mag_bias_estimator_usage} + ``` mag_bias_estimator [arguments...] Commands: @@ -527,7 +563,9 @@ mag_bias_estimator [arguments...] status print status info ``` + ## manual_control + Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/manual_control) @@ -535,8 +573,8 @@ Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/ Module consuming manual_control_inputs publishing one manual_control_setpoint. - -### Usage +### Usage {#manual_control_usage} + ``` manual_control [arguments...] Commands: @@ -546,7 +584,9 @@ manual_control [arguments...] status print status info ``` + ## netman + Source: [systemcmds/netman](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/netman) @@ -580,8 +620,8 @@ Source: [systemcmds/netman](https://github.com/PX4/PX4-Autopilot/tree/main/src/s $ netman show # display current settings. $ netman update -i eth0 # do an update - -### Usage +### Usage {#netman_usage} + ``` netman [arguments...] Commands: @@ -594,7 +634,9 @@ netman [arguments...] [-i ] Set the interface name default: eth0 ``` + ## pwm_input + Source: [drivers/pwm_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/pwm_input) @@ -602,8 +644,8 @@ Source: [drivers/pwm_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/d Measures the PWM input on AUX5 (or MAIN5) via a timer capture ISR and publishes via the uORB 'pwm_input` message. - -### Usage +### Usage {#pwm_input_usage} + ``` pwm_input [arguments...] Commands: @@ -613,7 +655,9 @@ pwm_input [arguments...] status print status info ``` + ## rc_update + Source: [modules/rc_update](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/rc_update) @@ -626,8 +670,8 @@ and then publish as `rc_channels` and `manual_control_input`. To reduce control latency, the module is scheduled on input_rc publications. - -### Usage +### Usage {#rc_update_usage} + ``` rc_update [arguments...] Commands: @@ -637,7 +681,9 @@ rc_update [arguments...] status print status info ``` + ## replay + Source: [modules/replay](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/replay) @@ -658,8 +704,8 @@ the log. The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) page. - -### Usage +### Usage {#replay_usage} + ``` replay [arguments...] Commands: @@ -673,7 +719,9 @@ replay [arguments...] status print status info ``` + ## send_event + Source: [modules/events](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/events) @@ -683,8 +731,8 @@ It is currently only responsible for tone alarm on RC Loss. The tasks can be started via CLI or uORB topics (vehicle_command from MAVLink, etc.). - -### Usage +### Usage {#send_event_usage} + ``` send_event [arguments...] Commands: @@ -694,7 +742,9 @@ send_event [arguments...] status print status info ``` + ## sensor_agp_sim + Source: [modules/simulation/sensor_agp_sim](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_agp_sim) @@ -702,8 +752,8 @@ Source: [modules/simulation/sensor_agp_sim](https://github.com/PX4/PX4-Autopilot Module to simulate auxiliary global position measurements with optional failure modes for SIH simulation. - -### Usage +### Usage {#sensor_agp_sim_usage} + ``` sensor_agp_sim [arguments...] Commands: @@ -713,7 +763,9 @@ sensor_agp_sim [arguments...] status print status info ``` + ## sensor_arispeed_sim + Source: [modules/simulation/sensor_airspeed_sim](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_airspeed_sim) @@ -721,8 +773,8 @@ Source: [modules/simulation/sensor_airspeed_sim](https://github.com/PX4/PX4-Auto - -### Usage +### Usage {#sensor_arispeed_sim_usage} + ``` sensor_arispeed_sim [arguments...] Commands: @@ -732,7 +784,9 @@ sensor_arispeed_sim [arguments...] status print status info ``` + ## sensor_baro_sim + Source: [modules/simulation/sensor_baro_sim](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_baro_sim) @@ -740,8 +794,8 @@ Source: [modules/simulation/sensor_baro_sim](https://github.com/PX4/PX4-Autopilo - -### Usage +### Usage {#sensor_baro_sim_usage} + ``` sensor_baro_sim [arguments...] Commands: @@ -751,7 +805,9 @@ sensor_baro_sim [arguments...] status print status info ``` + ## sensor_gps_sim + Source: [modules/simulation/sensor_gps_sim](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_gps_sim) @@ -759,8 +815,8 @@ Source: [modules/simulation/sensor_gps_sim](https://github.com/PX4/PX4-Autopilot - -### Usage +### Usage {#sensor_gps_sim_usage} + ``` sensor_gps_sim [arguments...] Commands: @@ -770,7 +826,9 @@ sensor_gps_sim [arguments...] status print status info ``` + ## sensor_mag_sim + Source: [modules/simulation/sensor_mag_sim](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/sensor_mag_sim) @@ -778,8 +836,8 @@ Source: [modules/simulation/sensor_mag_sim](https://github.com/PX4/PX4-Autopilot - -### Usage +### Usage {#sensor_mag_sim_usage} + ``` sensor_mag_sim [arguments...] Commands: @@ -789,7 +847,9 @@ sensor_mag_sim [arguments...] status print status info ``` + ## sensors + Source: [modules/sensors](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/sensors) @@ -811,8 +871,8 @@ The provided functionality includes: It runs in its own thread and polls on the currently selected gyro topic. - -### Usage +### Usage {#sensors_usage} + ``` sensors [arguments...] Commands: @@ -823,7 +883,9 @@ sensors [arguments...] status print status info ``` + ## system_power_simulation + Source: [modules/simulation/system_power_simulator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/system_power_simulator) @@ -831,8 +893,8 @@ Source: [modules/simulation/system_power_simulator](https://github.com/PX4/PX4-A - -### Usage +### Usage {#system_power_simulation_usage} + ``` system_power_simulation [arguments...] Commands: @@ -842,7 +904,9 @@ system_power_simulation [arguments...] status print status info ``` + ## tattu_can + Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/tattu_can) @@ -850,8 +914,8 @@ Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/d Driver for reading data from the Tattu 12S 16000mAh smart battery. - -### Usage +### Usage {#tattu_can_usage} + ``` tattu_can [arguments...] Commands: @@ -861,7 +925,9 @@ tattu_can [arguments...] status print status info ``` + ## temperature_compensation + Source: [modules/temperature_compensation](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/temperature_compensation) @@ -873,8 +939,8 @@ routine at next boot, which allows the thermal calibration coeffecients to be ca a temperature cycle. - -### Usage +### Usage {#temperature_compensation_usage} + ``` temperature_compensation [arguments...] Commands: @@ -892,7 +958,9 @@ temperature_compensation [arguments...] status print status info ``` + ## time_persistor + Source: [modules/time_persistor](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/time_persistor) @@ -902,8 +970,8 @@ This allows monotonic time on systems that only have a software RTC (that is not Explicitly setting the time backwards (e.g. via system_time) is still possible. - -### Usage +### Usage {#time_persistor_usage} + ``` time_persistor [arguments...] Commands: @@ -913,7 +981,9 @@ time_persistor [arguments...] status print status info ``` + ## tune_control + Source: [systemcmds/tune_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/tune_control) @@ -934,8 +1004,8 @@ Play system tune #2: tune_control play -t 2 ``` - -### Usage +### Usage {#tune_control_usage} + ``` tune_control [arguments...] Commands: @@ -954,7 +1024,9 @@ tune_control [arguments...] stop Stop playback (use for repeated tunes) ``` + ## uxrce_dds_client + Source: [modules/uxrce_dds_client](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/uxrce_dds_client) @@ -967,8 +1039,8 @@ uxrce_dds_client start -t serial -d /dev/ttyS3 -b 921600 uxrce_dds_client start -t udp -h 127.0.0.1 -p 15555 ``` - -### Usage +### Usage {#uxrce_dds_client_usage} + ``` uxrce_dds_client [arguments...] Commands: @@ -989,7 +1061,9 @@ uxrce_dds_client [arguments...] status print status info ``` + ## work_queue + Source: [systemcmds/work_queue](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/work_queue) @@ -998,8 +1072,8 @@ Source: [systemcmds/work_queue](https://github.com/PX4/PX4-Autopilot/tree/main/s Command-line tool to show work queue status. - -### Usage +### Usage {#work_queue_usage} + ``` work_queue [arguments...] Commands: diff --git a/docs/en/modules/modules_template.md b/docs/en/modules/modules_template.md index 20f165cad5..523d9ff02b 100644 --- a/docs/en/modules/modules_template.md +++ b/docs/en/modules/modules_template.md @@ -1,6 +1,9 @@ # Modules Reference: Template + + ## module + Source: [templates/template_module](https://github.com/PX4/PX4-Autopilot/tree/main/src/templates/template_module) @@ -19,8 +22,8 @@ module start -f -p 42 ``` - -### Usage +### Usage {#module_usage} + ``` module [arguments...] Commands: @@ -33,7 +36,9 @@ module [arguments...] status print status info ``` + ## work_item_example + Source: [examples/work_item](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/work_item) @@ -41,8 +46,8 @@ Source: [examples/work_item](https://github.com/PX4/PX4-Autopilot/tree/main/src/ Example of a simple module running out of a work queue. - -### Usage +### Usage {#work_item_example_usage} + ``` work_item_example [arguments...] Commands: diff --git a/docs/en/msg_docs/AirspeedValidated.md b/docs/en/msg_docs/AirspeedValidated.md index 78c57ce748..b5fe9191a5 100644 --- a/docs/en/msg_docs/AirspeedValidated.md +++ b/docs/en/msg_docs/AirspeedValidated.md @@ -2,22 +2,28 @@ -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedValidated.msg) +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AirspeedValidated.msg) ```c +uint32 MESSAGE_VERSION = 1 + uint64 timestamp # time since system start (microseconds) -float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid -float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid -float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid +float32 indicated_airspeed_m_s # [m/s] Indicated airspeed (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # [m/s] Calibrated airspeed (CAS), set to NAN if invalid +float32 true_airspeed_m_s # [m/s] True airspeed (TAS), set to NAN if invalid +int8 airspeed_source # Source of currently published airspeed values +int8 DISABLED = -1 +int8 GROUND_MINUS_WIND = 0 +int8 SENSOR_1 = 1 +int8 SENSOR_2 = 2 +int8 SENSOR_3 = 3 +int8 SYNTHETIC = 4 + +# debug states float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid -float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid - -bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. - -int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid - +float32 calibraded_airspeed_synth_m_s # synthetic airspeed in m/s, set to NAN if invalid float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] float32 throttle_filtered # filtered fixed-wing throttle [-] float32 pitch_filtered # filtered pitch [rad] diff --git a/docs/en/msg_docs/AirspeedValidatedV0.md b/docs/en/msg_docs/AirspeedValidatedV0.md new file mode 100644 index 0000000000..9cd392a955 --- /dev/null +++ b/docs/en/msg_docs/AirspeedValidatedV0.md @@ -0,0 +1,27 @@ +# AirspeedValidatedV0 (UORB message) + + + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/AirspeedValidatedV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid +float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid + +float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid +float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid + +bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. + +int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid + +float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] +float32 throttle_filtered # filtered fixed-wing throttle [-] +float32 pitch_filtered # filtered pitch [rad] + +``` diff --git a/docs/en/msg_docs/Buffer128.md b/docs/en/msg_docs/Buffer128.md deleted file mode 100644 index 2df2cf3673..0000000000 --- a/docs/en/msg_docs/Buffer128.md +++ /dev/null @@ -1,17 +0,0 @@ -# Buffer128 (UORB message) - - - -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/Buffer128.msg) - -```c -uint64 timestamp # time since system start (microseconds) - -uint8 len # length of data -uint32 MAX_BUFLEN = 128 - -uint8[128] data # data - -# TOPICS voxl2_io_data - -``` diff --git a/docs/en/msg_docs/CellularStatus.md b/docs/en/msg_docs/CellularStatus.md index 87fda0b991..466a1272fe 100644 --- a/docs/en/msg_docs/CellularStatus.md +++ b/docs/en/msg_docs/CellularStatus.md @@ -1,37 +1,49 @@ # CellularStatus (UORB message) +Cellular status +This is currently used only for logging cell status from MAVLink. [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/CellularStatus.msg) ```c -uint64 timestamp # time since system start (microseconds) +# Cellular status +# +# This is currently used only for logging cell status from MAVLink. -uint8 CELLULAR_STATUS_FLAG_UNKNOWN=0 # State unknown or not reportable -uint8 CELLULAR_STATUS_FLAG_FAILED=1 # velocity setpoint -uint8 CELLULAR_STATUS_FLAG_INITIALIZING=2 # Modem is being initialized -uint8 CELLULAR_STATUS_FLAG_LOCKED=3 # Modem is locked -uint8 CELLULAR_STATUS_FLAG_DISABLED=4 # Modem is not enabled and is powered down -uint8 CELLULAR_STATUS_FLAG_DISABLING=5 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_DISABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLING=6 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_ENABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLED=7 # Modem is enabled and powered on but not registered with a network provider and not available for data connections -uint8 CELLULAR_STATUS_FLAG_SEARCHING=8 # Modem is searching for a network provider to register -uint8 CELLULAR_STATUS_FLAG_REGISTERED=9 # Modem is registered with a network provider, and data connections and messaging may be available for use -uint8 CELLULAR_STATUS_FLAG_DISCONNECTING=10 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTING=11 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTED=12 # One or more packet data bearers is active and connected +uint64 timestamp # [us] Time since system start. -uint8 CELLULAR_NETWORK_FAILED_REASON_NONE=0 # No error -uint8 CELLULAR_NETWORK_FAILED_REASON_UNKNOWN=1 # Error state is unknown -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_MISSING=2 # SIM is required for the modem but missing -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_ERROR=3 # SIM is available, but not usable for connection +uint16 status # [@enum STATUS_FLAG] Status bitmap. +uint16 STATUS_FLAG_UNKNOWN = 1 # State unknown or not reportable. +uint16 STATUS_FLAG_FAILED = 2 # Modem is unusable. +uint16 STATUS_FLAG_INITIALIZING = 4 # Modem is being initialized. +uint16 STATUS_FLAG_LOCKED = 8 # Modem is locked. +uint16 STATUS_FLAG_DISABLED = 16 # Modem is not enabled and is powered down. +uint16 STATUS_FLAG_DISABLING = 32 # Modem is currently transitioning to the STATUS_FLAG_DISABLED state. +uint16 STATUS_FLAG_ENABLING = 64 # Modem is currently transitioning to the STATUS_FLAG_ENABLED state. +uint16 STATUS_FLAG_ENABLED = 128 # Modem is enabled and powered on but not registered with a network provider and not available for data connections. +uint16 STATUS_FLAG_SEARCHING = 256 # Modem is searching for a network provider to register. +uint16 STATUS_FLAG_REGISTERED = 512 # Modem is registered with a network provider, and data connections and messaging may be available for use. +uint16 STATUS_FLAG_DISCONNECTING = 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. +uint16 STATUS_FLAG_CONNECTING = 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. +uint16 STATUS_FLAG_CONNECTED = 4096 # One or more packet data bearers is active and connected. -uint16 status # Status bitmap 1: Roaming is active -uint8 failure_reason #Failure reason when status in in CELLUAR_STATUS_FAILED -uint8 type # Cellular network radio type 0: none 1: gsm 2: cdma 3: wcdma 4: lte -uint8 quality # Cellular network RSSI/RSRP in dBm, absolute value -uint16 mcc # Mobile country code. If unknown, set to: UINT16_MAX -uint16 mnc # Mobile network code. If unknown, set to: UINT16_MAX -uint16 lac # Location area code. If unknown, set to: 0 +uint8 failure_reason # [@enum FAILURE_REASON] Failure reason. +uint8 FAILURE_REASON_NONE = 0 # No error. +uint8 FAILURE_REASON_UNKNOWN = 1 # Error state is unknown. +uint8 FAILURE_REASON_SIM_MISSING = 2 # SIM is required for the modem but missing. +uint8 FAILURE_REASON_SIM_ERROR = 3 # SIM is available, but not usable for connection. + +uint8 type # [@enum CELLULAR_NETWORK_RADIO_TYPE] Cellular network radio type. +uint8 CELLULAR_NETWORK_RADIO_TYPE_NONE = 0 # None +uint8 CELLULAR_NETWORK_RADIO_TYPE_GSM = 1 # GSM +uint8 CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2 # CDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3 # WCDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_LTE = 4 # LTE + +uint8 quality # [dBm] Cellular network RSSI/RSRP, absolute value. +uint16 mcc # [@invalid UINT16_MAX] Mobile country code. +uint16 mnc # [@invalid UINT16_MAX] Mobile network code. +uint16 lac # [@invalid 0] Location area code. ``` diff --git a/docs/en/msg_docs/FailsafeFlags.md b/docs/en/msg_docs/FailsafeFlags.md index 164f8bb216..c0763f555c 100644 --- a/docs/en/msg_docs/FailsafeFlags.md +++ b/docs/en/msg_docs/FailsafeFlags.md @@ -58,7 +58,7 @@ bool mission_failure # Mission failure bool vtol_fixed_wing_system_failure # vehicle in fixed-wing system failure failsafe mode (after quad-chute) bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded -bool local_position_accuracy_low # Local position estimate has dropped below threshold, but is currently still declared valid +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 diff --git a/docs/en/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/en/msg_docs/FixedWingLateralGuidanceStatus.md new file mode 100644 index 0000000000..02dc50b410 --- /dev/null +++ b/docs/en/msg_docs/FixedWingLateralGuidanceStatus.md @@ -0,0 +1,23 @@ +# FixedWingLateralGuidanceStatus (UORB message) + +Fixed Wing Lateral Guidance Status message +Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralGuidanceStatus.msg) + +```c +# Fixed Wing Lateral Guidance Status message +# Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +uint64 timestamp # time since system start (microseconds) + +float32 course_setpoint # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. Set by guidance law +float32 lateral_acceleration_ff # [m/s^2] [FRD] lateral acceleration demand only for maintaining curvature +float32 bearing_feas # [@range 0,1] bearing feasibility +float32 bearing_feas_on_track # [@range 0,1] on-track bearing feasibility +float32 signed_track_error # [m] signed track error +float32 track_error_bound # [m] track error bound +float32 adapted_period # [s] adapted period (if auto-tuning enabled) +uint8 wind_est_valid # [boolean] true = wind estimate is valid and/or being used by controller (also indicates if wind estimate usage is disabled despite being valid) + +``` diff --git a/docs/en/msg_docs/FixedWingLateralSetpoint.md b/docs/en/msg_docs/FixedWingLateralSetpoint.md new file mode 100644 index 0000000000..153167bb62 --- /dev/null +++ b/docs/en/msg_docs/FixedWingLateralSetpoint.md @@ -0,0 +1,22 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLateralSetpoint.msg) + +```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) + +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. + +``` diff --git a/docs/en/msg_docs/FixedWingLateralStatus.md b/docs/en/msg_docs/FixedWingLateralStatus.md new file mode 100644 index 0000000000..9214d1e9e0 --- /dev/null +++ b/docs/en/msg_docs/FixedWingLateralStatus.md @@ -0,0 +1,17 @@ +# FixedWingLateralStatus (UORB message) + +Fixed Wing Lateral Status message +Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralStatus.msg) + +```c +# Fixed Wing Lateral Status message +# Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +uint64 timestamp # time since system start (microseconds) + +float32 lateral_acceleration_setpoint # [m/s^2] [FRD] resultant lateral acceleration setpoint +float32 can_run_factor # [norm] [@range 0, 1] estimate of certainty of the correct functionality of the npfg roll setpoint + +``` diff --git a/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md new file mode 100644 index 0000000000..6b8fb29e5b --- /dev/null +++ b/docs/en/msg_docs/FixedWingLongitudinalSetpoint.md @@ -0,0 +1,26 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLongitudinalSetpoint.msg) + +```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) + +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 + +``` diff --git a/docs/en/msg_docs/FixedWingRunwayControl.md b/docs/en/msg_docs/FixedWingRunwayControl.md new file mode 100644 index 0000000000..9e9f5ff428 --- /dev/null +++ b/docs/en/msg_docs/FixedWingRunwayControl.md @@ -0,0 +1,19 @@ +# FixedWingRunwayControl (UORB message) + +Auxiliary control fields for fixed-wing runway takeoff/landing + +Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingRunwayControl.msg) + +```c +# Auxiliary control fields for fixed-wing runway takeoff/landing + +# Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +uint64 timestamp # [us] time since system start + +bool wheel_steering_enabled # Flag that enables the wheel steering. +float32 wheel_steering_nudging_rate # [norm] [@range -1, 1] [FRD] Manual wheel nudging, added to controller output. NAN is interpreted as 0. + +``` diff --git a/docs/en/msg_docs/LateralControlConfiguration.md b/docs/en/msg_docs/LateralControlConfiguration.md new file mode 100644 index 0000000000..b0a03a6378 --- /dev/null +++ b/docs/en/msg_docs/LateralControlConfiguration.md @@ -0,0 +1,18 @@ +# LateralControlConfiguration (UORB message) + +Fixed Wing Lateral Control Configuration message +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LateralControlConfiguration.msg) + +```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) + +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/LongitudinalControlConfiguration.md b/docs/en/msg_docs/LongitudinalControlConfiguration.md new file mode 100644 index 0000000000..901d5c23bc --- /dev/null +++ b/docs/en/msg_docs/LongitudinalControlConfiguration.md @@ -0,0 +1,28 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LongitudinalControlConfiguration.msg) + +```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) + +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 + +``` diff --git a/docs/en/msg_docs/NpfgStatus.md b/docs/en/msg_docs/NpfgStatus.md deleted file mode 100644 index 281c27acab..0000000000 --- a/docs/en/msg_docs/NpfgStatus.md +++ /dev/null @@ -1,26 +0,0 @@ -# NpfgStatus (UORB message) - - - -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/NpfgStatus.msg) - -```c -uint64 timestamp # time since system start (microseconds) - -uint8 wind_est_valid # (boolean) true = wind estimate is valid and/or being used by controller (also indicates if wind est usage is disabled despite being valid) -float32 lat_accel # resultant lateral acceleration reference [m/s^2] -float32 lat_accel_ff # lateral acceleration demand only for maintaining curvature [m/s^2] -float32 bearing_feas # bearing feasibility [0,1] -float32 bearing_feas_on_track # on-track bearing feasibility [0,1] -float32 signed_track_error # signed track error [m] -float32 track_error_bound # track error bound [m] -float32 airspeed_ref # (true) airspeed reference [m/s] -float32 bearing # bearing angle [rad] -float32 heading_ref # heading angle reference [rad] -float32 min_ground_speed_ref # minimum forward ground speed reference [m/s] -float32 adapted_period # adapted period (if auto-tuning enabled) [s] -float32 p_gain # controller proportional gain [rad/s] -float32 time_const # controller time constant [s] -float32 can_run_factor # estimate of certainty of the correct functionality of the npfg roll setpoint in [0, 1] - -``` diff --git a/docs/en/msg_docs/PurePursuitStatus.md b/docs/en/msg_docs/PurePursuitStatus.md index 41f4b9054f..c807b41165 100644 --- a/docs/en/msg_docs/PurePursuitStatus.md +++ b/docs/en/msg_docs/PurePursuitStatus.md @@ -13,6 +13,4 @@ float32 crosstrack_error # [m] Shortest distance from the vehicle to the pat float32 distance_to_waypoint # [m] Distance from the vehicle to the current waypoint float32 bearing_to_waypoint # [rad] Bearing towards current waypoint -# TOPICS pure_pursuit_status - ``` diff --git a/docs/en/msg_docs/RateCtrlStatus.md b/docs/en/msg_docs/RateCtrlStatus.md index 054a8aa9fd..28adaafbbd 100644 --- a/docs/en/msg_docs/RateCtrlStatus.md +++ b/docs/en/msg_docs/RateCtrlStatus.md @@ -11,6 +11,5 @@ uint64 timestamp # time since system start (microseconds) float32 rollspeed_integ float32 pitchspeed_integ float32 yawspeed_integ -float32 wheel_rate_integ # FW only and optional ``` diff --git a/docs/en/msg_docs/RoverAttitudeSetpoint.md b/docs/en/msg_docs/RoverAttitudeSetpoint.md index 922e5d05eb..c7b877c7f5 100644 --- a/docs/en/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/en/msg_docs/RoverAttitudeSetpoint.md @@ -9,6 +9,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_setpoint # [rad] Expressed in NED frame -# TOPICS rover_attitude_setpoint - ``` diff --git a/docs/en/msg_docs/RoverAttitudeStatus.md b/docs/en/msg_docs/RoverAttitudeStatus.md index 5b757b2e5c..3eae8b3f21 100644 --- a/docs/en/msg_docs/RoverAttitudeStatus.md +++ b/docs/en/msg_docs/RoverAttitudeStatus.md @@ -10,6 +10,4 @@ uint64 timestamp # time since system start (microseconds) float32 measured_yaw # [rad/s] Measured yaw rate float32 adjusted_yaw_setpoint # [rad/s] Yaw setpoint that is being tracked (Applied slew rates) -# TOPICS rover_attitude_status - ``` diff --git a/docs/en/msg_docs/RoverMecanumGuidanceStatus.md b/docs/en/msg_docs/RoverMecanumGuidanceStatus.md deleted file mode 100644 index 4a907f45b0..0000000000 --- a/docs/en/msg_docs/RoverMecanumGuidanceStatus.md +++ /dev/null @@ -1,16 +0,0 @@ -# RoverMecanumGuidanceStatus (UORB message) - - - -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverMecanumGuidanceStatus.msg) - -```c -uint64 timestamp # time since system start (microseconds) - -float32 lookahead_distance # [m] Lookahead distance of pure the pursuit controller -float32 heading_error # [rad] Heading error of the pure pursuit controller -float32 desired_speed # [m/s] Desired velocity magnitude (speed) - -# TOPICS rover_mecanum_guidance_status - -``` diff --git a/docs/en/msg_docs/RoverMecanumSetpoint.md b/docs/en/msg_docs/RoverMecanumSetpoint.md deleted file mode 100644 index 88a6f75ffe..0000000000 --- a/docs/en/msg_docs/RoverMecanumSetpoint.md +++ /dev/null @@ -1,20 +0,0 @@ -# RoverMecanumSetpoint (UORB message) - - - -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverMecanumSetpoint.msg) - -```c -uint64 timestamp # time since system start (microseconds) - -float32 forward_speed_setpoint # [m/s] Desired forward speed -float32 forward_speed_setpoint_normalized # [-1, 1] Desired normalized forward speed -float32 lateral_speed_setpoint # [m/s] Desired lateral speed -float32 lateral_speed_setpoint_normalized # [-1, 1] Desired normalized lateral speed -float32 yaw_rate_setpoint # [rad/s] Desired yaw rate -float32 speed_diff_setpoint_normalized # [-1, 1] Normalized speed difference between the left and right wheels -float32 yaw_setpoint # [rad] Desired yaw (heading) - -# TOPICS rover_mecanum_setpoint - -``` diff --git a/docs/en/msg_docs/RoverMecanumStatus.md b/docs/en/msg_docs/RoverMecanumStatus.md deleted file mode 100644 index 1330e7b923..0000000000 --- a/docs/en/msg_docs/RoverMecanumStatus.md +++ /dev/null @@ -1,26 +0,0 @@ -# RoverMecanumStatus (UORB message) - - - -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverMecanumStatus.msg) - -```c -uint64 timestamp # time since system start (microseconds) - -float32 measured_forward_speed # [m/s] Measured speed in body x direction. Positiv: forwards, Negativ: backwards -float32 adjusted_forward_speed_setpoint # [m/s] Speed setpoint after applying slew rate -float32 measured_lateral_speed # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left -float32 adjusted_lateral_speed_setpoint # [m/s] Speed setpoint after applying slew rate -float32 measured_yaw_rate # [rad/s] Measured yaw rate -float32 clyaw_yaw_rate_setpoint # [rad/s] Yaw rate setpoint output by the closed loop yaw controller -float32 adjusted_yaw_rate_setpoint # [rad/s] Yaw rate setpoint from the closed loop yaw controller -float32 measured_yaw # [rad] Measured yaw -float32 adjusted_yaw_setpoint # [rad] Yaw setpoint after applying slew rate -float32 pid_yaw_rate_integral # Integral of the PID for the closed loop yaw rate controller -float32 pid_yaw_integral # Integral of the PID for the closed loop yaw controller -float32 pid_forward_throttle_integral # Integral of the PID for the closed loop forward speed controller -float32 pid_lateral_throttle_integral # Integral of the PID for the closed loop lateral speed controller - -# TOPICS rover_mecanum_status - -``` diff --git a/docs/en/msg_docs/RoverPositionSetpoint.md b/docs/en/msg_docs/RoverPositionSetpoint.md new file mode 100644 index 0000000000..ae9bd9435e --- /dev/null +++ b/docs/en/msg_docs/RoverPositionSetpoint.md @@ -0,0 +1,17 @@ +# RoverPositionSetpoint (UORB message) + + + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverPositionSetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32[2] position_ned # 2-dimensional position setpoint in NED frame [m] +float32[2] start_ned # (Optional) 2-dimensional start position in NED frame used to define the line that the rover will track to position_ned [m] (Defaults to vehicle position) +float32 cruising_speed # (Optional) Specify rover speed [m/s] (Defaults to maximum speed) +float32 arrival_speed # (Optional) Specify arrival speed [m/s] (Defaults to zero) + +float32 yaw # [rad] [-pi,pi] from North. Optional, NAN if not set. Mecanum only. (Defaults to vehicle yaw) + +``` diff --git a/docs/en/msg_docs/RoverRateSetpoint.md b/docs/en/msg_docs/RoverRateSetpoint.md index 68ddf65176..80673ec810 100644 --- a/docs/en/msg_docs/RoverRateSetpoint.md +++ b/docs/en/msg_docs/RoverRateSetpoint.md @@ -9,6 +9,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_rate_setpoint # [rad/s] Expressed in NED frame -# TOPICS rover_rate_setpoint - ``` diff --git a/docs/en/msg_docs/RoverRateStatus.md b/docs/en/msg_docs/RoverRateStatus.md index e61ae29562..bf482738b3 100644 --- a/docs/en/msg_docs/RoverRateStatus.md +++ b/docs/en/msg_docs/RoverRateStatus.md @@ -11,6 +11,4 @@ float32 measured_yaw_rate # [rad/s] Measured yaw rate float32 adjusted_yaw_rate_setpoint # [rad/s] Yaw rate setpoint that is being tracked (Applied slew rates) float32 pid_yaw_rate_integral # Integral of the PID for the closed loop yaw rate controller -# TOPICS rover_rate_status - ``` diff --git a/docs/en/msg_docs/RoverSteeringSetpoint.md b/docs/en/msg_docs/RoverSteeringSetpoint.md index 0d74543ee9..fb21dba418 100644 --- a/docs/en/msg_docs/RoverSteeringSetpoint.md +++ b/docs/en/msg_docs/RoverSteeringSetpoint.md @@ -7,9 +7,8 @@ ```c uint64 timestamp # time since system start (microseconds) -float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Only for Ackermann-steered rovers) -float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Only for Differential/Mecanum rovers) +float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Ackermann only, Positiv: Steer right, Negativ: Steer left) -# TOPICS rover_steering_setpoint +float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Differential/Mecanum only, Positiv = Turn right, Negativ: Turn left) ``` diff --git a/docs/en/msg_docs/RoverThrottleSetpoint.md b/docs/en/msg_docs/RoverThrottleSetpoint.md index 6ba6bc1efc..8b4697eb13 100644 --- a/docs/en/msg_docs/RoverThrottleSetpoint.md +++ b/docs/en/msg_docs/RoverThrottleSetpoint.md @@ -8,9 +8,7 @@ uint64 timestamp # time since system start (microseconds) -float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] -float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] - -# TOPICS rover_throttle_setpoint +float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] (Positiv = forwards, Negativ = backwards) +float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] (Mecanum only, Positiv = right, Negativ = left) ``` diff --git a/docs/en/msg_docs/RoverVelocitySetpoint.md b/docs/en/msg_docs/RoverVelocitySetpoint.md new file mode 100644 index 0000000000..aa74dd065d --- /dev/null +++ b/docs/en/msg_docs/RoverVelocitySetpoint.md @@ -0,0 +1,14 @@ +# RoverVelocitySetpoint (UORB message) + + + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverVelocitySetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32 speed # [m/s] [-inf, inf] Speed setpoint (Backwards driving if negative) +float32 bearing # [rad] [-pi,pi] from North. [invalid: NAN, speed is defined in body x direction] +float32 yaw # [rad] [-pi, pi] (Mecanum only, Optional, defaults to current vehicle yaw) Vehicle yaw setpoint in NED frame + +``` diff --git a/docs/en/msg_docs/RoverVelocityStatus.md b/docs/en/msg_docs/RoverVelocityStatus.md index adb4480ac3..16a7e27684 100644 --- a/docs/en/msg_docs/RoverVelocityStatus.md +++ b/docs/en/msg_docs/RoverVelocityStatus.md @@ -8,14 +8,10 @@ uint64 timestamp # time since system start (microseconds) float32 measured_speed_body_x # [m/s] Measured speed in body x direction. Positiv: forwards, Negativ: backwards -float32 speed_body_x_setpoint # [m/s] Speed setpoint in body x direction. Positiv: forwards, Negativ: backwards float32 adjusted_speed_body_x_setpoint # [m/s] Post slew rate speed setpoint in body x direction. Positiv: forwards, Negativ: backwards -float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left -float32 speed_body_y_setpoint # [m/s] Speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) -float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) float32 pid_throttle_body_x_integral # Integral of the PID for the closed loop controller of the speed in body x direction -float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction - -# TOPICS rover_velocity_status +float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction (Mecanum only) ``` diff --git a/docs/en/msg_docs/TrajectorySetpoint6dof.md b/docs/en/msg_docs/TrajectorySetpoint6dof.md new file mode 100644 index 0000000000..f2629e19c4 --- /dev/null +++ b/docs/en/msg_docs/TrajectorySetpoint6dof.md @@ -0,0 +1,23 @@ +# TrajectorySetpoint6dof (UORB message) + +Trajectory setpoint in NED frame +Input to position controller. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/TrajectorySetpoint6dof.msg) + +```c +# Trajectory setpoint in NED frame +# Input to position controller. + +uint64 timestamp # time since system start (microseconds) + +# NED local world frame +float32[3] position # in meters +float32[3] velocity # in meters/second +float32[3] acceleration # in meters/second^2 +float32[3] jerk # in meters/second^3 (for logging only) + +float32[4] quaternion # unit quaternion +float32[3] angular_velocity # angular velocity in radians/second + +``` diff --git a/docs/en/msg_docs/VehicleAttitudeSetpoint.md b/docs/en/msg_docs/VehicleAttitudeSetpoint.md index 4237390400..69552e23ef 100644 --- a/docs/en/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/en/msg_docs/VehicleAttitudeSetpoint.md @@ -5,7 +5,7 @@ [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) ```c -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # time since system start (microseconds) @@ -18,10 +18,6 @@ float32[4] q_d # Desired quaternion for quaternion control # For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] -bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) - -bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) - # TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint ``` diff --git a/docs/en/msg_docs/VehicleAttitudeSetpointV0.md b/docs/en/msg_docs/VehicleAttitudeSetpointV0.md new file mode 100644 index 0000000000..9b3a8c655e --- /dev/null +++ b/docs/en/msg_docs/VehicleAttitudeSetpointV0.md @@ -0,0 +1,27 @@ +# VehicleAttitudeSetpointV0 (UORB message) + + + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 yaw_sp_move_rate # rad/s (commanded by user) + +# For quaternion-based attitude control +float32[4] q_d # Desired quaternion for quaternion control + +# For clarification: For multicopters thrust_body[0] and thrust[1] are usually 0 and thrust[2] is the negative throttle demand. +# For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. +float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] + +bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) + +bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) + +# TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint + +``` diff --git a/docs/en/msg_docs/VehicleCommand.md b/docs/en/msg_docs/VehicleCommand.md index c2cc25f241..19557cf496 100644 --- a/docs/en/msg_docs/VehicleCommand.md +++ b/docs/en/msg_docs/VehicleCommand.md @@ -11,127 +11,127 @@ Follows the MAVLink COMMAND_INT / COMMAND_LONG definition uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start. -uint16 VEHICLE_CMD_CUSTOM_0 = 0 # test command -uint16 VEHICLE_CMD_CUSTOM_1 = 1 # test command -uint16 VEHICLE_CMD_CUSTOM_2 = 2 # test command -uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing -uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |Radius [m] |Velocity [m/s] |Yaw behaviour |Empty |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |Major Radius [m] |Minor Radius [m] |Velocity [m/s] |Orientation |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| -uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| -uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time |Delay in seconds (decimal, -1 to enable time-of-day fields)| hour (24h format, UTC, -1 to ignore)| minute (24h format, UTC, -1 to ignore)| second (24h format, UTC)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| -uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold |2D coord mode: 0: Orthogonal to planned route | Altitude mode: 0: Ignore altitude| Empty| Empty| Lat| Lon| Alt| -uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately |Flight termination activated if > 0.5| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value |Altitude| Frame of new altitude | Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1| Actuator 2| Actuator 3| Actuator 4| Actuator 5| Actuator 6| Index| -uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Empty| Empty| Empty| Empty| Latitude| Longitude| Empty| -uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |Altitude (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |Ground speed [m/s] |Bitmask |Loiter radius [m] for planes |Yaw [deg] |Latitude |Longitude |Altitude | +uint16 VEHICLE_CMD_CUSTOM_0 = 0 # Test command. +uint16 VEHICLE_CMD_CUSTOM_1 = 1 # Test command. +uint16 VEHICLE_CMD_CUSTOM_2 = 2 # Test command. +uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |[s] (decimal) Hold time. (ignored by fixed wing, time to stay at MISSION for rotary wing)|[m] Acceptance radius (if the sphere with this radius is hit, the MISSION counts as reached)|0 to pass through the WP, if > 0 radius [m] to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.|Desired yaw angle at MISSION (rotary wing)|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time. |Unused|Unused|[m] Radius around MISSION. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns. |Turns|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for time. |[s] Seconds (decimal)|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand. |Unused (FW pitch from FW_TKO_PITCH_MIN)|Unused|Unused|[deg] [@range 0,360] Yaw angle in NED if yaw source available, ignored otherwise|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude AMSL| +uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing. +uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |[m] Radius|[m/s] Velocity|[@enum ORBIT_YAW_BEHAVIOUR] Yaw behaviour|Unused|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |[m] Major radius|[m] Minor radius|[m/s] Velocity|Orientation|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| +uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning|0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid|Unused|[deg] [@range 0, 360] Yaw angle at goal, in compass degrees|Latitude/X of goal|Longitude/Y of goal|Altitude/Z of goal| +uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Unused|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min AMSL - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time. |[s] Delay (decimal, -1 to enable time-of-day fields)|[h] hour (24h format, UTC, -1 to ignore)|minute (24h format, UTC, -1 to ignore)|second (24h format, UTC)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration.|Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |[s] Delay (decimal seconds)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached.|Descent / Ascend rate (m/s)|Unused|Unused|Unused|Unused|Unused|Finish Altitude| +uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance [m]|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |[deg] [@range 0,360] Target angle. 0 is north|[deg/s] Speed during yaw change|[@range -1,1] Direction: negative: counter clockwise, positive: clockwise |[ 1,0] Relative offset or absolute angle|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold. |2D coord mode: 0: Orthogonal to planned route|Altitude mode: 0: Ignore altitude|Unused|Unused|Lat|Lon|Alt| +uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times. |Sequence number|Repeat count|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |[@enum SPEED_TYPE] Speed type (0=Airspeed, 1=Ground Speed)|Speed (m/s, -1 indicates no change)|[%] Throttle ( Percent, -1 indicates no change)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number|Parameter value|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number|Setting (1=on, 0=off, others possible depending on system hardware)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number|Cycle count|[s] Cycle time (decimal seconds)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number|[us] PWM rate (1000 to 2000 typical)|Cycle count|[s] Cycle time|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately. |Flight termination activated if > 0.5|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value. |Altitude|Frame of new altitude|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1|Actuator 2|Actuator 3|Actuator 4|Actuator 5|Actuator 6|Index| +uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Unused|Unused|Unused|Unused|Latitude|Longitude|Unused| +uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |[m] Altitude|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |[m/s] Ground speed|Bitmask|[m] Loiter radius for planes|[deg] Yaw|Latitude|Longitude|Altitude| uint16 VEHICLE_CMD_DO_PAUSE_CONTINUE = 193 -uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| pitch offset from next waypoint| roll offset from next waypoint| yaw offset from next waypoint| -uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| +uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Pitch offset from next waypoint|Roll offset from next waypoint|Yaw offset from next waypoint| +uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)|Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw|Transmission mode: 0: video stream, >0: single images every n seconds (decimal seconds)|Recording: 0: disabled, 1: enabled compressed, 2: enabled raw|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| uint16 VEHICLE_CMD_DO_DIGICAM_CONTROL=203 -uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount |pitch or lat in degrees, depending on mount mode.| roll or lon in degrees depending on mount mode| yaw or alt (in meters) depending on mount mode| reserved| reserved| reserved| MAV_MOUNT_MODE enum value| -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence |enable? (0=disable, 1=enable)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute |action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # motor test command |Instance (1, ...)| throttle type| throttle| timeout [s]| Motor count | Test order| Empty| -uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight |inverted (0=normal, 1=inverted)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)| q2 - quaternion param #2, x (0 in null-rotation)| q3 - quaternion param #3, y (0 in null-rotation)| q4 - quaternion param #4, z (0 in null-rotation)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See mavlink spec MAV_CMD_PREFLIGHT_CALIBRATION -uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration -uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| -uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started -uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight|Camera trigger distance (meters)| Shutter integration time (ms)| Camera minimum trigger interval| Number of positions| Roll| Pitch| Empty| -uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode |MAV_STANDARD_MODE| -uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal +uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount. |[@enum MAV_MOUNT_MODE] Mount operation mode|Stabilize roll? (1 = yes, 0 = no)|Stabilize pitch? (1 = yes, 0 = no)|stabilize yaw? (1 = yes, 0 = no)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount. |[deg] Pitch or lat, depending on mount mode.|[deg] Roll or lon depending on mount mode|[deg]/[m] Yaw or alt depending on mount mode|Unused|Unused|Unused|[@enum MAV_MOUNT_MODE]| +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence. |enable? (0=disable, 1=enable)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute. |action [@enum PARACHUTE_ACTION] (0=disable, 1=enable, 2=release, for some systems see [@enum PARACHUTE_ACTION], not in general message set.)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # Motor test command. |Instance (@range 1, )|throttle type|throttle|timeout [s]|Motor count|Test order|Unused| +uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight. |inverted (0=normal, 1=inverted)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper. +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight. |[m] Camera trigger distance|Shutter integration time (ms)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)|q2 - quaternion param #2, x (0 in null-rotation)|q3 - quaternion param #3, y (0 in null-rotation)|q4 - quaternion param #4, z (0 in null-rotation)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min(AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See MAVLink spec MAV_CMD_PREFLIGHT_CALIBRATION. +uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. +uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow|X axis offset (or generic dimension 1), in the sensor's raw units|Y axis offset (or generic dimension 2), in the sensor's raw units|Z axis offset (or generic dimension 3), in the sensor's raw units|Generic dimension 4, in the sensor's raw units|Generic dimension 5, in the sensor's raw units|Generic dimension 6, in the sensor's raw units| +uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started. +uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.|0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Camera minimum trigger interval|Number of positions|Roll|Pitch|Unused| +uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode. |MAV_STANDARD_MODE| +uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal. -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|value [-1,1]|timeout [s]|Empty|Empty|output function| -uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command|configuration|Empty|Empty|Empty|output function| -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 -uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing |0:Spektrum| 0:Spektrum DSM2, 1:Spektrum DSMX| -uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message -uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities| Reserved (all remaining params)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| -uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.) -uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom +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_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. +uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing. |0:Spektrum|0:Spektrum DSM2, 1:Spektrum DSMX| +uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message. +uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities|Reserved (all remaining params)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)| +uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.). +uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom. uint16 VEHICLE_CMD_SET_CAMERA_FOCUS = 532 -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control -uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. -uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system -uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. -uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. -uint16 VEHICLE_CMD_LOGGING_START = 2510 # start streaming ULog data -uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # stop streaming ULog data -uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # control starting/stopping transmitting data over the high latency link -uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition -uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization -uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan -uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment -uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. -uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control. +uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. +uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. +uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. +uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. +uint16 VEHICLE_CMD_LOGGING_START = 2510 # Start streaming ULog data. +uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # Stop streaming ULog data. +uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # Control starting/stopping transmitting data over the high latency link. +uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition. +uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization. +uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan. +uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment. +uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. +uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. -uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # external reset of estimator global position when deadreckoning +uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning. uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004 -# PX4 vehicle commands (beyond 16 bit mavlink commands) -uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # start of PX4 internal only vehicle commands (> UINT16_MAX) -uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Empty|Empty|Empty|Empty|Latitude|Longitude|Altitude| -uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Empty|Empty|Empty|Empty|Empty|Empty| +# PX4 vehicle commands (beyond 16 bit MAVLink commands). +uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX). +uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Unused|Unused|Unused|Unused|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude (AMSL from GNSS, positive above ground)| +uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Unused|Unused|Unused|Unused|Unused|Unused| -uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization | -uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt | -uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # +uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. +uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. +uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt. +uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # -uint8 VEHICLE_ROI_NONE = 0 # No region of interest | -uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION | -uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION | -uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location | -uint8 VEHICLE_ROI_TARGET = 4 # Point toward target +uint8 VEHICLE_ROI_NONE = 0 # No region of interest. +uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION. +uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION. +uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. +uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 uint8 PARACHUTE_ACTION_DISABLE = 0 @@ -163,13 +163,13 @@ uint8 FAILURE_TYPE_SLOW = 5 uint8 FAILURE_TYPE_DELAYED = 6 uint8 FAILURE_TYPE_INTERMITTENT = 7 -# used as param1 in DO_CHANGE_SPEED command +# Used as param1 in DO_CHANGE_SPEED command. uint8 SPEED_TYPE_AIRSPEED = 0 uint8 SPEED_TYPE_GROUNDSPEED = 1 uint8 SPEED_TYPE_CLIMB_SPEED = 2 uint8 SPEED_TYPE_DESCEND_SPEED = 3 -# used as param3 in CMD_DO_ORBIT +# Used as param3 in CMD_DO_ORBIT. uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 @@ -177,29 +177,29 @@ uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 -# used as param1 in ARM_DISARM command +# Used as param1 in ARM_DISARM command. int8 ARMING_ACTION_DISARM = 0 int8 ARMING_ACTION_ARM = 1 -# param2 in VEHICLE_CMD_DO_GRIPPER +# param2 in VEHICLE_CMD_DO_GRIPPER. uint8 GRIPPER_ACTION_RELEASE = 0 uint8 GRIPPER_ACTION_GRAB = 1 uint8 ORB_QUEUE_LENGTH = 8 -float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. -uint32 command # Command ID -uint8 target_system # System which should execute the command -uint8 target_component # Component which should execute the command, 0 for all components -uint8 source_system # System sending the command -uint16 source_component # Component / mode executor sending the command -uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) +float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. +uint32 command # Command ID. +uint8 target_system # System which should execute the command. +uint8 target_component # Component which should execute the command, 0 for all components. +uint8 source_system # System sending the command. +uint16 source_component # Component / mode executor sending the command. +uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command). bool from_external uint16 COMPONENT_MODE_EXECUTOR_START = 1000 diff --git a/docs/en/msg_docs/index.md b/docs/en/msg_docs/index.md index fdfe25731b..0904013766 100644 --- a/docs/en/msg_docs/index.md +++ b/docs/en/msg_docs/index.md @@ -15,10 +15,18 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [ActuatorMotors](ActuatorMotors.md) — Motor control message - [ActuatorServos](ActuatorServos.md) — Servo control message +- [AirspeedValidated](AirspeedValidated.md) - [ArmingCheckReply](ArmingCheckReply.md) - [ArmingCheckRequest](ArmingCheckRequest.md) - [BatteryStatus](BatteryStatus.md) - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors +- [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 @@ -26,6 +34,11 @@ 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 - [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. - [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. @@ -72,7 +85,6 @@ The coordinate system origin is the vehicle position at the time when the EKF2-m - [ActuatorTest](ActuatorTest.md) - [AdcReport](AdcReport.md) - [Airspeed](Airspeed.md) -- [AirspeedValidated](AirspeedValidated.md) - [AirspeedWind](AirspeedWind.md) - [AutotuneAttitudeControlStatus](AutotuneAttitudeControlStatus.md) - [ButtonEvent](ButtonEvent.md) @@ -80,7 +92,7 @@ The coordinate system origin is the vehicle position at the time when the EKF2-m - [CameraStatus](CameraStatus.md) - [CameraTrigger](CameraTrigger.md) - [CanInterfaceStatus](CanInterfaceStatus.md) -- [CellularStatus](CellularStatus.md) +- [CellularStatus](CellularStatus.md) — Cellular status - [CollisionConstraints](CollisionConstraints.md) — Local setpoint constraints in NED frame setting something to NaN means that no limit is provided - [ControlAllocatorStatus](ControlAllocatorStatus.md) @@ -116,6 +128,11 @@ scale errors, in-run bias and thermal drift (if thermal compensation is enabled - [FailsafeFlags](FailsafeFlags.md) — Input flags for the failsafe state machine set by the arming & health checks. - [FailureDetectorStatus](FailureDetectorStatus.md) - [FigureEightStatus](FigureEightStatus.md) +- [FixedWingLateralGuidanceStatus](FixedWingLateralGuidanceStatus.md) — Fixed Wing Lateral Guidance Status message +Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs +- [FixedWingLateralStatus](FixedWingLateralStatus.md) — Fixed Wing Lateral Status message +Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint +- [FixedWingRunwayControl](FixedWingRunwayControl.md) — Auxiliary control fields for fixed-wing runway takeoff/landing - [FlightPhaseEstimation](FlightPhaseEstimation.md) - [FollowTarget](FollowTarget.md) - [FollowTargetEstimator](FollowTargetEstimator.md) @@ -170,7 +187,6 @@ These are the externally visible LED's, not the board LED's - [NavigatorStatus](NavigatorStatus.md) — Current status of a Navigator mode The possible values of nav_state are defined in the VehicleStatus msg. - [NormalizedUnsignedSetpoint](NormalizedUnsignedSetpoint.md) -- [NpfgStatus](NpfgStatus.md) - [ObstacleDistance](ObstacleDistance.md) — Obstacle distances in front of the sensor. - [OffboardControlMode](OffboardControlMode.md) — Off-board control mode - [OnboardComputerStatus](OnboardComputerStatus.md) — ONBOARD_COMPUTER_STATUS message data @@ -207,10 +223,12 @@ This are the three next waypoints (or just the next two or one). - [RcParameterMap](RcParameterMap.md) - [RoverAttitudeSetpoint](RoverAttitudeSetpoint.md) - [RoverAttitudeStatus](RoverAttitudeStatus.md) +- [RoverPositionSetpoint](RoverPositionSetpoint.md) - [RoverRateSetpoint](RoverRateSetpoint.md) - [RoverRateStatus](RoverRateStatus.md) - [RoverSteeringSetpoint](RoverSteeringSetpoint.md) - [RoverThrottleSetpoint](RoverThrottleSetpoint.md) +- [RoverVelocitySetpoint](RoverVelocitySetpoint.md) - [RoverVelocityStatus](RoverVelocityStatus.md) - [Rpm](Rpm.md) - [RtlStatus](RtlStatus.md) @@ -248,6 +266,8 @@ such as Pozyx or NXP Rddrone. - [TelemetryStatus](TelemetryStatus.md) - [TiltrotorExtraControls](TiltrotorExtraControls.md) - [TimesyncStatus](TimesyncStatus.md) +- [TrajectorySetpoint6dof](TrajectorySetpoint6dof.md) — Trajectory setpoint in NED frame +Input to position controller. - [TransponderReport](TransponderReport.md) - [TuneControl](TuneControl.md) — This message is used to control the tunes, when the tune_id is set to CUSTOM then the frequency, duration are used otherwise those values are ignored. @@ -277,6 +297,8 @@ NaN means the state was not controlled - [WheelEncoders](WheelEncoders.md) - [Wind](Wind.md) - [YawEstimatorStatus](YawEstimatorStatus.md) +- [AirspeedValidatedV0](AirspeedValidatedV0.md) +- [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander \ No newline at end of file diff --git a/docs/en/releases/1.16.md b/docs/en/releases/1.16.md new file mode 100644 index 0000000000..9e293b6e62 --- /dev/null +++ b/docs/en/releases/1.16.md @@ -0,0 +1,196 @@ +# PX4-Autopilot v1.16.0 Release Notes + + + + + +
+
+

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

+
+
+ +This document covers all changes in PX4 v1.16.0 since the previous stable release ([PX4 v1.15.0](../releases/1.15.md)). + +::: info +These notes include only changes merged in 2023 and later — commits before 2023 are not listed. +::: + +## Read Before Upgrading + +Please continue reading for [upgrade instructions](#upgrade-guide). + +## Major Changes + +- **Rover support rework** + - New dedicated firmware build for rovers (airframe IDs 50000–52000) + - Separate modules for Ackermann, differential and mecanum rovers, each with manual, acro, stabilized, position and auto modes + - Shared pure-pursuit guidance library for all rover modules + - Legacy rover position control module deprecated in favor of the new modules + +## Upgrade Guide + +- [PX4-Autopilot#24648](https://github.com/PX4/PX4-Autopilot/pull/24648): Added setting default for EKF2_EV_CTRL to 15 for VOXL 2 boards +- [PX4-Autopilot#22517](https://github.com/PX4/PX4-Autopilot/pull/22517): Change default ethernet IP +- [PX4-Autopilot#24602](https://github.com/PX4/PX4-Autopilot/pull/24602): remove serial port default from sf45 module + +## Other changes + +### Hardware Support + +- **[New Hardware]** [PX4-Autopilot#23830](https://github.com/PX4/PX4-Autopilot/pull/23830): Boards: ARK FPV FC +- **[New Hardware]** [PX4-Autopilot#23414](https://github.com/PX4/PX4-Autopilot/pull/23414): board: add cuav 7-nano +- **[New Hardware]** [PX4-Autopilot#24769](https://github.com/PX4/PX4-Autopilot/pull/24769): add new board corvon743v1 +- **[New Hardware]** [PX4-Autopilot#24018](https://github.com/PX4/PX4-Autopilot/pull/24018): boards: bluerobotics: navigator: Add initial support +- **[New Hardware]** [PX4-Autopilot#24147](https://github.com/PX4/PX4-Autopilot/pull/24147): boards: add new board micoair743-v2 +- **[New Hardware]** [PX4-Autopilot#23218](https://github.com/PX4/PX4-Autopilot/pull/23218): boards: add new board micoair h743 +- **[New Hardware]** [PX4-Autopilot#24512](https://github.com/PX4/PX4-Autopilot/pull/24512): boards: Add FMUv6s target +- **[New Hardware]** [PX4-Autopilot#23927](https://github.com/PX4/PX4-Autopilot/pull/23927): manifest: Add Skynode S baseboard +- **[New Hardware]** [PX4-Autopilot#23257](https://github.com/PX4/PX4-Autopilot/pull/23257): Add Tropic VMU board support (Baseboard for Teensy 4.1) +- **[New Hardware]** [PX4-Autopilot#23697](https://github.com/PX4/PX4-Autopilot/pull/23697): boards: add new board X-MAV AP-H743v2 +- **[New Hardware]** [PX4-Autopilot#23551](https://github.com/PX4/PX4-Autopilot/pull/23551): 3DR boards: Support for 3DR Control Zero H7 OEM Rev G +- **[New Hardware]** [PX4-Autopilot#23623](https://github.com/PX4/PX4-Autopilot/pull/23623): new board support ZeroOne x6 + +### Common + +- [Optical flow scaling factor - SENS_FLOW_SCALE](../sensor/optical_flow.md#scale-factor). ([PX4-Autopilot#23936](https://github.com/PX4/PX4-Autopilot/pull/23936)). +- [PX4-Autopilot#22813](https://github.com/PX4/PX4-Autopilot/pull/22813): Reintroduce optional parameter versioning mechanism for airframe maintainers + +- [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 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. + ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). +- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. + Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. + This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. + ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). +- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) +- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. + This typically reduces false warnings due to magnetometer inconsistencies. + ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). + +### Control + +- [PX4-Autopilot#23863](https://github.com/PX4/PX4-Autopilot/pull/23863): [Sponsored by ARK] Bidirectional DShot +- [PX4-Autopilot#24196](https://github.com/PX4/PX4-Autopilot/pull/24196): Make control allocation and actuator effectiveness a non-module-specific library +- [PX4-Autopilot#24221](https://github.com/PX4/PX4-Autopilot/pull/24221): Spacecraft Build and Bare Control Allocator + +- Configurable multicopter orbit-mode yaw via `MC_ORBIT_YAW_MOD` ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) +- Collision prevention now works in manual (acceleration-based) flight mode (`MPC_POS_MODE`) ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507)) + +### Estimation + +- [PX4-Autopilot#23854](https://github.com/PX4/PX4-Autopilot/pull/23854): EKF2: ellipsoidal earth navigation +- [PX4-Autopilot#23263](https://github.com/PX4/PX4-Autopilot/pull/23263): EKF2: Terrain state +- [PX4-Autopilot#23185](https://github.com/PX4/PX4-Autopilot/pull/23185): ekf2: add mag type init +- [PX4-Autopilot#23436](https://github.com/PX4/PX4-Autopilot/pull/23436): ekf2: Optical flow enabled by default + +- Position-loss failsafe delay removed; triggers 1 s after loss (see Common) + +### Sensors + +- [PX4-Autopilot#23656](https://github.com/PX4/PX4-Autopilot/pull/23656): Implemented AUAV absolute/differential pressure sensor support +- [PX4-Autopilot#23639](https://github.com/PX4/PX4-Autopilot/pull/23639): Implemented temperature sensor support for INA228 / INA238 +- [PX4-Autopilot#22744](https://github.com/PX4/PX4-Autopilot/pull/22744): Add Ublox ZED-F9P-15B +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Mag cal: automatically disable internal mags if external ones are available +- [PX4-Autopilot#23064](https://github.com/PX4/PX4-Autopilot/pull/23064): BMP581: Add Bosch BMP581 barometer +- [PX4-Autopilot#22914](https://github.com/PX4/PX4-Autopilot/pull/22914): Murata SCH16T IMU driver +- [PX4-Autopilot#23023](https://github.com/PX4/PX4-Autopilot/pull/23023): ST IIS2MDC Magnetometer driver +- [PX4-Autopilot#24121](https://github.com/PX4/PX4-Autopilot/pull/24121): Include distance sensor in dds topics +- [PX4-Autopilot#23925](https://github.com/PX4/PX4-Autopilot/pull/23925): drivers: magnetometer: mmc5983ma: Add SPI support +- [PX4-Autopilot#23909](https://github.com/PX4/PX4-Autopilot/pull/23909): drivers/magnetometer/ak09916: Add support to AK09915 +- [PX4-Autopilot#23362](https://github.com/PX4/PX4-Autopilot/pull/23362): Add Bosch BMM350 magnetometer + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Compass calibration now disables internal compass when external unit present, reducing false warnings + +### Simulation + +- **SIH**: + - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. + ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). + - SIH now supports the standard VTOL airframe + ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). +- **Gazebo**: + - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. + The default installer scripts (used for CI) and documentation have been updated. + This is required because Garden end-of-life is Nov 2024. + ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) + - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). + - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). + - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). + - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). + - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). + - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). + - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) + - [PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471): Gazebo: Moving platform + +### uXRCE-DDS / ROS2 + +- **[Feature]** [PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113): [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically +- [PX4-Autopilot#24582](https://github.com/PX4/PX4-Autopilot/pull/24582): dds_topics: add vtol_vehicle_status +- [PX4-Autopilot#24583](https://github.com/PX4/PX4-Autopilot/pull/24583): dds_topics: add home_position + +### MAVLink + +- TBD + +### Multi-Rotor + +- [PX4-Autopilot#24173](https://github.com/PX4/PX4-Autopilot/pull/24173): [Multirotor] add yaw torque low pass filter +- [PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943): Add gz model for quadtailsitter + +- [PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358): Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) +- [PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507): Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). + +### VTOL + +- TBD + +### Fixed-wing + +- [PX4-Autopilot#24167](https://github.com/PX4/PX4-Autopilot/pull/24167): Fixedwing: fix wheel controller +- [PX4-Autopilot#23520](https://github.com/PX4/PX4-Autopilot/pull/23520): FixedWing: allow position control without valid global position + +- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) + +### Rover + +This release contains a major rework for the rover support in PX4: + +- Complete restructure of the [rover related documentation](../frames_rover/index.md). +- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). +- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): + - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). +- New module dedicated to [differential rovers](../frames_rover/differential.md): + - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). +- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): + - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). +- Added rover-specific firmware build (`50000–52000`) for Ackermann, differential and mecanum rovers +- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). + This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): + - Generic Differential Rover `50000`. + - Generic Ackermann Rover `51000`. + - Axial SCX10 2 Trail Honcho `51001`. + - Generic Mecanum Rover `52000`. +- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. +- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). +- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. + +### Infrastructure + +- [PX4-Autopilot#24011](https://github.com/PX4/PX4-Autopilot/pull/24011): standard_modes: add vehicle-type specific standard modes +- [PX4-Autopilot#24020](https://github.com/PX4/PX4-Autopilot/pull/24020): ci: build all upload to releases +- [PX4-Autopilot#24002](https://github.com/PX4/PX4-Autopilot/pull/24002): ci: px4-dev container +- [PX4-Autopilot#23937](https://github.com/PX4/PX4-Autopilot/pull/23937): ci: workflow for ubuntu 24 +- [PX4-Autopilot#23869](https://github.com/PX4/PX4-Autopilot/pull/23869): ci: add test for Ubuntu 22.04 +- [PX4-Autopilot#23574](https://github.com/PX4/PX4-Autopilot/pull/23574): ci: try runs-on Dronecode Infra +- [PX4-Autopilot#23550](https://github.com/PX4/PX4-Autopilot/pull/23550): ci: replace build workflows diff --git a/docs/en/releases/index.md b/docs/en/releases/index.md index 4fedd56bbd..7c5aa295c5 100644 --- a/docs/en/releases/index.md +++ b/docs/en/releases/index.md @@ -2,7 +2,8 @@ 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 since v1.15) +- [main](../releases/main.md) (changes since v1.16) +- [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) - [v1.13](../releases/1.13.md) diff --git a/docs/en/releases/main.md b/docs/en/releases/main.md index b0cc688741..47e4c6a1bc 100644 --- a/docs/en/releases/main.md +++ b/docs/en/releases/main.md @@ -9,15 +9,15 @@ const { site } = useData();
-

This page is on a release bramch, 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 `main` branch since the last major release ([PX v1.15](../releases/1.15.md)). +This contains changes to PX4 `main` branch since the last major release ([PX v1.16](../releases/1.16.md)). ::: warning -The PX4 v1.15 release is in beta testing, pending release. -Update these notes with features that are going to be in `main` but not the PX4 v1.15 release. +PX4 v1.16 is in candidate-release testing, pending release. +Update these notes with features that are going to be in `main` but not the PX4 v1.16 release. ::: ## Read Before Upgrading @@ -40,22 +40,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Common -- [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 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. - ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). -- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. - Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. - This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. - ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). -- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) -- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. - This typically reduces false warnings due to magnetometer inconsistencies. - ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). +- TBD ### Control @@ -71,26 +56,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Simulation -- [SIH]: - - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. - ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). - - SIH now supports the standard VTOL airframe - ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). -- [Gazebo]: - - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. - The default installer scripts (used for CI) and documentation have been updated. - This is required because Garden end-of-life is Nov 2024. - ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) - - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). - - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). - - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). - - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). - - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). - - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). - - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) - - [Moving platform simulation](../sim_gazebo_gz/worlds#moving-platform) ([PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471)) +- TBD ### Ethernet @@ -98,7 +64,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### uXRCE-DDS / ROS2 -- **[Feature]** [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically ([PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113)) +- [PX4 ROS 2 Interface Library](../ros2/px4_ros2_control_interface.md) support for [Fixed Wing lateral/longitudinal setpoint](../ros2/px4_ros2_control_interface.md#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype) (`FwLateralLongitudinalSetpointType`) and [VTOL transitions](../ros2/px4_ros2_control_interface.md#controlling-a-vtol). ([PX4-Autopilot#24056](https://github.com/PX4/PX4-Autopilot/pull/24056)). ### MAVLink @@ -106,8 +72,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Multi-Rotor -- Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) -- Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507) +- TBD ### VTOL @@ -115,29 +80,11 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Fixed-wing -- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) +- TBD ### Rover -This release contains a major rework for the rover support in PX4: - -- Complete restructure of the [rover related documentation](../frames_rover/index.md). -- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). -- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): - - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). -- New module dedicated to [differential rovers](../frames_rover/differential.md): - - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). -- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): - - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). -- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). - This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): - - Generic Differential Rover `50000`. - - Generic Ackermann Rover `51000`. - - Axial SCX10 2 Trail Honcho `51001`. - - Generic Mecanum Rover `52000`. -- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. -- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). -- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. +- TBD ### ROS 2 diff --git a/docs/en/ros2/px4_ros2_control_interface.md b/docs/en/ros2/px4_ros2_control_interface.md index 5259bde63d..e7e3151c6c 100644 --- a/docs/en/ros2/px4_ros2_control_interface.md +++ b/docs/en/ros2/px4_ros2_control_interface.md @@ -341,6 +341,7 @@ The used types also define the compatibility with different vehicle types. The following sections provide a list of supported setpoint types: - [GotoSetpointType](#go-to-setpoint-gotosetpointtype): Smooth position and (optionally) heading control +- [FwLateralLongitudinalSetpointType](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype): Direct control of lateral and longitudinal fixed wing dynamics - [DirectActuatorsSetpointType](#direct-actuator-control-setpoint-directactuatorssetpointtype): Direct control of motors and flight surface servo setpoints :::tip @@ -355,7 +356,7 @@ You can add your own setpoint types by adding a class that inherits from `px4_ro This setpoint type is currently only supported for multicopters. ::: -Smoothly control position and (optionally) heading setpoints with the [px4_ros2::GotoSetpointType](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. +Smoothly control position and (optionally) heading setpoints with the [`px4_ros2::GotoSetpointType`](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. The setpoint type is streamed to FMU based position and heading smoothers formulated with time-optimal, maximum-jerk trajectories, with velocity and acceleration constraints. The most trivial use is simply inputting a 3D position into the update method: @@ -400,6 +401,137 @@ _goto_setpoint->update( max_heading_rate_rad_s); ``` +#### Fixed-Wing Lateral and Longitudinal Setpoint (FwLateralLongitudinalSetpointType) + + + +::: info +This setpoint type is supported for fixed-wing vehicles and for VTOLs in fixed-wing mode. +::: + +Use the [`px4_ros2::FwLateralLongitudinalSetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1FwLateralLongitudinalSetpointType.html) to directly control the lateral and longitudinal dynamics of a fixed-wing vehicle — that is, side-to-side motion (turning/banking) and forward/vertical motion (speeding up and climbing/descending), respectively. +This setpoint is streamed to the PX4 [_FwLateralLongitudinalControl_ module](../modules/modules_controller.md#fw-lat-lon-control), which decouples lateral and longitudinal inputs while ensuring that vehicle limits are respected. + +To control the vehicle, at least one lateral **and** one longitudinal setpoint must be provided: + +1. Of the longitudinal inputs: either `altitude` or `height_rate` must be finite to control vertical motion. + If both are set to `NAN`, the vehicle will maintain its current altitude. +2. Of the lateral inputs: at least one of `course`, `airspeed_direction`, or `lateral_acceleration` must be finite. + +For a detailed description of the controllable parameters, please refer to message definitions ([FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) and [FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md)). + +##### Basic Usage + +This type has a number of update methods, each allowing you to specify an increasing number of setpoints. + +The simplest method is `updateWithAltitude()`, which allows you to specify a `course` and `altitude` target setpoint: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, course); +``` + +PX4 uses the setpoints to compute the _roll angle_, _pitch angle_ and _throttle_ setpoints that are sent to lower level controllers. +Note that the commanded flight is expected to be relatively gentle/unaggressive when using this method. +This is done as follows: + +- Lateral control output: + + course setpoint (set by user) → airspeed direction (heading) setpoint → lateral acceleration setpoint → roll angle setpoint. + +- Longitudinal control output: + + altitude setpoint (set by user) → height rate setpoint → pitch angle setpoint and throttle settings. + +The `updateWithHeightRate()` method allows you to set a target `course` and `height_rate` (this is useful if the speed of ascent or descent matters, or needs to be dynamically controlled): + +```cpp +const float height_rate = 2.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithHeightRate(height_rate, course); +``` + +The `updateWithAltitude()` and `updateWithHeightRate()` methods allow you to additionally control the equivalent airspeed or lateral acceleration by specifying them as the third and fourth arguments, respectively: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +const float equivalent_aspd = 15.F; // m/s +const float lateral_acceleration = 2.F; // FRD, used as feedforward + +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, + course, + equivalent_aspd, + lateral_acceleration); +``` + +The equivalent airspeed and lateral acceleration arguments are defined as `std::optional`, so you can omit any of them by passing `std::nullopt`. + +::: tip +If both lateral acceleration and course setpoints are provided, the lateral acceleration setpoint will be used as feedforward. +::: + +##### Full Control Using the Setpoint Struct + +For full flexibility, you can create and pass a [`FwLateralLongitudinalSetpoint`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwLateralLongitudinalSetpoint.html) struct. +Each field is templated with `std::optional`. + +::: tip +If both course and airspeed direction are set: airspeed direction takes precedence, course is not controlled. +Lateral acceleration is treated as feedforward if either course or airspeed direction are also finite. +If both altitude and height rate are set: height rate takes precedence, altitude is not controlled. +::: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withCourse(0.F); +// setpoint_s.withAirspeedDirection(0.2F); // uncontrolled +setpoint_s.withLateralAcceleration(2.F); // feedforward +//setpoint_s.withAltitude(500.F); // uncontrolled +setpoint_s.withHeightRate(2.F); +setpoint_s.withEquivalentAirspeed(15.F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s); +``` + +The diagram below illustrates the interaction between the `FwLateralLongitudinalSetpointType` and PX4 when all inputs are set. + +![FW ROS Interaction](../../assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg) + +##### Advanced Configuration (Optional) + +You can also pass a [`FwControlConfiguration`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwControlConfiguration.html) struct along with the setpoint to override default controller settings and constraints such as pitch limits, throttle limits, and target sink/climb rates. +This is intended for advanced users: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withAirspeedDirection(0.F); +setpoint_s.withLateralAcceleration(2.F); // feedforward +setpoint_s.withAltitude(500.F); +setpoint_s.withEquivalentAirspeed(15.F); + +px4_ros2::FwControlConfiguration config_s; + +config_s.withTargetClimbRate(3.F); +config_s.withMaxAcceleration(5.F); +config_s.withThrottleLimits(0.4F, 0.6F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s, config_s); +``` + +All configuration fields are defined as `std::optional`. +Unset values will default to the PX4 configuration. +See [LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) and [FixedWingLongitudinalConfiguration](../msg_docs/LongitudinalControlConfiguration.md) for more information on configuration options. + +:::info +For safety, PX4 automatically limits configuration values to stay within the vehicle’s constraints. +For example, throttle overrides are clamped to remain between [`FW_THR_MIN`](../advanced_config/parameter_reference.md#FW_THR_MIN) +and [`FW_THR_MAX`](../advanced_config/parameter_reference.md#FW_THR_MAX). +::: + #### Direct Actuator Control Setpoint (DirectActuatorsSetpointType) Actuators can be directly controlled using the [px4_ros2::DirectActuatorsSetpointType](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1DirectActuatorsSetpointType.html) setpoint type. @@ -411,11 +543,55 @@ For example to control a quadrotor, you need to set the first 4 motors according If you want to control an actuator that does not control the vehicle's motion, but for example a payload servo, see [below](#controlling-an-independent-actuator-servo). ::: +### Controlling a VTOL + + + +To control a VTOL in an external flight mode, ensure you're returning the correct setpoint type based on the current flight configuration: + +- Multicopter mode: use a setpoint type that is compatible with multicopter control. For example: either the [`GotoSetpointType`](#go-to-setpoint-gotosetpointtype) or the [`TrajectorySetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1TrajectorySetpointType.html). +- Fixed-wing mode: Use the [`FwLateralLongitudinalSetpointType`](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype). + +As long as the VTOL remains in either multicopter or fixed-wing mode throughout the external mode, no additional handling is required. + +If you would like to command a VTOL transition in your external mode, you need to use the [VTOL API](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1VTOL.html). The VTOL API provides the functionality to command a transition and query the current state of the vehicle. + +Use this API with caution! +Commanding transitions externally makes the user partially responsible for ensuring smooth and safe behavior, unlike onboard transitions (e.g. via RC switch) where PX4 handles the full process: + +1. Ensure that both the `TrajectorySetpointType` and the `FwLateralLongitudinalSetpointType` are available to your mode. +2. Create an instance of `px4_ros2::VTOL` in the constructor of your mode. +3. To command a transition, you can use the `toMulticopter()` or `toFixedwing()` methods on your VTOL object to set the desired state. +4. During transition, send the following combination of setpoints: + + ```cpp + // Assuming the instance of the px4_ros2::VTOL object is called vtol + + // Send TrajectorySetpointType as follows: + Eigen::Vector3f acceleration_sp = vtol.computeAccelerationSetpointDuringTransition(); + Eigen::Vector3f velocity_sp{NAN, NAN, 0.f}; + + _trajectory_setpoint->update(velocity_sp, acceleration_sp); + + // Send FwLateralLongitudinalSetpointType with lateral input to realign vehicle as desired + + float course_sp = 0.F; // North + + _fw_lateral_longitudinal_setpoint->updateWithAltitude(NAN, course_sp) + ``` + + This will ensure that the transition is handled properly within PX4. + You can optionally pass a deceleration setpoint to `computeAccelerationSetpointDuringTransition()` to be used during back-transitions. + +To check the current state of the vehicle, use the `getCurrentState()` method on your `px4_ros2::VTOL` object. + +See [this external flight mode implementation](https://github.com/Auterion/px4-ros2-interface-lib/tree/main/examples/cpp/modes/vtol) for a practical example on how to use this API. + ### Controlling an Independent Actuator/Servo If you want to control an independent actuator (a servo), follow these steps: -1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink) +1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink). 2. Create an instance of [px4_ros2::PeripheralActuatorControls](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1PeripheralActuatorControls.html) in the constructor of your mode. 3. Call the `set()` method to control the actuator(s). This can be done independently of any active setpoints. @@ -427,6 +603,7 @@ You can access PX4 telemetry topics directly via the following classes: - [OdometryGlobalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryGlobalPosition.html): Global position - [OdometryLocalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryLocalPosition.html): Local position, velocity, acceleration, and heading - [OdometryAttitude](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAttitude.html): Vehicle attitude +- [OdometryAirspeed](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAirspeed.html): Airspeed For example, you can query the vehicle's current position estimate as follows: diff --git a/docs/en/ros2/px4_ros2_msg_translation_node.md b/docs/en/ros2/px4_ros2_msg_translation_node.md index a221d3fcb4..f9dab8a42a 100644 --- a/docs/en/ros2/px4_ros2_msg_translation_node.md +++ b/docs/en/ros2/px4_ros2_msg_translation_node.md @@ -1,6 +1,6 @@ # PX4 ROS 2 Message Translation Node - + The message translation node allows ROS 2 applications that were compiled against different versions of the PX4 messages to interwork with newer versions of PX4, and vice versa, without having to change either the application or the PX4 side. @@ -207,7 +207,7 @@ Message translations can be either _direct_ or _generic_. ### File Structure -Starting from PX4 v1.16 (main), the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: +Starting from PX4 v1.16, the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: ``` PX4-Autopilot diff --git a/docs/en/ros2/user_guide.md b/docs/en/ros2/user_guide.md index 04694a26ae..b13ba10b02 100644 --- a/docs/en/ros2/user_guide.md +++ b/docs/en/ros2/user_guide.md @@ -34,7 +34,7 @@ The generator uses the uORB message definitions in the source tree: [PX4-Autopil ROS 2 applications need to be built in a workspace that has the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware. You can include these by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your ROS 2 workspace (branches in the repo correspond to the messages for different PX4 releases). -Starting from PX4 v1.16 (main) in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. +Starting from PX4 v1.16, in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. This requires the [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to be running to ensure that messages can be converted and exchanged correctly. Note that the micro XRCE-DDS _agent_ itself has no dependency on client-side code. @@ -367,7 +367,7 @@ accelerometer_integral_dt: 4739 #### (Optional) Starting the Translation Node - + This example is built with PX4 and ROS2 versions that use the same message definitions. If you were to use incompatible [message versions](../middleware/uorb.md#message-versioning) you would need to install and run the [Message Translation Node](./px4_ros2_msg_translation_node.md) as well, before running the example: diff --git a/docs/en/sim_gazebo_gz/index.md b/docs/en/sim_gazebo_gz/index.md index bac64b0c9d..f4df3ea569 100644 --- a/docs/en/sim_gazebo_gz/index.md +++ b/docs/en/sim_gazebo_gz/index.md @@ -392,6 +392,11 @@ As long as the world file and the model file are in the Gazebo search path (`GZ_ However, `make px4_sitl gz__` won't work with them. ::: +## Extending Gazebo with Plugins + +World, vehicle (model), and sensor behaviour can be customised using plugins. +For more information see [Gazebo Plugins](../sim_gazebo_gz/plugins.md). + ## Multi-Vehicle Simulation Multi-Vehicle simulation is supported on Linux hosts. diff --git a/docs/en/sim_gazebo_gz/plugins.md b/docs/en/sim_gazebo_gz/plugins.md new file mode 100644 index 0000000000..3e4ea51e1d --- /dev/null +++ b/docs/en/sim_gazebo_gz/plugins.md @@ -0,0 +1,91 @@ +# Gazebo Plugins + +Gazebo plugins extend the simulator with custom functionality not provided by default. They can be attached to different entity types and allow you to add new sensors, modify world physics, or interact with the simulation environment. + +## Plugin Types + +Plugins can be attached to these entity types: + +- **World** - Global simulation behavior +- **Model** - Specific model functionality +- **Sensor** - Custom sensor implementations +- **Actor** - Dynamic entity behavior + +## Supported Plugins + +PX4 currently supports these plugins: + +- [OpticalFlowSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/optical_flow): Provides optical flow sensor simulation using OpenCV-based flow calculation. +- [GstCameraSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/gstreamer): Streams camera feeds via UDP (RTP/H.264) or RTMP with optional NVIDIA CUDA hardware acceleration. +- [MovingPlatformController](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/moving_platform_controller): Controls moving platforms (ships, trucks, etc.) for takeoff and landing scenarios. + Includes configurable velocity, heading, and random fluctuations. + +## Plugin Registration + +Plugins must be registered in the [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) file to be available in your world: + +```xml + + + + + + + + + + +``` + +## Creating Custom Plugins + +When developing new plugins: + +1. **Follow the plugin architecture** - Implement desired interfaces. + + You can start by copying the [Template plugin](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/template_plugin) which is a simple example that only implements `ISystemPreUpdate` and `ISystemPostUpdate`. + The interfaces are specified in the official [Gazebo documentation](https://gazebosim.org/api/sim/9/createsystemplugins.html). + +2. **Register your plugin** - Add it to [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) for discovery. +3. **Use the custom namespace** - Follow the pattern `custom::YourPluginName`. + +### Example Plugin Structure + +```cpp +class YourCustomSystem : + public gz::sim::System, + public gz::sim::ISystemPreUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + void PreUpdate(const gz::sim::UpdateInfo &_info, + gz::sim::EntityComponentManager &_ecm) final; + void PostUpdate(const gz::sim::UpdateInfo &_info, + const gz::sim::EntityComponentManager &_ecm) final; +}; + +// Plugin registration +GZ_ADD_PLUGIN(YourCustomSystem, gz::sim::System, + YourCustomSystem::ISystemPreUpdate, + YourCustomSystem::ISystemPostUpdate) +GZ_ADD_PLUGIN_ALIAS(YourCustomSystem, "custom::YourCustomSystem") +``` + +## Enabling a Plugin + +For world plugins all you need to do is [register the plugin](#plugin-registration) (add it to the `server.config`). +It will then be available to all worlds and vehicles. + +The process for adding vehicle model/sensor plugins is not documented. +This can tracked through [PX4-Autopilot#2493](https://github.com/PX4/PX4-Autopilot/issues/24939). + +## Resources + +- **PX4 Plugins**: [Repository source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins) +- **Official Gazebo Documentation**: [System Plugins Guide](https://gazebosim.org/api/sim/9/createsystemplugins.html) +- **Server Configuration**: [Configuration Reference](https://gazebosim.org/api/sim/9/server_config.html) +- **PX4 Gazebo-classic Plugins**: [PX4 Gazebo Classic Plugins](https://github.com/PX4/PX4-SITL_gazebo-classic/tree/main/src) + +::: info +Plugins for modern Gazebo are still evolving. The plugin system differs from Gazebo Classic. +::: diff --git a/docs/en/sim_gazebo_gz/worlds.md b/docs/en/sim_gazebo_gz/worlds.md index ef2d4206d0..7f0c4821c4 100644 --- a/docs/en/sim_gazebo_gz/worlds.md +++ b/docs/en/sim_gazebo_gz/worlds.md @@ -75,7 +75,7 @@ World with walls that is designed for testing [collision prevention](../computer ## Moving Platform - + [Empty world](#default) with the addition of a flat moving platform, to simulate drone operations from moving vehicles like ships or trucks. The platform is controlled by a plugin which is included in the world. The platform is at a height of 2m, so place the vehicle on it with: diff --git a/docs/en/sim_sih/index.md b/docs/en/sim_sih/index.md index 9bbd356d98..9f27250f1e 100644 --- a/docs/en/sim_sih/index.md +++ b/docs/en/sim_sih/index.md @@ -58,6 +58,7 @@ To set up/start SIH: 1. Open QGroundControl and wait for the flight controller too boot and connect. 1. 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) @@ -114,25 +115,31 @@ To run SIH as SITL: 1. Install the [PX4 Development toolchain](../dev_setup/dev_env.md). 1. Run the appropriate make command for each vehicle type (at the root of the PX4-Autopilot repository): - - quadrotor: + - Quadcopter ```sh make px4_sitl sihsim_quadx ``` - - Fixed-wing (plane): + - Hexacopter + + ```sh + make px4_sitl sihsim_hex + ``` + + - Fixed-wing (plane) ```sh make px4_sitl sihsim_airplane ``` - - XVert VTOL tailsitter: + - XVert VTOL tailsitter ```sh make px4_sitl sihsim_xvert ``` - - Standard VTOL: + - Standard VTOL ```sh make px4_sitl sihsim_standard_vtol @@ -231,7 +238,8 @@ For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init. The dynamic models for the various vehicles are: -- Quadrotor: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/assets/simulation/SIH_dynamic_model.pdf). +- Quadcopter: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/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. diff --git a/docs/en/simulation/community_supported_simulators.md b/docs/en/simulation/community_supported_simulators.md index 6aec7dba67..79f176ea72 100644 --- a/docs/en/simulation/community_supported_simulators.md +++ b/docs/en/simulation/community_supported_simulators.md @@ -14,8 +14,8 @@ Questions about these tools should be raised on the [discussion forums](../contr | 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

| | [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 very 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).

| -| [Simulation-In-Hardware](../sim_sih/index.md) (SIH) |

An alternative to HITL that offers a hard real-time simulation directly on the hardware autopilot. This simulator is 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).

Supported Vehicles: Plane, Quad, Tailsitter, Standard VTOL

| diff --git a/docs/en/telemetry/crsf_telemetry.md b/docs/en/telemetry/crsf_telemetry.md index a691778921..98f1e4507e 100644 --- a/docs/en/telemetry/crsf_telemetry.md +++ b/docs/en/telemetry/crsf_telemetry.md @@ -71,7 +71,7 @@ For ExpressLRS receivers wire to the flight controller UART as shown below (wiri ### Firmware Configuration/Build CRSF telemetry support is not included in any PX4 firmware by default. -To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver.md#crsf-rc) and removes [rc_input](../modules/modules_driver.md#rc-input). +To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver_radio_control.md#crsf-rc) and removes [rc_input](../modules/modules_driver_radio_control.md#rc-input). The steps are: diff --git a/docs/en/telemetry/jfi_telemetry.md b/docs/en/telemetry/jfi_telemetry.md index 553357f5fd..a6e7073379 100644 --- a/docs/en/telemetry/jfi_telemetry.md +++ b/docs/en/telemetry/jfi_telemetry.md @@ -20,7 +20,7 @@ Operating in the 2.4GHz frequency band, it allows unrestricted global use withou - **Frequency Band:** 2.4GHz - **Speed:** Up to 11 Mbps (adjustable) -- **Range:** Up to 500 meters (varies upon environments) +- **Range:** Up to 1000 meters (varies upon environments) - **Payload Capacity:** Up to 1024 bytes ### Network Schemes diff --git a/docs/en/tutorials/linux_sbus.md b/docs/en/tutorials/linux_sbus.md index 0569f7111e..6df65ca508 100644 --- a/docs/en/tutorials/linux_sbus.md +++ b/docs/en/tutorials/linux_sbus.md @@ -10,9 +10,7 @@ For an S.Bus receiver (or encoder - e.g. from Futaba, RadioLink, etc.) you will Then [Start the PX4 RC Driver](#start_driver) on the device, as shown below. - - -## Starting the Driver +## Starting the Driver {#start_driver} To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): @@ -20,11 +18,9 @@ To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): rc_input start -d /dev/ttyS2 ``` -For other driver usage information see: [rc_input](../modules/modules_driver.md#rc-input). +For other driver usage information see: [rc_input](../modules/modules_driver_radio_control.md#rc-input). - - -## Signal Inverter Circuit (S.Bus only) +## Signal Inverter Circuit (S.Bus only) {#signal_inverter_circuit} S.Bus is an _inverted_ UART communication signal. diff --git a/docs/ko/SUMMARY.md b/docs/ko/SUMMARY.md index 66b6ad276a..b559b40696 100644 --- a/docs/ko/SUMMARY.md +++ b/docs/ko/SUMMARY.md @@ -459,6 +459,7 @@ - [Vehicles](sim_gazebo_gz/vehicles.md) - [Advanced Lift Drag Tool](sim_gazebo_gz/tools_avl_automation.md) - [Worlds](sim_gazebo_gz/worlds.md) + - [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) - [Gazebo Classic Simulation](sim_gazebo_classic/index.md) @@ -491,12 +492,17 @@ - [Versioned](msg_docs/versioned_messages.md) - [ActuatorMotors](msg_docs/ActuatorMotors.md) - [ActuatorServos](msg_docs/ActuatorServos.md) + - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [ArmingCheckReply](msg_docs/ArmingCheckReply.md) - [ArmingCheckRequest](msg_docs/ArmingCheckRequest.md) - [BatteryStatus](msg_docs/BatteryStatus.md) - [ConfigOverrides](msg_docs/ConfigOverrides.md) + - [FixedWingLateralSetpoint](msg_docs/FixedWingLateralSetpoint.md) + - [FixedWingLongitudinalSetpoint](msg_docs/FixedWingLongitudinalSetpoint.md) - [GotoSetpoint](msg_docs/GotoSetpoint.md) - [HomePosition](msg_docs/HomePosition.md) + - [LateralControlConfiguration](msg_docs/LateralControlConfiguration.md) + - [LongitudinalControlConfiguration](msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](msg_docs/ManualControlSetpoint.md) - [ModeCompleted](msg_docs/ModeCompleted.md) - [RegisterExtComponentReply](msg_docs/RegisterExtComponentReply.md) @@ -525,10 +531,8 @@ - [ActuatorTest](msg_docs/ActuatorTest.md) - [AdcReport](msg_docs/AdcReport.md) - [Airspeed](msg_docs/Airspeed.md) - - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [AirspeedWind](msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](msg_docs/AutotuneAttitudeControlStatus.md) - - [Buffer128](msg_docs/Buffer128.md) - [ButtonEvent](msg_docs/ButtonEvent.md) - [CameraCapture](msg_docs/CameraCapture.md) - [CameraStatus](msg_docs/CameraStatus.md) @@ -567,6 +571,9 @@ - [FailsafeFlags](msg_docs/FailsafeFlags.md) - [FailureDetectorStatus](msg_docs/FailureDetectorStatus.md) - [FigureEightStatus](msg_docs/FigureEightStatus.md) + - [FixedWingLateralGuidanceStatus](msg_docs/FixedWingLateralGuidanceStatus.md) + - [FixedWingLateralStatus](msg_docs/FixedWingLateralStatus.md) + - [FixedWingRunwayControl](msg_docs/FixedWingRunwayControl.md) - [FlightPhaseEstimation](msg_docs/FlightPhaseEstimation.md) - [FollowTarget](msg_docs/FollowTarget.md) - [FollowTargetEstimator](msg_docs/FollowTargetEstimator.md) @@ -619,7 +626,6 @@ - [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) - [NavigatorStatus](msg_docs/NavigatorStatus.md) - [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) - - [NpfgStatus](msg_docs/NpfgStatus.md) - [ObstacleDistance](msg_docs/ObstacleDistance.md) - [OffboardControlMode](msg_docs/OffboardControlMode.md) - [OnboardComputerStatus](msg_docs/OnboardComputerStatus.md) @@ -655,13 +661,12 @@ - [RcParameterMap](msg_docs/RcParameterMap.md) - [RoverAttitudeSetpoint](msg_docs/RoverAttitudeSetpoint.md) - [RoverAttitudeStatus](msg_docs/RoverAttitudeStatus.md) - - [RoverMecanumGuidanceStatus](msg_docs/RoverMecanumGuidanceStatus.md) - - [RoverMecanumSetpoint](msg_docs/RoverMecanumSetpoint.md) - - [RoverMecanumStatus](msg_docs/RoverMecanumStatus.md) + - [RoverPositionSetpoint](msg_docs/RoverPositionSetpoint.md) - [RoverRateSetpoint](msg_docs/RoverRateSetpoint.md) - [RoverRateStatus](msg_docs/RoverRateStatus.md) - [RoverSteeringSetpoint](msg_docs/RoverSteeringSetpoint.md) - [RoverThrottleSetpoint](msg_docs/RoverThrottleSetpoint.md) + - [RoverVelocitySetpoint](msg_docs/RoverVelocitySetpoint.md) - [RoverVelocityStatus](msg_docs/RoverVelocityStatus.md) - [Rpm](msg_docs/Rpm.md) - [RtlStatus](msg_docs/RtlStatus.md) @@ -693,6 +698,7 @@ - [TelemetryStatus](msg_docs/TelemetryStatus.md) - [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) - [TimesyncStatus](msg_docs/TimesyncStatus.md) + - [TrajectorySetpoint6dof](msg_docs/TrajectorySetpoint6dof.md) - [TransponderReport](msg_docs/TransponderReport.md) - [TuneControl](msg_docs/TuneControl.md) - [UavcanParameterRequest](msg_docs/UavcanParameterRequest.md) @@ -716,13 +722,16 @@ - [WheelEncoders](msg_docs/WheelEncoders.md) - [Wind](msg_docs/Wind.md) - [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) + - [AirspeedValidatedV0](msg_docs/AirspeedValidatedV0.md) + - [VehicleAttitudeSetpointV0](msg_docs/VehicleAttitudeSetpointV0.md) - [VehicleStatusV0](msg_docs/VehicleStatusV0.md) - - [MAVLink Messaging](middleware/mavlink.md) + - [MAVLink Messaging](mavlink/index.md) - [Adding Messages](mavlink/adding_messages.md) - [Streaming Messages](mavlink/streaming_messages.md) - [Receiving Messages](mavlink/receiving_messages.md) - [Custom MAVLink Messages](mavlink/custom_messages.md) - - [Standard Modes Protocol](mavlink/standard_modes.md) + - [Protocols/Microservices](mavlink/protocols.md) + - [Standard Modes Protocol](mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) - [모듈과 명령어](modules/modules_main.md) - [자동 튜닝](modules/modules_autotune.md) @@ -739,6 +748,7 @@ - [자기 센서](modules/modules_driver_magnetometer.md) - [광류 센서](modules/modules_driver_optical_flow.md) - [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + - [Radio Control](modules/modules_driver_radio_control.md) - [Transponder](modules/modules_driver_transponder.md) - [추정기](modules/modules_estimator.md) - [시뮬레이션](modules/modules_simulation.md) @@ -851,6 +861,7 @@ - [출시](releases/index.md) - [main (alpha)](releases/main.md) + - [1.16 (release candidate)](releases/1.16.md) - [1.15 (stable)](releases/1.15.md) - [1.14](releases/1.14.md) - [1.13](releases/1.13.md) diff --git a/docs/ko/_sidebar.md b/docs/ko/_sidebar.md index a90f9efdd4..13cd7d8dbb 100644 --- a/docs/ko/_sidebar.md +++ b/docs/ko/_sidebar.md @@ -42,8 +42,9 @@ - [마인드레이서 BNF & RTF](/complete_vehicles_mc/mindracer_BNF_RTF.md) - [마인드레이서 210](/complete_vehicles_mc/mindracer210.md) - [나노마인드 110](/complete_vehicles_mc/nanomind110.md) - - [홀리브로 코피스 2](/complete_vehicles_mc/holybro_kopis2.md) - [Bitcraze Crazyflie 2.1](/complete_vehicles_mc/crazyflie21.md) + - [홀리브로 코피스 2](/complete_vehicles_mc/holybro_kopis2.md) + - [Amov F410 Drone](/complete_vehicles_mc/amov_F410_drone.md) - [Kits](/frames_multicopter/kits.md) - [X500 v2 (Pixhawk 6C)](/frames_multicopter/holybro_x500v2_pixhawk6c.md) - [X500 v2 (Pixhawk 5X)](/frames_multicopter/holybro_x500V2_pixhawk5x.md) @@ -182,6 +183,7 @@ - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) + - [Holybro Kakute H7 Wing](/flight_controller/kakuteh7-wing.md) - [Holybro Durandal](/flight_controller/durandal.md) - [Wiring Quickstart](/assembly/quick_start_durandal.md) - [Holybro Pix32 v5](/flight_controller/holybro_pix32_v5.md) @@ -253,6 +255,7 @@ - [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 SAM GPS](/gps_compass/ark_sam_gps.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) @@ -314,6 +317,7 @@ - [Joysticks](/config/joystick.md) - [Data Links](/data_links/index.md) - [MAVLink 텔레메트리(OSD/GCS) ](/peripherals/mavlink_peripherals.md) + - [텔레메트리 무선통신](/telemetry/index.md) - [SiK 무선통신](/telemetry/sik_radio.md) - [RFD900 (SiK) 텔레메트리](/telemetry/rfd900_telemetry.md) @@ -326,9 +330,13 @@ - [ARK Electron Microhard Serial Telemetry Radio](/telemetry/ark_microhard_serial.md) - [Holybro Microhard P900 Telemetry Radio](/telemetry/holybro_microhard_p900_radio.md) - [CUAV P8 Telemetry Radio](/telemetry/cuav_p8_radio.md) + - [J.Fi Wireless Telemetry Module](/telemetry/jfi_telemetry.md) - [HolyBro XBP9X - Discontinued](/telemetry/holybro_xbp9x_radio.md) + - [FrSky 텔레메트리](/peripherals/frsky_telemetry.md) + - [TBS Crossfire (CRSF) Telemetry](/telemetry/crsf_telemetry.md) + - [Satellite Comms (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) - [Power Systems](/power_systems/index.md) - [Battery Estimation Tuning](/config/battery.md) @@ -637,6 +645,7 @@ - [PowerButtonState](/msg_docs/PowerButtonState.md) - [PowerMonitor](/msg_docs/PowerMonitor.md) - [PpsCapture](/msg_docs/PpsCapture.md) + - [PurePursuitStatus](/msg_docs/PurePursuitStatus.md) - [PwmInput](/msg_docs/PwmInput.md) - [Px4ioStatus](/msg_docs/Px4ioStatus.md) - [QshellReq](/msg_docs/QshellReq.md) @@ -710,6 +719,10 @@ - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) - [MAVLink Messaging](/middleware/mavlink.md) + - [Adding Messages](/mavlink/adding_messages.md) + - [Streaming Messages](/mavlink/streaming_messages.md) + - [Receiving Messages](/mavlink/receiving_messages.md) + - [Custom MAVLink Messages](/mavlink/custom_messages.md) - [Standard Modes Protocol](/mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](/middleware/uxrce_dds.md) - [모듈과 명령어](/modules/modules_main.md) @@ -798,8 +811,10 @@ - [시험 MC_05 - 실내 비행 (수동 모드)](/test_cards/mc_05_indoor_flight_manual_modes.md) - [단위 테스트](/test_and_ci/unit_tests.md) - [지속 통합](/test_and_ci/continous_integration.md) - - [MAVSDK 통합 테스트](/test_and_ci/integration_testing_mavsdk.md) - - [ROS 통합 테스트](/test_and_ci/integration_testing.md) + - [Integration Testing](/test_and_ci/integration_testing.md) + - [MAVSDK 통합 테스트](/test_and_ci/integration_testing_mavsdk.md) + - [PX4 ROS2 Interface Library Integration Testing](/test_and_ci/integration_testing_px4_ros2_interface.md) + - [ROS 1 Integration Testing](/test_and_ci/integration_testing_ros1_mavros.md) - [도커 컨테이너](/test_and_ci/docker.md) - [유지보수](/test_and_ci/maintenance.md) @@ -840,4 +855,4 @@ - [1.15 (stable)](/releases/1.15.md) - [1.14](/releases/1.14.md) - [1.13](/releases/1.13.md) - - [1.12](/releases/1.12.md) \ No newline at end of file + - [1.12](/releases/1.12.md) diff --git a/docs/ko/config/safety.md b/docs/ko/config/safety.md index 8b5f473854..facf431d8d 100644 --- a/docs/ko/config/safety.md +++ b/docs/ko/config/safety.md @@ -187,7 +187,24 @@ Due to the inherent danger of this, this function is disabled using [CBRK_FLIGHT ## Position (GNSS) Loss Failsafe -The _Position Loss Failsafe_ is triggered if the quality of the PX4 global position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. +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: + +- 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). + +The relevant parameters shown below. + +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [EKF2_NOAID_TOUT](../advanced_config/parameter_reference.md#EKF2_NOAID_TOUT) | Maximum inertial dead-reckoning time, so the time after the last data sample was received of any sensor that constrains the velocity drift [microseconds]. | +| [COM_POS_FS_EPH](../advanced_config/parameter_reference.md#COM_POS_FS_EPH) | Horizontal position error threshold for hovering vehicles (Multicopters and VTOLs in hover). Fixed-wing vehicles have this value set to infinity. | + +### Position Loss Failsafe Action The failure action is controlled by [COM_POSCTL_NAVL](../advanced_config/parameter_reference.md#COM_POSCTL_NAVL), based on whether RC control is assumed to be available (and altitude information): diff --git a/docs/ko/contribute/docs.md b/docs/ko/contribute/docs.md index c5da3044ef..ea06c97615 100644 --- a/docs/ko/contribute/docs.md +++ b/docs/ko/contribute/docs.md @@ -182,11 +182,19 @@ Within the repository you created above: 5. 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, on Windows command line you can enable VSCode as your default editor by entering: + For example, you can enable VSCode as your default editor by entering: - ```sh - set EDITOR=code - ``` + - Windows: + + ```sh + set EDITOR=code + ``` + + - Linux: + + ```sh + export EDITOR=code + ``` 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). diff --git a/docs/ko/debug/failure_injection.md b/docs/ko/debug/failure_injection.md index a73ee69017..9c33504065 100644 --- a/docs/ko/debug/failure_injection.md +++ b/docs/ko/debug/failure_injection.md @@ -61,7 +61,7 @@ failure [-i ] - _instance number_ (optional): Instance number of affected sensor. 0 (기본값) 지정된 유형의 모든 센서를 나타냅니다. -### 예 +### Example To simulate losing RC signal without having to turn off your RC controller: diff --git a/docs/ko/dev_log/log_encryption.md b/docs/ko/dev_log/log_encryption.md index 59bfd961e1..5fdb48e126 100644 --- a/docs/ko/dev_log/log_encryption.md +++ b/docs/ko/dev_log/log_encryption.md @@ -12,7 +12,7 @@ To use it you will need to build firmware with this feature enabled and then upl ::: :::tip -Log encryption was has been improved in PX4 main (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). +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). diff --git a/docs/ko/flight_controller/kakuteh7-wing.md b/docs/ko/flight_controller/kakuteh7-wing.md index 4977f57f23..52868213ba 100644 --- a/docs/ko/flight_controller/kakuteh7-wing.md +++ b/docs/ko/flight_controller/kakuteh7-wing.md @@ -1,4 +1,6 @@ -# Holybro Kakute H7 V2 +# Holybro Kakute H743-Wing + + :::warning PX4 does not manufacture this (or any) autopilot. @@ -31,9 +33,7 @@ The board can be bought from one of the following shops (for example): | Buz-, Buz+ | Piezo buzzer | | | M1 to M14 | Motor signal outputs | | - - -## 부트로더 업데이트 +## PX4 Bootloader Update {#bootloader} The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). Before the PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. @@ -50,7 +50,7 @@ make holybro_kakuteh7-wing_default ## 펌웨어 설치 :::info -KakuteH7-wing is supported with PX4 master & PX4 v1.16 or newer.. +KakuteH7-wing is supported in PX4 v1.16 or newer. Prior to that release you will need to manually build and install the firmware. ::: diff --git a/docs/ko/flight_modes_fw/land.md b/docs/ko/flight_modes_fw/land.md index 3a96fa27f5..4287ea3ac3 100644 --- a/docs/ko/flight_modes_fw/land.md +++ b/docs/ko/flight_modes_fw/land.md @@ -41,11 +41,12 @@ The vehicle will flare if configured to do so (see [Flaring](../flight_modes_fw/ Land mode behaviour can be configured using the parameters below. -| 매개변수 | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | The loiter radius that the controller tracks for the whole landing sequence. | -| [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | The flight path angle setpoint. | -| [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | The airspeed setpoint. | +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | The loiter radius that the controller tracks for the whole landing sequence. | +| [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | The flight path angle setpoint. | +| [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | The airspeed setpoint. | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_LND_AIRSPD is below FW_AIRSPD_MIN. | ## See Also diff --git a/docs/ko/flight_modes_fw/takeoff.md b/docs/ko/flight_modes_fw/takeoff.md index a22a5df021..4de2c68554 100644 --- a/docs/ko/flight_modes_fw/takeoff.md +++ b/docs/ko/flight_modes_fw/takeoff.md @@ -43,13 +43,14 @@ Reaching the clearance altitude causes the vehicle to enter [Hold mode](../fligh Parameters that affect both catapult/hand-launch and runway takeoffs: -| 매개변수 | 설명 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [MIS_TAKEOFF_ALT](../advanced_config/parameter_reference.md#MIS_TAKEOFF_ALT) | Minimum altitude setpoint above Home that the vehicle will climb to during takeoff. | -| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Takeoff airspeed (is set to [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) if not defined by operator) | -| [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | This is the minimum pitch angle setpoint during the climbout phase | -| [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Maximum climb rate. | -| [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Flaps setpoint during takeoff | +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [MIS_TAKEOFF_ALT](../advanced_config/parameter_reference.md#MIS_TAKEOFF_ALT) | Minimum altitude setpoint above Home that the vehicle will climb to during takeoff. | +| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Takeoff airspeed (is set to [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) if not defined by operator) | +| [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | This is the minimum pitch angle setpoint during the climbout phase | +| [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Maximum climb rate. | +| [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Flaps setpoint during takeoff | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_TKO_AIRSPD is below FW_AIRSPD_MIN. | :::info The vehicle always respects normal FW max/min throttle settings during takeoff ([FW_THR_MIN](../advanced_config/parameter_reference.md#FW_THR_MIN), [FW_THR_MAX](../advanced_config/parameter_reference.md#FW_THR_MAX)). @@ -101,26 +102,25 @@ The _runway takeoff mode_ has the following phases: :::info For a smooth takeoff, the runway wheel controller possibly needs to be tuned. -It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)) and an outer loop that calculates heading setpoints from course errors and can be tuned via [RWTO_NPFG_PERIOD](#RWTO_NPFG_PERIOD). +It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)). ::: ### Parameters (Runway Takeoff) Runway takeoff is affected by the following parameters: -| 매개변수 | 설명 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RWTO_TKOFF](../advanced_config/parameter_reference.md#RWTO_TKOFF) | Enable runway takeoff | -| [FW_W_EN](../advanced_config/parameter_reference.md#FW_W_EN) | Enable wheel controller | -| [RWTO_MAX_THR](../advanced_config/parameter_reference.md#RWTO_MAX_THR) | Max throttle during runway takeoff | -| [RWTO_RAMP_TIME](../advanced_config/parameter_reference.md#RWTO_RAMP_TIME) | Throttle ramp up time | -| [RWTO_ROT_AIRSPD](../advanced_config/parameter_reference.md#RWTO_ROT_AIRSPD) | Airspeed threshold to start rotation (pitching up). If not configured by operator is set to 0.9\*FW_TKO_AIRSPD. | -| [RWTO_ROT_TIME](../advanced_config/parameter_reference.md#RWTO_ROT_TIME) | This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation. | -| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Airspeed setpoint during the takeoff climbout phase (after rotation). If not configured by operator is set to FW_AIRSPD_MIN. | -| [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Enable wheel controller nudging while on the runway | -| [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | The wingspan of the vehicle. Used to prevent wingstrikes. | -| [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | The height of the wings above ground (ground clearance). Used to prevent wingstrikes. | -| [RWTO_NPFG_PERIOD](../advanced_config/parameter_reference.md#RWTO_NPFG_PERIOD) | L1 period while steering on runway. Increase for less aggressive response to course errors. | +| 매개변수 | 설명 | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RWTO_TKOFF](../advanced_config/parameter_reference.md#RWTO_TKOFF) | Enable runway takeoff | +| [FW_W_EN](../advanced_config/parameter_reference.md#FW_W_EN) | Enable wheel controller | +| [RWTO_MAX_THR](../advanced_config/parameter_reference.md#RWTO_MAX_THR) | Max throttle during runway takeoff | +| [RWTO_RAMP_TIME](../advanced_config/parameter_reference.md#RWTO_RAMP_TIME) | Throttle ramp up time | +| [RWTO_ROT_AIRSPD](../advanced_config/parameter_reference.md#RWTO_ROT_AIRSPD) | Airspeed threshold to start rotation (pitching up). If not configured by operator is set to 0.9\*FW_TKO_AIRSPD. | +| [RWTO_ROT_TIME](../advanced_config/parameter_reference.md#RWTO_ROT_TIME) | This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation. | +| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Airspeed setpoint during the takeoff climbout phase (after rotation). If not configured by operator is set to FW_AIRSPD_MIN. | +| [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Enable wheel controller nudging while on the runway | +| [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | The wingspan of the vehicle. Used to prevent wingstrikes. | +| [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | The height of the wings above ground (ground clearance). Used to prevent wingstrikes. | ## See Also diff --git a/docs/ko/flight_modes_rover/ackermann.md b/docs/ko/flight_modes_rover/ackermann.md index b642013fb7..6dff34ad6e 100644 --- a/docs/ko/flight_modes_rover/ackermann.md +++ b/docs/ko/flight_modes_rover/ackermann.md @@ -137,7 +137,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | 통신 | 설명 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | diff --git a/docs/ko/flight_modes_rover/differential.md b/docs/ko/flight_modes_rover/differential.md index 991c521d20..3e21a99f05 100644 --- a/docs/ko/flight_modes_rover/differential.md +++ b/docs/ko/flight_modes_rover/differential.md @@ -115,7 +115,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | 통신 | 설명 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | diff --git a/docs/ko/flight_modes_rover/mecanum.md b/docs/ko/flight_modes_rover/mecanum.md index 85f05d238e..8e86e8afb1 100644 --- a/docs/ko/flight_modes_rover/mecanum.md +++ b/docs/ko/flight_modes_rover/mecanum.md @@ -140,7 +140,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | 통신 | 설명 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | diff --git a/docs/ko/frames_plane/reptile_dragon_2.md b/docs/ko/frames_plane/reptile_dragon_2.md index ee850cee30..0434987406 100644 --- a/docs/ko/frames_plane/reptile_dragon_2.md +++ b/docs/ko/frames_plane/reptile_dragon_2.md @@ -325,7 +325,7 @@ Access to this cable can be accomplished by simply removing the rear hatch and u ## Firmware Build -You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. +You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver_radio_control.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. These require some custom configuration to enable. diff --git a/docs/ko/frames_rover/ackermann.md b/docs/ko/frames_rover/ackermann.md index 80575a7ee9..3a8c1c191e 100644 --- a/docs/ko/frames_rover/ackermann.md +++ b/docs/ko/frames_rover/ackermann.md @@ -1,6 +1,6 @@ # Ackermann Rovers - + An _Ackermann rover_ controls its direction by pointing the front wheels in the direction of travel — the [Ackermann steering geometry](https://en.wikipedia.org/wiki/Ackermann_steering_geometry) compensates for the fact that wheels on the inside and outside of the turn move at different rates. This kind of steering is used on most commercial vehicles, including cars, trucks etc. diff --git a/docs/ko/frames_rover/differential.md b/docs/ko/frames_rover/differential.md index a74fbd1d50..95ffe04993 100644 --- a/docs/ko/frames_rover/differential.md +++ b/docs/ko/frames_rover/differential.md @@ -1,6 +1,6 @@ # Differential Rovers - + A differential rover's motion is controlled using a differential drive mechanism, where the left and right wheel speeds are adjusted independently to achieve the desired forward speed and yaw rate. Forward motion is achieved by driving both wheels at the same speed in the same direction. diff --git a/docs/ko/frames_rover/mecanum.md b/docs/ko/frames_rover/mecanum.md index 7d9a249156..548e7bcf4c 100644 --- a/docs/ko/frames_rover/mecanum.md +++ b/docs/ko/frames_rover/mecanum.md @@ -1,6 +1,6 @@ # Mecanum Rovers - + A Mecanum rover is a type of mobile robot that uses Mecanum wheels to achieve omnidirectional movement. These wheels are unique because they have rollers mounted at a 45-degree angle around their circumference, allowing the rover to move not only forward and backward but also side-to-side and diagonally without needing to rotate first. Each wheel is driven by its own motor, and by controlling the speed and direction of each motor, the rover can move in any direction or spin in place. diff --git a/docs/ko/mavlink/index.md b/docs/ko/mavlink/index.md new file mode 100644 index 0000000000..53ed4c4a1f --- /dev/null +++ b/docs/ko/mavlink/index.md @@ -0,0 +1,89 @@ +# MAVLink 메시징 + +[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. + +PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. + +This topic provides a brief overview of fundamental MAVLink concepts, such as messages, commands, and microservices. +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) +- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) +- [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Protocols/Microservices](../mavlink/protocols.md) + +:::info +We do not yet cover _command_ handling and sending, or how to implement your own microservices. +::: + +## MAVLink Overview + +MAVLink is a lightweight protocol that was designed for efficiently sending messages over unreliable low-bandwidth radio links. + +_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. +They are deliberately lightweight, with a constrained size, and no semantics for resending and acknowledgement. +Stand-alone messages are commonly used for streaming telemetry or status information, and for sending commands where no acknowledgement is required - such as setpoint commands sent at high rate. + +[Microservices](../mavlink/protocols.md) are "meta protocols" built on top of MAVLink messages. +They are used to communicate information that cannot be sent in a single message. + +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) is a service for sending commands that may need acknowledgement and retransmission (quality of service). +Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. +The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. +The command is automatically resent a number of times if no acknowledgment is received. +Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. + +Others services include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html), [Parameter Protocol](https://mavlink.io/en/services/parameter.html), and [Mission Protocol](https://mavlink.io/en/services/mission.html). +For more information on what PX4 supports see [Microservices](../mavlink/protocols.md). + +MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). +The MAVLink toolchain includes code generators that create programming-language-specific libraries from these definitions for sending and receiving messages. +Note that most generated libraries do not create code to implement microservices. + +The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): + +- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. + The definitions move to `common.xml` if accepted following testing. +- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. + These are supported by many flight stacks, ground stations, and MAVLink peripherals. + Flight stacks that use these definitions are more likely to interoperate. +- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. + They are present on the vast majority of flight stacks and implemented in the same way. +- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. + +The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. + +The protocol relies on each end of the communication having a shared definition of what messages are being sent. +What this means is that in order to communicate both ends of the communication must use libraries generated from the same XML definition. + + + +## PX4 and MAVLink + +PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. +In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. + +:::info +To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). +During development you can use definitions in `development.xml`. +You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. +::: + +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/). + +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`: + +- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). + You can change this to any other definition file, but the file must include `common.xml`. +- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). + +The files are generated into the build directory: `/build//mavlink/`. diff --git a/docs/ko/mavlink/protocols.md b/docs/ko/mavlink/protocols.md new file mode 100644 index 0000000000..e169080ae9 --- /dev/null +++ b/docs/ko/mavlink/protocols.md @@ -0,0 +1,51 @@ +# MAVLink Microservices (Protocols) + +MAVLink "microservices" are a protocols that use multiple messages exchanged between components to communicate more complicated information. +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) provides an efficient mechanism for packaging a command in a (particular) message and receiving acknowledgement of the command in another message. + +MAVLink microservices are documented the [MAVLink Guide](https://mavlink.io/en/services/) (this is not exhaustive: not all messages are grouped into protocols and not all protocols are documented). + +This section lists the services known to be supported/not supported by PX4 in this version. + +## Supported Microservices + +These services are known to be supported in some form: + +- [Battery Protocol](https://mavlink.io/en/services/battery.html) + - [BATTERY_STATUS](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) and [BATTERY_INFO](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) are streamed. +- Camera Protocols + - [Camera Protocol v2](https://mavlink.io/en/services/camera.html) + - [Camera Definition](https://mavlink.io/en/services/camera_def.html) +- [Command Protocol](https://mavlink.io/en/services/command.html) +- [Component Metadata Protocol](https://mavlink.io/en/services/component_information.html) +- [Events Interface](https://mavlink.io/en/services/events.html) +- [File Transfer Protocol (FTP)](https://mavlink.io/en/services/ftp.html) +- Gimbal Protocols + - [Gimbal Protocol v2](https://mavlink.io/en/services/gimbal_v2.html) + - Can be enabled by [Gimbal Configuration](../advanced/gimbal_control.md#mavlink-gimbal-mnt-mode-out-mavlink) + - PX4 an act as a MAVLink Gimbal for one FC-connected Gimbal +- [Heartbeat/Connection Protocol](https://mavlink.io/en/services/heartbeat.html) +- [High Latency Protocol](https://mavlink.io/en/services/high_latency.html) — PX4 streams [HIGH_LATENCY2](https://mavlink.io/en/messages/common.html#HIGH_LATENCY2) +- [Image Transmission Protocol](https://mavlink.io/en/services/image_transmission.html) +- [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) +- [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)) +- [Parameter Protocol](https://mavlink.io/en/services/parameter.html) +- [Parameter Protocol Extended](https://mavlink.io/en/services/parameter_ext.html) — Allows setting string parameters. Used for setting string parameters set in camera definition files. +- [Payload Protocol](https://mavlink.io/en/services/payload.html) +- [Ping Protocol](https://mavlink.io/en/services/ping.html) +- [Standard Modes Protocol](../mavlink/standard_modes.md) +- [Terrain Protocol](https://mavlink.io/en/services/terrain.html) +- [Time Synchronization](https://mavlink.io/en/services/timesync.html) +- [Traffic Management (UTM/ADS-B)](https://mavlink.io/en/services/traffic_management.html) +- [Arm Authorization Protocol](https://mavlink.io/en/services/arm_authorization.html) + +## 미지원 + +These services are not supported/used by PX4: + +- [Illuminator Protocol](https://mavlink.io/en/services/illuminator.html) +- [Tunnel Protocol](https://mavlink.io/en/services/tunnel.html) diff --git a/docs/ko/middleware/mavlink.md b/docs/ko/middleware/mavlink.md index 671b5fc149..c88fc7840e 100644 --- a/docs/ko/middleware/mavlink.md +++ b/docs/ko/middleware/mavlink.md @@ -1,87 +1 @@ -# MAVLink 메시징 - -[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. - -PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. - -This topic provides a brief overview of fundamental MAVLink concepts, such as messages, commands, and microservices. -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) -- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) -- [Custom MAVLink Messages](../mavlink/custom_messages.md) - -:::info -We do not yet cover _command_ handling and sending, or how to implement your own microservices. -::: - -## MAVLink Overview - -MAVLink is a lightweight protocol that was designed for efficiently sending messages over unreliable low-bandwidth radio links. - -_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. -They are deliberately lightweight, with a constrained size, and no semantics for resending and acknowledgement. -Stand-alone messages are commonly used for streaming telemetry or status information, and for sending commands where no acknowledgement is required - such as setpoint commands sent at high rate. - -The [Command Protocol](https://mavlink.io/en/services/command.html) is a higher level protocol for sending commands that may need acknowledgement. -Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. -The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. -The command is resent automatically if no acknowledgment is received. -Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. - -[Microservices](https://mavlink.io/en/services/) are other higher level protocols built on top of MAVLink messages. -They are used to communicate information that cannot be sent in a single message, and to deliver features such as reliable communication. -The command protocol described above is one such service. -Others include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html) and [Mission Protocol](https://mavlink.io/en/services/mission.html). - -MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). -The MAVLink toolchain includes code generators that create programming-language-specific libraries from these definitions for sending and receiving messages. -Note that most generated libraries do not create code to implement microservices. - -The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): - -- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. - The definitions move to `common.xml` if accepted following testing. -- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. - These are supported by many flight stacks, ground stations, and MAVLink peripherals. - Flight stacks that use these definitions are more likely to interoperate. -- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. - They are present on the vast majority of flight stacks and implemented in the same way. -- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. - -The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. - -The protocol relies on each end of the communication having a shared definition of what messages are being sent. -What this means is that in order to communicate both ends of the communication must use libraries generated from the same XML definition. - - - -## PX4 and MAVLink - -PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. -In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. - -:::info -To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). -During development you can use definitions in `development.xml`. -You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. -::: - -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/). - -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`: - -- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). - You can change this to any other definition file, but the file must include `common.xml`. -- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). - -The files are generated into the build directory: `/build//mavlink/`. + diff --git a/docs/ko/middleware/uorb.md b/docs/ko/middleware/uorb.md index d004aa9ff9..77b47e3229 100644 --- a/docs/ko/middleware/uorb.md +++ b/docs/ko/middleware/uorb.md @@ -116,9 +116,9 @@ As there are external tools using uORB messages from log files, such as [Flight ## Message Versioning - + -Optional message versioning was introduced in the `main` branch (planned for PX4 v1.16+) to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. +Optional message versioning was introduced PX4 v1.16 to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. Versioned messages are designed to remain more stable over time compared to their non-versioned counterparts, as they are intended to be used across multiple releases of PX4 and external systems, ensuring greater compatibility over longer periods. Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, where `x` corresponds to the current version of the message. diff --git a/docs/ko/middleware/uxrce_dds.md b/docs/ko/middleware/uxrce_dds.md index 3450478fb3..ab91044dd8 100644 --- a/docs/ko/middleware/uxrce_dds.md +++ b/docs/ko/middleware/uxrce_dds.md @@ -430,14 +430,17 @@ publications: - topic: /fmu/out/collision_constraints type: px4_msgs::msg::CollisionConstraints + rate_limit: 50. # Limit max publication rate to 50 Hz ... - topic: /fmu/out/vehicle_odometry type: px4_msgs::msg::VehicleOdometry + # Use default publication rate limit of 100 Hz - topic: /fmu/out/vehicle_status type: px4_msgs::msg::VehicleStatus + rate_limit: 5. - topic: /fmu/out/vehicle_trajectory_waypoint_desired type: px4_msgs::msg::VehicleTrajectoryWaypoint @@ -472,6 +475,8 @@ Each (`topic`,`type`) pairs defines: - `/fmu/out/` for topics that are _published_ by PX4. - `/fmu/in/` for topics that are _subscribed_ by PX4. 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. `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. 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. diff --git a/docs/ko/modules/modules_autotune.md b/docs/ko/modules/modules_autotune.md index dc963cf6d3..ce100baefd 100644 --- a/docs/ko/modules/modules_autotune.md +++ b/docs/ko/modules/modules_autotune.md @@ -6,9 +6,7 @@ Source: [modules/fw_autotune_attitude_control](https://github.com/PX4/PX4-Autopi ### 설명 - - -### 사용법 +### Usage {#fw_autotune_attitude_control_usage} ``` fw_autotune_attitude_control [arguments...] @@ -27,9 +25,7 @@ Source: [modules/mc_autotune_attitude_control](https://github.com/PX4/PX4-Autopi ### 설명 - - -### 사용법 +### Usage {#mc_autotune_attitude_control_usage} ``` mc_autotune_attitude_control [arguments...] diff --git a/docs/ko/modules/modules_command.md b/docs/ko/modules/modules_command.md index 4ebd49cd2b..6fba14c9ac 100644 --- a/docs/ko/modules/modules_command.md +++ b/docs/ko/modules/modules_command.md @@ -8,9 +8,7 @@ Source: [systemcmds/actuator_test](https://github.com/PX4/PX4-Autopilot/tree/mai WARNING: remove all props before using this command. - - -### 사용법 +### Usage {#actuator_test_usage} ``` actuator_test [arguments...] @@ -30,13 +28,13 @@ actuator_test [arguments...] iterate-servos Iterate all servos deflecting one after the other ``` -## dumpfile +## bl_update Source: [systemcmds/bl_update](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bl_update) -Utility to flash the bootloader from a file +Utility to flash the bootloader from a file -### 사용법 +### Usage {#bl_update_usage} ``` bl_update [arguments...] @@ -50,45 +48,43 @@ bl_update [arguments...] Source: [systemcmds/bsondump](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bsondump) -Utility to read BSON from a file and print or output document size. +Utility to read BSON from a file and print or output document size. -### 사용법 +### Usage {#bsondump_usage} ``` bsondump [arguments...] The BSON file to decode and print. ``` -## dyn +## dumpfile Source: [systemcmds/dumpfile](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dumpfile) -Dump file utility. Prints file size and contents in binary mode (don't replace LF with CR LF) to stdout. +Dump file utility. Prints file size and contents in binary mode (don't replace LF with CR LF) to stdout. -### 사용법 +### Usage {#dumpfile_usage} ``` dumpfile [arguments...] File to dump ``` -## esc_calib +## dyn Source: [systemcmds/dyn](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dyn) ### 설명 -소스: systemcmds/failure +Load and run a dynamic PX4 module, which was not compiled into the PX4 binary. -### 예 +### Example ``` dyn ./hello.px4mod start ``` - - -### 사용법 +### Usage {#dyn_usage} ``` dyn [arguments...] @@ -114,9 +110,7 @@ Test the GPS failsafe by stopping GPS: failure gps off - - -### 사용법 +### Usage {#failure_usage} ``` failure [arguments...] @@ -164,9 +158,7 @@ Set the output value on device /dev/gpio1 to high gpio write /dev/gpio1 1 ``` - - -### 사용법 +### Usage {#gpio_usage} ``` gpio [arguments...] @@ -190,9 +182,7 @@ Hardfault utility Used in startup scripts to handle hardfaults - - -### 사용법 +### Usage {#hardfault_log_usage} ``` hardfault_log [arguments...] @@ -219,9 +209,9 @@ hardfault_log [arguments...] Source: [systemcmds/hist](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hist) -Command-line tool to show the px4 message history. There are no arguments. +Command-line tool to show the px4 message history. There are no arguments. -### 사용법 +### Usage {#hist_usage} ``` hist [arguments...] @@ -231,9 +221,9 @@ hist [arguments...] Source: [systemcmds/i2cdetect](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/i2cdetect) -Utility to scan for I2C devices on a particular bus. +Utility to scan for I2C devices on a particular bus. -### 사용법 +### Usage {#i2cdetect_usage} ``` i2cdetect [arguments...] @@ -263,9 +253,7 @@ Blink the first LED 5 times in blue: led_control blink -c blue -l 0 -n 5 ``` - - -### 사용법 +### Usage {#led_control_usage} ``` led_control [arguments...] @@ -305,9 +293,7 @@ Utility to listen on uORB topics and print the data to the console. The listener can be exited any time by pressing Ctrl+C, Esc, or Q. - - -### 사용법 +### Usage {#listener_usage} ``` listener [arguments...] @@ -325,9 +311,9 @@ listener [arguments...] Source: [systemcmds/mft](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft) -Utility interact with the manifest +Utility interact with the manifest -### 사용법 +### Usage {#mfd_usage} ``` mfd [arguments...] @@ -339,9 +325,9 @@ mfd [arguments...] Source: [systemcmds/mft_cfg](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft_cfg) -Tool to set and get manifest configuration +Tool to set and get manifest configuration -### 사용법 +### Usage {#mft_cfg_usage} ``` mft_cfg [arguments...] @@ -360,9 +346,9 @@ mft_cfg [arguments...] Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) -Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) +Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) -### 사용법 +### Usage {#mtd_usage} ``` mtd [arguments...] @@ -393,9 +379,7 @@ Start an NSH shell on a given port. This was previously used to start a shell on the USB serial port. Now there runs mavlink, and it is possible to use a shell over mavlink. - - -### 사용법 +### Usage {#nshterm_usage} ``` nshterm [arguments...] @@ -433,9 +417,7 @@ param set SYS_AUTOCONFIG 1 reboot ``` - - -### 사용법 +### Usage {#param_usage} ``` param [arguments...] @@ -513,9 +495,7 @@ Source: [modules/payload_deliverer](https://github.com/PX4/PX4-Autopilot/tree/ma Handles payload delivery with either Gripper or a Winch with an appropriate timeout / feedback sensor setting, and communicates back the delivery result as an acknowledgement internally - - -### 사용법 +### Usage {#payload_deliverer_usage} ``` payload_deliverer [arguments...] @@ -537,9 +517,9 @@ payload_deliverer [arguments...] Source: [systemcmds/perf](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/perf) -Tool to print performance counters +Tool to print performance counters -### 사용법 +### Usage {#perf_usage} ``` perf [arguments...] @@ -554,9 +534,9 @@ perf [arguments...] Source: [systemcmds/reboot](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/reboot) -Reboot the system +Reboot the system -### 사용법 +### Usage {#reboot_usage} ``` reboot [arguments...] @@ -569,9 +549,9 @@ reboot [arguments...] Source: [systemcmds/sd_bench](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_bench) -Test the speed of an SD Card +Test the speed of an SD Card -### 사용법 +### Usage {#sd_bench_usage} ``` sd_bench [arguments...] @@ -592,9 +572,9 @@ sd_bench [arguments...] Source: [systemcmds/sd_stress](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_stress) -Test operations on an SD Card +Test operations on an SD Card -### 사용법 +### Usage {#sd_stress_usage} ``` sd_stress [arguments...] @@ -612,9 +592,7 @@ Pass data from one device to another. This can be used to use u-center connected to USB with a GPS on a serial port. - - -### 사용법 +### Usage {#serial_passthru_usage} ``` serial_passthru [arguments...] @@ -644,9 +622,7 @@ system_time set 1600775044 system_time get ``` - - -### 사용법 +### Usage {#system_time_usage} ``` system_time [arguments...] @@ -660,9 +636,9 @@ system_time [arguments...] Source: [systemcmds/top](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/top) -Monitor running processes and their CPU, stack usage, priority and state +Monitor running processes and their CPU, stack usage, priority and state -### 사용법 +### Usage {#top_usage} ``` top [arguments...] @@ -674,9 +650,9 @@ top [arguments...] Source: [systemcmds/usb_connected](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/usb_connected) Utility to check if USB is connected. Was previously used in startup scripts. -A return value of 0 means USB is connected, 1 otherwise. +A return value of 0 means USB is connected, 1 otherwise. -### 사용법 +### Usage {#usb_connected_usage} ``` usb_connected [arguments...] @@ -686,9 +662,9 @@ usb_connected [arguments...] Source: [systemcmds/ver](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/ver) -Tool to print various version information +Tool to print various version information -### 사용법 +### Usage {#ver_usage} ``` ver [arguments...] diff --git a/docs/ko/modules/modules_communication.md b/docs/ko/modules/modules_communication.md index dc95690bf9..44d6ba4615 100644 --- a/docs/ko/modules/modules_communication.md +++ b/docs/ko/modules/modules_communication.md @@ -4,9 +4,9 @@ Source: [drivers/telemetry/frsky_telemetry](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/frsky_telemetry) -FrSky 텔레메트리를 지원합니다. D 또는 S.PORT 프로토콜을 자동으로 감지합니다. +FrSky 텔레메트리를 지원합니다. D 또는 S.PORT 프로토콜을 자동으로 감지합니다. -### 사용법 +### Usage {#frsky_telemetry_usage} ``` frsky_telemetry [arguments...] @@ -64,9 +64,7 @@ mavlink start -u 14556 -r 1000000 mavlink stream -u 14556 -s HIGHRES_IMU -r 50 ``` - - -### 사용법 +### Usage {#mavlink_usage} ``` mavlink [arguments...] @@ -129,30 +127,29 @@ Source: [systemcmds/uorb](https://github.com/PX4/PX4-Autopilot/tree/main/src/sys ### 설명 -uORB는 모듈 간의 통신에 사용되는 내부 pub-sub 메시징 시스템입니다. +uORB is the internal pub-sub messaging system, used for communication between modules. ### 구현 -구현은 비동기식이며 잠금이 없습니다. 게시자는 구독자를 기다리지 않으며, 그 반대도 마찬가지입니다. -이것은 발행자와 구독자 사이에 별도의 버퍼를 가짐으로써 달성됩니다. +The implementation is asynchronous and lock-free, ie. a publisher does not wait for a subscriber and vice versa. +This is achieved by having a separate buffer between a publisher and a subscriber. -코드는 메모리 공간과 메시지 교환 대기 시간을 최소화하도록 최적화되었습니다. +The code is optimized to minimize the memory footprint and the latency to exchange messages. -Messages are defined in the `/msg` directory. 빌드 타임에 C/C++ 코드로 변환됩니다. +Messages are defined in the `/msg` directory. They are converted into C/C++ code at build-time. -ORB_USE_PUBLISHER_RULES로 컴파일하면, uORB 게시 규칙이 있는 파일을 사용하여, 어떤 모듈이 어떤 주제를 게시할 수 있는 지 설정할 수 있습니다. 이것은 시스템 전체 재생에 사용됩니다. +If compiled with ORB_USE_PUBLISHER_RULES, a file with uORB publication rules can be used to configure which +modules are allowed to publish which topics. This is used for system-wide replay. ### 예 -주제 게시 비율을 모니터링합니다. Besides `top`, this is an important command for general system inspection: +Monitor topic publication rates. Besides `top`, this is an important command for general system inspection: ``` uorb top ``` - - -### 사용법 +### Usage {#uorb_usage} ``` uorb [arguments...] diff --git a/docs/ko/modules/modules_controller.md b/docs/ko/modules/modules_controller.md index edc767dbe7..7286d3506f 100644 --- a/docs/ko/modules/modules_controller.md +++ b/docs/ko/modules/modules_controller.md @@ -16,9 +16,7 @@ Currently it is feeding the `manual_control_setpoint` topic directly to the actu 제어 대기 시간을 줄이기 위하여, 모듈은 IMU 드라이버에서 게시한 자이로 주제를 직접 폴링합니다. - - -### 사용법 +### Usage {#airship_att_control_usage} ``` airship_att_control [arguments...] @@ -36,11 +34,10 @@ Source: [modules/control_allocator](https://github.com/PX4/PX4-Autopilot/tree/ma ### 설명 -이것은 제어 할당을 구현합니다. 토크 및 추력 설정값을 입력으로 사용하고, 액추에이터 설정값 메시지를 출력합니다. +This implements control allocation. It takes torque and thrust setpoints +as inputs and outputs actuator setpoint messages. - - -### 사용법 +### Usage {#control_allocator_usage} ``` control_allocator [arguments...] @@ -58,11 +55,10 @@ Source: [modules/flight_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/ ### 설명 -이것은 모든 모드에 대한 설정값 생성을 구현합니다. 차량의 현재 모드 상태를 컨트롤러에 대한 입력 및 출력 설정값으로 사용합니다. +This implements the setpoint generation for all modes. It takes the current mode state of the vehicle as input +and outputs setpoints for controllers. - - -### 사용법 +### Usage {#flight_mode_manager_usage} ``` flight_mode_manager [arguments...] @@ -80,11 +76,9 @@ Source: [modules/fw_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### 설명 -fw_att_control은 고정익 자세 컨트롤러입니다. +fw_att_control is the fixed wing attitude controller. - - -### 사용법 +### Usage {#fw_att_control_usage} ``` fw_att_control [arguments...] @@ -97,20 +91,18 @@ fw_att_control [arguments...] status print status info ``` -## fw_pos_control +## fw_lat_lon_control -Source: [modules/fw_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_pos_control) +Source: [modules/fw_lateral_longitudinal_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_lateral_longitudinal_control) ### 설명 -fw_pos_control is the fixed-wing position controller. +fw_lat_lon_control computes attitude and throttle setpoints from lateral and longitudinal control setpoints. - - -### 사용법 +### Usage {#fw_lat_lon_control_usage} ``` -fw_pos_control [arguments...] +fw_lat_lon_control [arguments...] Commands: start [vtol] VTOL mode @@ -120,6 +112,28 @@ fw_pos_control [arguments...] status print status info ``` +## fw_mode_manager + +Source: [modules/fw_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_mode_manager) + +### 설명 + +This implements the setpoint generation for all PX4-internal fixed-wing modes, height-rate control and higher. +It takes the current mode state of the vehicle as input and outputs setpoints consumed by the fixed-wing +lateral-longitudinal controller and and controllers below that (attitude, rate). + +### Usage {#fw_mode_manager_usage} + +``` +fw_mode_manager [arguments...] + Commands: + start + + stop + + status print status info +``` + ## fw_rate_control Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_rate_control) @@ -128,9 +142,7 @@ Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main fw_rate_control is the fixed-wing rate controller. - - -### 사용법 +### Usage {#fw_rate_control_usage} ``` fw_rate_control [arguments...] @@ -149,21 +161,19 @@ Source: [modules/mc_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### 설명 -이것은 멀티콥터 자세 컨트롤러를 구현합니다. It takes attitude +This implements the multicopter attitude controller. It takes attitude setpoints (`vehicle_attitude_setpoint`) as inputs and outputs a rate setpoint. -컨트롤러에는 각도 오류에 대한 P 루프가 있습니다. +The controller has a P loop for angular error -간행물: 구현된 쿼터니언 태도 제어를 문서화, -제목: 비선형 쿼드로콥터 자세 제어(2013), -저자: Dario Brescianini, Markus Hehn and Raffaello D'Andrea -동적 시스템 및 제어 연구소(IDSC), ETH 취리히 +Publication documenting the implemented Quaternion Attitude Control: +Nonlinear Quadrocopter Attitude Control (2013) +by Dario Brescianini, Markus Hehn and Raffaello D'Andrea +Institute for Dynamic Systems and Control (IDSC), ETH Zurich https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/154099/eth-7387-01.pdf - - -### 사용법 +### Usage {#mc_att_control_usage} ``` mc_att_control [arguments...] @@ -182,14 +192,14 @@ Source: [modules/mc_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### 설명 -컨트롤러에는 위치 오류용 P 루프와 속도 오류용 PID 루프의 두 가지 루프가 있습니다. -속도 컨트롤러의 출력은 추력 방향(즉, 멀티콥터 방향에 대한 회전 행렬)과 추력 스칼라(즉, 멀티콥터 추력 자체)로 분할되는 추력 벡터입니다. +The controller has two loops: a P loop for position error and a PID loop for velocity error. +Output of the velocity controller is thrust vector that is split to thrust direction +(i.e. rotation matrix for multicopter orientation) and thrust scalar (i.e. multicopter thrust itself). -컨트롤러는 작업에 오일러 각도를 사용하지 않으며, 보다 인간 친화적인 제어 및 로깅을 위해서만 생성됩니다. +The controller doesn't use Euler angles for its work, they are generated only for more human-friendly control and +logging. - - -### 사용법 +### Usage {#mc_pos_control_usage} ``` mc_pos_control [arguments...] @@ -208,14 +218,12 @@ Source: [modules/mc_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main ### 설명 -이것은 멀티콥터 속도 컨트롤러를 구현합니다. It takes rate setpoints (in acro mode +This implements the multicopter rate controller. It takes rate setpoints (in acro mode via `manual_control_setpoint` topic) as inputs and outputs actuator control messages. -컨트롤러에는 각속도 오류에 대한 PID 루프가 있습니다. +The controller has a PID loop for angular rate error. - - -### 사용법 +### Usage {#mc_rate_control_usage} ``` mc_rate_control [arguments...] @@ -234,8 +242,9 @@ Source: [modules/navigator](https://github.com/PX4/PX4-Autopilot/tree/main/src/m ### 설명 -자율 비행 모드를 담당하는 모듈입니다. 여기에는 임무(데이터맨에서 읽기), 이륙 및 RTL이 포함됩니다. -또한, 지오펜스 위반 검사를 담당합니다. +Module that is responsible for autonomous flight modes. This includes missions (read from dataman), +takeoff and RTL. +It is also responsible for geofence violation checking. ### 구현 @@ -245,9 +254,7 @@ The member `_navigation_mode` contains the current active mode. Navigator publishes position setpoint triplets (`position_setpoint_triplet_s`), which are then used by the position controller. - - -### 사용법 +### Usage {#navigator_usage} ``` navigator [arguments...] @@ -271,9 +278,7 @@ Source: [modules/rover_ackermann](https://github.com/PX4/PX4-Autopilot/tree/main Rover ackermann module. - - -### 사용법 +### Usage {#rover_ackermann_usage} ``` rover_ackermann [arguments...] @@ -293,9 +298,7 @@ Source: [modules/rover_differential](https://github.com/PX4/PX4-Autopilot/tree/m Rover differential module. - - -### 사용법 +### Usage {#rover_differential_usage} ``` rover_differential [arguments...] @@ -315,9 +318,7 @@ Source: [modules/rover_mecanum](https://github.com/PX4/PX4-Autopilot/tree/main/s Rover mecanum module. - - -### 사용법 +### Usage {#rover_mecanum_usage} ``` rover_mecanum [arguments...] @@ -335,21 +336,21 @@ Source: [modules/rover_pos_control](https://github.com/PX4/PX4-Autopilot/tree/ma ### 설명 -L1 컨트롤러를 사용하여 그라운드 로버의 위치를 제어합니다. +Controls the position of a ground rover using an L1 controller. Publishes `vehicle_thrust_setpoint (only in x) and vehicle_torque_setpoint (only yaw)` messages at IMU_GYRO_RATEMAX. ### 구현 -현재 이 구현은 일부 모드만 지원합니다. +Currently, this implementation supports only a few modes: -- 완전 수동: 스로틀 및 편요각 제어가 액츄에이터에 직접 전달됩니다. -- 자동 미션: 로버가 미션을 실행합니다. -- 배회: 로버가 배회 반경 내로 이동한 다음 모터를 중지합니다. +- Full manual: Throttle and yaw controls are passed directly through to the actuators +- Auto mission: The rover runs missions +- Loiter: The rover will navigate to within the loiter radius, then stop the motors ### 예 -CLI 사용 예: +CLI usage example: ``` rover_pos_control start @@ -357,9 +358,7 @@ rover_pos_control status rover_pos_control stop ``` - - -### 사용법 +### Usage {#rover_pos_control_usage} ``` rover_pos_control [arguments...] @@ -382,9 +381,7 @@ It takes torque and thrust setpoints as inputs and outputs actuator setpoint messages. ``` - - -### 사용법 +### Usage {#spacecraft_usage} ``` spacecraft [arguments...] @@ -402,20 +399,20 @@ Source: [modules/uuv_att_control](https://github.com/PX4/PX4-Autopilot/tree/main ### 설명 -무인수중선(UUV)의 자세를 제어합니다. +Controls the attitude of an unmanned underwater vehicle (UUV). Publishes `vehicle_thrust_setpont` and `vehicle_torque_setpoint` messages at a constant 250Hz. ### 구현 -현재 이 구현은 일부 모드만 지원합니다. +Currently, this implementation supports only a few modes: -- 완전 수동: 롤, 피치, 요 및 스로틀 컨트롤이 액추에이터에 직접 전달됩니다. -- 자동 임무: 무인수중선이 임무를 실행합니다. +- Full manual: Roll, pitch, yaw, and throttle controls are passed directly through to the actuators +- Auto mission: The uuv runs missions ### 예 -CLI 사용 예: +CLI usage example: ``` uuv_att_control start @@ -423,9 +420,7 @@ uuv_att_control status uuv_att_control stop ``` - - -### 사용법 +### Usage {#uuv_att_control_usage} ``` uuv_att_control [arguments...] @@ -443,19 +438,19 @@ Source: [modules/uuv_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main ### 설명 -무인수중선(UUV)의 자세를 제어합니다. +Controls the attitude of an unmanned underwater vehicle (UUV). Publishes `attitude_setpoint` messages. ### 구현 -현재 이 구현은 일부 모드만 지원합니다. +Currently, this implementation supports only a few modes: -- 완전 수동: 롤, 피치, 요 및 스로틀 컨트롤이 액추에이터에 직접 전달됩니다. -- 자동 임무: 무인수중선이 임무를 실행합니다. +- Full manual: Roll, pitch, yaw, and throttle controls are passed directly through to the actuators +- Auto mission: The uuv runs missions ### 예 -CLI 사용 예: +CLI usage example: ``` uuv_pos_control start @@ -463,9 +458,7 @@ uuv_pos_control status uuv_pos_control stop ``` - - -### 사용법 +### Usage {#uuv_pos_control_usage} ``` uuv_pos_control [arguments...] @@ -483,11 +476,9 @@ Source: [modules/vtol_att_control](https://github.com/PX4/PX4-Autopilot/tree/mai ### 설명 -fw_att_control은 고정익 자세 컨트롤러입니다. +fw_att_control is the fixed wing attitude controller. - - -### 사용법 +### Usage {#vtol_att_control_usage} ``` vtol_att_control [arguments...] diff --git a/docs/ko/modules/modules_driver.md b/docs/ko/modules/modules_driver.md index 3fc256ad2a..36e1e5f032 100644 --- a/docs/ko/modules/modules_driver.md +++ b/docs/ko/modules/modules_driver.md @@ -3,23 +3,22 @@ 하위 카테고리: - [Airspeed Sensor](modules_driver_airspeed_sensor.md) -- [Transponder](modules_driver_transponder.md) -- [Imu](modules_driver_imu.md) -- [Rpm Sensor](modules_driver_rpm_sensor.md) -- [Magnetometer](modules_driver_magnetometer.md) +- [Baro](modules_driver_baro.md) - [Camera](modules_driver_camera.md) - [Distance Sensor](modules_driver_distance_sensor.md) -- [Optical Flow](modules_driver_optical_flow.md) +- [Imu](modules_driver_imu.md) - [Ins](modules_driver_ins.md) -- [Baro](modules_driver_baro.md) +- [Magnetometer](modules_driver_magnetometer.md) +- [Optical Flow](modules_driver_optical_flow.md) +- [Radio Control](modules_driver_radio_control.md) +- [Rpm Sensor](modules_driver_rpm_sensor.md) +- [Transponder](modules_driver_transponder.md) ## MCP23009 Source: [drivers/gpio/mcp23009](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gpio/mcp23009) - - -### 사용법 +### Usage {#MCP23009_usage} ``` MCP23009 [arguments...] @@ -53,11 +52,9 @@ Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/s ### 설명 -ADC 드라이버 +ADC driver. - - -### 사용법 +### Usage {#adc_usage} ``` adc [arguments...] @@ -89,9 +86,7 @@ It is enabled/disabled using the parameter, and is disabled by default. If enabled, internal ADCs are not used. - - -### 사용법 +### Usage {#ads1115_usage} ``` ads1115 [arguments...] @@ -117,13 +112,11 @@ Source: [drivers/osd/atxxxx](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### 설명 -예를 들어 OmnibusF4SD 보드에 장착된 ATXXXX 칩용 OSD 드라이버. +OSD driver for the ATXXXX chip that is mounted on the OmnibusF4SD board for example. -OSD_ATXXXX_CFG 매개변수로 활성화합니다. +It can be enabled with the OSD_ATXXXX_CFG parameter. - - -### 사용법 +### Usage {#atxxxx_usage} ``` atxxxx [arguments...] @@ -149,19 +142,18 @@ Source: [drivers/smart_battery/batmon](https://github.com/PX4/PX4-Autopilot/tree ### 설명 -BatMon 지원 스마트 배터리와 SMBUS 통신용 드라이버 설정/사용 정보: https://rotoye.com/batmon-tutorial/ +Driver for SMBUS Communication with BatMon enabled smart-battery +Setup/usage information: https://rotoye.com/batmon-tutorial/ ### 예 -주소 0x0B에서 시작하려면 버스 4에서 +To start at address 0x0B, on bus 4 ``` batmon start -X -a 11 -b 4 ``` - - -### 사용법 +### Usage {#batmon_usage} ``` batmon [arguments...] @@ -193,19 +185,17 @@ Source: [drivers/batt_smbus](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### 설명 -BQ40Z50 연료 게이지 IC용 스마트 배터리 드라이버. +Smart battery driver for the BQ40Z50 fuel gauge IC. ### 예 -매개변수를 설정하기 위해 플래시에 쓰기. address, number_of_bytes, byte0, ... , byteN +To write to flash to set parameters. address, number_of_bytes, byte0, ... , byteN ``` batt_smbus -X write_flash 19069 2 27 0 ``` - - -### 사용법 +### Usage {#batt_smbus_usage} ``` batt_smbus [arguments...] @@ -246,9 +236,7 @@ batt_smbus [arguments...] Source: [drivers/telemetry/bst](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/bst) - - -### 사용법 +### Usage {#bst_usage} ``` bst [arguments...] @@ -268,46 +256,23 @@ bst [arguments...] status print status info ``` -## crsf_rc - -Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) - -### 설명 - -This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data - - - -### 사용법 - -``` -crsf_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## dshot Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/dshot) ### 설명 -이것은 DShot 출력 드라이버입니다. fmu 드라이버와 유사하며, PWM 대신 ESC 통신 프로토콜로 DShot을 사용하기 위하여 사용할 수 있습니다. +This is the DShot output driver. It is similar to the fmu driver, and 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). -모터 1 영구 역회전 : +It supports: - DShot150, DShot300, DShot600 -- 별도의 UART를 통한 텔레메트리와 esc_status 메시지로 게시 -- CLI를 통해 DShot 명령 보내기 +- telemetry via separate UART and publishing as esc_status message +- sending DShot commands via CLI ### 예 @@ -320,9 +285,7 @@ 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} ``` dshot [arguments...] @@ -330,7 +293,9 @@ dshot [arguments...] start telemetry Enable Telemetry on a UART - UART device + -d UART device + values: + [-x] Swap RX/TX pins reverse Reverse motor direction [-m ] Motor index (1-based, default=all) @@ -370,41 +335,13 @@ dshot [arguments...] status print status info ``` -## dsm_rc - -Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) - -### 설명 - -This module does Spektrum DSM RC input parsing. - - - -### 사용법 - -``` -dsm_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` - ## fake_gps Source: [examples/fake_gps](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_gps) ### 설명 - - -### 사용법 +### Usage {#fake_gps_usage} ``` fake_gps [arguments...] @@ -422,9 +359,7 @@ Source: [examples/fake_imu](https://github.com/PX4/PX4-Autopilot/tree/main/src/e ### 설명 - - -### 사용법 +### Usage {#fake_imu_usage} ``` fake_imu [arguments...] @@ -445,9 +380,7 @@ Source: [examples/fake_magnetometer](https://github.com/PX4/PX4-Autopilot/tree/m Publish the earth magnetic field as a fake magnetometer (sensor_mag). Requires vehicle_attitude and vehicle_gps_position. - - -### 사용법 +### Usage {#fake_magnetometer_usage} ``` fake_magnetometer [arguments...] @@ -472,21 +405,19 @@ Most boards are configured to enable/start the driver on a specified UART using ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` ft_technologies_serial start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` ft_technologies_serial stop ``` - - -### 사용법 +### Usage {#ft_technologies_serial_usage} ``` ft_technologies_serial [arguments...] @@ -497,30 +428,6 @@ ft_technologies_serial [arguments...] stop Stop driver ``` -## ghst_rc - -Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) - -### 설명 - -This module does Ghost (GHST) RC input parsing. - - - -### 사용법 - -``` -ghst_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## gimbal Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gimbal) @@ -540,9 +447,7 @@ Test the output by setting a angles (all omitted axes are set to 0): gimbal test pitch -45 yaw 30 ``` - - -### 사용법 +### Usage {#gimbal_usage} ``` gimbal [arguments...] @@ -597,9 +502,7 @@ Initiate warm restart of GPS device gps reset warm ``` - - -### 사용법 +### Usage {#gps_usage} ``` gps [arguments...] @@ -634,9 +537,7 @@ Source: [modules/simulation/gz_bridge](https://github.com/PX4/PX4-Autopilot/tree ### 설명 - - -### 사용법 +### Usage {#gz_bridge_usage} ``` gz_bridge [arguments...] @@ -667,9 +568,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 사용법 +### Usage {#ina220_usage} ``` ina220 [arguments...] @@ -711,9 +610,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 사용법 +### Usage {#ina226_usage} ``` ina226 [arguments...] @@ -753,9 +650,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 사용법 +### Usage {#ina228_usage} ``` ina228 [arguments...] @@ -795,9 +690,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 사용법 +### Usage {#ina238_usage} ``` ina238 [arguments...] @@ -830,9 +723,7 @@ IridiumSBD driver. Creates a virtual serial port that another module can use for communication (e.g. mavlink). - - -### 사용법 +### Usage {#iridiumsbd_usage} ``` iridiumsbd [arguments...] @@ -854,9 +745,7 @@ iridiumsbd [arguments...] Source: [drivers/irlock](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/irlock) - - -### 사용법 +### Usage {#irlock_usage} ``` irlock [arguments...] @@ -884,9 +773,7 @@ Source: [drivers/linux_pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/s Linux PWM output driver with board-specific backend implementation. - - -### 사용법 +### Usage {#linux_pwm_out_usage} ``` linux_pwm_out [arguments...] @@ -902,9 +789,7 @@ linux_pwm_out [arguments...] Source: [drivers/magnetometer/lsm303agr](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm303agr) - - -### 사용법 +### Usage {#lsm303agr_usage} ``` lsm303agr [arguments...] @@ -940,15 +825,13 @@ Converts uORB messages to MSP telemetry packets ### 예 -CLI 사용 예: +CLI usage example: ``` msp_osd ``` - - -### 사용법 +### Usage {#msp_osd_usage} ``` msp_osd [arguments...] @@ -976,9 +859,7 @@ neopixel -n 8 To drive all available leds. - - -### 사용법 +### Usage {#newpixel_usage} ``` newpixel [arguments...] @@ -992,9 +873,7 @@ newpixel [arguments...] Source: [drivers/optical_flow/paa3905](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paa3905) - - -### 사용법 +### Usage {#paa3905_usage} ``` paa3905 [arguments...] @@ -1020,9 +899,7 @@ paa3905 [arguments...] Source: [drivers/optical_flow/paw3902](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paw3902) - - -### 사용법 +### Usage {#paw3902_usage} ``` paw3902 [arguments...] @@ -1066,9 +943,7 @@ It is typically started with: pca9685_pwm_out start -a 0x40 -b 1 ``` - - -### 사용법 +### Usage {#pca9685_pwm_out_usage} ``` pca9685_pwm_out [arguments...] @@ -1092,9 +967,7 @@ Source: [drivers/power_monitor/pm_selector_auterion](https://github.com/PX4/PX4- Driver for starting and auto-detecting different power monitors. - - -### 사용법 +### Usage {#pm_selector_auterion_usage} ``` pm_selector_auterion [arguments...] @@ -1110,9 +983,7 @@ pm_selector_auterion [arguments...] Source: [drivers/optical_flow/pmw3901](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/pmw3901) - - -### 사용법 +### Usage {#pmw3901_usage} ``` pmw3901 [arguments...] @@ -1142,9 +1013,7 @@ Source: [drivers/pps_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src This implements capturing PPS information from the GNSS module and calculates the drift between PPS and Real-time clock. - - -### 사용법 +### Usage {#pps_capture_usage} ``` pps_capture [arguments...] @@ -1166,9 +1035,7 @@ This module is responsible for driving the output pins. For boards without a sep (eg. Pixracer), it uses the main channels. On boards with an IO chip (eg. Pixhawk), it uses the AUX channels, and the px4io driver is used for main ones. - - -### 사용법 +### Usage {#pwm_out_usage} ``` pwm_out [arguments...] @@ -1194,9 +1061,7 @@ mix them with any loaded mixer and output the result to the It is used in SITL and HITL. - - -### 사용법 +### Usage {#pwm_out_sim_usage} ``` pwm_out_sim [arguments...] @@ -1214,9 +1079,7 @@ pwm_out_sim [arguments...] Source: [drivers/optical_flow/px4flow](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/px4flow) - - -### 사용법 +### Usage {#px4flow_usage} ``` px4flow [arguments...] @@ -1244,9 +1107,7 @@ Source: [drivers/px4io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive Output driver communicating with the IO co-processor. - - -### 사용법 +### Usage {#px4io_usage} ``` px4io [arguments...] @@ -1280,46 +1141,11 @@ px4io [arguments...] status print status info ``` -## rc_input - -Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) - -### 설명 - -This module does the RC input parsing and auto-selecting the method. Supported methods are: - -- PPM -- SBUS -- DSM -- SUMD -- ST24 -- TBS Crossfire (CRSF) - - - -### 사용법 - -``` -rc_input [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` - ## rgbled Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) - - -### 사용법 +### Usage {#rgbled_usage} ``` rgbled [arguments...] @@ -1345,9 +1171,7 @@ rgbled [arguments...] Source: [drivers/lights/rgbled_is31fl3195](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_is31fl3195) - - -### 사용법 +### Usage {#rgbled_is31fl3195_usage} ``` rgbled_is31fl3195 [arguments...] @@ -1383,9 +1207,7 @@ This used in some GPS modules by Holybro for [PX4 status notification](../gettin The driver is included by default in firmware (KConfig key DRIVERS_LIGHTS_RGBLED_LP5562) and is always enabled. - - -### 사용법 +### Usage {#rgbled_lp5562_usage} ``` rgbled_lp5562 [arguments...] @@ -1426,9 +1248,7 @@ the address `RBCLW_ADDRESS` needs to match the ESC configuration. The command to start this driver is: `$ roboclaw start ` - - -### 사용법 +### Usage {#roboclaw_usage} ``` roboclaw [arguments...] @@ -1444,9 +1264,7 @@ roboclaw [arguments...] Source: [drivers/rpm_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm_capture) - - -### 사용법 +### Usage {#rpm_capture_usage} ``` rpm_capture [arguments...] @@ -1467,9 +1285,7 @@ Source: [drivers/safety_button](https://github.com/PX4/PX4-Autopilot/tree/main/s This module is responsible for the safety button. Pressing the safety button 3 times quickly will trigger a GCS pairing request. - - -### 사용법 +### Usage {#safety_button_usage} ``` safety_button [arguments...] @@ -1481,30 +1297,6 @@ safety_button [arguments...] status print status info ``` -## sbus_rc - -Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) - -### 설명 - -This module does SBUS RC input parsing. - - - -### 사용법 - -``` -sbus_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## septentrio Source: [drivers/gnss/septentrio](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gnss/septentrio) @@ -1538,9 +1330,7 @@ Perform warm reset of the receivers: gps reset warm ``` - - -### 사용법 +### Usage {#septentrio_usage} ``` septentrio [arguments...] @@ -1573,7 +1363,7 @@ SHT3x Temperature and Humidity Sensor Driver by Senserion. ### 예 -CLI 사용 예: +CLI usage example: ``` sht3x start -X @@ -1599,9 +1389,7 @@ sht3x reset Reinitialize senzor, reset flags - - -### 사용법 +### Usage {#sht3x_usage} ``` sht3x [arguments...] @@ -1640,7 +1428,7 @@ actuator_controls topics, does the mixing and writes the PWM outputs. Currently the module is implemented as a threaded version only, meaning that it runs in its own thread instead of on the work queue. -### 예 +### Example The module is typically started with: @@ -1648,9 +1436,7 @@ The module is typically started with: tap_esc start -d /dev/ttyS2 -n <1-8> ``` - - -### 사용법 +### Usage {#tap_esc_usage} ``` tap_esc [arguments...] @@ -1670,9 +1456,7 @@ Source: [drivers/tone_alarm](https://github.com/PX4/PX4-Autopilot/tree/main/src/ This module is responsible for the tone alarm. - - -### 사용법 +### Usage {#tone_alarm_usage} ``` tone_alarm [arguments...] @@ -1693,7 +1477,7 @@ Source: [drivers/uwb/uwb_sr150](https://github.com/PX4/PX4-Autopilot/tree/main/s Driver for NXP UWB_SR150 UWB positioning system. This driver publishes a `uwb_distance` message whenever the UWB_SR150 has a position measurement available. -### 예 +### Example Start the driver with a given device: @@ -1701,9 +1485,7 @@ Start the driver with a given device: uwb start -d /dev/ttyS2 ``` - - -### 사용법 +### Usage {#uwb_usage} ``` uwb [arguments...] @@ -1723,9 +1505,7 @@ uwb [arguments...] Source: [drivers/actuators/vertiq_io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/actuators/vertiq_io) - - -### 사용법 +### Usage {#vertiq_io_usage} ``` vertiq_io [arguments...] @@ -1748,9 +1528,7 @@ This module is responsible for driving the output pins. For boards without a sep (eg. Pixracer), it uses the main channels. On boards with an IO chip (eg. Pixhawk), it uses the AUX channels, and the px4io driver is used for main ones. - - -### 사용법 +### Usage {#voxl2_io_usage} ``` voxl2_io [arguments...] @@ -1790,9 +1568,7 @@ It is typically started with: todo ``` - - -### 사용법 +### Usage {#voxl_esc_usage} ``` voxl_esc [arguments...] @@ -1839,9 +1615,7 @@ voxl_esc [arguments...] Source: [drivers/power_monitor/voxlpm](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/voxlpm) - - -### 사용법 +### Usage {#voxlpm_usage} ``` voxlpm [arguments...] @@ -1871,9 +1645,7 @@ Source: [modules/zenoh](https://github.com/PX4/PX4-Autopilot/tree/main/src/modul Zenoh demo bridge - - -### 사용법 +### Usage {#zenoh_usage} ``` zenoh [arguments...] diff --git a/docs/ko/modules/modules_driver_airspeed_sensor.md b/docs/ko/modules/modules_driver_airspeed_sensor.md index 2dcb3513bb..68738a4053 100644 --- a/docs/ko/modules/modules_driver_airspeed_sensor.md +++ b/docs/ko/modules/modules_driver_airspeed_sensor.md @@ -13,9 +13,7 @@ This is not included by default in firmware. It can be included with terminal co or in default.px4board with adding the line: "CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033=y" It can be enabled with the "SENS_EN_ASP5033" parameter set to 1. - - -### 사용법 +### Usage {#asp5033_usage} ``` asp5033 [arguments...] @@ -39,9 +37,7 @@ asp5033 [arguments...] Source: [drivers/differential_pressure/auav](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/auav) - - -### 사용법 +### Usage {#auav_usage} ``` auav [arguments...] @@ -67,9 +63,7 @@ auav [arguments...] Source: [drivers/differential_pressure/ets](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ets) - - -### 사용법 +### Usage {#ets_airspeed_usage} ``` ets_airspeed [arguments...] @@ -93,9 +87,7 @@ ets_airspeed [arguments...] Source: [drivers/differential_pressure/ms4515](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4515) - - -### 사용법 +### Usage {#ms4515_usage} ``` ms4515 [arguments...] @@ -119,9 +111,7 @@ ms4515 [arguments...] Source: [drivers/differential_pressure/ms4525do](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4525do) - - -### 사용법 +### Usage {#ms4525do_usage} ``` ms4525do [arguments...] @@ -145,9 +135,7 @@ ms4525do [arguments...] Source: [drivers/differential_pressure/ms5525dso](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms5525dso) - - -### 사용법 +### Usage {#ms5525dso_usage} ``` ms5525dso [arguments...] @@ -171,9 +159,7 @@ ms5525dso [arguments...] Source: [drivers/differential_pressure/sdp3x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/sdp3x) - - -### 사용법 +### Usage {#sdp3x_usage} ``` sdp3x [arguments...] diff --git a/docs/ko/modules/modules_driver_baro.md b/docs/ko/modules/modules_driver_baro.md index cf7e7c41cf..b733ebc9d2 100644 --- a/docs/ko/modules/modules_driver_baro.md +++ b/docs/ko/modules/modules_driver_baro.md @@ -4,9 +4,7 @@ Source: [drivers/barometer/bmp280](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp280) - - -### 사용법 +### Usage {#bmp280_usage} ``` bmp280 [arguments...] @@ -42,9 +40,7 @@ bmp280 [arguments...] Source: [drivers/barometer/bmp388](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp388) - - -### 사용법 +### Usage {#bmp388_usage} ``` bmp388 [arguments...] @@ -72,9 +68,7 @@ bmp388 [arguments...] Source: [drivers/barometer/bmp581](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp581) - - -### 사용법 +### Usage {#bmp581_usage} ``` bmp581 [arguments...] @@ -102,9 +96,7 @@ bmp581 [arguments...] Source: [drivers/barometer/dps310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/dps310) - - -### 사용법 +### Usage {#dps310_usage} ``` dps310 [arguments...] @@ -140,9 +132,7 @@ dps310 [arguments...] Source: [drivers/barometer/invensense/icp101xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp101xx) - - -### 사용법 +### Usage {#icp101xx_usage} ``` icp101xx [arguments...] @@ -166,9 +156,7 @@ icp101xx [arguments...] Source: [drivers/barometer/invensense/icp201xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp201xx) - - -### 사용법 +### Usage {#icp201xx_usage} ``` icp201xx [arguments...] @@ -192,9 +180,7 @@ icp201xx [arguments...] Source: [drivers/barometer/lps22hb](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps22hb) - - -### 사용법 +### Usage {#lps22hb_usage} ``` lps22hb [arguments...] @@ -220,9 +206,7 @@ lps22hb [arguments...] Source: [drivers/barometer/lps25h](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps25h) - - -### 사용법 +### Usage {#lps25h_usage} ``` lps25h [arguments...] @@ -248,9 +232,7 @@ lps25h [arguments...] Source: [drivers/barometer/lps33hw](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps33hw) - - -### 사용법 +### Usage {#lps33hw_usage} ``` lps33hw [arguments...] @@ -279,9 +261,7 @@ lps33hw [arguments...] Source: [drivers/barometer/maiertek/mpc2520](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/maiertek/mpc2520) - - -### 사용법 +### Usage {#mpc2520_usage} ``` mpc2520 [arguments...] @@ -305,9 +285,7 @@ mpc2520 [arguments...] Source: [drivers/barometer/mpl3115a2](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/mpl3115a2) - - -### 사용법 +### Usage {#mpl3115a2_usage} ``` mpl3115a2 [arguments...] @@ -331,9 +309,7 @@ mpl3115a2 [arguments...] Source: [drivers/barometer/ms5611](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5611) - - -### 사용법 +### Usage {#ms5611_usage} ``` ms5611 [arguments...] @@ -369,9 +345,7 @@ ms5611 [arguments...] Source: [drivers/barometer/ms5837](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5837) - - -### 사용법 +### Usage {#ms5837_usage} ``` ms5837 [arguments...] @@ -393,9 +367,7 @@ ms5837 [arguments...] Source: [drivers/barometer/goertek/spa06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spa06) - - -### 사용법 +### Usage {#spa06_usage} ``` spa06 [arguments...] @@ -431,9 +403,7 @@ spa06 [arguments...] Source: [drivers/barometer/goertek/spl06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spl06) - - -### 사용법 +### Usage {#spl06_usage} ``` spl06 [arguments...] diff --git a/docs/ko/modules/modules_driver_camera.md b/docs/ko/modules/modules_driver_camera.md index f96bcb68d4..0df0f41a21 100644 --- a/docs/ko/modules/modules_driver_camera.md +++ b/docs/ko/modules/modules_driver_camera.md @@ -34,9 +34,7 @@ In particular: [Setup/usage information](../camera/index.md). - - -### 사용법 +### Usage {#camera_trigger_usage} ``` camera_trigger [arguments...] diff --git a/docs/ko/modules/modules_driver_distance_sensor.md b/docs/ko/modules/modules_driver_distance_sensor.md index 5fc08ae437..59cd62ff91 100644 --- a/docs/ko/modules/modules_driver_distance_sensor.md +++ b/docs/ko/modules/modules_driver_distance_sensor.md @@ -10,21 +10,19 @@ Broadcom AFBRS50용 드라이버입니다. ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` afbrs50 start ``` -드라이버를 중지합니다. +Stop driver ``` afbrs50 stop ``` - - -### 사용법 +### Usage {#afbrs50_usage} ``` afbrs50 [arguments...] @@ -43,9 +41,7 @@ afbrs50 [arguments...] Source: [drivers/distance_sensor/gy_us42](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/gy_us42) - - -### 사용법 +### Usage {#gy_us42_usage} ``` gy_us42 [arguments...] @@ -71,29 +67,27 @@ Source: [drivers/distance_sensor/leddar_one](https://github.com/PX4/PX4-Autopilo ### 설명 -LeddarOne LiDAR 직렬 버스 드라이버입니다. +Serial bus driver for the LeddarOne LiDAR. -대부분의 보드는 SENS_LEDDAR1_CFG 매개변수를 사용하여, 지정된 UART에서 드라이버를 활성화/시작하도록 설정합니다. +Most boards are configured to enable/start the driver on a specified UART using the SENS_LEDDAR1_CFG parameter. Setup/usage information: https://docs.px4.io/main/en/sensor/leddar_one.html ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` leddar_one start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` leddar_one stop ``` - - -### 사용법 +### Usage {#leddar_one_usage} ``` leddar_one [arguments...] @@ -112,13 +106,11 @@ Source: [drivers/distance_sensor/lightware_laser_i2c](https://github.com/PX4/PX4 ### 설명 -Lightware SFxx 시리즈 LIDAR 거리 측정기용 I2C 버스 드라이버: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20. +I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20. Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html - - -### 사용법 +### Usage {#lightware_laser_i2c_usage} ``` lightware_laser_i2c [arguments...] @@ -146,29 +138,27 @@ Source: [drivers/distance_sensor/lightware_laser_serial](https://github.com/PX4/ ### 설명 -LightWare SF02/F, SF10/a, SF10/b, SF10/c, SF11/c 레이저 거리 측정기용 직렬 버스 드라이버. +Serial bus driver for the LightWare SF02/F, SF10/a, SF10/b, SF10/c, SF11/c Laser rangefinders. -대부분의 보드는 SENS_SF0X_CFG 매개변수를 사용하여 지정된 UART에서 드라이버를 활성화/시작하도록 설정합니다. +Most boards are configured to enable/start the driver on a specified UART using the SENS_SF0X_CFG parameter. Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` lightware_laser_serial start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` lightware_laser_serial stop ``` - - -### 사용법 +### Usage {#lightware_laser_serial_usage} ``` lightware_laser_serial [arguments...] @@ -191,21 +181,19 @@ Serial bus driver for the Lightware SF45/b Laser rangefinder. ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` lightware_sf45_serial start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` lightware_sf45_serial stop ``` - - -### 사용법 +### Usage {#lightware_sf45_serial_usage} ``` lightware_sf45_serial [arguments...] @@ -224,13 +212,11 @@ Source: [drivers/distance_sensor/ll40ls_pwm](https://github.com/PX4/PX4-Autopilo PWM driver for LidarLite rangefinders. -센서/드라이버는 매개변수 SENS_EN_LL40LS를 사용하여 활성화합니다. +The sensor/driver must be enabled using the parameter SENS_EN_LL40LS. Setup/usage information: https://docs.px4.io/main/en/sensor/lidar_lite.html - - -### 사용법 +### Usage {#ll40ls_usage} ``` ll40ls [arguments...] @@ -248,9 +234,7 @@ ll40ls [arguments...] Source: [drivers/distance_sensor/mappydot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mappydot) - - -### 사용법 +### Usage {#mappydot_usage} ``` mappydot [arguments...] @@ -272,9 +256,7 @@ mappydot [arguments...] Source: [drivers/distance_sensor/mb12xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mb12xx) - - -### 사용법 +### Usage {#mb12xx_usage} ``` mb12xx [arguments...] @@ -302,15 +284,17 @@ Source: [drivers/distance_sensor/pga460](https://github.com/PX4/PX4-Autopilot/tr ### 설명 -장치와의 통신을 처리하고, uORB를 통해 거리를 게시하는 초음파 거리 측정기 드라이버입니다. +Ultrasonic range finder driver that handles the communication with the device and publishes the distance via uORB. ### 구현 -This driver is implemented as a NuttX task. 이 구현은 work_queue에서 지원되지 않는 UART를 통해 메시지에 대한 폴링이 필요하기 때문에 선택되었습니다. 이 드라이버는 실행되는 동안 지속적으로 범위 측정을 수행합니다. 잘못된 판독값을 감지하는 간단한 알고리즘은 게시중인 데이터의 품질을 개선하기 위하여 드라이버 수준에서 구현됩니다. 드라이버는 센서 데이터가 유효하지 않거나 불안정하다고 판단되는 경우에는, 데이터를 게시하지 않습니다. +This driver is implemented as a NuttX task. This Implementation was chosen due to the need for polling on a message +via UART, which is not supported in the work_queue. This driver continuously takes range measurements while it is +running. A simple algorithm to detect false readings is implemented at the driver levelin an attemptto improve +the quality of data that is being published. The driver will not publish data at all if it deems the sensor data +to be invalid or unstable. - - -### 사용법 +### Usage {#pga460_usage} ``` pga460 [arguments...] @@ -329,9 +313,7 @@ pga460 [arguments...] Source: [drivers/distance_sensor/srf02](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/srf02) - - -### 사용법 +### Usage {#srf02_usage} ``` srf02 [arguments...] @@ -359,13 +341,11 @@ Source: [drivers/distance_sensor/srf05](https://github.com/PX4/PX4-Autopilot/tre ### 설명 -HY-SRF05 / HC-SR05 및 HC-SR04 거리 측정기용 드라이버입니다. +Driver for HY-SRF05 / HC-SR05 and HC-SR04 rangefinders. -센서/드라이버는 SENS_EN_HXSRX0X 매개변수를 사용하여 활성화합니다. +The sensor/driver must be enabled using the parameter SENS_EN_HXSRX0X. - - -### 사용법 +### Usage {#srf05_usage} ``` srf05 [arguments...] @@ -389,15 +369,13 @@ Source: [drivers/distance_sensor/teraranger](https://github.com/PX4/PX4-Autopilo ### 설명 -TeraRanger 거리 측정기를 위한 I2C 버스 드라이버입니다. +I2C bus driver for TeraRanger rangefinders. -센서/드라이버는 SENS_EN_TRANGER 매개변수를 사용하여 활성화합니다. +The sensor/driver must be enabled using the parameter SENS_EN_TRANGER. Setup/usage information: https://docs.px4.io/main/en/sensor/rangefinders.html#teraranger-rangefinders - - -### 사용법 +### Usage {#teraranger_usage} ``` teraranger [arguments...] @@ -423,9 +401,7 @@ teraranger [arguments...] Source: [drivers/distance_sensor/tf02pro](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/tf02pro) - - -### 사용법 +### Usage {#tf02pro_usage} ``` tf02pro [arguments...] @@ -453,29 +429,27 @@ Source: [drivers/distance_sensor/tfmini](https://github.com/PX4/PX4-Autopilot/tr ### 설명 -Benewake TFmini LiDAR용 직렬 버스 드라이버입니다. +Serial bus driver for the Benewake TFmini LiDAR. -대부분의 보드는 SENS_TFMINI_CFG 매개변수를 사용하여 지정된 UART에서 드라이버를 활성화/시작하도록 설정합니다. +Most boards are configured to enable/start the driver on a specified UART using the SENS_TFMINI_CFG parameter. Setup/usage information: https://docs.px4.io/main/en/sensor/tfmini.html ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` tfmini start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` tfmini stop ``` - - -### 사용법 +### Usage {#tfmini_usage} ``` tfmini [arguments...] @@ -498,27 +472,25 @@ Source: [drivers/distance_sensor/ulanding_radar](https://github.com/PX4/PX4-Auto ### 설명 -Aerotenna uLanding 레이더용 직렬 버스 드라이버입니다. +Serial bus driver for the Aerotenna uLanding radar. Setup/usage information: https://docs.px4.io/main/en/sensor/ulanding_radar.html ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` ulanding_radar start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` ulanding_radar stop ``` - - -### 사용법 +### Usage {#ulanding_radar_usage} ``` ulanding_radar [arguments...] @@ -536,9 +508,7 @@ ulanding_radar [arguments...] Source: [drivers/distance_sensor/vl53l0x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l0x) - - -### 사용법 +### Usage {#vl53l0x_usage} ``` vl53l0x [arguments...] @@ -564,9 +534,7 @@ vl53l0x [arguments...] Source: [drivers/distance_sensor/vl53l1x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l1x) - - -### 사용법 +### Usage {#vl53l1x_usage} ``` vl53l1x [arguments...] diff --git a/docs/ko/modules/modules_driver_imu.md b/docs/ko/modules/modules_driver_imu.md index 6de55d0443..cc58388343 100644 --- a/docs/ko/modules/modules_driver_imu.md +++ b/docs/ko/modules/modules_driver_imu.md @@ -4,9 +4,7 @@ Source: [drivers/imu/analog_devices/adis16448](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16448) - - -### 사용법 +### Usage {#adis16448_usage} ``` adis16448 [arguments...] @@ -32,9 +30,7 @@ adis16448 [arguments...] Source: [drivers/imu/analog_devices/adis16470](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16470) - - -### 사용법 +### Usage {#adis16470_usage} ``` adis16470 [arguments...] @@ -60,9 +56,7 @@ adis16470 [arguments...] Source: [drivers/imu/analog_devices/adis16477](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16477) - - -### 사용법 +### Usage {#adis16477_usage} ``` adis16477 [arguments...] @@ -88,9 +82,7 @@ adis16477 [arguments...] Source: [drivers/imu/analog_devices/adis16497](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16497) - - -### 사용법 +### Usage {#adis16497_usage} ``` adis16497 [arguments...] @@ -116,9 +108,7 @@ adis16497 [arguments...] Source: [drivers/imu/analog_devices/adis16507](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16507) - - -### 사용법 +### Usage {#adis16507_usage} ``` adis16507 [arguments...] @@ -144,9 +134,7 @@ adis16507 [arguments...] Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) - - -### 사용법 +### Usage {#bmi055_usage} ``` bmi055 [arguments...] @@ -174,9 +162,7 @@ bmi055 [arguments...] Source: [drivers/imu/bosch/bmi085](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi085) - - -### 사용법 +### Usage {#bmi085_usage} ``` bmi085 [arguments...] @@ -204,9 +190,7 @@ bmi085 [arguments...] Source: [drivers/imu/bosch/bmi088](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088) - - -### 사용법 +### Usage {#bmi088_usage} ``` bmi088 [arguments...] @@ -234,9 +218,7 @@ bmi088 [arguments...] Source: [drivers/imu/bosch/bmi088_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088_i2c) - - -### 사용법 +### Usage {#bmi088_i2c_usage} ``` bmi088_i2c [arguments...] @@ -264,9 +246,7 @@ bmi088_i2c [arguments...] Source: [drivers/imu/bosch/bmi270](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi270) - - -### 사용법 +### Usage {#bmi270_usage} ``` bmi270 [arguments...] @@ -292,9 +272,7 @@ bmi270 [arguments...] Source: [drivers/imu/nxp/fxas21002c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxas21002c) - - -### 사용법 +### Usage {#fxas21002c_usage} ``` fxas21002c [arguments...] @@ -328,9 +306,7 @@ fxas21002c [arguments...] Source: [drivers/imu/nxp/fxos8701cq](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxos8701cq) - - -### 사용법 +### Usage {#fxos8701cq_usage} ``` fxos8701cq [arguments...] @@ -364,9 +340,7 @@ fxos8701cq [arguments...] Source: [drivers/imu/invensense/iam20680hp](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iam20680hp) - - -### 사용법 +### Usage {#iam20680hp_usage} ``` iam20680hp [arguments...] @@ -392,9 +366,7 @@ iam20680hp [arguments...] Source: [drivers/imu/invensense/icm20602](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20602) - - -### 사용법 +### Usage {#icm20602_usage} ``` icm20602 [arguments...] @@ -420,9 +392,7 @@ icm20602 [arguments...] Source: [drivers/imu/invensense/icm20608g](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20608g) - - -### 사용법 +### Usage {#icm20608g_usage} ``` icm20608g [arguments...] @@ -448,9 +418,7 @@ icm20608g [arguments...] Source: [drivers/imu/invensense/icm20649](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20649) - - -### 사용법 +### Usage {#icm20649_usage} ``` icm20649 [arguments...] @@ -476,9 +444,7 @@ icm20649 [arguments...] Source: [drivers/imu/invensense/icm20689](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20689) - - -### 사용법 +### Usage {#icm20689_usage} ``` icm20689 [arguments...] @@ -504,9 +470,7 @@ icm20689 [arguments...] Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - - -### 사용법 +### Usage {#icm20948_usage} ``` icm20948 [arguments...] @@ -533,9 +497,7 @@ icm20948 [arguments...] Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - - -### 사용법 +### Usage {#icm20948_i2c_passthrough_usage} ``` icm20948_i2c_passthrough [arguments...] @@ -559,9 +521,7 @@ icm20948_i2c_passthrough [arguments...] Source: [drivers/imu/invensense/icm40609d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm40609d) - - -### 사용법 +### Usage {#icm40609d_usage} ``` icm40609d [arguments...] @@ -587,9 +547,7 @@ icm40609d [arguments...] Source: [drivers/imu/invensense/icm42605](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42605) - - -### 사용법 +### Usage {#icm42605_usage} ``` icm42605 [arguments...] @@ -611,13 +569,11 @@ icm42605 [arguments...] status print status info ``` -## icm42688p +## icm42670p Source: [drivers/imu/invensense/icm42670p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42670p) - - -### 사용법 +### Usage {#icm42670p_usage} ``` icm42670p [arguments...] @@ -639,13 +595,11 @@ icm42670p [arguments...] status print status info ``` -## l3gd20 +## icm42688p Source: [drivers/imu/invensense/icm42688p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42688p) - - -### 사용법 +### Usage {#icm42688p_usage} ``` icm42688p [arguments...] @@ -674,9 +628,7 @@ icm42688p [arguments...] Source: [drivers/imu/invensense/icm45686](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm45686) - - -### 사용법 +### Usage {#icm45686_usage} ``` icm45686 [arguments...] @@ -704,9 +656,7 @@ icm45686 [arguments...] Source: [drivers/imu/invensense/iim42652](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42652) - - -### 사용법 +### Usage {#iim42652_usage} ``` iim42652 [arguments...] @@ -734,9 +684,7 @@ iim42652 [arguments...] Source: [drivers/imu/invensense/iim42653](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42653) - - -### 사용법 +### Usage {#iim42653_usage} ``` iim42653 [arguments...] @@ -760,13 +708,11 @@ iim42653 [arguments...] status print status info ``` -## lsm303d +## l3gd20 Source: [drivers/imu/st/l3gd20](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/l3gd20) - - -### 사용법 +### Usage {#l3gd20_usage} ``` l3gd20 [arguments...] @@ -792,13 +738,11 @@ l3gd20 [arguments...] status print status info ``` -## lsm9ds1 +## lsm303d Source: [drivers/imu/st/lsm303d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm303d) - - -### 사용법 +### Usage {#lsm303d_usage} ``` lsm303d [arguments...] @@ -820,13 +764,11 @@ lsm303d [arguments...] status print status info ``` -## mpu6000 +## lsm9ds1 Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) - - -### 사용법 +### Usage {#lsm9ds1_usage} ``` lsm9ds1 [arguments...] @@ -848,13 +790,11 @@ lsm9ds1 [arguments...] status print status info ``` -## mpu9520 +## mpu6000 Source: [drivers/imu/invensense/mpu6000](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6000) - - -### 사용법 +### Usage {#mpu6000_usage} ``` mpu6000 [arguments...] @@ -880,9 +820,7 @@ mpu6000 [arguments...] Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - - -### 사용법 +### Usage {#mpu9250_usage} ``` mpu9250 [arguments...] @@ -909,9 +847,7 @@ mpu9250 [arguments...] Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - - -### 사용법 +### Usage {#mpu9250_i2c_usage} ``` mpu9250_i2c [arguments...] @@ -933,13 +869,11 @@ mpu9250_i2c [arguments...] status print status info ``` -## mpu9520_i2c +## mpu9520 Source: [drivers/imu/invensense/mpu6500](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6500) - - -### 사용법 +### Usage {#mpu9520_usage} ``` mpu9520 [arguments...] @@ -965,9 +899,7 @@ mpu9520 [arguments...] Source: [drivers/imu/murata/sch16t](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/murata/sch16t) - - -### 사용법 +### Usage {#sch16t_usage} ``` sch16t [arguments...] diff --git a/docs/ko/modules/modules_driver_ins.md b/docs/ko/modules/modules_driver_ins.md index 37d6a96932..514d508c49 100644 --- a/docs/ko/modules/modules_driver_ins.md +++ b/docs/ko/modules/modules_driver_ins.md @@ -14,21 +14,19 @@ Setup/usage information: https://docs.px4.io/main/en/sensor/vectornav.html ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` vectornav start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` vectornav stop ``` - - -### 사용법 +### Usage {#vectornav_usage} ``` vectornav [arguments...] diff --git a/docs/ko/modules/modules_driver_magnetometer.md b/docs/ko/modules/modules_driver_magnetometer.md index 677103359b..9a42d8f39a 100644 --- a/docs/ko/modules/modules_driver_magnetometer.md +++ b/docs/ko/modules/modules_driver_magnetometer.md @@ -4,9 +4,7 @@ Source: [drivers/magnetometer/akm/ak09916](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak09916) - - -### 사용법 +### Usage {#ak09916_usage} ``` ak09916 [arguments...] @@ -32,9 +30,7 @@ ak09916 [arguments...] Source: [drivers/magnetometer/akm/ak8963](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak8963) - - -### 사용법 +### Usage {#ak8963_usage} ``` ak8963 [arguments...] @@ -60,9 +56,7 @@ ak8963 [arguments...] Source: [drivers/magnetometer/bosch/bmm150](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm150) - - -### 사용법 +### Usage {#bmm150_usage} ``` bmm150 [arguments...] @@ -88,9 +82,7 @@ bmm150 [arguments...] Source: [drivers/magnetometer/bosch/bmm350](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm350) - - -### 사용법 +### Usage {#bmm350_usage} ``` bmm350 [arguments...] @@ -116,9 +108,7 @@ bmm350 [arguments...] Source: [drivers/magnetometer/hmc5883](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/hmc5883) - - -### 사용법 +### Usage {#hmc5883_usage} ``` hmc5883 [arguments...] @@ -147,9 +137,7 @@ hmc5883 [arguments...] Source: [drivers/magnetometer/st/iis2mdc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/st/iis2mdc) - - -### 사용법 +### Usage {#iis2mdc_usage} ``` iis2mdc [arguments...] @@ -173,9 +161,7 @@ iis2mdc [arguments...] Source: [drivers/magnetometer/isentek/ist8308](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8308) - - -### 사용법 +### Usage {#ist8308_usage} ``` ist8308 [arguments...] @@ -201,9 +187,7 @@ ist8308 [arguments...] Source: [drivers/magnetometer/isentek/ist8310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8310) - - -### 사용법 +### Usage {#ist8310_usage} ``` ist8310 [arguments...] @@ -229,9 +213,7 @@ ist8310 [arguments...] Source: [drivers/magnetometer/lis3mdl](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lis3mdl) - - -### 사용법 +### Usage {#lis3mdl_usage} ``` lis3mdl [arguments...] @@ -263,9 +245,7 @@ lis3mdl [arguments...] Source: [drivers/magnetometer/lsm9ds1_mag](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm9ds1_mag) - - -### 사용법 +### Usage {#lsm9ds1_mag_usage} ``` lsm9ds1_mag [arguments...] @@ -291,9 +271,7 @@ lsm9ds1_mag [arguments...] Source: [drivers/magnetometer/memsic/mmc5983ma](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/memsic/mmc5983ma) - - -### 사용법 +### Usage {#mmc5983ma_usage} ``` mmc5983ma [arguments...] @@ -325,9 +303,7 @@ mmc5983ma [arguments...] Source: [drivers/magnetometer/qmc5883l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/qmc5883l) - - -### 사용법 +### Usage {#qmc5883l_usage} ``` qmc5883l [arguments...] @@ -353,9 +329,7 @@ qmc5883l [arguments...] Source: [drivers/magnetometer/rm3100](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/rm3100) - - -### 사용법 +### Usage {#rm3100_usage} ``` rm3100 [arguments...] @@ -383,9 +357,7 @@ rm3100 [arguments...] Source: [drivers/magnetometer/vtrantech/vcm1193l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/vtrantech/vcm1193l) - - -### 사용법 +### Usage {#vcm1193l_usage} ``` vcm1193l [arguments...] diff --git a/docs/ko/modules/modules_driver_optical_flow.md b/docs/ko/modules/modules_driver_optical_flow.md index f9a553fb2e..4da91ab59c 100644 --- a/docs/ko/modules/modules_driver_optical_flow.md +++ b/docs/ko/modules/modules_driver_optical_flow.md @@ -14,21 +14,19 @@ Setup/usage information: https://docs.px4.io/main/en/sensor/pmw3901.html#thone-t ### 예 -지정된 직렬 장치에서 드라이버를 시작하려고 합니다. +Attempt to start driver on a specified serial device. ``` thoneflow start -d /dev/ttyS1 ``` -드라이버를 중지합니다. +Stop driver ``` thoneflow stop ``` - - -### 사용법 +### Usage {#thoneflow_usage} ``` thoneflow [arguments...] diff --git a/docs/ko/modules/modules_driver_radio_control.md b/docs/ko/modules/modules_driver_radio_control.md new file mode 100644 index 0000000000..c226610884 --- /dev/null +++ b/docs/ko/modules/modules_driver_radio_control.md @@ -0,0 +1,122 @@ +# Modules Reference: Radio Control (Driver) + +## crsf_rc + +Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) + +### 설명 + +This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data + +### Usage {#crsf_rc_usage} + +``` +crsf_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## dsm_rc + +Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) + +### 설명 + +This module does Spektrum DSM RC input parsing. + +### Usage {#dsm_rc_usage} + +``` +dsm_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## ghst_rc + +Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) + +### 설명 + +This module does Ghost (GHST) RC input parsing. + +### Usage {#ghst_rc_usage} + +``` +ghst_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## rc_input + +Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) + +### 설명 + +This module does the RC input parsing and auto-selecting the method. Supported methods are: + +- PPM +- SBUS +- DSM +- SUMD +- ST24 +- TBS Crossfire (CRSF) + +### Usage {#rc_input_usage} + +``` +rc_input [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## sbus_rc + +Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) + +### 설명 + +This module does SBUS RC input parsing. + +### Usage {#sbus_rc_usage} + +``` +sbus_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` diff --git a/docs/ko/modules/modules_driver_rpm_sensor.md b/docs/ko/modules/modules_driver_rpm_sensor.md index e43c059e5a..b4d7b95243 100644 --- a/docs/ko/modules/modules_driver_rpm_sensor.md +++ b/docs/ko/modules/modules_driver_rpm_sensor.md @@ -4,9 +4,7 @@ Source: [drivers/rpm/pcf8583](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm/pcf8583) - - -### 사용법 +### Usage {#pcf8583_usage} ``` pcf8583 [arguments...] diff --git a/docs/ko/modules/modules_driver_transponder.md b/docs/ko/modules/modules_driver_transponder.md index e88a4b9d2b..cd9e77ee03 100644 --- a/docs/ko/modules/modules_driver_transponder.md +++ b/docs/ko/modules/modules_driver_transponder.md @@ -24,9 +24,7 @@ Set the Squawk Code $ sagetech_mxs squawk 1200 ``` - - -### 사용법 +### Usage {#sagetech_mxs_usage} ``` sagetech_mxs [arguments...] diff --git a/docs/ko/modules/modules_estimator.md b/docs/ko/modules/modules_estimator.md index febcd5b688..c4f57f3fff 100644 --- a/docs/ko/modules/modules_estimator.md +++ b/docs/ko/modules/modules_estimator.md @@ -8,9 +8,7 @@ Source: [modules/attitude_estimator_q](https://github.com/PX4/PX4-Autopilot/tree 자세 추정자 Q입니다. - - -### 사용법 +### Usage {#AttitudeEstimatorQ_usage} ``` AttitudeEstimatorQ [arguments...] @@ -31,9 +29,7 @@ Source: [modules/airspeed_selector](https://github.com/PX4/PX4-Autopilot/tree/ma 이 모듈은 표시(IAS), 보정(CAS), 실제 속도(TAS) 및 추정이 현재 유효하지 않은 경우와 기반 센서 판독값 또는 지상 속도에서 풍속을 뺀 경우 정보를 포함하는 단일 airspeed_validated 주제를 제공합니다. 다중 "원시" 속도 입력을 지원하는 이 모듈은 오류 감지시 자동으로 유효한 센서로 전환합니다. 고장 감지와 IAS에서 CAS까지의 축척 계수 추정을 위하여 여러 바람 추정기를 실행하고 이를 게시합니다. - - -### 사용법 +### Usage {#airspeed_estimator_usage} ``` airspeed_estimator [arguments...] @@ -58,9 +54,7 @@ The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.p 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. - - -### 사용법 +### Usage {#ekf2_usage} ``` ekf2 [arguments...] @@ -85,9 +79,7 @@ Source: [modules/local_position_estimator](https://github.com/PX4/PX4-Autopilot/ 확장 칼만 필터를 사용한 태도 및 위치 추정기입니다. - - -### 사용법 +### Usage {#local_position_estimator_usage} ``` local_position_estimator [arguments...] @@ -105,9 +97,7 @@ Source: [modules/mc_hover_thrust_estimator](https://github.com/PX4/PX4-Autopilot ### 설명 - - -### 사용법 +### Usage {#mc_hover_thrust_estimator_usage} ``` mc_hover_thrust_estimator [arguments...] diff --git a/docs/ko/modules/modules_simulation.md b/docs/ko/modules/modules_simulation.md index cb6164dabd..f2e4bccb89 100644 --- a/docs/ko/modules/modules_simulation.md +++ b/docs/ko/modules/modules_simulation.md @@ -21,9 +21,7 @@ signals given by the control allocation module. 적분에는 순방향 오일러가 사용됩니다. 대부분의 변수는 스택 오버플로를 피하기 위하여 .hpp 파일에서 전역으로 선언됩니다. - - -### 사용법 +### Usage {#simulator_sih_usage} ``` simulator_sih [arguments...] diff --git a/docs/ko/modules/modules_system.md b/docs/ko/modules/modules_system.md index 7020a880ce..7b96ffa2f4 100644 --- a/docs/ko/modules/modules_system.md +++ b/docs/ko/modules/modules_system.md @@ -6,9 +6,7 @@ Source: [modules/simulation/battery_simulator](https://github.com/PX4/PX4-Autopi ### 설명 - - -### 사용법 +### Usage {#battery_simulator_usage} ``` battery_simulator [arguments...] @@ -26,17 +24,15 @@ Source: [modules/battery_status](https://github.com/PX4/PX4-Autopilot/tree/main/ ### 설명 -제공 기능은 다음과 같습니다: +The provided functionality includes: - Read the output from the ADC driver (via ioctl interface) and publish `battery_status`. ### 구현 -자체 스레드에서 실행되고, 현재 선택된 자이로 주제를 폴링합니다. +It runs in its own thread and polls on the currently selected gyro topic. - - -### 사용법 +### Usage {#battery_status_usage} ``` battery_status [arguments...] @@ -74,9 +70,7 @@ It discards topics from the `camera_trigger` module if camera capture is enabled For the topics that are not discarded it creates a `CameraCapture` topic with the timestamp information from the `CameraTrigger` and position information from the vehicle. - - -### 사용법 +### Usage {#camera_feedback_usage} ``` camera_feedback [arguments...] @@ -99,9 +93,7 @@ The supported protocols are: MAVLink, nsh, and ublox serial passthrough. If the the module will only try to start mavlink as long as the USB VBUS is detected. Otherwise it will spin and continue to check for VBUS and start mavlink once it is detected. - - -### 사용법 +### Usage {#cdcacm_autostart_usage} ``` cdcacm_autostart [arguments...] @@ -119,11 +111,9 @@ Source: [modules/commander](https://github.com/PX4/PX4-Autopilot/tree/main/src/m ### 설명 -커맨더 모듈에는 모드 전환 및 안전 장치 동작을 위한 상태 머신이 포함되어 있습니다. +The commander module contains the state machine for mode switching and failsafe behavior. - - -### 사용법 +### Usage {#commander_usage} ``` commander [arguments...] @@ -177,22 +167,20 @@ Source: [modules/dataman](https://github.com/PX4/PX4-Autopilot/tree/main/src/mod ### 설명 -C API를 통해 간단한 데이터베이스 형태로 시스템에 영구 저장소를 제공하는 모듈입니다. +Module to provide persistent storage for the rest of the system in form of a simple database through a C API. Multiple backends are supported depending on the board: -- 파일(예: SD 카드) -- RAM (영구적이지 않음) +- a file (eg. on the SD card) +- RAM (this is obviously not persistent) -임무 웨이포인트, 임무 상태 및 지오펜스 다각형과 같은 다양한 유형의 구조화된 데이터를 저장합니다. -각 유형은 특정 유형과 고정된 최대 저장 항목 수를 가지고 있어, 빠른 랜덤 액세스가 가능합니다. +It is used to store structured data of different types: mission waypoints, mission state and geofence polygons. +Each type has a specific type and a fixed maximum amount of storage items, so that fast random access is possible. ### 구현 -단일 항목을 읽고 쓰는 것은 항상 원자적입니다. +Reading and writing a single item is always atomic. - - -### 사용법 +### Usage {#dataman_usage} ``` dataman [arguments...] @@ -216,20 +204,18 @@ Source: [systemcmds/dmesg](https://github.com/PX4/PX4-Autopilot/tree/main/src/sy ### 설명 -부팅 콘솔 메시지를 출력합니다. -NuttX의 작업 대기열 및 syslog의 출력은 캡처되지 않습니다. +Command-line tool to show bootup console messages. +Note that output from NuttX's work queues and syslog are not captured. ### 예 -백그라운드에서 모든 메시지를 출력합니다. +Keep printing all messages in the background: ``` dmesg -f & ``` - - -### 사용법 +### Usage {#dmesg_usage} ``` dmesg [arguments...] @@ -243,11 +229,9 @@ Source: [modules/esc_battery](https://github.com/PX4/PX4-Autopilot/tree/main/src ### 설명 -ESC 상태의 정보를 사용하여 구현하고, 배터리 상태를 게시합니다. +This implements using information from the ESC status and publish it as battery status. - - -### 사용법 +### Usage {#esc_battery_usage} ``` esc_battery [arguments...] @@ -265,11 +249,9 @@ Source: [modules/gyro_calibration](https://github.com/PX4/PX4-Autopilot/tree/mai ### 설명 -간단한 온라인 자이로스코프 교정. +Simple online gyroscope calibration. - - -### 사용법 +### Usage {#gyro_calibration_usage} ``` gyro_calibration [arguments...] @@ -287,9 +269,7 @@ Source: [modules/gyro_fft](https://github.com/PX4/PX4-Autopilot/tree/main/src/mo ### 설명 - - -### 사용법 +### Usage {#gyro_fft_usage} ``` gyro_fft [arguments...] @@ -307,13 +287,11 @@ Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/driv ### 설명 -설정점에서 IMU 온도를 조절하기 위하여 LP 작업 대기열에서 주기적으로 실행되는 백그라운드 프로세스입니다. +Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. -이 작업은 부팅 시 SENS_EN_THERMAL을 설정하거나, CLI를 통하여 시작 스크립트에서 시작할 수 있습니다. +This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. - - -### 사용법 +### Usage {#heater_usage} ``` heater [arguments...] @@ -333,15 +311,14 @@ Source: [systemcmds/i2c_launcher](https://github.com/PX4/PX4-Autopilot/tree/main Daemon that starts drivers based on found I2C devices. - - -### 사용법 +### Usage {#i2c_launcher_usage} ``` i2c_launcher [arguments...] Commands: start -b Bus number + -t battery index for calibration values (1 or 3) stop @@ -401,9 +378,7 @@ The architecture is as shown below: - - -### 사용법 +### Usage {#internal_combustion_engine_control_usage} ``` internal_combustion_engine_control [arguments...] @@ -427,23 +402,25 @@ states, such as commanded thrust, arming state and vehicle motion. ### 구현 -모든 유형은 공통 기본 클래스를 사용하여 자체 클래스에서 구현됩니다. 기본 클래스는 상태를 유지합니다(착륙, 아마도_착륙, 지상_접촉). 가능한 각 상태는 파생 클래스에서 구현됩니다. 각 내부 상태의 히스테리시스 및 고정된 우선 순위에 따라 실제 land_detector 상태가 결정됩니다. +Every type is implemented in its own class with a common base class. The base class maintains a state (landed, +maybe_landed, ground_contact). Each possible state is implemented in the derived classes. A hysteresis and a fixed +priority of each internal state determines the actual land_detector state. -#### 멀티콥터 착륙 감지기 +#### Multicopter Land Detector **ground_contact**: thrust setpoint and velocity in z-direction must be below a defined threshold for time -GROUND_CONTACT_TRIGGER_TIME_US. ground_contact가 감지되면, 위치 컨트롤러는 본체 x 및 y의 추력 설정값을 끕니다. +GROUND_CONTACT_TRIGGER_TIME_US. When ground_contact is detected, the position controller turns off the thrust setpoint +in body x and y. **maybe_landed**: it requires ground_contact together with a tighter thrust setpoint threshold and no velocity in the -horizontal direction. 트리거 시간은 MAYBE_LAND_TRIGGER_TIME에 의해 정의됩니다. Maybe_landed가 감지되면 위치 컨트롤러는 추력 설정값을 0으로 설정합니다. +horizontal direction. The trigger time is defined by MAYBE_LAND_TRIGGER_TIME. When maybe_landed is detected, the +position controller sets the thrust setpoint to zero. **landed**: it requires maybe_landed to be true for time LAND_DETECTOR_TRIGGER_TIME_US. -모듈은 HP 작업 대기열에서 주기적으로 실행됩니다. +The module runs periodically on the HP work queue. - - -### 사용법 +### Usage {#land_detector_usage} ``` land_detector [arguments...] @@ -465,11 +442,10 @@ Source: [modules/load_mon](https://github.com/PX4/PX4-Autopilot/tree/main/src/mo Background process running periodically on the low priority work queue to calculate the CPU load and RAM usage and publish the `cpuload` topic. -NuttX에서는 각 프로세스의 스택 사용량도 확인하고, 300바이트 미만으로 떨어지면 경고가 출력되고 로그 파일에도 기록됩니다. +On NuttX it also checks the stack usage of each process and if it falls below 300 bytes, a warning is output, +which will also appear in the log file. - - -### 사용법 +### Usage {#load_mon_usage} ``` load_mon [arguments...] @@ -488,45 +464,47 @@ Source: [modules/logger](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu ### 설명 System logger which logs a configurable set of uORB topics and system printf messages -(`PX4_WARN` and `PX4_ERR`) to ULog files. 시스템 및 비행 성능 평가, 튜닝, 재생 및 충돌 분석에 사용할 수 있습니다. +(`PX4_WARN` and `PX4_ERR`) to ULog files. These can be used for system and flight performance evaluation, +tuning, replay and crash analysis. -2개의 백엔드를 지원합니다. +It supports 2 backends: -- 파일: ULog 파일을 파일 시스템(SD 카드)에 기록합니다. -- MAVLink: MAVLink를 통해 ULog 데이터를 클라이언트로 스트리밍합니다(클라이언트가 이를 지원해야 함). +- Files: write ULog files to the file system (SD card) +- MAVLink: stream ULog data via MAVLink to a client (the client must support this) -두 백엔드를 동시에 활성화하고 사용할 수 있습니다. +Both backends can be enabled and used at the same time. -파일 백엔드는 전체(일반 로그)와 미션 로그의 두 가지 유형의 로그 파일을 지원합니다. 임무 로그는 축소된 ulog 파일이며, 지오태깅 또는 차량 관리 등에 사용할 수 있습니다. SDLOG_MISSION 매개변수를 통하여 활성화 및 설정할 수 있습니다. -일반 로그는 항상 미션 로그의 상위 집합입니다. +The file backend supports 2 types of log files: full (the normal log) and a mission +log. The mission log is a reduced ulog file and can be used for example for geotagging or +vehicle management. It can be enabled and configured via SDLOG_MISSION parameter. +The normal log is always a superset of the mission log. ### 구현 -구현은 두 개의 스레드를 사용합니다. +The implementation uses two threads: - The main thread, running at a fixed rate (or polling on a topic if started with -p) and checking for data updates -- 작성자 스레드, 파일에 데이터 쓰기 +- The writer thread, writing data to the file -그 사이에는 구성 가능한 크기의 쓰기 버퍼가 있습니다(및 미션 로그를 위한 또 다른 고정 크기 버퍼). 드롭아웃을 방지하려면 크기가 커야 합니다. +In between there is a write buffer with configurable size (and another fixed-size buffer for +the mission log). It should be large to avoid dropouts. ### 예 -즉시 로깅을 시작하는 일반적인 사용법입니다. +Typical usage to start logging immediately: ``` logger start -e -t ``` -또는, 이미 동작중일 경우 +Or if already running: ``` logger on ``` - - -### 사용법 +### Usage {#logger_usage} ``` logger [arguments...] @@ -561,7 +539,7 @@ logger [arguments...] status print status info ``` -## netman +## mag_bias_estimator Source: [modules/mag_bias_estimator](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mag_bias_estimator) @@ -569,9 +547,7 @@ Source: [modules/mag_bias_estimator](https://github.com/PX4/PX4-Autopilot/tree/m Online magnetometer bias estimator. - - -### 사용법 +### Usage {#mag_bias_estimator_usage} ``` mag_bias_estimator [arguments...] @@ -583,7 +559,7 @@ mag_bias_estimator [arguments...] status print status info ``` -## pwm_input +## manual_control Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/manual_control) @@ -591,9 +567,7 @@ Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/ Module consuming manual_control_inputs publishing one manual_control_setpoint. - - -### 사용법 +### Usage {#manual_control_usage} ``` manual_control [arguments...] @@ -641,9 +615,7 @@ $ netman save # Save the parameters to the SD card. $ netman show # display current settings. $ netman update -i eth0 # do an update - - -### 사용법 +### Usage {#netman_usage} ``` netman [arguments...] @@ -666,9 +638,7 @@ Source: [drivers/pwm_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/d Measures the PWM input on AUX5 (or MAIN5) via a timer capture ISR and publishes via the uORB 'pwm_input\` message. - - -### 사용법 +### Usage {#pwm_input_usage} ``` pwm_input [arguments...] @@ -694,9 +664,7 @@ and then publish as `rc_channels` and `manual_control_input`. To reduce control latency, the module is scheduled on input_rc publications. - - -### 사용법 +### Usage {#rc_update_usage} ``` rc_update [arguments...] @@ -731,9 +699,7 @@ the log. The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) page. - - -### 사용법 +### Usage {#replay_usage} ``` replay [arguments...] @@ -760,9 +726,7 @@ It is currently only responsible for tone alarm on RC Loss. The tasks can be started via CLI or uORB topics (vehicle_command from MAVLink, etc.). - - -### 사용법 +### Usage {#send_event_usage} ``` send_event [arguments...] @@ -782,9 +746,7 @@ Source: [modules/simulation/sensor_agp_sim](https://github.com/PX4/PX4-Autopilot Module to simulate auxiliary global position measurements with optional failure modes for SIH simulation. - - -### 사용법 +### Usage {#sensor_agp_sim_usage} ``` sensor_agp_sim [arguments...] @@ -802,9 +764,7 @@ Source: [modules/simulation/sensor_airspeed_sim](https://github.com/PX4/PX4-Auto ### 설명 - - -### 사용법 +### Usage {#sensor_arispeed_sim_usage} ``` sensor_arispeed_sim [arguments...] @@ -822,9 +782,7 @@ Source: [modules/simulation/sensor_baro_sim](https://github.com/PX4/PX4-Autopilo ### 설명 - - -### 사용법 +### Usage {#sensor_baro_sim_usage} ``` sensor_baro_sim [arguments...] @@ -842,9 +800,7 @@ Source: [modules/simulation/sensor_gps_sim](https://github.com/PX4/PX4-Autopilot ### 설명 - - -### 사용법 +### Usage {#sensor_gps_sim_usage} ``` sensor_gps_sim [arguments...] @@ -862,9 +818,7 @@ Source: [modules/simulation/sensor_mag_sim](https://github.com/PX4/PX4-Autopilot ### 설명 - - -### 사용법 +### Usage {#sensor_mag_sim_usage} ``` sensor_mag_sim [arguments...] @@ -885,24 +839,22 @@ Source: [modules/sensors](https://github.com/PX4/PX4-Autopilot/tree/main/src/mod The sensors module is central to the whole system. It takes low-level output from drivers, turns it into a more usable form, and publishes it for the rest of the system. -제공 기능은 다음과 같습니다: +The provided functionality includes: - Read the output from the sensor drivers (`SensorGyro`, etc.). - 동일한 유형이 여러 개 있는 경우 투표 및 장애 조치 처리를 수행합니다. - 그런 다음, 보드 회전 및 온도 보정을 적용합니다(활성화된 경우). And finally publish the data; one of the + If there are multiple of the same type, do voting and failover handling. + Then apply the board rotation and temperature calibration (if enabled). And finally publish the data; one of the topics is `SensorCombined`, used by many parts of the system. - Make sure the sensor drivers get the updated calibration parameters (scale & offset) when the parameters change or - on startup. 센서 드라이버는 매개변수 업데이트를 위하여 ioctl 인터페이스를 사용합니다. For this to work properly, the + on startup. The sensor drivers use the ioctl interface for parameter updates. For this to work properly, the sensor drivers must already be running when `sensors` is started. - Do sensor consistency checks and publish the `SensorsStatusImu` topic. ### 구현 -자체 스레드에서 실행되고, 현재 선택된 자이로 주제를 폴링합니다. +It runs in its own thread and polls on the currently selected gyro topic. - - -### 사용법 +### Usage {#sensors_usage} ``` sensors [arguments...] @@ -921,9 +873,7 @@ Source: [modules/simulation/system_power_simulator](https://github.com/PX4/PX4-A ### 설명 - - -### 사용법 +### Usage {#system_power_simulation_usage} ``` system_power_simulation [arguments...] @@ -943,9 +893,7 @@ Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/d Driver for reading data from the Tattu 12S 16000mAh smart battery. - - -### 사용법 +### Usage {#tattu_can_usage} ``` tattu_can [arguments...] @@ -969,9 +917,7 @@ whenever a change in temperature is detected. The module can also be configured routine at next boot, which allows the thermal calibration coeffecients to be calculated while the vehicle undergoes a temperature cycle. - - -### 사용법 +### Usage {#temperature_compensation_usage} ``` temperature_compensation [arguments...] @@ -1001,9 +947,7 @@ Writes the RTC time cyclically to a file and reloads this value on startup. This allows monotonic time on systems that only have a software RTC (that is not battery powered). Explicitly setting the time backwards (e.g. via system_time) is still possible. - - -### 사용법 +### Usage {#time_persistor_usage} ``` time_persistor [arguments...] @@ -1037,9 +981,7 @@ Play system tune #2: tune_control play -t 2 ``` - - -### 사용법 +### Usage {#tune_control_usage} ``` tune_control [arguments...] @@ -1075,9 +1017,7 @@ uxrce_dds_client start -t serial -d /dev/ttyS3 -b 921600 uxrce_dds_client start -t udp -h 127.0.0.1 -p 15555 ``` - - -### 사용법 +### Usage {#uxrce_dds_client_usage} ``` uxrce_dds_client [arguments...] @@ -1108,9 +1048,7 @@ Source: [systemcmds/work_queue](https://github.com/PX4/PX4-Autopilot/tree/main/s Command-line tool to show work queue status. - - -### 사용법 +### Usage {#work_queue_usage} ``` work_queue [arguments...] diff --git a/docs/ko/modules/modules_template.md b/docs/ko/modules/modules_template.md index 3605617774..aad61d7aa0 100644 --- a/docs/ko/modules/modules_template.md +++ b/docs/ko/modules/modules_template.md @@ -16,15 +16,13 @@ Source: [templates/template_module](https://github.com/PX4/PX4-Autopilot/tree/ma ### 예 -CLI 사용 예: +CLI usage example: ``` module start -f -p 42 ``` - - -### 사용법 +### Usage {#module_usage} ``` module [arguments...] @@ -47,9 +45,7 @@ Source: [examples/work_item](https://github.com/PX4/PX4-Autopilot/tree/main/src/ 작업 대기열에서 실행되는 간단한 모듈의 예입니다. - - -### 사용법 +### Usage {#work_item_example_usage} ``` work_item_example [arguments...] diff --git a/docs/ko/msg_docs/AirspeedValidated.md b/docs/ko/msg_docs/AirspeedValidated.md index eef1300688..9034960626 100644 --- a/docs/ko/msg_docs/AirspeedValidated.md +++ b/docs/ko/msg_docs/AirspeedValidated.md @@ -1,21 +1,27 @@ # AirspeedValidated (UORB message) -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedValidated.msg) +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AirspeedValidated.msg) ```c +uint32 MESSAGE_VERSION = 1 + uint64 timestamp # time since system start (microseconds) -float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid -float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid -float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid +float32 indicated_airspeed_m_s # [m/s] Indicated airspeed (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # [m/s] Calibrated airspeed (CAS), set to NAN if invalid +float32 true_airspeed_m_s # [m/s] True airspeed (TAS), set to NAN if invalid +int8 airspeed_source # Source of currently published airspeed values +int8 DISABLED = -1 +int8 GROUND_MINUS_WIND = 0 +int8 SENSOR_1 = 1 +int8 SENSOR_2 = 2 +int8 SENSOR_3 = 3 +int8 SYNTHETIC = 4 + +# debug states float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid -float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid - -bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. - -int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid - +float32 calibraded_airspeed_synth_m_s # synthetic airspeed in m/s, set to NAN if invalid float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] float32 throttle_filtered # filtered fixed-wing throttle [-] float32 pitch_filtered # filtered pitch [rad] diff --git a/docs/ko/msg_docs/AirspeedValidatedV0.md b/docs/ko/msg_docs/AirspeedValidatedV0.md new file mode 100644 index 0000000000..8bca98a224 --- /dev/null +++ b/docs/ko/msg_docs/AirspeedValidatedV0.md @@ -0,0 +1,25 @@ +# AirspeedValidatedV0 (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/AirspeedValidatedV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid +float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid + +float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid +float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid + +bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. + +int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid + +float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] +float32 throttle_filtered # filtered fixed-wing throttle [-] +float32 pitch_filtered # filtered pitch [rad] + +``` diff --git a/docs/ko/msg_docs/CellularStatus.md b/docs/ko/msg_docs/CellularStatus.md index 4984dc9a6b..466a1272fe 100644 --- a/docs/ko/msg_docs/CellularStatus.md +++ b/docs/ko/msg_docs/CellularStatus.md @@ -1,35 +1,49 @@ # CellularStatus (UORB message) +Cellular status + +This is currently used only for logging cell status from MAVLink. + [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/CellularStatus.msg) ```c -uint64 timestamp # time since system start (microseconds) +# Cellular status +# +# This is currently used only for logging cell status from MAVLink. -uint8 CELLULAR_STATUS_FLAG_UNKNOWN=0 # State unknown or not reportable -uint8 CELLULAR_STATUS_FLAG_FAILED=1 # velocity setpoint -uint8 CELLULAR_STATUS_FLAG_INITIALIZING=2 # Modem is being initialized -uint8 CELLULAR_STATUS_FLAG_LOCKED=3 # Modem is locked -uint8 CELLULAR_STATUS_FLAG_DISABLED=4 # Modem is not enabled and is powered down -uint8 CELLULAR_STATUS_FLAG_DISABLING=5 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_DISABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLING=6 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_ENABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLED=7 # Modem is enabled and powered on but not registered with a network provider and not available for data connections -uint8 CELLULAR_STATUS_FLAG_SEARCHING=8 # Modem is searching for a network provider to register -uint8 CELLULAR_STATUS_FLAG_REGISTERED=9 # Modem is registered with a network provider, and data connections and messaging may be available for use -uint8 CELLULAR_STATUS_FLAG_DISCONNECTING=10 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTING=11 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTED=12 # One or more packet data bearers is active and connected +uint64 timestamp # [us] Time since system start. -uint8 CELLULAR_NETWORK_FAILED_REASON_NONE=0 # No error -uint8 CELLULAR_NETWORK_FAILED_REASON_UNKNOWN=1 # Error state is unknown -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_MISSING=2 # SIM is required for the modem but missing -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_ERROR=3 # SIM is available, but not usable for connection +uint16 status # [@enum STATUS_FLAG] Status bitmap. +uint16 STATUS_FLAG_UNKNOWN = 1 # State unknown or not reportable. +uint16 STATUS_FLAG_FAILED = 2 # Modem is unusable. +uint16 STATUS_FLAG_INITIALIZING = 4 # Modem is being initialized. +uint16 STATUS_FLAG_LOCKED = 8 # Modem is locked. +uint16 STATUS_FLAG_DISABLED = 16 # Modem is not enabled and is powered down. +uint16 STATUS_FLAG_DISABLING = 32 # Modem is currently transitioning to the STATUS_FLAG_DISABLED state. +uint16 STATUS_FLAG_ENABLING = 64 # Modem is currently transitioning to the STATUS_FLAG_ENABLED state. +uint16 STATUS_FLAG_ENABLED = 128 # Modem is enabled and powered on but not registered with a network provider and not available for data connections. +uint16 STATUS_FLAG_SEARCHING = 256 # Modem is searching for a network provider to register. +uint16 STATUS_FLAG_REGISTERED = 512 # Modem is registered with a network provider, and data connections and messaging may be available for use. +uint16 STATUS_FLAG_DISCONNECTING = 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. +uint16 STATUS_FLAG_CONNECTING = 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. +uint16 STATUS_FLAG_CONNECTED = 4096 # One or more packet data bearers is active and connected. -uint16 status # Status bitmap 1: Roaming is active -uint8 failure_reason #Failure reason when status in in CELLUAR_STATUS_FAILED -uint8 type # Cellular network radio type 0: none 1: gsm 2: cdma 3: wcdma 4: lte -uint8 quality # Cellular network RSSI/RSRP in dBm, absolute value -uint16 mcc # Mobile country code. If unknown, set to: UINT16_MAX -uint16 mnc # Mobile network code. If unknown, set to: UINT16_MAX -uint16 lac # Location area code. If unknown, set to: 0 +uint8 failure_reason # [@enum FAILURE_REASON] Failure reason. +uint8 FAILURE_REASON_NONE = 0 # No error. +uint8 FAILURE_REASON_UNKNOWN = 1 # Error state is unknown. +uint8 FAILURE_REASON_SIM_MISSING = 2 # SIM is required for the modem but missing. +uint8 FAILURE_REASON_SIM_ERROR = 3 # SIM is available, but not usable for connection. + +uint8 type # [@enum CELLULAR_NETWORK_RADIO_TYPE] Cellular network radio type. +uint8 CELLULAR_NETWORK_RADIO_TYPE_NONE = 0 # None +uint8 CELLULAR_NETWORK_RADIO_TYPE_GSM = 1 # GSM +uint8 CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2 # CDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3 # WCDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_LTE = 4 # LTE + +uint8 quality # [dBm] Cellular network RSSI/RSRP, absolute value. +uint16 mcc # [@invalid UINT16_MAX] Mobile country code. +uint16 mnc # [@invalid UINT16_MAX] Mobile network code. +uint16 lac # [@invalid 0] Location area code. ``` diff --git a/docs/ko/msg_docs/FailsafeFlags.md b/docs/ko/msg_docs/FailsafeFlags.md index 164f8bb216..c0763f555c 100644 --- a/docs/ko/msg_docs/FailsafeFlags.md +++ b/docs/ko/msg_docs/FailsafeFlags.md @@ -58,7 +58,7 @@ bool mission_failure # Mission failure bool vtol_fixed_wing_system_failure # vehicle in fixed-wing system failure failsafe mode (after quad-chute) bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded -bool local_position_accuracy_low # Local position estimate has dropped below threshold, but is currently still declared valid +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 diff --git a/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md new file mode 100644 index 0000000000..02dc50b410 --- /dev/null +++ b/docs/ko/msg_docs/FixedWingLateralGuidanceStatus.md @@ -0,0 +1,23 @@ +# FixedWingLateralGuidanceStatus (UORB message) + +Fixed Wing Lateral Guidance Status message +Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralGuidanceStatus.msg) + +```c +# Fixed Wing Lateral Guidance Status message +# Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +uint64 timestamp # time since system start (microseconds) + +float32 course_setpoint # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. Set by guidance law +float32 lateral_acceleration_ff # [m/s^2] [FRD] lateral acceleration demand only for maintaining curvature +float32 bearing_feas # [@range 0,1] bearing feasibility +float32 bearing_feas_on_track # [@range 0,1] on-track bearing feasibility +float32 signed_track_error # [m] signed track error +float32 track_error_bound # [m] track error bound +float32 adapted_period # [s] adapted period (if auto-tuning enabled) +uint8 wind_est_valid # [boolean] true = wind estimate is valid and/or being used by controller (also indicates if wind estimate usage is disabled despite being valid) + +``` diff --git a/docs/ko/msg_docs/FixedWingLateralSetpoint.md b/docs/ko/msg_docs/FixedWingLateralSetpoint.md new file mode 100644 index 0000000000..153167bb62 --- /dev/null +++ b/docs/ko/msg_docs/FixedWingLateralSetpoint.md @@ -0,0 +1,22 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLateralSetpoint.msg) + +```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) + +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. + +``` diff --git a/docs/ko/msg_docs/FixedWingLateralStatus.md b/docs/ko/msg_docs/FixedWingLateralStatus.md new file mode 100644 index 0000000000..9214d1e9e0 --- /dev/null +++ b/docs/ko/msg_docs/FixedWingLateralStatus.md @@ -0,0 +1,17 @@ +# FixedWingLateralStatus (UORB message) + +Fixed Wing Lateral Status message +Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralStatus.msg) + +```c +# Fixed Wing Lateral Status message +# Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +uint64 timestamp # time since system start (microseconds) + +float32 lateral_acceleration_setpoint # [m/s^2] [FRD] resultant lateral acceleration setpoint +float32 can_run_factor # [norm] [@range 0, 1] estimate of certainty of the correct functionality of the npfg roll setpoint + +``` diff --git a/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md new file mode 100644 index 0000000000..6b8fb29e5b --- /dev/null +++ b/docs/ko/msg_docs/FixedWingLongitudinalSetpoint.md @@ -0,0 +1,26 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLongitudinalSetpoint.msg) + +```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) + +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 + +``` diff --git a/docs/ko/msg_docs/FixedWingRunwayControl.md b/docs/ko/msg_docs/FixedWingRunwayControl.md new file mode 100644 index 0000000000..9e9f5ff428 --- /dev/null +++ b/docs/ko/msg_docs/FixedWingRunwayControl.md @@ -0,0 +1,19 @@ +# FixedWingRunwayControl (UORB message) + +Auxiliary control fields for fixed-wing runway takeoff/landing + +Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingRunwayControl.msg) + +```c +# Auxiliary control fields for fixed-wing runway takeoff/landing + +# Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +uint64 timestamp # [us] time since system start + +bool wheel_steering_enabled # Flag that enables the wheel steering. +float32 wheel_steering_nudging_rate # [norm] [@range -1, 1] [FRD] Manual wheel nudging, added to controller output. NAN is interpreted as 0. + +``` diff --git a/docs/ko/msg_docs/LateralControlConfiguration.md b/docs/ko/msg_docs/LateralControlConfiguration.md new file mode 100644 index 0000000000..b0a03a6378 --- /dev/null +++ b/docs/ko/msg_docs/LateralControlConfiguration.md @@ -0,0 +1,18 @@ +# LateralControlConfiguration (UORB message) + +Fixed Wing Lateral Control Configuration message +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LateralControlConfiguration.msg) + +```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) + +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/LongitudinalControlConfiguration.md b/docs/ko/msg_docs/LongitudinalControlConfiguration.md new file mode 100644 index 0000000000..901d5c23bc --- /dev/null +++ b/docs/ko/msg_docs/LongitudinalControlConfiguration.md @@ -0,0 +1,28 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LongitudinalControlConfiguration.msg) + +```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) + +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 + +``` diff --git a/docs/ko/msg_docs/PurePursuitStatus.md b/docs/ko/msg_docs/PurePursuitStatus.md index 76ae5524f0..1685af32d1 100644 --- a/docs/ko/msg_docs/PurePursuitStatus.md +++ b/docs/ko/msg_docs/PurePursuitStatus.md @@ -11,6 +11,4 @@ float32 crosstrack_error # [m] Shortest distance from the vehicle to the pat float32 distance_to_waypoint # [m] Distance from the vehicle to the current waypoint float32 bearing_to_waypoint # [rad] Bearing towards current waypoint -# TOPICS pure_pursuit_status - ``` diff --git a/docs/ko/msg_docs/RateCtrlStatus.md b/docs/ko/msg_docs/RateCtrlStatus.md index c6a4323ae9..90eaa1208f 100644 --- a/docs/ko/msg_docs/RateCtrlStatus.md +++ b/docs/ko/msg_docs/RateCtrlStatus.md @@ -9,6 +9,5 @@ uint64 timestamp # time since system start (microseconds) float32 rollspeed_integ float32 pitchspeed_integ float32 yawspeed_integ -float32 wheel_rate_integ # FW only and optional ``` diff --git a/docs/ko/msg_docs/RoverAttitudeSetpoint.md b/docs/ko/msg_docs/RoverAttitudeSetpoint.md index fc2bc4d639..778d4407a9 100644 --- a/docs/ko/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/ko/msg_docs/RoverAttitudeSetpoint.md @@ -7,6 +7,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_setpoint # [rad] Expressed in NED frame -# TOPICS rover_attitude_setpoint - ``` diff --git a/docs/ko/msg_docs/RoverAttitudeStatus.md b/docs/ko/msg_docs/RoverAttitudeStatus.md index 28d9ef6d96..24dc3cf12f 100644 --- a/docs/ko/msg_docs/RoverAttitudeStatus.md +++ b/docs/ko/msg_docs/RoverAttitudeStatus.md @@ -8,6 +8,4 @@ uint64 timestamp # time since system start (microseconds) float32 measured_yaw # [rad/s] Measured yaw rate float32 adjusted_yaw_setpoint # [rad/s] Yaw setpoint that is being tracked (Applied slew rates) -# TOPICS rover_attitude_status - ``` diff --git a/docs/ko/msg_docs/RoverPositionSetpoint.md b/docs/ko/msg_docs/RoverPositionSetpoint.md new file mode 100644 index 0000000000..8450bf8486 --- /dev/null +++ b/docs/ko/msg_docs/RoverPositionSetpoint.md @@ -0,0 +1,15 @@ +# RoverPositionSetpoint (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverPositionSetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32[2] position_ned # 2-dimensional position setpoint in NED frame [m] +float32[2] start_ned # (Optional) 2-dimensional start position in NED frame used to define the line that the rover will track to position_ned [m] (Defaults to vehicle position) +float32 cruising_speed # (Optional) Specify rover speed [m/s] (Defaults to maximum speed) +float32 arrival_speed # (Optional) Specify arrival speed [m/s] (Defaults to zero) + +float32 yaw # [rad] [-pi,pi] from North. Optional, NAN if not set. Mecanum only. (Defaults to vehicle yaw) + +``` diff --git a/docs/ko/msg_docs/RoverRateSetpoint.md b/docs/ko/msg_docs/RoverRateSetpoint.md index 71755a38f3..12fe8cb88c 100644 --- a/docs/ko/msg_docs/RoverRateSetpoint.md +++ b/docs/ko/msg_docs/RoverRateSetpoint.md @@ -7,6 +7,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_rate_setpoint # [rad/s] Expressed in NED frame -# TOPICS rover_rate_setpoint - ``` diff --git a/docs/ko/msg_docs/RoverRateStatus.md b/docs/ko/msg_docs/RoverRateStatus.md index 1f54694ee0..a3aa1d1164 100644 --- a/docs/ko/msg_docs/RoverRateStatus.md +++ b/docs/ko/msg_docs/RoverRateStatus.md @@ -9,6 +9,4 @@ float32 measured_yaw_rate # [rad/s] Measured yaw rate float32 adjusted_yaw_rate_setpoint # [rad/s] Yaw rate setpoint that is being tracked (Applied slew rates) float32 pid_yaw_rate_integral # Integral of the PID for the closed loop yaw rate controller -# TOPICS rover_rate_status - ``` diff --git a/docs/ko/msg_docs/RoverSteeringSetpoint.md b/docs/ko/msg_docs/RoverSteeringSetpoint.md index 1a6f3203dd..48353ea957 100644 --- a/docs/ko/msg_docs/RoverSteeringSetpoint.md +++ b/docs/ko/msg_docs/RoverSteeringSetpoint.md @@ -5,9 +5,8 @@ ```c uint64 timestamp # time since system start (microseconds) -float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Only for Ackermann-steered rovers) -float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Only for Differential/Mecanum rovers) +float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Ackermann only, Positiv: Steer right, Negativ: Steer left) -# TOPICS rover_steering_setpoint +float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Differential/Mecanum only, Positiv = Turn right, Negativ: Turn left) ``` diff --git a/docs/ko/msg_docs/RoverThrottleSetpoint.md b/docs/ko/msg_docs/RoverThrottleSetpoint.md index 9533126dd0..ccdf76902d 100644 --- a/docs/ko/msg_docs/RoverThrottleSetpoint.md +++ b/docs/ko/msg_docs/RoverThrottleSetpoint.md @@ -6,9 +6,7 @@ uint64 timestamp # time since system start (microseconds) -float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] -float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] - -# TOPICS rover_throttle_setpoint +float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] (Positiv = forwards, Negativ = backwards) +float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] (Mecanum only, Positiv = right, Negativ = left) ``` diff --git a/docs/ko/msg_docs/RoverVelocitySetpoint.md b/docs/ko/msg_docs/RoverVelocitySetpoint.md new file mode 100644 index 0000000000..2e2d322b47 --- /dev/null +++ b/docs/ko/msg_docs/RoverVelocitySetpoint.md @@ -0,0 +1,12 @@ +# RoverVelocitySetpoint (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverVelocitySetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32 speed # [m/s] [-inf, inf] Speed setpoint (Backwards driving if negative) +float32 bearing # [rad] [-pi,pi] from North. [invalid: NAN, speed is defined in body x direction] +float32 yaw # [rad] [-pi, pi] (Mecanum only, Optional, defaults to current vehicle yaw) Vehicle yaw setpoint in NED frame + +``` diff --git a/docs/ko/msg_docs/RoverVelocityStatus.md b/docs/ko/msg_docs/RoverVelocityStatus.md index 02b2c3b527..c908ffac90 100644 --- a/docs/ko/msg_docs/RoverVelocityStatus.md +++ b/docs/ko/msg_docs/RoverVelocityStatus.md @@ -6,14 +6,10 @@ uint64 timestamp # time since system start (microseconds) float32 measured_speed_body_x # [m/s] Measured speed in body x direction. Positiv: forwards, Negativ: backwards -float32 speed_body_x_setpoint # [m/s] Speed setpoint in body x direction. Positiv: forwards, Negativ: backwards float32 adjusted_speed_body_x_setpoint # [m/s] Post slew rate speed setpoint in body x direction. Positiv: forwards, Negativ: backwards -float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left -float32 speed_body_y_setpoint # [m/s] Speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) -float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) float32 pid_throttle_body_x_integral # Integral of the PID for the closed loop controller of the speed in body x direction -float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction - -# TOPICS rover_velocity_status +float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction (Mecanum only) ``` diff --git a/docs/ko/msg_docs/TrajectorySetpoint6dof.md b/docs/ko/msg_docs/TrajectorySetpoint6dof.md new file mode 100644 index 0000000000..f2629e19c4 --- /dev/null +++ b/docs/ko/msg_docs/TrajectorySetpoint6dof.md @@ -0,0 +1,23 @@ +# TrajectorySetpoint6dof (UORB message) + +Trajectory setpoint in NED frame +Input to position controller. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/TrajectorySetpoint6dof.msg) + +```c +# Trajectory setpoint in NED frame +# Input to position controller. + +uint64 timestamp # time since system start (microseconds) + +# NED local world frame +float32[3] position # in meters +float32[3] velocity # in meters/second +float32[3] acceleration # in meters/second^2 +float32[3] jerk # in meters/second^3 (for logging only) + +float32[4] quaternion # unit quaternion +float32[3] angular_velocity # angular velocity in radians/second + +``` diff --git a/docs/ko/msg_docs/VehicleAttitudeSetpoint.md b/docs/ko/msg_docs/VehicleAttitudeSetpoint.md index e8dc7ebaf9..9cd9ba092b 100644 --- a/docs/ko/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/ko/msg_docs/VehicleAttitudeSetpoint.md @@ -3,7 +3,7 @@ [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) ```c -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # time since system start (microseconds) @@ -16,10 +16,6 @@ float32[4] q_d # Desired quaternion for quaternion control # For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] -bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) - -bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) - # TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint ``` diff --git a/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md b/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md new file mode 100644 index 0000000000..6eb03e797c --- /dev/null +++ b/docs/ko/msg_docs/VehicleAttitudeSetpointV0.md @@ -0,0 +1,25 @@ +# VehicleAttitudeSetpointV0 (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 yaw_sp_move_rate # rad/s (commanded by user) + +# For quaternion-based attitude control +float32[4] q_d # Desired quaternion for quaternion control + +# For clarification: For multicopters thrust_body[0] and thrust[1] are usually 0 and thrust[2] is the negative throttle demand. +# For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. +float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] + +bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) + +bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) + +# TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint + +``` diff --git a/docs/ko/msg_docs/VehicleCommand.md b/docs/ko/msg_docs/VehicleCommand.md index c2cc25f241..19557cf496 100644 --- a/docs/ko/msg_docs/VehicleCommand.md +++ b/docs/ko/msg_docs/VehicleCommand.md @@ -11,127 +11,127 @@ Follows the MAVLink COMMAND_INT / COMMAND_LONG definition uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start. -uint16 VEHICLE_CMD_CUSTOM_0 = 0 # test command -uint16 VEHICLE_CMD_CUSTOM_1 = 1 # test command -uint16 VEHICLE_CMD_CUSTOM_2 = 2 # test command -uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing -uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |Radius [m] |Velocity [m/s] |Yaw behaviour |Empty |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |Major Radius [m] |Minor Radius [m] |Velocity [m/s] |Orientation |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| -uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| -uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time |Delay in seconds (decimal, -1 to enable time-of-day fields)| hour (24h format, UTC, -1 to ignore)| minute (24h format, UTC, -1 to ignore)| second (24h format, UTC)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| -uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold |2D coord mode: 0: Orthogonal to planned route | Altitude mode: 0: Ignore altitude| Empty| Empty| Lat| Lon| Alt| -uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately |Flight termination activated if > 0.5| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value |Altitude| Frame of new altitude | Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1| Actuator 2| Actuator 3| Actuator 4| Actuator 5| Actuator 6| Index| -uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Empty| Empty| Empty| Empty| Latitude| Longitude| Empty| -uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |Altitude (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |Ground speed [m/s] |Bitmask |Loiter radius [m] for planes |Yaw [deg] |Latitude |Longitude |Altitude | +uint16 VEHICLE_CMD_CUSTOM_0 = 0 # Test command. +uint16 VEHICLE_CMD_CUSTOM_1 = 1 # Test command. +uint16 VEHICLE_CMD_CUSTOM_2 = 2 # Test command. +uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |[s] (decimal) Hold time. (ignored by fixed wing, time to stay at MISSION for rotary wing)|[m] Acceptance radius (if the sphere with this radius is hit, the MISSION counts as reached)|0 to pass through the WP, if > 0 radius [m] to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.|Desired yaw angle at MISSION (rotary wing)|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time. |Unused|Unused|[m] Radius around MISSION. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns. |Turns|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for time. |[s] Seconds (decimal)|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand. |Unused (FW pitch from FW_TKO_PITCH_MIN)|Unused|Unused|[deg] [@range 0,360] Yaw angle in NED if yaw source available, ignored otherwise|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude AMSL| +uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing. +uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |[m] Radius|[m/s] Velocity|[@enum ORBIT_YAW_BEHAVIOUR] Yaw behaviour|Unused|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |[m] Major radius|[m] Minor radius|[m/s] Velocity|Orientation|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| +uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning|0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid|Unused|[deg] [@range 0, 360] Yaw angle at goal, in compass degrees|Latitude/X of goal|Longitude/Y of goal|Altitude/Z of goal| +uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Unused|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min AMSL - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time. |[s] Delay (decimal, -1 to enable time-of-day fields)|[h] hour (24h format, UTC, -1 to ignore)|minute (24h format, UTC, -1 to ignore)|second (24h format, UTC)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration.|Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |[s] Delay (decimal seconds)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached.|Descent / Ascend rate (m/s)|Unused|Unused|Unused|Unused|Unused|Finish Altitude| +uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance [m]|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |[deg] [@range 0,360] Target angle. 0 is north|[deg/s] Speed during yaw change|[@range -1,1] Direction: negative: counter clockwise, positive: clockwise |[ 1,0] Relative offset or absolute angle|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold. |2D coord mode: 0: Orthogonal to planned route|Altitude mode: 0: Ignore altitude|Unused|Unused|Lat|Lon|Alt| +uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times. |Sequence number|Repeat count|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |[@enum SPEED_TYPE] Speed type (0=Airspeed, 1=Ground Speed)|Speed (m/s, -1 indicates no change)|[%] Throttle ( Percent, -1 indicates no change)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number|Parameter value|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number|Setting (1=on, 0=off, others possible depending on system hardware)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number|Cycle count|[s] Cycle time (decimal seconds)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number|[us] PWM rate (1000 to 2000 typical)|Cycle count|[s] Cycle time|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately. |Flight termination activated if > 0.5|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value. |Altitude|Frame of new altitude|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1|Actuator 2|Actuator 3|Actuator 4|Actuator 5|Actuator 6|Index| +uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Unused|Unused|Unused|Unused|Latitude|Longitude|Unused| +uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |[m] Altitude|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |[m/s] Ground speed|Bitmask|[m] Loiter radius for planes|[deg] Yaw|Latitude|Longitude|Altitude| uint16 VEHICLE_CMD_DO_PAUSE_CONTINUE = 193 -uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| pitch offset from next waypoint| roll offset from next waypoint| yaw offset from next waypoint| -uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| +uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Pitch offset from next waypoint|Roll offset from next waypoint|Yaw offset from next waypoint| +uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)|Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw|Transmission mode: 0: video stream, >0: single images every n seconds (decimal seconds)|Recording: 0: disabled, 1: enabled compressed, 2: enabled raw|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| uint16 VEHICLE_CMD_DO_DIGICAM_CONTROL=203 -uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount |pitch or lat in degrees, depending on mount mode.| roll or lon in degrees depending on mount mode| yaw or alt (in meters) depending on mount mode| reserved| reserved| reserved| MAV_MOUNT_MODE enum value| -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence |enable? (0=disable, 1=enable)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute |action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # motor test command |Instance (1, ...)| throttle type| throttle| timeout [s]| Motor count | Test order| Empty| -uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight |inverted (0=normal, 1=inverted)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)| q2 - quaternion param #2, x (0 in null-rotation)| q3 - quaternion param #3, y (0 in null-rotation)| q4 - quaternion param #4, z (0 in null-rotation)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See mavlink spec MAV_CMD_PREFLIGHT_CALIBRATION -uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration -uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| -uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started -uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight|Camera trigger distance (meters)| Shutter integration time (ms)| Camera minimum trigger interval| Number of positions| Roll| Pitch| Empty| -uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode |MAV_STANDARD_MODE| -uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal +uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount. |[@enum MAV_MOUNT_MODE] Mount operation mode|Stabilize roll? (1 = yes, 0 = no)|Stabilize pitch? (1 = yes, 0 = no)|stabilize yaw? (1 = yes, 0 = no)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount. |[deg] Pitch or lat, depending on mount mode.|[deg] Roll or lon depending on mount mode|[deg]/[m] Yaw or alt depending on mount mode|Unused|Unused|Unused|[@enum MAV_MOUNT_MODE]| +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence. |enable? (0=disable, 1=enable)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute. |action [@enum PARACHUTE_ACTION] (0=disable, 1=enable, 2=release, for some systems see [@enum PARACHUTE_ACTION], not in general message set.)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # Motor test command. |Instance (@range 1, )|throttle type|throttle|timeout [s]|Motor count|Test order|Unused| +uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight. |inverted (0=normal, 1=inverted)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper. +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight. |[m] Camera trigger distance|Shutter integration time (ms)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)|q2 - quaternion param #2, x (0 in null-rotation)|q3 - quaternion param #3, y (0 in null-rotation)|q4 - quaternion param #4, z (0 in null-rotation)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min(AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See MAVLink spec MAV_CMD_PREFLIGHT_CALIBRATION. +uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. +uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow|X axis offset (or generic dimension 1), in the sensor's raw units|Y axis offset (or generic dimension 2), in the sensor's raw units|Z axis offset (or generic dimension 3), in the sensor's raw units|Generic dimension 4, in the sensor's raw units|Generic dimension 5, in the sensor's raw units|Generic dimension 6, in the sensor's raw units| +uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started. +uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.|0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Camera minimum trigger interval|Number of positions|Roll|Pitch|Unused| +uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode. |MAV_STANDARD_MODE| +uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal. -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|value [-1,1]|timeout [s]|Empty|Empty|output function| -uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command|configuration|Empty|Empty|Empty|output function| -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 -uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing |0:Spektrum| 0:Spektrum DSM2, 1:Spektrum DSMX| -uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message -uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities| Reserved (all remaining params)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| -uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.) -uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom +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_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. +uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing. |0:Spektrum|0:Spektrum DSM2, 1:Spektrum DSMX| +uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message. +uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities|Reserved (all remaining params)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)| +uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.). +uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom. uint16 VEHICLE_CMD_SET_CAMERA_FOCUS = 532 -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control -uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. -uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system -uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. -uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. -uint16 VEHICLE_CMD_LOGGING_START = 2510 # start streaming ULog data -uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # stop streaming ULog data -uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # control starting/stopping transmitting data over the high latency link -uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition -uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization -uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan -uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment -uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. -uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control. +uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. +uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. +uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. +uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. +uint16 VEHICLE_CMD_LOGGING_START = 2510 # Start streaming ULog data. +uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # Stop streaming ULog data. +uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # Control starting/stopping transmitting data over the high latency link. +uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition. +uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization. +uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan. +uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment. +uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. +uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. -uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # external reset of estimator global position when deadreckoning +uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning. uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004 -# PX4 vehicle commands (beyond 16 bit mavlink commands) -uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # start of PX4 internal only vehicle commands (> UINT16_MAX) -uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Empty|Empty|Empty|Empty|Latitude|Longitude|Altitude| -uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Empty|Empty|Empty|Empty|Empty|Empty| +# PX4 vehicle commands (beyond 16 bit MAVLink commands). +uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX). +uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Unused|Unused|Unused|Unused|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude (AMSL from GNSS, positive above ground)| +uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Unused|Unused|Unused|Unused|Unused|Unused| -uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization | -uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt | -uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # +uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. +uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. +uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt. +uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # -uint8 VEHICLE_ROI_NONE = 0 # No region of interest | -uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION | -uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION | -uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location | -uint8 VEHICLE_ROI_TARGET = 4 # Point toward target +uint8 VEHICLE_ROI_NONE = 0 # No region of interest. +uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION. +uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION. +uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. +uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 uint8 PARACHUTE_ACTION_DISABLE = 0 @@ -163,13 +163,13 @@ uint8 FAILURE_TYPE_SLOW = 5 uint8 FAILURE_TYPE_DELAYED = 6 uint8 FAILURE_TYPE_INTERMITTENT = 7 -# used as param1 in DO_CHANGE_SPEED command +# Used as param1 in DO_CHANGE_SPEED command. uint8 SPEED_TYPE_AIRSPEED = 0 uint8 SPEED_TYPE_GROUNDSPEED = 1 uint8 SPEED_TYPE_CLIMB_SPEED = 2 uint8 SPEED_TYPE_DESCEND_SPEED = 3 -# used as param3 in CMD_DO_ORBIT +# Used as param3 in CMD_DO_ORBIT. uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 @@ -177,29 +177,29 @@ uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 -# used as param1 in ARM_DISARM command +# Used as param1 in ARM_DISARM command. int8 ARMING_ACTION_DISARM = 0 int8 ARMING_ACTION_ARM = 1 -# param2 in VEHICLE_CMD_DO_GRIPPER +# param2 in VEHICLE_CMD_DO_GRIPPER. uint8 GRIPPER_ACTION_RELEASE = 0 uint8 GRIPPER_ACTION_GRAB = 1 uint8 ORB_QUEUE_LENGTH = 8 -float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. -uint32 command # Command ID -uint8 target_system # System which should execute the command -uint8 target_component # Component which should execute the command, 0 for all components -uint8 source_system # System sending the command -uint16 source_component # Component / mode executor sending the command -uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) +float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. +uint32 command # Command ID. +uint8 target_system # System which should execute the command. +uint8 target_component # Component which should execute the command, 0 for all components. +uint8 source_system # System sending the command. +uint16 source_component # Component / mode executor sending the command. +uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command). bool from_external uint16 COMPONENT_MODE_EXECUTOR_START = 1000 diff --git a/docs/ko/msg_docs/index.md b/docs/ko/msg_docs/index.md index 3be60e4f9f..bcdfefd906 100644 --- a/docs/ko/msg_docs/index.md +++ b/docs/ko/msg_docs/index.md @@ -15,10 +15,18 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [ActuatorMotors](ActuatorMotors.md) — Motor control message - [ActuatorServos](ActuatorServos.md) — Servo control message +- [AirspeedValidated](AirspeedValidated.md) - [ArmingCheckReply](ArmingCheckReply.md) - [ArmingCheckRequest](ArmingCheckRequest.md) - [BatteryStatus](BatteryStatus.md) - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors +- [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 @@ -26,6 +34,11 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m Unset optional setpoints are not controlled Unset optional constraints default to vehicle specifications - [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. - [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. @@ -79,8 +92,6 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [Airspeed](Airspeed.md) -- [AirspeedValidated](AirspeedValidated.md) - - [AirspeedWind](AirspeedWind.md) - [AutotuneAttitudeControlStatus](AutotuneAttitudeControlStatus.md) @@ -95,7 +106,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [CanInterfaceStatus](CanInterfaceStatus.md) -- [CellularStatus](CellularStatus.md) +- [CellularStatus](CellularStatus.md) — Cellular status - [CollisionConstraints](CollisionConstraints.md) — Local setpoint constraints in NED frame setting something to NaN means that no limit is provided @@ -164,6 +175,14 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [FigureEightStatus](FigureEightStatus.md) +- [FixedWingLateralGuidanceStatus](FixedWingLateralGuidanceStatus.md) — Fixed Wing Lateral Guidance Status message + Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +- [FixedWingLateralStatus](FixedWingLateralStatus.md) — Fixed Wing Lateral Status message + Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +- [FixedWingRunwayControl](FixedWingRunwayControl.md) — Auxiliary control fields for fixed-wing runway takeoff/landing + - [FlightPhaseEstimation](FlightPhaseEstimation.md) - [FollowTarget](FollowTarget.md) @@ -270,8 +289,6 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [NormalizedUnsignedSetpoint](NormalizedUnsignedSetpoint.md) -- [NpfgStatus](NpfgStatus.md) - - [ObstacleDistance](ObstacleDistance.md) — Obstacle distances in front of the sensor. - [OffboardControlMode](OffboardControlMode.md) — Off-board control mode @@ -343,6 +360,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [RoverAttitudeStatus](RoverAttitudeStatus.md) +- [RoverPositionSetpoint](RoverPositionSetpoint.md) + - [RoverRateSetpoint](RoverRateSetpoint.md) - [RoverRateStatus](RoverRateStatus.md) @@ -351,6 +370,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [RoverThrottleSetpoint](RoverThrottleSetpoint.md) +- [RoverVelocitySetpoint](RoverVelocitySetpoint.md) + - [RoverVelocityStatus](RoverVelocityStatus.md) - [Rpm](Rpm.md) @@ -419,6 +440,9 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [TimesyncStatus](TimesyncStatus.md) +- [TrajectorySetpoint6dof](TrajectorySetpoint6dof.md) — Trajectory setpoint in NED frame + Input to position controller. + - [TransponderReport](TransponderReport.md) - [TuneControl](TuneControl.md) — This message is used to control the tunes, when the tune_id is set to CUSTOM @@ -471,4 +495,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [YawEstimatorStatus](YawEstimatorStatus.md) +- [AirspeedValidatedV0](AirspeedValidatedV0.md) + +- [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) + - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander \ No newline at end of file diff --git a/docs/ko/releases/1.16.md b/docs/ko/releases/1.16.md new file mode 100644 index 0000000000..7e5bc0f736 --- /dev/null +++ b/docs/ko/releases/1.16.md @@ -0,0 +1,221 @@ +# PX4-Autopilot v1.16.0 Release Notes + + + + + +
+
+

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

+
+
+ +This document covers all changes in PX4 v1.16.0 since the previous stable release ([PX4 v1.15.0](../releases/1.15.md)). + +:::info +These notes include only changes merged in 2023 and later — commits before 2023 are not listed. +::: + +## Read Before Upgrading + +Please continue reading for [upgrade instructions](#upgrade-guide). + +## Major Changes + +- **Rover support rework** + - New dedicated firmware build for rovers (airframe IDs 50000–52000) + - Separate modules for Ackermann, differential and mecanum rovers, each with manual, acro, stabilized, position and auto modes + - Shared pure-pursuit guidance library for all rover modules + - Legacy rover position control module deprecated in favor of the new modules + +## Upgrade Guide + +- [PX4-Autopilot#24648](https://github.com/PX4/PX4-Autopilot/pull/24648): Added setting default for EKF2_EV_CTRL to 15 for VOXL 2 boards +- [PX4-Autopilot#22517](https://github.com/PX4/PX4-Autopilot/pull/22517): Change default ethernet IP +- [PX4-Autopilot#24602](https://github.com/PX4/PX4-Autopilot/pull/24602): remove serial port default from sf45 module + +## Other changes + +### Hardware Support + +- **[New Hardware]** [PX4-Autopilot#23830](https://github.com/PX4/PX4-Autopilot/pull/23830): Boards: ARK FPV FC +- **[New Hardware]** [PX4-Autopilot#23414](https://github.com/PX4/PX4-Autopilot/pull/23414): board: add cuav 7-nano +- **[New Hardware]** [PX4-Autopilot#24769](https://github.com/PX4/PX4-Autopilot/pull/24769): add new board corvon743v1 +- **[New Hardware]** [PX4-Autopilot#24018](https://github.com/PX4/PX4-Autopilot/pull/24018): boards: bluerobotics: navigator: Add initial support +- **[New Hardware]** [PX4-Autopilot#24147](https://github.com/PX4/PX4-Autopilot/pull/24147): boards: add new board micoair743-v2 +- **[New Hardware]** [PX4-Autopilot#23218](https://github.com/PX4/PX4-Autopilot/pull/23218): boards: add new board micoair h743 +- **[New Hardware]** [PX4-Autopilot#24512](https://github.com/PX4/PX4-Autopilot/pull/24512): boards: Add FMUv6s target +- **[New Hardware]** [PX4-Autopilot#23927](https://github.com/PX4/PX4-Autopilot/pull/23927): manifest: Add Skynode S baseboard +- **[New Hardware]** [PX4-Autopilot#23257](https://github.com/PX4/PX4-Autopilot/pull/23257): Add Tropic VMU board support (Baseboard for Teensy 4.1) +- **[New Hardware]** [PX4-Autopilot#23697](https://github.com/PX4/PX4-Autopilot/pull/23697): boards: add new board X-MAV AP-H743v2 +- **[New Hardware]** [PX4-Autopilot#23551](https://github.com/PX4/PX4-Autopilot/pull/23551): 3DR boards: Support for 3DR Control Zero H7 OEM Rev G +- **[New Hardware]** [PX4-Autopilot#23623](https://github.com/PX4/PX4-Autopilot/pull/23623): new board support ZeroOne x6 + +### 공통 + +- [Optical flow scaling factor - SENS_FLOW_SCALE](../sensor/optical_flow.md#scale-factor). ([PX4-Autopilot#23936](https://github.com/PX4/PX4-Autopilot/pull/23936)). + +- [PX4-Autopilot#22813](https://github.com/PX4/PX4-Autopilot/pull/22813): Reintroduce optional parameter versioning mechanism for airframe maintainers + +- [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 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. + ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). + +- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. + Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. + This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. + ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). + +- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) + +- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. + This typically reduces false warnings due to magnetometer inconsistencies. + ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). + +### 제어 + +- [PX4-Autopilot#23863](https://github.com/PX4/PX4-Autopilot/pull/23863): [Sponsored by ARK] Bidirectional DShot + +- [PX4-Autopilot#24196](https://github.com/PX4/PX4-Autopilot/pull/24196): Make control allocation and actuator effectiveness a non-module-specific library + +- [PX4-Autopilot#24221](https://github.com/PX4/PX4-Autopilot/pull/24221): Spacecraft Build and Bare Control Allocator + +- Configurable multicopter orbit-mode yaw via `MC_ORBIT_YAW_MOD` ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) + +- Collision prevention now works in manual (acceleration-based) flight mode (`MPC_POS_MODE`) ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507)) + +### Estimation + +- [PX4-Autopilot#23854](https://github.com/PX4/PX4-Autopilot/pull/23854): EKF2: ellipsoidal earth navigation + +- [PX4-Autopilot#23263](https://github.com/PX4/PX4-Autopilot/pull/23263): EKF2: Terrain state + +- [PX4-Autopilot#23185](https://github.com/PX4/PX4-Autopilot/pull/23185): ekf2: add mag type init + +- [PX4-Autopilot#23436](https://github.com/PX4/PX4-Autopilot/pull/23436): ekf2: Optical flow enabled by default + +- Position-loss failsafe delay removed; triggers 1 s after loss (see Common) + +### 센서 + +- [PX4-Autopilot#23656](https://github.com/PX4/PX4-Autopilot/pull/23656): Implemented AUAV absolute/differential pressure sensor support + +- [PX4-Autopilot#23639](https://github.com/PX4/PX4-Autopilot/pull/23639): Implemented temperature sensor support for INA228 / INA238 + +- [PX4-Autopilot#22744](https://github.com/PX4/PX4-Autopilot/pull/22744): Add Ublox ZED-F9P-15B + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Mag cal: automatically disable internal mags if external ones are available + +- [PX4-Autopilot#23064](https://github.com/PX4/PX4-Autopilot/pull/23064): BMP581: Add Bosch BMP581 barometer + +- [PX4-Autopilot#22914](https://github.com/PX4/PX4-Autopilot/pull/22914): Murata SCH16T IMU driver + +- [PX4-Autopilot#23023](https://github.com/PX4/PX4-Autopilot/pull/23023): ST IIS2MDC Magnetometer driver + +- [PX4-Autopilot#24121](https://github.com/PX4/PX4-Autopilot/pull/24121): Include distance sensor in dds topics + +- [PX4-Autopilot#23925](https://github.com/PX4/PX4-Autopilot/pull/23925): drivers: magnetometer: mmc5983ma: Add SPI support + +- [PX4-Autopilot#23909](https://github.com/PX4/PX4-Autopilot/pull/23909): drivers/magnetometer/ak09916: Add support to AK09915 + +- [PX4-Autopilot#23362](https://github.com/PX4/PX4-Autopilot/pull/23362): Add Bosch BMM350 magnetometer + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Compass calibration now disables internal compass when external unit present, reducing false warnings + +### 시뮬레이션 + +- **SIH**: + - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. + ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). + - SIH now supports the standard VTOL airframe + ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). +- **Gazebo**: + - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. + The default installer scripts (used for CI) and documentation have been updated. + This is required because Garden end-of-life is Nov 2024. + ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) + - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). + - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). + - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). + - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). + - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). + - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). + - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) + - [PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471): Gazebo: Moving platform + +### uXRCE-DDS / ROS2 + +- **[Feature]** [PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113): [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically +- [PX4-Autopilot#24582](https://github.com/PX4/PX4-Autopilot/pull/24582): dds_topics: add vtol_vehicle_status +- [PX4-Autopilot#24583](https://github.com/PX4/PX4-Autopilot/pull/24583): dds_topics: add home_position + +### MAVLink + +- TBD + +### Multi-Rotor + +- [PX4-Autopilot#24173](https://github.com/PX4/PX4-Autopilot/pull/24173): [Multirotor] add yaw torque low pass filter + +- [PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943): Add gz model for quadtailsitter + +- [PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358): Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) + +- [PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507): Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). + +### 수직이착륙기(VTOL) + +- TBD + +### Fixed-wing + +- [PX4-Autopilot#24167](https://github.com/PX4/PX4-Autopilot/pull/24167): Fixedwing: fix wheel controller + +- [PX4-Autopilot#23520](https://github.com/PX4/PX4-Autopilot/pull/23520): FixedWing: allow position control without valid global position + +- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) + +### 탐사선 + +This release contains a major rework for the rover support in PX4: + +- Complete restructure of the [rover related documentation](../frames_rover/index.md). +- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). +- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): + - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). +- New module dedicated to [differential rovers](../frames_rover/differential.md): + - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). +- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): + - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). +- Added rover-specific firmware build (`50000–52000`) for Ackermann, differential and mecanum rovers +- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). + This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): + - Generic Differential Rover `50000`. + - Generic Ackermann Rover `51000`. + - Axial SCX10 2 Trail Honcho `51001`. + - Generic Mecanum Rover `52000`. +- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. +- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). +- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. + +### Infrastructure + +- [PX4-Autopilot#24011](https://github.com/PX4/PX4-Autopilot/pull/24011): standard_modes: add vehicle-type specific standard modes +- [PX4-Autopilot#24020](https://github.com/PX4/PX4-Autopilot/pull/24020): ci: build all upload to releases +- [PX4-Autopilot#24002](https://github.com/PX4/PX4-Autopilot/pull/24002): ci: px4-dev container +- [PX4-Autopilot#23937](https://github.com/PX4/PX4-Autopilot/pull/23937): ci: workflow for ubuntu 24 +- [PX4-Autopilot#23869](https://github.com/PX4/PX4-Autopilot/pull/23869): ci: add test for Ubuntu 22.04 +- [PX4-Autopilot#23574](https://github.com/PX4/PX4-Autopilot/pull/23574): ci: try runs-on Dronecode Infra +- [PX4-Autopilot#23550](https://github.com/PX4/PX4-Autopilot/pull/23550): ci: replace build workflows diff --git a/docs/ko/releases/index.md b/docs/ko/releases/index.md index f42bfc9aa1..7df22a6bf7 100644 --- a/docs/ko/releases/index.md +++ b/docs/ko/releases/index.md @@ -2,7 +2,8 @@ PX4 릴리스 노트는 각 릴리스의 변경 사항들을 설명합니다. -- [main](../releases/main.md) (changes since v1.15) +- [main](../releases/main.md) (changes since v1.16) +- [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) - [v1.13](../releases/1.13.md) diff --git a/docs/ko/releases/main.md b/docs/ko/releases/main.md index 0e6c07f146..82036f6315 100644 --- a/docs/ko/releases/main.md +++ b/docs/ko/releases/main.md @@ -9,15 +9,15 @@ const { site } = useData();
-

This page is on a release bramch, 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 `main` branch since the last major release ([PX v1.15](../releases/1.15.md)). +This contains changes to PX4 `main` branch since the last major release ([PX v1.16](../releases/1.16.md)). :::warning -The PX4 v1.15 release is in beta testing, pending release. -Update these notes with features that are going to be in `main` but not the PX4 v1.15 release. +PX4 v1.16 is in candidate-release testing, pending release. +Update these notes with features that are going to be in `main` but not the PX4 v1.16 release. ::: ## Read Before Upgrading @@ -40,22 +40,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 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. - ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). -- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. - Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. - This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. - ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). -- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) -- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. - This typically reduces false warnings due to magnetometer inconsistencies. - ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). +- TBD ### 제어 @@ -71,26 +56,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### 시뮬레이션 -- [SIH]: - - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. - ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). - - SIH now supports the standard VTOL airframe - ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). -- [Gazebo]: - - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. - The default installer scripts (used for CI) and documentation have been updated. - This is required because Garden end-of-life is Nov 2024. - ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) - - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). - - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). - - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). - - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). - - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). - - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). - - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) - - [Moving platform simulation](../sim_gazebo_gz/worlds#moving-platform) ([PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471)) +- TBD ### Ethernet @@ -98,7 +64,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### uXRCE-DDS / ROS2 -- **[Feature]** [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically ([PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113)) +- [PX4 ROS 2 Interface Library](../ros2/px4_ros2_control_interface.md) support for [Fixed Wing lateral/longitudinal setpoint](../ros2/px4_ros2_control_interface.md#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype) (`FwLateralLongitudinalSetpointType`) and [VTOL transitions](../ros2/px4_ros2_control_interface.md#controlling-a-vtol). ([PX4-Autopilot#24056](https://github.com/PX4/PX4-Autopilot/pull/24056)). ### MAVLink @@ -106,8 +72,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Multi-Rotor -- Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) -- Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507) +- TBD ### 수직이착륙기(VTOL) @@ -115,29 +80,11 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Fixed-wing -- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) +- TBD ### 탐사선 -This release contains a major rework for the rover support in PX4: - -- Complete restructure of the [rover related documentation](../frames_rover/index.md). -- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). -- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): - - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). -- New module dedicated to [differential rovers](../frames_rover/differential.md): - - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). -- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): - - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). -- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). - This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): - - Generic Differential Rover `50000`. - - Generic Ackermann Rover `51000`. - - Axial SCX10 2 Trail Honcho `51001`. - - Generic Mecanum Rover `52000`. -- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. -- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). -- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. +- TBD ### ROS 2 diff --git a/docs/ko/ros2/px4_ros2_control_interface.md b/docs/ko/ros2/px4_ros2_control_interface.md index 77f7a871ff..890858df38 100644 --- a/docs/ko/ros2/px4_ros2_control_interface.md +++ b/docs/ko/ros2/px4_ros2_control_interface.md @@ -345,6 +345,7 @@ The used types also define the compatibility with different vehicle types. The following sections provide a list of supported setpoint types: - [GotoSetpointType](#go-to-setpoint-gotosetpointtype): Smooth position and (optionally) heading control +- [FwLateralLongitudinalSetpointType](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype): Direct control of lateral and longitudinal fixed wing dynamics - [DirectActuatorsSetpointType](#direct-actuator-control-setpoint-directactuatorssetpointtype): Direct control of motors and flight surface servo setpoints :::tip @@ -359,7 +360,7 @@ You can add your own setpoint types by adding a class that inherits from `px4_ro This setpoint type is currently only supported for multicopters. ::: -Smoothly control position and (optionally) heading setpoints with the [px4_ros2::GotoSetpointType](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. +Smoothly control position and (optionally) heading setpoints with the [`px4_ros2::GotoSetpointType`](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. The setpoint type is streamed to FMU based position and heading smoothers formulated with time-optimal, maximum-jerk trajectories, with velocity and acceleration constraints. The most trivial use is simply inputting a 3D position into the update method: @@ -404,6 +405,137 @@ _goto_setpoint->update( max_heading_rate_rad_s); ``` +#### Fixed-Wing Lateral and Longitudinal Setpoint (FwLateralLongitudinalSetpointType) + + + +:::info +This setpoint type is supported for fixed-wing vehicles and for VTOLs in fixed-wing mode. +::: + +Use the [`px4_ros2::FwLateralLongitudinalSetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1FwLateralLongitudinalSetpointType.html) to directly control the lateral and longitudinal dynamics of a fixed-wing vehicle — that is, side-to-side motion (turning/banking) and forward/vertical motion (speeding up and climbing/descending), respectively. +This setpoint is streamed to the PX4 [_FwLateralLongitudinalControl_ module](../modules/modules_controller.md#fw-lat-lon-control), which decouples lateral and longitudinal inputs while ensuring that vehicle limits are respected. + +To control the vehicle, at least one lateral **and** one longitudinal setpoint must be provided: + +1. Of the longitudinal inputs: either `altitude` or `height_rate` must be finite to control vertical motion. + If both are set to `NAN`, the vehicle will maintain its current altitude. +2. Of the lateral inputs: at least one of `course`, `airspeed_direction`, or `lateral_acceleration` must be finite. + +For a detailed description of the controllable parameters, please refer to message definitions ([FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) and [FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md)). + +##### 기본 사용법 + +This type has a number of update methods, each allowing you to specify an increasing number of setpoints. + +The simplest method is `updateWithAltitude()`, which allows you to specify a `course` and `altitude` target setpoint: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, course); +``` + +PX4 uses the setpoints to compute the _roll angle_, _pitch angle_ and _throttle_ setpoints that are sent to lower level controllers. +Note that the commanded flight is expected to be relatively gentle/unaggressive when using this method. +This is done as follows: + +- Lateral control output: + + course setpoint (set by user) → airspeed direction (heading) setpoint → lateral acceleration setpoint → roll angle setpoint. + +- Longitudinal control output: + + altitude setpoint (set by user) → height rate setpoint → pitch angle setpoint and throttle settings. + +The `updateWithHeightRate()` method allows you to set a target `course` and `height_rate` (this is useful if the speed of ascent or descent matters, or needs to be dynamically controlled): + +```cpp +const float height_rate = 2.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithHeightRate(height_rate, course); +``` + +The `updateWithAltitude()` and `updateWithHeightRate()` methods allow you to additionally control the equivalent airspeed or lateral acceleration by specifying them as the third and fourth arguments, respectively: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +const float equivalent_aspd = 15.F; // m/s +const float lateral_acceleration = 2.F; // FRD, used as feedforward + +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, + course, + equivalent_aspd, + lateral_acceleration); +``` + +The equivalent airspeed and lateral acceleration arguments are defined as `std::optional`, so you can omit any of them by passing `std::nullopt`. + +:::tip +If both lateral acceleration and course setpoints are provided, the lateral acceleration setpoint will be used as feedforward. +::: + +##### Full Control Using the Setpoint Struct + +For full flexibility, you can create and pass a [`FwLateralLongitudinalSetpoint`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwLateralLongitudinalSetpoint.html) struct. +Each field is templated with `std::optional`. + +:::tip +If both course and airspeed direction are set: airspeed direction takes precedence, course is not controlled. +Lateral acceleration is treated as feedforward if either course or airspeed direction are also finite. +If both altitude and height rate are set: height rate takes precedence, altitude is not controlled. +::: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withCourse(0.F); +// setpoint_s.withAirspeedDirection(0.2F); // uncontrolled +setpoint_s.withLateralAcceleration(2.F); // feedforward +//setpoint_s.withAltitude(500.F); // uncontrolled +setpoint_s.withHeightRate(2.F); +setpoint_s.withEquivalentAirspeed(15.F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s); +``` + +The diagram below illustrates the interaction between the `FwLateralLongitudinalSetpointType` and PX4 when all inputs are set. + +![FW ROS Interaction](../../assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg) + +##### Advanced Configuration (Optional) + +You can also pass a [`FwControlConfiguration`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwControlConfiguration.html) struct along with the setpoint to override default controller settings and constraints such as pitch limits, throttle limits, and target sink/climb rates. +This is intended for advanced users: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withAirspeedDirection(0.F); +setpoint_s.withLateralAcceleration(2.F); // feedforward +setpoint_s.withAltitude(500.F); +setpoint_s.withEquivalentAirspeed(15.F); + +px4_ros2::FwControlConfiguration config_s; + +config_s.withTargetClimbRate(3.F); +config_s.withMaxAcceleration(5.F); +config_s.withThrottleLimits(0.4F, 0.6F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s, config_s); +``` + +All configuration fields are defined as `std::optional`. +Unset values will default to the PX4 configuration. +See [LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) and [FixedWingLongitudinalConfiguration](../msg_docs/LongitudinalControlConfiguration.md) for more information on configuration options. + +:::info +For safety, PX4 automatically limits configuration values to stay within the vehicle’s constraints. +For example, throttle overrides are clamped to remain between [`FW_THR_MIN`](../advanced_config/parameter_reference.md#FW_THR_MIN) +and [`FW_THR_MAX`](../advanced_config/parameter_reference.md#FW_THR_MAX). +::: + #### Direct Actuator Control Setpoint (DirectActuatorsSetpointType) Actuators can be directly controlled using the [px4_ros2::DirectActuatorsSetpointType](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1DirectActuatorsSetpointType.html) setpoint type. @@ -415,11 +547,55 @@ For example to control a quadrotor, you need to set the first 4 motors according If you want to control an actuator that does not control the vehicle's motion, but for example a payload servo, see [below](#controlling-an-independent-actuator-servo). ::: +### Controlling a VTOL + + + +To control a VTOL in an external flight mode, ensure you're returning the correct setpoint type based on the current flight configuration: + +- Multicopter mode: use a setpoint type that is compatible with multicopter control. For example: either the [`GotoSetpointType`](#go-to-setpoint-gotosetpointtype) or the [`TrajectorySetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1TrajectorySetpointType.html). +- Fixed-wing mode: Use the [`FwLateralLongitudinalSetpointType`](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype). + +As long as the VTOL remains in either multicopter or fixed-wing mode throughout the external mode, no additional handling is required. + +If you would like to command a VTOL transition in your external mode, you need to use the [VTOL API](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1VTOL.html). The VTOL API provides the functionality to command a transition and query the current state of the vehicle. + +Use this API with caution! +Commanding transitions externally makes the user partially responsible for ensuring smooth and safe behavior, unlike onboard transitions (e.g. via RC switch) where PX4 handles the full process: + +1. Ensure that both the `TrajectorySetpointType` and the `FwLateralLongitudinalSetpointType` are available to your mode. +2. Create an instance of `px4_ros2::VTOL` in the constructor of your mode. +3. To command a transition, you can use the `toMulticopter()` or `toFixedwing()` methods on your VTOL object to set the desired state. +4. During transition, send the following combination of setpoints: + + ```cpp + // Assuming the instance of the px4_ros2::VTOL object is called vtol + + // Send TrajectorySetpointType as follows: + Eigen::Vector3f acceleration_sp = vtol.computeAccelerationSetpointDuringTransition(); + Eigen::Vector3f velocity_sp{NAN, NAN, 0.f}; + + _trajectory_setpoint->update(velocity_sp, acceleration_sp); + + // Send FwLateralLongitudinalSetpointType with lateral input to realign vehicle as desired + + float course_sp = 0.F; // North + + _fw_lateral_longitudinal_setpoint->updateWithAltitude(NAN, course_sp) + ``` + + This will ensure that the transition is handled properly within PX4. + You can optionally pass a deceleration setpoint to `computeAccelerationSetpointDuringTransition()` to be used during back-transitions. + +To check the current state of the vehicle, use the `getCurrentState()` method on your `px4_ros2::VTOL` object. + +See [this external flight mode implementation](https://github.com/Auterion/px4-ros2-interface-lib/tree/main/examples/cpp/modes/vtol) for a practical example on how to use this API. + ### Controlling an Independent Actuator/Servo If you want to control an independent actuator (a servo), follow these steps: -1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink) +1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink). 2. Create an instance of [px4_ros2::PeripheralActuatorControls](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1PeripheralActuatorControls.html) in the constructor of your mode. 3. Call the `set()` method to control the actuator(s). This can be done independently of any active setpoints. @@ -431,6 +607,7 @@ You can access PX4 telemetry topics directly via the following classes: - [OdometryGlobalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryGlobalPosition.html): Global position - [OdometryLocalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryLocalPosition.html): Local position, velocity, acceleration, and heading - [OdometryAttitude](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAttitude.html): Vehicle attitude +- [OdometryAirspeed](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAirspeed.html): Airspeed For example, you can query the vehicle's current position estimate as follows: diff --git a/docs/ko/ros2/px4_ros2_msg_translation_node.md b/docs/ko/ros2/px4_ros2_msg_translation_node.md index 73aaade3b4..0bb22c79c1 100644 --- a/docs/ko/ros2/px4_ros2_msg_translation_node.md +++ b/docs/ko/ros2/px4_ros2_msg_translation_node.md @@ -1,6 +1,6 @@ # PX4 ROS 2 Message Translation Node - + The message translation node allows ROS 2 applications that were compiled against different versions of the PX4 messages to interwork with newer versions of PX4, and vice versa, without having to change either the application or the PX4 side. @@ -207,7 +207,7 @@ Message translations can be either _direct_ or _generic_. ### File Structure -Starting from PX4 v1.16 (main), the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: +Starting from PX4 v1.16, the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: ``` PX4-Autopilot diff --git a/docs/ko/ros2/user_guide.md b/docs/ko/ros2/user_guide.md index d267cadfbb..9cad98c9d7 100644 --- a/docs/ko/ros2/user_guide.md +++ b/docs/ko/ros2/user_guide.md @@ -34,7 +34,7 @@ The generator uses the uORB message definitions in the source tree: [PX4-Autopil ROS 2 applications need to be built in a workspace that has the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware. You can include these by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your ROS 2 workspace (branches in the repo correspond to the messages for different PX4 releases). -Starting from PX4 v1.16 (main) in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. +Starting from PX4 v1.16, in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. This requires the [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to be running to ensure that messages can be converted and exchanged correctly. Note that the micro XRCE-DDS _agent_ itself has no dependency on client-side code. @@ -378,7 +378,7 @@ accelerometer_integral_dt: 4739 #### (Optional) Starting the Translation Node - + This example is built with PX4 and ROS2 versions that use the same message definitions. If you were to use incompatible [message versions](../middleware/uorb.md#message-versioning) you would need to install and run the [Message Translation Node](./px4_ros2_msg_translation_node.md) as well, before running the example: diff --git a/docs/ko/sim_gazebo_gz/index.md b/docs/ko/sim_gazebo_gz/index.md index a106d313e8..719e773305 100644 --- a/docs/ko/sim_gazebo_gz/index.md +++ b/docs/ko/sim_gazebo_gz/index.md @@ -396,6 +396,11 @@ As long as the world file and the model file are in the Gazebo search path (`GZ_ However, `make px4_sitl gz__` won't work with them. ::: +## Extending Gazebo with Plugins + +World, vehicle (model), and sensor behaviour can be customised using plugins. +For more information see [Gazebo Plugins](../sim_gazebo_gz/plugins.md). + ## 다중 차량 시뮬레이션 Multi-Vehicle simulation is supported on Linux hosts. diff --git a/docs/ko/sim_gazebo_gz/plugins.md b/docs/ko/sim_gazebo_gz/plugins.md new file mode 100644 index 0000000000..9723f44177 --- /dev/null +++ b/docs/ko/sim_gazebo_gz/plugins.md @@ -0,0 +1,92 @@ +# Gazebo Plugins + +Gazebo plugins extend the simulator with custom functionality not provided by default. They can be attached to different entity types and allow you to add new sensors, modify world physics, or interact with the simulation environment. + +## Plugin Types + +Plugins can be attached to these entity types: + +- **World** - Global simulation behavior +- **Model** - Specific model functionality +- **Sensor** - Custom sensor implementations +- **Actor** - Dynamic entity behavior + +## Supported Plugins + +PX4 currently supports these plugins: + +- [OpticalFlowSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/optical_flow): Provides optical flow sensor simulation using OpenCV-based flow calculation. +- [GstCameraSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/gstreamer): Streams camera feeds via UDP (RTP/H.264) or RTMP with optional NVIDIA CUDA hardware acceleration. +- [MovingPlatformController](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/moving_platform_controller): Controls moving platforms (ships, trucks, etc.) for takeoff and landing scenarios. + Includes configurable velocity, heading, and random fluctuations. + +## Plugin Registration + +Plugins must be registered in the [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) file to be available in your world: + +```xml + + + + + + + + + + +``` + +## Creating Custom Plugins + +When developing new plugins: + +1. **Follow the plugin architecture** - Implement desired interfaces. + + You can start by copying the [Template plugin](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/template_plugin) which is a simple example that only implements `ISystemPreUpdate` and `ISystemPostUpdate`. + The interfaces are specified in the official [Gazebo documentation](https://gazebosim.org/api/sim/9/createsystemplugins.html). + +2. **Register your plugin** - Add it to [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) for discovery. + +3. **Use the custom namespace** - Follow the pattern `custom::YourPluginName`. + +### Example Plugin Structure + +```cpp +class YourCustomSystem : + public gz::sim::System, + public gz::sim::ISystemPreUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + void PreUpdate(const gz::sim::UpdateInfo &_info, + gz::sim::EntityComponentManager &_ecm) final; + void PostUpdate(const gz::sim::UpdateInfo &_info, + const gz::sim::EntityComponentManager &_ecm) final; +}; + +// Plugin registration +GZ_ADD_PLUGIN(YourCustomSystem, gz::sim::System, + YourCustomSystem::ISystemPreUpdate, + YourCustomSystem::ISystemPostUpdate) +GZ_ADD_PLUGIN_ALIAS(YourCustomSystem, "custom::YourCustomSystem") +``` + +## Enabling a Plugin + +For world plugins all you need to do is [register the plugin](#plugin-registration) (add it to the `server.config`). +It will then be available to all worlds and vehicles. + +The process for adding vehicle model/sensor plugins is not documented. +This can tracked through [PX4-Autopilot#2493](https://github.com/PX4/PX4-Autopilot/issues/24939). + +## Resources + +- **PX4 Plugins**: [Repository source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins) +- **Official Gazebo Documentation**: [System Plugins Guide](https://gazebosim.org/api/sim/9/createsystemplugins.html) +- **Server Configuration**: [Configuration Reference](https://gazebosim.org/api/sim/9/server_config.html) +- **PX4 Gazebo-classic Plugins**: [PX4 Gazebo Classic Plugins](https://github.com/PX4/PX4-SITL_gazebo-classic/tree/main/src) + +:::info +Plugins for modern Gazebo are still evolving. The plugin system differs from Gazebo Classic. +::: diff --git a/docs/ko/sim_gazebo_gz/worlds.md b/docs/ko/sim_gazebo_gz/worlds.md index 7a57b8944a..a4a461753a 100644 --- a/docs/ko/sim_gazebo_gz/worlds.md +++ b/docs/ko/sim_gazebo_gz/worlds.md @@ -75,7 +75,7 @@ World with walls that is designed for testing [collision prevention](../computer ## Moving Platform - + [Empty world](#default) with the addition of a flat moving platform, to simulate drone operations from moving vehicles like ships or trucks. The platform is controlled by a plugin which is included in the world. The platform is at a height of 2m, so place the vehicle on it with: diff --git a/docs/ko/sim_sih/index.md b/docs/ko/sim_sih/index.md index e7991e0c62..254896a26f 100644 --- a/docs/ko/sim_sih/index.md +++ b/docs/ko/sim_sih/index.md @@ -58,6 +58,7 @@ To set up/start SIH: 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) @@ -116,25 +117,31 @@ 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): - - quadrotor: + - Quadcopter ```sh make px4_sitl sihsim_quadx ``` - - Fixed-wing (plane): + - Hexacopter + + ```sh + make px4_sitl sihsim_hex + ``` + + - Fixed-wing (plane) ```sh make px4_sitl sihsim_airplane ``` - - XVert VTOL tailsitter: + - XVert VTOL tailsitter ```sh make px4_sitl sihsim_xvert ``` - - Standard VTOL: + - 표준 VTOL ```sh make px4_sitl sihsim_standard_vtol @@ -235,7 +242,8 @@ For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init. The dynamic models for the various vehicles are: -- Quadrotor: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/assets/simulation/SIH_dynamic_model.pdf). +- Quadcopter: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/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. diff --git a/docs/ko/simulation/community_supported_simulators.md b/docs/ko/simulation/community_supported_simulators.md index 06ae3f23a4..0cfea9b84f 100644 --- a/docs/ko/simulation/community_supported_simulators.md +++ b/docs/ko/simulation/community_supported_simulators.md @@ -12,10 +12,10 @@ 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) -| 시뮬레이터 | 설명 | -| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [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 very 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).

| -| [Simulation-In-Hardware](../sim_sih/index.md) (SIH) |

An alternative to HITL that offers a hard real-time simulation directly on the hardware autopilot. This simulator is 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).

Supported Vehicles: Plane, Quad, Tailsitter, Standard VTOL

| +| 시뮬레이터 | 설명 | +| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [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

| +| [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 very 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).

| diff --git a/docs/ko/telemetry/crsf_telemetry.md b/docs/ko/telemetry/crsf_telemetry.md index 166fa44117..f4cb1b752b 100644 --- a/docs/ko/telemetry/crsf_telemetry.md +++ b/docs/ko/telemetry/crsf_telemetry.md @@ -71,7 +71,7 @@ For ExpressLRS receivers wire to the flight controller UART as shown below (wiri ### Firmware Configuration/Build CRSF telemetry support is not included in any PX4 firmware by default. -To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver.md#crsf-rc) and removes [rc_input](../modules/modules_driver.md#rc-input). +To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver_radio_control.md#crsf-rc) and removes [rc_input](../modules/modules_driver_radio_control.md#rc-input). 단계는 다음과 같습니다: diff --git a/docs/ko/telemetry/jfi_telemetry.md b/docs/ko/telemetry/jfi_telemetry.md index f9c10669d5..9fbd07f31d 100644 --- a/docs/ko/telemetry/jfi_telemetry.md +++ b/docs/ko/telemetry/jfi_telemetry.md @@ -20,7 +20,7 @@ Operating in the 2.4GHz frequency band, it allows unrestricted global use withou - **Frequency Band:** 2.4GHz - **Speed:** Up to 11 Mbps (adjustable) -- **Range:** Up to 500 meters (varies upon environments) +- **Range:** Up to 1000 meters (varies upon environments) - **Payload Capacity:** Up to 1024 bytes ### Network Schemes diff --git a/docs/ko/tutorials/linux_sbus.md b/docs/ko/tutorials/linux_sbus.md index 850dd5541f..4e150769f9 100644 --- a/docs/ko/tutorials/linux_sbus.md +++ b/docs/ko/tutorials/linux_sbus.md @@ -10,9 +10,7 @@ For an S.Bus receiver (or encoder - e.g. from Futaba, RadioLink, etc.) you will Then [Start the PX4 RC Driver](#start_driver) on the device, as shown below. - - -## 드라이버 시작 +## Starting the Driver {#start_driver} To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): @@ -20,11 +18,9 @@ To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): rc_input start -d /dev/ttyS2 ``` -For other driver usage information see: [rc_input](../modules/modules_driver.md#rc-input). +For other driver usage information see: [rc_input](../modules/modules_driver_radio_control.md#rc-input). - - -## 신호 반전 회로(S.Bus 전용) +## Signal Inverter Circuit (S.Bus only) {#signal_inverter_circuit} S.Bus is an _inverted_ UART communication signal. diff --git a/docs/public/config/failsafe/index.js b/docs/public/config/failsafe/index.js index 44d21979f6..5702f7fec6 100644 --- a/docs/public/config/failsafe/index.js +++ b/docs/public/config/failsafe/index.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=typeof document!="undefined"?document.currentScript?.src:undefined;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var wasmMemory;var ABORT=false;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["v"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("index.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["u"];updateMemoryViews();wasmTable=wasmExports["A"];removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var __abort_js=()=>abort("");var embindRepr=v=>{if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}};var embind_init_charCodes=()=>{var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes};var embind_charCodes;var readLatin1String=ptr=>{var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var BindingError=Module["BindingError"]=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);var isUnsignedType=name.indexOf("u")!=-1;if(isUnsignedType){maxRange=(1n<<64n)-1n}registerType(primitiveType,{name,fromWireType:value=>value,toWireType:function(destructors,value){if(typeof value!="bigint"&&typeof value!="number"){throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`)}if(typeof value=="number"){value=BigInt(value)}return value},argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})};var GenericWireTypeSize=8;var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=readLatin1String(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},argPackAdvance:GenericWireTypeSize,readValueFromPointer:function(pointer){return this["fromWireType"](HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var attachFinalizer=handle=>{if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};var delayFunction;var init_ClassHandle=()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose){proto[symbolDispose]=proto["delete"]}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var registeredPointers={};var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function readPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var InternalError=Module["InternalError"]=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};var throwInternalError=message=>{throw new InternalError(message)};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistent public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var embind__requireFunction=(signature,rawFunction,isAsync=false)=>{signature=readLatin1String(signature);function makeDynCaller(){var rtn=getWasmTableEntry(rawFunction);return rtn}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(`Use 'new' to construct ${name}`)}if(undefined===registeredClass.constructor_body){throw new BindingError(`${name} has no accessible constructor`)}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2])}return array};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function usesDestructorStack(argTypes){for(var i=1;i{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex===-1)return signature;return signature.slice(0,argsIndex)};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker,isAsync);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var validateThis=(this_,classType,humanName)=>{if(!(this_ instanceof Object)){throwBindingError(`${humanName} with invalid "this": ${this_}`)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(`${humanName} incompatible with "this" of type ${this_.constructor.name}`)}if(!this_.$$.ptr){throwBindingError(`cannot call emscripten binding method ${humanName} on deleted object`)}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)};var __embind_register_class_property=(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext)=>{fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],classType=>{classType=classType[0];var humanName=`${classType.name}.${fieldName}`;var desc={get(){throwUnboundTypeError(`Cannot access ${humanName} due to unbound types`,[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>throwUnboundTypeError(`Cannot access ${humanName} due to unbound types`,[getterReturnType,setterArgumentType])}else{desc.set=v=>throwBindingError(humanName+" is a read-only property")}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],types=>{var getterReturnType=types[0];var desc={get(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})};var emval_freelist=[];var emval_handles=[];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle]=undefined;emval_freelist.push(handle)}};var count_emval_handles=()=>emval_handles.length/2-5-emval_freelist.length;var init_emval=()=>{emval_handles.push(0,1,undefined,1,null,1,true,1,false,1);Module["count_emval_handles"]=count_emval_handles};var Emval={toValue:handle=>{if(!handle){throwBindingError(`Cannot use deleted val. handle = ${handle}`)}return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 8:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=readLatin1String(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>value,argPackAdvance:GenericWireTypeSize,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_function=(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync,isNonnullReturn)=>{var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);name=getFunctionName(name);rawInvoker=embind__requireFunction(signature,rawInvoker,isAsync);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,argTypes=>{var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name,fromWireType,toWireType,argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name,fromWireType:decodeMemoryView,argPackAdvance:GenericWireTypeSize,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var __embind_register_std_string=(rawType,name)=>{name=readLatin1String(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(valueIsOfTypeString){if(stdStringIsUTF8){stringToUTF8(value,ptr,length+1)}else{for(var i=0;i255){_free(base);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}}else{HEAPU8.set(value,ptr)}if(destructors!==null){destructors.push(_free,base)}return base},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;var UTF16ToString=(ptr,maxBytesToRead)=>{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=readLatin1String(name);var decodeString,encodeString,readCharAt,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;readCharAt=pointer=>HEAPU16[pointer>>1]}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;readCharAt=pointer=>HEAPU32[pointer>>2]}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||readCharAt(currentBytePtr)==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_void=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{isVoid:true,name,argPackAdvance:0,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var __emval_take_value=(type,arg)=>{type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)};var _emscripten_date_now=()=>Date.now();var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};embind_init_charCodes();init_ClassHandle();init_RegisteredPointer();init_emval();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}var wasmImports={f:___cxa_throw,p:__abort_js,k:__embind_register_bigint,m:__embind_register_bool,l:__embind_register_class,h:__embind_register_class_constructor,e:__embind_register_class_function,a:__embind_register_class_property,r:__embind_register_emval,j:__embind_register_float,c:__embind_register_function,d:__embind_register_integer,b:__embind_register_memory_view,s:__embind_register_std_string,g:__embind_register_std_wstring,n:__embind_register_void,o:__emval_take_value,t:_emscripten_date_now,q:_emscripten_resize_heap,i:_fd_write};var wasmExports;createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["v"])();var _param_get=Module["_param_get"]=(a0,a1)=>(_param_get=Module["_param_get"]=wasmExports["w"])(a0,a1);var _param_set_used=Module["_param_set_used"]=a0=>(_param_set_used=Module["_param_set_used"]=wasmExports["x"])(a0);var __Znwm=Module["__Znwm"]=a0=>(__Znwm=Module["__Znwm"]=wasmExports["y"])(a0);var __ZdlPvm=Module["__ZdlPvm"]=(a0,a1)=>(__ZdlPvm=Module["__ZdlPvm"]=wasmExports["z"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["B"])(a0);var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=a0=>(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=wasmExports["C"])(a0);var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["D"])(a0);var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=a0=>(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=wasmExports["E"])(a0);var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=a0=>(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=wasmExports["F"])(a0);var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=a0=>(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=wasmExports["G"])(a0);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["H"])();var ___getTypeName=a0=>(___getTypeName=wasmExports["I"])(a0);var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=a0=>(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=wasmExports["J"])(a0);var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["K"])(a0,a1,a2);var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=()=>(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=wasmExports["L"])();var _emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=()=>(_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=wasmExports["M"])();var _free=a0=>(_free=wasmExports["N"])(a0);var _emscripten_stack_init=Module["_emscripten_stack_init"]=()=>(_emscripten_stack_init=Module["_emscripten_stack_init"]=wasmExports["O"])();var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=(a0,a1)=>(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=wasmExports["P"])(a0,a1);var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=()=>(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=wasmExports["Q"])();var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=()=>(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=wasmExports["R"])();var __Znam=Module["__Znam"]=a0=>(__Znam=Module["__Znam"]=wasmExports["S"])(a0);var __ZdlPv=Module["__ZdlPv"]=a0=>(__ZdlPv=Module["__ZdlPv"]=wasmExports["T"])(a0);var __ZdaPv=Module["__ZdaPv"]=a0=>(__ZdaPv=Module["__ZdaPv"]=wasmExports["U"])(a0);var __ZdaPvm=Module["__ZdaPvm"]=(a0,a1)=>(__ZdaPvm=Module["__ZdaPvm"]=wasmExports["V"])(a0,a1);var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=(a0,a1)=>(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=wasmExports["W"])(a0,a1);var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=(a0,a1)=>(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=wasmExports["X"])(a0,a1);var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=(a0,a1)=>(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=wasmExports["Y"])(a0,a1);var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=wasmExports["Z"])(a0,a1,a2);var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=(a0,a1)=>(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=wasmExports["_"])(a0,a1);var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=wasmExports["$"])(a0,a1,a2);var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=a0=>(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=wasmExports["aa"])(a0);var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=a0=>(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=wasmExports["ba"])(a0);var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=a0=>(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=wasmExports["ca"])(a0);var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=()=>(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=wasmExports["da"])();var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=()=>(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=wasmExports["ea"])();var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=()=>(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=wasmExports["fa"])();var __ZSt9terminatev=Module["__ZSt9terminatev"]=()=>(__ZSt9terminatev=Module["__ZSt9terminatev"]=wasmExports["ga"])();var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=()=>(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["ha"])();var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=a0=>(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["ia"])(a0);var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=()=>(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["ja"])();var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=()=>(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["ka"])();var ___cxa_free_exception=Module["___cxa_free_exception"]=a0=>(___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["la"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["ma"])(a0,a1,a2);var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["na"])();var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["oa"])(a0,a1,a2,a3);var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=a0=>(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=wasmExports["pa"])(a0);var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=a0=>(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=wasmExports["qa"])(a0);var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=a0=>(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=wasmExports["ra"])(a0);var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=a0=>(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=wasmExports["sa"])(a0);var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=a0=>(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=wasmExports["ta"])(a0);var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=a0=>(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=wasmExports["ua"])(a0);var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=a0=>(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=wasmExports["va"])(a0);var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=a0=>(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=wasmExports["wa"])(a0);var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=a0=>(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=wasmExports["xa"])(a0);var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=a0=>(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=wasmExports["ya"])(a0);var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=a0=>(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=wasmExports["za"])(a0);var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=a0=>(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=wasmExports["Aa"])(a0);var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=a0=>(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=wasmExports["Ba"])(a0);var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=a0=>(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=wasmExports["Ca"])(a0);var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=a0=>(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=wasmExports["Da"])(a0);var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=a0=>(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=wasmExports["Ea"])(a0);var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=a0=>(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=wasmExports["Fa"])(a0);var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=a0=>(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=wasmExports["Ga"])(a0);var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=a0=>(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=wasmExports["Ha"])(a0);var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=a0=>(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=wasmExports["Ia"])(a0);var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=a0=>(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=wasmExports["Ja"])(a0);var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=a0=>(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=wasmExports["Ka"])(a0);var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=a0=>(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=wasmExports["La"])(a0);var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=a0=>(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=wasmExports["Ma"])(a0);var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=a0=>(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=wasmExports["Na"])(a0);var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=a0=>(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=wasmExports["Oa"])(a0);var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=a0=>(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=wasmExports["Pa"])(a0);var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=a0=>(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=wasmExports["Qa"])(a0);var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=a0=>(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=wasmExports["Ra"])(a0);var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=a0=>(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=wasmExports["Sa"])(a0);var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=a0=>(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=wasmExports["Ta"])(a0);var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=a0=>(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=wasmExports["Ua"])(a0);var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=a0=>(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=wasmExports["Va"])(a0);var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=a0=>(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=wasmExports["Wa"])(a0);var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=a0=>(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=wasmExports["Xa"])(a0);var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=a0=>(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=wasmExports["Ya"])(a0);var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=a0=>(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=wasmExports["Za"])(a0);var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=a0=>(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=wasmExports["_a"])(a0);var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=a0=>(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=wasmExports["$a"])(a0);var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=a0=>(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=wasmExports["ab"])(a0);var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=a0=>(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=wasmExports["bb"])(a0);var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=a0=>(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=wasmExports["cb"])(a0);var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=a0=>(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=wasmExports["db"])(a0);var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=a0=>(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=wasmExports["eb"])(a0);var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=a0=>(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=wasmExports["fb"])(a0);var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=a0=>(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=wasmExports["gb"])(a0);var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=a0=>(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=wasmExports["hb"])(a0);var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=a0=>(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=wasmExports["ib"])(a0);var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=a0=>(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=wasmExports["jb"])(a0);var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=a0=>(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=wasmExports["kb"])(a0);var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=a0=>(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=wasmExports["lb"])(a0);var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=a0=>(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=wasmExports["mb"])(a0);var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=a0=>(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=wasmExports["nb"])(a0);var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=a0=>(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=wasmExports["ob"])(a0);var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=a0=>(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=wasmExports["pb"])(a0);var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=a0=>(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=wasmExports["qb"])(a0);var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=a0=>(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=wasmExports["rb"])(a0);var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=a0=>(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=wasmExports["sb"])(a0);var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=a0=>(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=wasmExports["tb"])(a0);var __ZTIPK16failsafe_flags_s=Module["__ZTIPK16failsafe_flags_s"]=47504;var __ZTIP16failsafe_flags_s=Module["__ZTIP16failsafe_flags_s"]=47488;var __ZTI16failsafe_flags_s=Module["__ZTI16failsafe_flags_s"]=47480;var __ZTIb=Module["__ZTIb"]=30324;var __ZTIh=Module["__ZTIh"]=30480;var __ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47660;var __ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47644;var __ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47592;var __ZTISt12length_error=Module["__ZTISt12length_error"]=32424;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=32404;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=32188;var __ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=47580;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=32476;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=32456;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=31756;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=31848;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=31716;var __ZTS16failsafe_flags_s=Module["__ZTS16failsafe_flags_s"]=28065;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=31968;var __ZTSP16failsafe_flags_s=Module["__ZTSP16failsafe_flags_s"]=28084;var __ZTSPK16failsafe_flags_s=Module["__ZTSPK16failsafe_flags_s"]=28104;var __ZTIi=Module["__ZTIi"]=30688;var __ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=28153;var __ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=28220;var __ZTIv=Module["__ZTIv"]=30216;var __ZTIf=Module["__ZTIf"]=31160;var __ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=28318;var __ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=28405;var __ZTIm=Module["__ZTIm"]=30844;var __ZTIN10emscripten3valE=Module["__ZTIN10emscripten3valE"]=47732;var __ZTSN10emscripten3valE=Module["__ZTSN10emscripten3valE"]=28508;var __ZTIc=Module["__ZTIc"]=30428;var __ZTIa=Module["__ZTIa"]=30532;var __ZTIs=Module["__ZTIs"]=30584;var __ZTIt=Module["__ZTIt"]=30636;var __ZTIj=Module["__ZTIj"]=30740;var __ZTIl=Module["__ZTIl"]=30792;var __ZTIx=Module["__ZTIx"]=30896;var __ZTIy=Module["__ZTIy"]=30948;var __ZTId=Module["__ZTId"]=31212;var __ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=28564;var __ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=28636;var __ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=28712;var __ZTIN10emscripten11memory_viewIcEE=Module["__ZTIN10emscripten11memory_viewIcEE"]=28788;var __ZTIN10emscripten11memory_viewIaEE=Module["__ZTIN10emscripten11memory_viewIaEE"]=28828;var __ZTIN10emscripten11memory_viewIhEE=Module["__ZTIN10emscripten11memory_viewIhEE"]=28868;var __ZTIN10emscripten11memory_viewIsEE=Module["__ZTIN10emscripten11memory_viewIsEE"]=28908;var __ZTIN10emscripten11memory_viewItEE=Module["__ZTIN10emscripten11memory_viewItEE"]=28948;var __ZTIN10emscripten11memory_viewIiEE=Module["__ZTIN10emscripten11memory_viewIiEE"]=28988;var __ZTIN10emscripten11memory_viewIjEE=Module["__ZTIN10emscripten11memory_viewIjEE"]=29028;var __ZTIN10emscripten11memory_viewIlEE=Module["__ZTIN10emscripten11memory_viewIlEE"]=29068;var __ZTIN10emscripten11memory_viewImEE=Module["__ZTIN10emscripten11memory_viewImEE"]=29108;var __ZTIN10emscripten11memory_viewIxEE=Module["__ZTIN10emscripten11memory_viewIxEE"]=29148;var __ZTIN10emscripten11memory_viewIyEE=Module["__ZTIN10emscripten11memory_viewIyEE"]=29188;var __ZTIN10emscripten11memory_viewIfEE=Module["__ZTIN10emscripten11memory_viewIfEE"]=29228;var __ZTIN10emscripten11memory_viewIdEE=Module["__ZTIN10emscripten11memory_viewIdEE"]=29268;var __ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=28572;var __ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=28644;var __ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=28720;var __ZTSN10emscripten11memory_viewIcEE=Module["__ZTSN10emscripten11memory_viewIcEE"]=28796;var __ZTSN10emscripten11memory_viewIaEE=Module["__ZTSN10emscripten11memory_viewIaEE"]=28836;var __ZTSN10emscripten11memory_viewIhEE=Module["__ZTSN10emscripten11memory_viewIhEE"]=28876;var __ZTSN10emscripten11memory_viewIsEE=Module["__ZTSN10emscripten11memory_viewIsEE"]=28916;var __ZTSN10emscripten11memory_viewItEE=Module["__ZTSN10emscripten11memory_viewItEE"]=28956;var __ZTSN10emscripten11memory_viewIiEE=Module["__ZTSN10emscripten11memory_viewIiEE"]=28996;var __ZTSN10emscripten11memory_viewIjEE=Module["__ZTSN10emscripten11memory_viewIjEE"]=29036;var __ZTSN10emscripten11memory_viewIlEE=Module["__ZTSN10emscripten11memory_viewIlEE"]=29076;var __ZTSN10emscripten11memory_viewImEE=Module["__ZTSN10emscripten11memory_viewImEE"]=29116;var __ZTSN10emscripten11memory_viewIxEE=Module["__ZTSN10emscripten11memory_viewIxEE"]=29156;var __ZTSN10emscripten11memory_viewIyEE=Module["__ZTSN10emscripten11memory_viewIyEE"]=29196;var __ZTSN10emscripten11memory_viewIfEE=Module["__ZTSN10emscripten11memory_viewIfEE"]=29236;var __ZTSN10emscripten11memory_viewIdEE=Module["__ZTSN10emscripten11memory_viewIdEE"]=29276;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=32228;var __ZTVSt9exception=Module["__ZTVSt9exception"]=32064;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=32248;var __ZTISt9exception=Module["__ZTISt9exception"]=32084;var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=47960;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=47956;var ___cxa_new_handler=Module["___cxa_new_handler"]=50204;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=29792;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=29840;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=29888;var __ZTIDn=Module["__ZTIDn"]=30268;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=29936;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=29984;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=30036;var __ZTISt9type_info=Module["__ZTISt9type_info"]=32748;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=29804;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=29852;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=29900;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=29948;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=29996;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=30048;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=30108;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=30136;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=30164;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=30176;var __ZTSv=Module["__ZTSv"]=30224;var __ZTIPv=Module["__ZTIPv"]=30228;var __ZTSPv=Module["__ZTSPv"]=30244;var __ZTIPKv=Module["__ZTIPKv"]=30248;var __ZTSPKv=Module["__ZTSPKv"]=30264;var __ZTSDn=Module["__ZTSDn"]=30276;var __ZTIPDn=Module["__ZTIPDn"]=30280;var __ZTSPDn=Module["__ZTSPDn"]=30296;var __ZTIPKDn=Module["__ZTIPKDn"]=30300;var __ZTSPKDn=Module["__ZTSPKDn"]=30316;var __ZTSb=Module["__ZTSb"]=30332;var __ZTIPb=Module["__ZTIPb"]=30336;var __ZTSPb=Module["__ZTSPb"]=30352;var __ZTIPKb=Module["__ZTIPKb"]=30356;var __ZTSPKb=Module["__ZTSPKb"]=30372;var __ZTIw=Module["__ZTIw"]=30376;var __ZTSw=Module["__ZTSw"]=30384;var __ZTIPw=Module["__ZTIPw"]=30388;var __ZTSPw=Module["__ZTSPw"]=30404;var __ZTIPKw=Module["__ZTIPKw"]=30408;var __ZTSPKw=Module["__ZTSPKw"]=30424;var __ZTSc=Module["__ZTSc"]=30436;var __ZTIPc=Module["__ZTIPc"]=30440;var __ZTSPc=Module["__ZTSPc"]=30456;var __ZTIPKc=Module["__ZTIPKc"]=30460;var __ZTSPKc=Module["__ZTSPKc"]=30476;var __ZTSh=Module["__ZTSh"]=30488;var __ZTIPh=Module["__ZTIPh"]=30492;var __ZTSPh=Module["__ZTSPh"]=30508;var __ZTIPKh=Module["__ZTIPKh"]=30512;var __ZTSPKh=Module["__ZTSPKh"]=30528;var __ZTSa=Module["__ZTSa"]=30540;var __ZTIPa=Module["__ZTIPa"]=30544;var __ZTSPa=Module["__ZTSPa"]=30560;var __ZTIPKa=Module["__ZTIPKa"]=30564;var __ZTSPKa=Module["__ZTSPKa"]=30580;var __ZTSs=Module["__ZTSs"]=30592;var __ZTIPs=Module["__ZTIPs"]=30596;var __ZTSPs=Module["__ZTSPs"]=30612;var __ZTIPKs=Module["__ZTIPKs"]=30616;var __ZTSPKs=Module["__ZTSPKs"]=30632;var __ZTSt=Module["__ZTSt"]=30644;var __ZTIPt=Module["__ZTIPt"]=30648;var __ZTSPt=Module["__ZTSPt"]=30664;var __ZTIPKt=Module["__ZTIPKt"]=30668;var __ZTSPKt=Module["__ZTSPKt"]=30684;var __ZTSi=Module["__ZTSi"]=30696;var __ZTIPi=Module["__ZTIPi"]=30700;var __ZTSPi=Module["__ZTSPi"]=30716;var __ZTIPKi=Module["__ZTIPKi"]=30720;var __ZTSPKi=Module["__ZTSPKi"]=30736;var __ZTSj=Module["__ZTSj"]=30748;var __ZTIPj=Module["__ZTIPj"]=30752;var __ZTSPj=Module["__ZTSPj"]=30768;var __ZTIPKj=Module["__ZTIPKj"]=30772;var __ZTSPKj=Module["__ZTSPKj"]=30788;var __ZTSl=Module["__ZTSl"]=30800;var __ZTIPl=Module["__ZTIPl"]=30804;var __ZTSPl=Module["__ZTSPl"]=30820;var __ZTIPKl=Module["__ZTIPKl"]=30824;var __ZTSPKl=Module["__ZTSPKl"]=30840;var __ZTSm=Module["__ZTSm"]=30852;var __ZTIPm=Module["__ZTIPm"]=30856;var __ZTSPm=Module["__ZTSPm"]=30872;var __ZTIPKm=Module["__ZTIPKm"]=30876;var __ZTSPKm=Module["__ZTSPKm"]=30892;var __ZTSx=Module["__ZTSx"]=30904;var __ZTIPx=Module["__ZTIPx"]=30908;var __ZTSPx=Module["__ZTSPx"]=30924;var __ZTIPKx=Module["__ZTIPKx"]=30928;var __ZTSPKx=Module["__ZTSPKx"]=30944;var __ZTSy=Module["__ZTSy"]=30956;var __ZTIPy=Module["__ZTIPy"]=30960;var __ZTSPy=Module["__ZTSPy"]=30976;var __ZTIPKy=Module["__ZTIPKy"]=30980;var __ZTSPKy=Module["__ZTSPKy"]=30996;var __ZTIn=Module["__ZTIn"]=31e3;var __ZTSn=Module["__ZTSn"]=31008;var __ZTIPn=Module["__ZTIPn"]=31012;var __ZTSPn=Module["__ZTSPn"]=31028;var __ZTIPKn=Module["__ZTIPKn"]=31032;var __ZTSPKn=Module["__ZTSPKn"]=31048;var __ZTIo=Module["__ZTIo"]=31052;var __ZTSo=Module["__ZTSo"]=31060;var __ZTIPo=Module["__ZTIPo"]=31064;var __ZTSPo=Module["__ZTSPo"]=31080;var __ZTIPKo=Module["__ZTIPKo"]=31084;var __ZTSPKo=Module["__ZTSPKo"]=31100;var __ZTIDh=Module["__ZTIDh"]=31104;var __ZTSDh=Module["__ZTSDh"]=31112;var __ZTIPDh=Module["__ZTIPDh"]=31116;var __ZTSPDh=Module["__ZTSPDh"]=31132;var __ZTIPKDh=Module["__ZTIPKDh"]=31136;var __ZTSPKDh=Module["__ZTSPKDh"]=31152;var __ZTSf=Module["__ZTSf"]=31168;var __ZTIPf=Module["__ZTIPf"]=31172;var __ZTSPf=Module["__ZTSPf"]=31188;var __ZTIPKf=Module["__ZTIPKf"]=31192;var __ZTSPKf=Module["__ZTSPKf"]=31208;var __ZTSd=Module["__ZTSd"]=31220;var __ZTIPd=Module["__ZTIPd"]=31224;var __ZTSPd=Module["__ZTSPd"]=31240;var __ZTIPKd=Module["__ZTIPKd"]=31244;var __ZTSPKd=Module["__ZTSPKd"]=31260;var __ZTIe=Module["__ZTIe"]=31264;var __ZTSe=Module["__ZTSe"]=31272;var __ZTIPe=Module["__ZTIPe"]=31276;var __ZTSPe=Module["__ZTSPe"]=31292;var __ZTIPKe=Module["__ZTIPKe"]=31296;var __ZTSPKe=Module["__ZTSPKe"]=31312;var __ZTIg=Module["__ZTIg"]=31316;var __ZTSg=Module["__ZTSg"]=31324;var __ZTIPg=Module["__ZTIPg"]=31328;var __ZTSPg=Module["__ZTSPg"]=31344;var __ZTIPKg=Module["__ZTIPKg"]=31348;var __ZTSPKg=Module["__ZTSPKg"]=31364;var __ZTIDu=Module["__ZTIDu"]=31368;var __ZTSDu=Module["__ZTSDu"]=31376;var __ZTIPDu=Module["__ZTIPDu"]=31380;var __ZTSPDu=Module["__ZTSPDu"]=31396;var __ZTIPKDu=Module["__ZTIPKDu"]=31400;var __ZTSPKDu=Module["__ZTSPKDu"]=31416;var __ZTIDs=Module["__ZTIDs"]=31424;var __ZTSDs=Module["__ZTSDs"]=31432;var __ZTIPDs=Module["__ZTIPDs"]=31436;var __ZTSPDs=Module["__ZTSPDs"]=31452;var __ZTIPKDs=Module["__ZTIPKDs"]=31456;var __ZTSPKDs=Module["__ZTSPKDs"]=31472;var __ZTIDi=Module["__ZTIDi"]=31480;var __ZTSDi=Module["__ZTSDi"]=31488;var __ZTIPDi=Module["__ZTIPDi"]=31492;var __ZTSPDi=Module["__ZTSPDi"]=31508;var __ZTIPKDi=Module["__ZTIPKDi"]=31512;var __ZTSPKDi=Module["__ZTSPKDi"]=31528;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=31536;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=31564;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=31576;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=31612;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=31640;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=31668;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=31680;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=31796;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=31808;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=31888;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=31900;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=31940;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=31996;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=32024;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=32044;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=32160;var __ZTSSt9exception=Module["__ZTSSt9exception"]=32092;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=32108;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=32128;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=32140;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=32172;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=32200;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=32320;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=32556;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=32268;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=32288;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=32300;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=32332;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=32348;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=32368;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=32380;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=32436;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=32488;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=32508;var __ZTISt11range_error=Module["__ZTISt11range_error"]=32528;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=32540;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=32568;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=32588;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=32608;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=32620;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=32640;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=32660;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=32672;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=32692;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=32712;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=32772;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=32796;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=32732;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=32756;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=32784;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=32808;function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run(); +var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&process.versions?.node&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=typeof document!="undefined"?document.currentScript?.src:undefined;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var wasmMemory;var ABORT=false;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["v"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("index.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["u"];updateMemoryViews();wasmTable=wasmExports["A"];removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var __abort_js=()=>abort("");var embind_init_charCodes=()=>{var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes};var embind_charCodes;var readLatin1String=ptr=>{var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var BindingError=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer]:pointer=>HEAPU8[pointer];case 2:return signed?pointer=>HEAP16[pointer>>1]:pointer=>HEAPU16[pointer>>1];case 4:return signed?pointer=>HEAP32[pointer>>2]:pointer=>HEAPU32[pointer>>2];case 8:return signed?pointer=>HEAP64[pointer>>3]:pointer=>HEAPU64[pointer>>3];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);const isUnsignedType=minRange===0n;let fromWireType=value=>value;if(isUnsignedType){const bitSize=size*8;fromWireType=value=>BigInt.asUintN(bitSize,value);maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>{if(typeof value=="number"){value=BigInt(value)}return value},argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,!isUnsignedType),destructorFunction:null})};var GenericWireTypeSize=8;var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=readLatin1String(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},argPackAdvance:GenericWireTypeSize,readValueFromPointer:function(pointer){return this["fromWireType"](HEAPU8[pointer])},destructorFunction:null})};var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var attachFinalizer=handle=>{if("undefined"===typeof FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}};var delayFunction;var init_ClassHandle=()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose){proto[symbolDispose]=proto["delete"]}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var registeredPointers={};var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};var embindRepr=v=>{if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle["delete"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function readPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var InternalError=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};var throwInternalError=message=>{throw new InternalError(message)};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistent public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var embind__requireFunction=(signature,rawFunction,isAsync=false)=>{signature=readLatin1String(signature);function makeDynCaller(){var rtn=getWasmTableEntry(rawFunction);return rtn}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};var __embind_register_class=(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor)=>{name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(`Use 'new' to construct ${name}`)}if(undefined===registeredClass.constructor_body){throw new BindingError(`${name} has no accessible constructor`)}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+"*",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+" const*",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2])}return array};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function usesDestructorStack(argTypes){for(var i=1;i{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf("(");if(argsIndex===-1)return signature;return signature.slice(0,argsIndex)};var __embind_register_class_function=(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn)=>{var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker,isAsync);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith("@@")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var validateThis=(this_,classType,humanName)=>{if(!(this_ instanceof Object)){throwBindingError(`${humanName} with invalid "this": ${this_}`)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(`${humanName} incompatible with "this" of type ${this_.constructor.name}`)}if(!this_.$$.ptr){throwBindingError(`cannot call emscripten binding method ${humanName} on deleted object`)}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)};var __embind_register_class_property=(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext)=>{fieldName=readLatin1String(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],classType=>{classType=classType[0];var humanName=`${classType.name}.${fieldName}`;var desc={get(){throwUnboundTypeError(`Cannot access ${humanName} due to unbound types`,[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>throwUnboundTypeError(`Cannot access ${humanName} due to unbound types`,[getterReturnType,setterArgumentType])}else{desc.set=v=>throwBindingError(humanName+" is a read-only property")}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],types=>{var getterReturnType=types[0];var desc={get(){var ptr=validateThis(this,classType,humanName+" getter");return getterReturnType["fromWireType"](getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+" setter");var destructors=[];setter(setterContext,ptr,setterArgumentType["toWireType"](destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})};var emval_freelist=[];var emval_handles=[0,1,,1,null,1,true,1,false,1];var __emval_decref=handle=>{if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle]=undefined;emval_freelist.push(handle)}};var Emval={toValue:handle=>{if(!handle){throwBindingError(`Cannot use deleted val. handle = ${handle}`)}return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:"emscripten::val",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction:null};var __embind_register_emval=rawType=>registerType(rawType,EmValType);var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 8:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=readLatin1String(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>value,argPackAdvance:GenericWireTypeSize,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};var __embind_register_function=(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync,isNonnullReturn)=>{var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);name=getFunctionName(name);rawInvoker=embind__requireFunction(signature,rawInvoker,isAsync);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,argTypes=>{var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);const isUnsignedType=minRange===0;let fromWireType=value=>value;if(isUnsignedType){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift;maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>value,argPackAdvance:GenericWireTypeSize,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>2];var data=HEAPU32[handle+4>>2];return new TA(HEAP8.buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name,fromWireType:decodeMemoryView,argPackAdvance:GenericWireTypeSize,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var __embind_register_std_string=(rawType,name)=>{name=readLatin1String(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(valueIsOfTypeString){if(stdStringIsUTF8){stringToUTF8(value,ptr,length+1)}else{for(var i=0;i255){_free(base);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+i]=charCode}}}else{HEAPU8.set(value,ptr)}if(destructors!==null){destructors.push(_free,base)}return base},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;var UTF16ToString=(ptr,maxBytesToRead)=>{var idx=ptr>>1;var maxIdx=idx+maxBytesToRead/2;var endIdx=idx;while(!(endIdx>=maxIdx)&&HEAPU16[endIdx])++endIdx;if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx,endIdx));var str="";for(var i=idx;!(i>=maxIdx);++i){var codeUnit=HEAPU16[i];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=readLatin1String(name);var decodeString,encodeString,readCharAt,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;readCharAt=pointer=>HEAPU16[pointer>>1]}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;readCharAt=pointer=>HEAPU32[pointer>>2]}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>2];var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||readCharAt(currentBytePtr)==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},argPackAdvance:GenericWireTypeSize,readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})};var __embind_register_void=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{isVoid:true,name,argPackAdvance:0,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var __emval_take_value=(type,arg)=>{type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](arg);return Emval.toHandle(v)};var _emscripten_date_now=()=>Date.now();var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};embind_init_charCodes();init_ClassHandle();init_RegisteredPointer();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}var wasmImports={f:___cxa_throw,p:__abort_js,k:__embind_register_bigint,m:__embind_register_bool,l:__embind_register_class,h:__embind_register_class_constructor,e:__embind_register_class_function,a:__embind_register_class_property,r:__embind_register_emval,j:__embind_register_float,c:__embind_register_function,d:__embind_register_integer,b:__embind_register_memory_view,s:__embind_register_std_string,g:__embind_register_std_wstring,n:__embind_register_void,o:__emval_take_value,t:_emscripten_date_now,q:_emscripten_resize_heap,i:_fd_write};var wasmExports;createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["v"])();var _param_get=Module["_param_get"]=(a0,a1)=>(_param_get=Module["_param_get"]=wasmExports["w"])(a0,a1);var _param_set_used=Module["_param_set_used"]=a0=>(_param_set_used=Module["_param_set_used"]=wasmExports["x"])(a0);var __Znwm=Module["__Znwm"]=a0=>(__Znwm=Module["__Znwm"]=wasmExports["y"])(a0);var __ZdlPvm=Module["__ZdlPvm"]=(a0,a1)=>(__ZdlPvm=Module["__ZdlPvm"]=wasmExports["z"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["B"])(a0);var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=a0=>(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=wasmExports["C"])(a0);var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["D"])(a0);var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=a0=>(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=wasmExports["E"])(a0);var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=a0=>(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=wasmExports["F"])(a0);var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=a0=>(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=wasmExports["G"])(a0);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["H"])();var ___getTypeName=a0=>(___getTypeName=wasmExports["I"])(a0);var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=a0=>(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=wasmExports["J"])(a0);var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["K"])(a0,a1,a2);var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=()=>(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=wasmExports["L"])();var _emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=()=>(_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=wasmExports["M"])();var _free=a0=>(_free=wasmExports["N"])(a0);var _emscripten_stack_init=Module["_emscripten_stack_init"]=()=>(_emscripten_stack_init=Module["_emscripten_stack_init"]=wasmExports["O"])();var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=(a0,a1)=>(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=wasmExports["P"])(a0,a1);var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=()=>(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=wasmExports["Q"])();var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=()=>(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=wasmExports["R"])();var __Znam=Module["__Znam"]=a0=>(__Znam=Module["__Znam"]=wasmExports["S"])(a0);var __ZdlPv=Module["__ZdlPv"]=a0=>(__ZdlPv=Module["__ZdlPv"]=wasmExports["T"])(a0);var __ZdaPv=Module["__ZdaPv"]=a0=>(__ZdaPv=Module["__ZdaPv"]=wasmExports["U"])(a0);var __ZdaPvm=Module["__ZdaPvm"]=(a0,a1)=>(__ZdaPvm=Module["__ZdaPvm"]=wasmExports["V"])(a0,a1);var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=(a0,a1)=>(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=wasmExports["W"])(a0,a1);var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=(a0,a1)=>(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=wasmExports["X"])(a0,a1);var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=(a0,a1)=>(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=wasmExports["Y"])(a0,a1);var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=wasmExports["Z"])(a0,a1,a2);var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=(a0,a1)=>(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=wasmExports["_"])(a0,a1);var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=wasmExports["$"])(a0,a1,a2);var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=a0=>(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=wasmExports["aa"])(a0);var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=a0=>(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=wasmExports["ba"])(a0);var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=a0=>(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=wasmExports["ca"])(a0);var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=()=>(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=wasmExports["da"])();var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=()=>(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=wasmExports["ea"])();var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=()=>(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=wasmExports["fa"])();var __ZSt9terminatev=Module["__ZSt9terminatev"]=()=>(__ZSt9terminatev=Module["__ZSt9terminatev"]=wasmExports["ga"])();var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=()=>(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["ha"])();var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=a0=>(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["ia"])(a0);var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=()=>(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["ja"])();var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=()=>(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["ka"])();var ___cxa_free_exception=Module["___cxa_free_exception"]=a0=>(___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["la"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["ma"])(a0,a1,a2);var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["na"])();var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["oa"])(a0,a1,a2,a3);var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=a0=>(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=wasmExports["pa"])(a0);var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=a0=>(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=wasmExports["qa"])(a0);var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=a0=>(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=wasmExports["ra"])(a0);var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=a0=>(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=wasmExports["sa"])(a0);var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=a0=>(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=wasmExports["ta"])(a0);var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=a0=>(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=wasmExports["ua"])(a0);var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=a0=>(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=wasmExports["va"])(a0);var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=a0=>(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=wasmExports["wa"])(a0);var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=a0=>(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=wasmExports["xa"])(a0);var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=a0=>(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=wasmExports["ya"])(a0);var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=a0=>(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=wasmExports["za"])(a0);var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=a0=>(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=wasmExports["Aa"])(a0);var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=a0=>(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=wasmExports["Ba"])(a0);var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=a0=>(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=wasmExports["Ca"])(a0);var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=a0=>(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=wasmExports["Da"])(a0);var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=a0=>(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=wasmExports["Ea"])(a0);var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=a0=>(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=wasmExports["Fa"])(a0);var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=a0=>(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=wasmExports["Ga"])(a0);var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=a0=>(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=wasmExports["Ha"])(a0);var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=a0=>(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=wasmExports["Ia"])(a0);var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=a0=>(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=wasmExports["Ja"])(a0);var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=a0=>(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=wasmExports["Ka"])(a0);var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=a0=>(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=wasmExports["La"])(a0);var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=a0=>(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=wasmExports["Ma"])(a0);var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=a0=>(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=wasmExports["Na"])(a0);var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=a0=>(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=wasmExports["Oa"])(a0);var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=a0=>(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=wasmExports["Pa"])(a0);var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=a0=>(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=wasmExports["Qa"])(a0);var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=a0=>(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=wasmExports["Ra"])(a0);var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=a0=>(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=wasmExports["Sa"])(a0);var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=a0=>(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=wasmExports["Ta"])(a0);var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=a0=>(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=wasmExports["Ua"])(a0);var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=a0=>(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=wasmExports["Va"])(a0);var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=a0=>(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=wasmExports["Wa"])(a0);var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=a0=>(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=wasmExports["Xa"])(a0);var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=a0=>(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=wasmExports["Ya"])(a0);var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=a0=>(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=wasmExports["Za"])(a0);var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=a0=>(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=wasmExports["_a"])(a0);var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=a0=>(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=wasmExports["$a"])(a0);var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=a0=>(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=wasmExports["ab"])(a0);var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=a0=>(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=wasmExports["bb"])(a0);var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=a0=>(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=wasmExports["cb"])(a0);var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=a0=>(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=wasmExports["db"])(a0);var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=a0=>(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=wasmExports["eb"])(a0);var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=a0=>(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=wasmExports["fb"])(a0);var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=a0=>(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=wasmExports["gb"])(a0);var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=a0=>(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=wasmExports["hb"])(a0);var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=a0=>(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=wasmExports["ib"])(a0);var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=a0=>(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=wasmExports["jb"])(a0);var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=a0=>(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=wasmExports["kb"])(a0);var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=a0=>(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=wasmExports["lb"])(a0);var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=a0=>(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=wasmExports["mb"])(a0);var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=a0=>(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=wasmExports["nb"])(a0);var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=a0=>(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=wasmExports["ob"])(a0);var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=a0=>(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=wasmExports["pb"])(a0);var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=a0=>(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=wasmExports["qb"])(a0);var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=a0=>(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=wasmExports["rb"])(a0);var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=a0=>(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=wasmExports["sb"])(a0);var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=a0=>(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=wasmExports["tb"])(a0);var __ZTIPK16failsafe_flags_s=Module["__ZTIPK16failsafe_flags_s"]=47416;var __ZTIP16failsafe_flags_s=Module["__ZTIP16failsafe_flags_s"]=47400;var __ZTI16failsafe_flags_s=Module["__ZTI16failsafe_flags_s"]=47392;var __ZTIb=Module["__ZTIb"]=30276;var __ZTIh=Module["__ZTIh"]=30432;var __ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47564;var __ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTIPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47548;var __ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTINSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=47496;var __ZTISt12length_error=Module["__ZTISt12length_error"]=32376;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=32356;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=32140;var __ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTINSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=47484;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=32428;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=32408;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=31708;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=31800;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=31668;var __ZTS16failsafe_flags_s=Module["__ZTS16failsafe_flags_s"]=28016;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=31920;var __ZTSP16failsafe_flags_s=Module["__ZTSP16failsafe_flags_s"]=28035;var __ZTSPK16failsafe_flags_s=Module["__ZTSPK16failsafe_flags_s"]=28055;var __ZTIi=Module["__ZTIi"]=30640;var __ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE=Module["__ZTSNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE"]=28104;var __ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=28171;var __ZTIv=Module["__ZTIv"]=30168;var __ZTIf=Module["__ZTIf"]=31112;var __ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=28269;var __ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE=Module["__ZTSPKNSt3__26vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEEE"]=28356;var __ZTIm=Module["__ZTIm"]=30796;var __ZTIN10emscripten3valE=Module["__ZTIN10emscripten3valE"]=47636;var __ZTSN10emscripten3valE=Module["__ZTSN10emscripten3valE"]=28459;var __ZTIc=Module["__ZTIc"]=30380;var __ZTIa=Module["__ZTIa"]=30484;var __ZTIs=Module["__ZTIs"]=30536;var __ZTIt=Module["__ZTIt"]=30588;var __ZTIj=Module["__ZTIj"]=30692;var __ZTIl=Module["__ZTIl"]=30744;var __ZTIx=Module["__ZTIx"]=30848;var __ZTIy=Module["__ZTIy"]=30900;var __ZTId=Module["__ZTId"]=31164;var __ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTINSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=28516;var __ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTINSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=28588;var __ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTINSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=28664;var __ZTIN10emscripten11memory_viewIcEE=Module["__ZTIN10emscripten11memory_viewIcEE"]=28740;var __ZTIN10emscripten11memory_viewIaEE=Module["__ZTIN10emscripten11memory_viewIaEE"]=28780;var __ZTIN10emscripten11memory_viewIhEE=Module["__ZTIN10emscripten11memory_viewIhEE"]=28820;var __ZTIN10emscripten11memory_viewIsEE=Module["__ZTIN10emscripten11memory_viewIsEE"]=28860;var __ZTIN10emscripten11memory_viewItEE=Module["__ZTIN10emscripten11memory_viewItEE"]=28900;var __ZTIN10emscripten11memory_viewIiEE=Module["__ZTIN10emscripten11memory_viewIiEE"]=28940;var __ZTIN10emscripten11memory_viewIjEE=Module["__ZTIN10emscripten11memory_viewIjEE"]=28980;var __ZTIN10emscripten11memory_viewIlEE=Module["__ZTIN10emscripten11memory_viewIlEE"]=29020;var __ZTIN10emscripten11memory_viewImEE=Module["__ZTIN10emscripten11memory_viewImEE"]=29060;var __ZTIN10emscripten11memory_viewIxEE=Module["__ZTIN10emscripten11memory_viewIxEE"]=29100;var __ZTIN10emscripten11memory_viewIyEE=Module["__ZTIN10emscripten11memory_viewIyEE"]=29140;var __ZTIN10emscripten11memory_viewIfEE=Module["__ZTIN10emscripten11memory_viewIfEE"]=29180;var __ZTIN10emscripten11memory_viewIdEE=Module["__ZTIN10emscripten11memory_viewIdEE"]=29220;var __ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE=Module["__ZTSNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE"]=28524;var __ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE=Module["__ZTSNSt3__212basic_stringIDsNS_11char_traitsIDsEENS_9allocatorIDsEEEE"]=28596;var __ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE=Module["__ZTSNSt3__212basic_stringIDiNS_11char_traitsIDiEENS_9allocatorIDiEEEE"]=28672;var __ZTSN10emscripten11memory_viewIcEE=Module["__ZTSN10emscripten11memory_viewIcEE"]=28748;var __ZTSN10emscripten11memory_viewIaEE=Module["__ZTSN10emscripten11memory_viewIaEE"]=28788;var __ZTSN10emscripten11memory_viewIhEE=Module["__ZTSN10emscripten11memory_viewIhEE"]=28828;var __ZTSN10emscripten11memory_viewIsEE=Module["__ZTSN10emscripten11memory_viewIsEE"]=28868;var __ZTSN10emscripten11memory_viewItEE=Module["__ZTSN10emscripten11memory_viewItEE"]=28908;var __ZTSN10emscripten11memory_viewIiEE=Module["__ZTSN10emscripten11memory_viewIiEE"]=28948;var __ZTSN10emscripten11memory_viewIjEE=Module["__ZTSN10emscripten11memory_viewIjEE"]=28988;var __ZTSN10emscripten11memory_viewIlEE=Module["__ZTSN10emscripten11memory_viewIlEE"]=29028;var __ZTSN10emscripten11memory_viewImEE=Module["__ZTSN10emscripten11memory_viewImEE"]=29068;var __ZTSN10emscripten11memory_viewIxEE=Module["__ZTSN10emscripten11memory_viewIxEE"]=29108;var __ZTSN10emscripten11memory_viewIyEE=Module["__ZTSN10emscripten11memory_viewIyEE"]=29148;var __ZTSN10emscripten11memory_viewIfEE=Module["__ZTSN10emscripten11memory_viewIfEE"]=29188;var __ZTSN10emscripten11memory_viewIdEE=Module["__ZTSN10emscripten11memory_viewIdEE"]=29228;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=32180;var __ZTVSt9exception=Module["__ZTVSt9exception"]=32016;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=32200;var __ZTISt9exception=Module["__ZTISt9exception"]=32036;var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=47864;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=47860;var ___cxa_new_handler=Module["___cxa_new_handler"]=50108;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=29744;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=29792;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=29840;var __ZTIDn=Module["__ZTIDn"]=30220;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=29888;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=29936;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=29988;var __ZTISt9type_info=Module["__ZTISt9type_info"]=32700;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=29756;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=29804;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=29852;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=29900;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=29948;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=3e4;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=30060;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=30088;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=30116;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=30128;var __ZTSv=Module["__ZTSv"]=30176;var __ZTIPv=Module["__ZTIPv"]=30180;var __ZTSPv=Module["__ZTSPv"]=30196;var __ZTIPKv=Module["__ZTIPKv"]=30200;var __ZTSPKv=Module["__ZTSPKv"]=30216;var __ZTSDn=Module["__ZTSDn"]=30228;var __ZTIPDn=Module["__ZTIPDn"]=30232;var __ZTSPDn=Module["__ZTSPDn"]=30248;var __ZTIPKDn=Module["__ZTIPKDn"]=30252;var __ZTSPKDn=Module["__ZTSPKDn"]=30268;var __ZTSb=Module["__ZTSb"]=30284;var __ZTIPb=Module["__ZTIPb"]=30288;var __ZTSPb=Module["__ZTSPb"]=30304;var __ZTIPKb=Module["__ZTIPKb"]=30308;var __ZTSPKb=Module["__ZTSPKb"]=30324;var __ZTIw=Module["__ZTIw"]=30328;var __ZTSw=Module["__ZTSw"]=30336;var __ZTIPw=Module["__ZTIPw"]=30340;var __ZTSPw=Module["__ZTSPw"]=30356;var __ZTIPKw=Module["__ZTIPKw"]=30360;var __ZTSPKw=Module["__ZTSPKw"]=30376;var __ZTSc=Module["__ZTSc"]=30388;var __ZTIPc=Module["__ZTIPc"]=30392;var __ZTSPc=Module["__ZTSPc"]=30408;var __ZTIPKc=Module["__ZTIPKc"]=30412;var __ZTSPKc=Module["__ZTSPKc"]=30428;var __ZTSh=Module["__ZTSh"]=30440;var __ZTIPh=Module["__ZTIPh"]=30444;var __ZTSPh=Module["__ZTSPh"]=30460;var __ZTIPKh=Module["__ZTIPKh"]=30464;var __ZTSPKh=Module["__ZTSPKh"]=30480;var __ZTSa=Module["__ZTSa"]=30492;var __ZTIPa=Module["__ZTIPa"]=30496;var __ZTSPa=Module["__ZTSPa"]=30512;var __ZTIPKa=Module["__ZTIPKa"]=30516;var __ZTSPKa=Module["__ZTSPKa"]=30532;var __ZTSs=Module["__ZTSs"]=30544;var __ZTIPs=Module["__ZTIPs"]=30548;var __ZTSPs=Module["__ZTSPs"]=30564;var __ZTIPKs=Module["__ZTIPKs"]=30568;var __ZTSPKs=Module["__ZTSPKs"]=30584;var __ZTSt=Module["__ZTSt"]=30596;var __ZTIPt=Module["__ZTIPt"]=30600;var __ZTSPt=Module["__ZTSPt"]=30616;var __ZTIPKt=Module["__ZTIPKt"]=30620;var __ZTSPKt=Module["__ZTSPKt"]=30636;var __ZTSi=Module["__ZTSi"]=30648;var __ZTIPi=Module["__ZTIPi"]=30652;var __ZTSPi=Module["__ZTSPi"]=30668;var __ZTIPKi=Module["__ZTIPKi"]=30672;var __ZTSPKi=Module["__ZTSPKi"]=30688;var __ZTSj=Module["__ZTSj"]=30700;var __ZTIPj=Module["__ZTIPj"]=30704;var __ZTSPj=Module["__ZTSPj"]=30720;var __ZTIPKj=Module["__ZTIPKj"]=30724;var __ZTSPKj=Module["__ZTSPKj"]=30740;var __ZTSl=Module["__ZTSl"]=30752;var __ZTIPl=Module["__ZTIPl"]=30756;var __ZTSPl=Module["__ZTSPl"]=30772;var __ZTIPKl=Module["__ZTIPKl"]=30776;var __ZTSPKl=Module["__ZTSPKl"]=30792;var __ZTSm=Module["__ZTSm"]=30804;var __ZTIPm=Module["__ZTIPm"]=30808;var __ZTSPm=Module["__ZTSPm"]=30824;var __ZTIPKm=Module["__ZTIPKm"]=30828;var __ZTSPKm=Module["__ZTSPKm"]=30844;var __ZTSx=Module["__ZTSx"]=30856;var __ZTIPx=Module["__ZTIPx"]=30860;var __ZTSPx=Module["__ZTSPx"]=30876;var __ZTIPKx=Module["__ZTIPKx"]=30880;var __ZTSPKx=Module["__ZTSPKx"]=30896;var __ZTSy=Module["__ZTSy"]=30908;var __ZTIPy=Module["__ZTIPy"]=30912;var __ZTSPy=Module["__ZTSPy"]=30928;var __ZTIPKy=Module["__ZTIPKy"]=30932;var __ZTSPKy=Module["__ZTSPKy"]=30948;var __ZTIn=Module["__ZTIn"]=30952;var __ZTSn=Module["__ZTSn"]=30960;var __ZTIPn=Module["__ZTIPn"]=30964;var __ZTSPn=Module["__ZTSPn"]=30980;var __ZTIPKn=Module["__ZTIPKn"]=30984;var __ZTSPKn=Module["__ZTSPKn"]=31e3;var __ZTIo=Module["__ZTIo"]=31004;var __ZTSo=Module["__ZTSo"]=31012;var __ZTIPo=Module["__ZTIPo"]=31016;var __ZTSPo=Module["__ZTSPo"]=31032;var __ZTIPKo=Module["__ZTIPKo"]=31036;var __ZTSPKo=Module["__ZTSPKo"]=31052;var __ZTIDh=Module["__ZTIDh"]=31056;var __ZTSDh=Module["__ZTSDh"]=31064;var __ZTIPDh=Module["__ZTIPDh"]=31068;var __ZTSPDh=Module["__ZTSPDh"]=31084;var __ZTIPKDh=Module["__ZTIPKDh"]=31088;var __ZTSPKDh=Module["__ZTSPKDh"]=31104;var __ZTSf=Module["__ZTSf"]=31120;var __ZTIPf=Module["__ZTIPf"]=31124;var __ZTSPf=Module["__ZTSPf"]=31140;var __ZTIPKf=Module["__ZTIPKf"]=31144;var __ZTSPKf=Module["__ZTSPKf"]=31160;var __ZTSd=Module["__ZTSd"]=31172;var __ZTIPd=Module["__ZTIPd"]=31176;var __ZTSPd=Module["__ZTSPd"]=31192;var __ZTIPKd=Module["__ZTIPKd"]=31196;var __ZTSPKd=Module["__ZTSPKd"]=31212;var __ZTIe=Module["__ZTIe"]=31216;var __ZTSe=Module["__ZTSe"]=31224;var __ZTIPe=Module["__ZTIPe"]=31228;var __ZTSPe=Module["__ZTSPe"]=31244;var __ZTIPKe=Module["__ZTIPKe"]=31248;var __ZTSPKe=Module["__ZTSPKe"]=31264;var __ZTIg=Module["__ZTIg"]=31268;var __ZTSg=Module["__ZTSg"]=31276;var __ZTIPg=Module["__ZTIPg"]=31280;var __ZTSPg=Module["__ZTSPg"]=31296;var __ZTIPKg=Module["__ZTIPKg"]=31300;var __ZTSPKg=Module["__ZTSPKg"]=31316;var __ZTIDu=Module["__ZTIDu"]=31320;var __ZTSDu=Module["__ZTSDu"]=31328;var __ZTIPDu=Module["__ZTIPDu"]=31332;var __ZTSPDu=Module["__ZTSPDu"]=31348;var __ZTIPKDu=Module["__ZTIPKDu"]=31352;var __ZTSPKDu=Module["__ZTSPKDu"]=31368;var __ZTIDs=Module["__ZTIDs"]=31376;var __ZTSDs=Module["__ZTSDs"]=31384;var __ZTIPDs=Module["__ZTIPDs"]=31388;var __ZTSPDs=Module["__ZTSPDs"]=31404;var __ZTIPKDs=Module["__ZTIPKDs"]=31408;var __ZTSPKDs=Module["__ZTSPKDs"]=31424;var __ZTIDi=Module["__ZTIDi"]=31432;var __ZTSDi=Module["__ZTSDi"]=31440;var __ZTIPDi=Module["__ZTIPDi"]=31444;var __ZTSPDi=Module["__ZTSPDi"]=31460;var __ZTIPKDi=Module["__ZTIPKDi"]=31464;var __ZTSPKDi=Module["__ZTSPKDi"]=31480;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=31488;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=31516;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=31528;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=31564;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=31592;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=31620;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=31632;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=31748;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=31760;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=31840;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=31852;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=31892;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=31948;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=31976;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=31996;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=32112;var __ZTSSt9exception=Module["__ZTSSt9exception"]=32044;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=32060;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=32080;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=32092;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=32124;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=32152;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=32272;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=32508;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=32220;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=32240;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=32252;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=32284;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=32300;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=32320;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=32332;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=32388;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=32440;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=32460;var __ZTISt11range_error=Module["__ZTISt11range_error"]=32480;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=32492;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=32520;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=32540;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=32560;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=32572;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=32592;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=32612;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=32624;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=32644;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=32664;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=32724;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=32748;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=32684;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=32708;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=32736;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=32760;function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run(); diff --git a/docs/public/config/failsafe/index.wasm b/docs/public/config/failsafe/index.wasm index 67d8c55687..b9b4fa1a6c 100644 Binary files a/docs/public/config/failsafe/index.wasm and b/docs/public/config/failsafe/index.wasm differ diff --git a/docs/public/config/failsafe/parameters.json b/docs/public/config/failsafe/parameters.json index 45a47771fb..1389314335 100644 --- a/docs/public/config/failsafe/parameters.json +++ b/docs/public/config/failsafe/parameters.json @@ -1 +1 @@ -{"parameters": [{"category": "Standard", "default": 75, "group": "UAVCAN Motor Parameters", "longDesc": "Speed controller bandwidth, in Hz. Higher values result in faster speed and current rise times, but may result in overshoot and higher current consumption. For fixed-wing aircraft, this value should be less than 50 Hz; for multirotors, values up to 100 Hz may provide improvements in responsiveness.", "max": 250, "min": 10, "name": "ctl_bw", "shortDesc": "Speed controller bandwidth", "type": "Int32", "units": "Hz"}, {"category": "Standard", "default": 1, "group": "UAVCAN Motor Parameters", "longDesc": "Motor spin direction as detected during initial enumeration. Use 0 or 1 to reverse direction.", "max": 1, "min": 0, "name": "ctl_dir", "shortDesc": "Reverse direction", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "UAVCAN Motor Parameters", "longDesc": "Speed (RPM) controller gain. Determines controller\n aggressiveness; units are amp-seconds per radian. Systems with\n higher rotational inertia (large props) will need gain increased;\n systems with low rotational inertia (small props) may need gain\n decreased. Higher values result in faster response, but may result\n in oscillation and excessive overshoot. Lower values result in a\n slower, smoother response.", "max": 1.0, "min": 0.0, "name": "ctl_gain", "shortDesc": "Speed (RPM) controller gain", "type": "Float", "units": "C/rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 3.5, "group": "UAVCAN Motor Parameters", "longDesc": "Idle speed (e Hz)", "max": 100.0, "min": 0.0, "name": "ctl_hz_idle", "shortDesc": "Idle speed (e Hz)", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 25, "group": "UAVCAN Motor Parameters", "longDesc": "Spin-up rate (e Hz/s)", "max": 1000, "min": 5, "name": "ctl_start_rate", "shortDesc": "Spin-up rate (e Hz/s)", "type": "Int32", "units": "1/s^2"}, {"category": "Standard", "default": 0, "group": "UAVCAN Motor Parameters", "longDesc": "Index of this ESC in throttle command messages.", "max": 15, "min": 0, "name": "esc_index", "shortDesc": "Index of this ESC in throttle command messages.", "type": "Int32"}, {"category": "Standard", "default": 20034, "group": "UAVCAN Motor Parameters", "longDesc": "Extended status ID", "max": 1000000, "min": 1, "name": "id_ext_status", "shortDesc": "Extended status ID", "type": "Int32"}, {"category": "Standard", "default": 50000, "group": "UAVCAN Motor Parameters", "longDesc": "Extended status interval (\u00b5s)", "max": 1000000, "min": 0, "name": "int_ext_status", "shortDesc": "Extended status interval (\u00b5s)", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 50000, "group": "UAVCAN Motor Parameters", "longDesc": "ESC status interval (\u00b5s)", "max": 1000000, "name": "int_status", "shortDesc": "ESC status interval (\u00b5s)", "type": "Int32", "units": "us"}, {"category": "Standard", "decimalPlaces": 3, "default": 12.0, "group": "UAVCAN Motor Parameters", "longDesc": "Motor current limit in amps. This determines the maximum\n current controller setpoint, as well as the maximum allowable\n current setpoint slew rate. This value should generally be set to\n the continuous current rating listed in the motor\u2019s specification\n sheet, or set equal to the motor\u2019s specified continuous power\n divided by the motor voltage limit.", "max": 80.0, "min": 1.0, "name": "mot_i_max", "shortDesc": "Motor current limit in amps", "type": "Float", "units": "A"}, {"category": "Standard", "default": 2300, "group": "UAVCAN Motor Parameters", "longDesc": "Motor Kv in RPM per volt. This can be taken from the motor\u2019s\n specification sheet; accuracy will help control performance but\n some deviation from the specified value is acceptable.", "max": 4000, "min": 0, "name": "mot_kv", "shortDesc": "Motor Kv in RPM per volt", "type": "Int32", "units": "rpm/V"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "UAVCAN Motor Parameters", "longDesc": "READ ONLY: Motor inductance in henries. This is measured on start-up.", "name": "mot_ls", "shortDesc": "READ ONLY: Motor inductance in henries.", "type": "Float", "units": "H"}, {"category": "Standard", "default": 14, "group": "UAVCAN Motor Parameters", "longDesc": "Number of motor poles. Used to convert mechanical speeds to\n electrical speeds. This number should be taken from the motor\u2019s\n specification sheet.", "max": 40, "min": 2, "name": "mot_num_poles", "shortDesc": "Number of motor poles.", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "UAVCAN Motor Parameters", "longDesc": "READ ONLY: Motor resistance in ohms. This is measured on start-up. When\n tuning a new motor, check that this value is approximately equal\n to the value shown in the motor\u2019s specification sheet.", "name": "mot_rs", "shortDesc": "READ ONLY: Motor resistance in ohms", "type": "Float", "units": "Ohm"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "UAVCAN Motor Parameters", "longDesc": "Acceleration limit (V)", "max": 1.0, "min": 0.01, "name": "mot_v_accel", "shortDesc": "Acceleration limit (V)", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 3, "default": 14.8, "group": "UAVCAN Motor Parameters", "longDesc": "Motor voltage limit in volts. The current controller\u2019s\n commanded voltage will never exceed this value. Note that this may\n safely be above the nominal voltage of the motor; to determine the\n actual motor voltage limit, divide the motor\u2019s rated power by the\n motor current limit.", "min": 0.0, "name": "mot_v_max", "shortDesc": "Motor voltage limit in volts", "type": "Float", "units": "V"}, {"category": "Standard", "default": 2, "group": "UAVCAN GNSS", "longDesc": "Dynamic model used in the GNSS positioning engine. 0 \u2013\n Automotive, 1 \u2013 Sea, 2 \u2013 Airborne.\n ", "max": 2, "min": 0, "name": "gnss.dyn_model", "shortDesc": "GNSS dynamic model", "type": "Int32", "values": [{"description": "Automotive", "value": 0}, {"description": "Sea", "value": 1}, {"description": "Airborne", "value": 2}]}, {"category": "Standard", "default": 1, "group": "UAVCAN GNSS", "longDesc": "Broadcast the old (deprecated) GNSS fix message\n uavcan.equipment.gnss.Fix alongside the new alternative\n uavcan.equipment.gnss.Fix2. It is recommended to\n disable this feature to reduce the CAN bus traffic.\n ", "max": 1, "min": 0, "name": "gnss.old_fix_msg", "shortDesc": "Broadcast old GNSS fix message", "type": "Int32", "values": [{"description": "Fix2", "value": 0}, {"description": "Fix and Fix2", "value": 1}]}, {"category": "Standard", "default": 0, "group": "UAVCAN GNSS", "longDesc": "Set the device health to Warning if the dimensionality of\n the GNSS solution is less than this value. 3 for the full (3D)\n solution, 2 for planar (2D) solution, 1 for time-only solution,\n 0 disables the feature.\n ", "max": 3, "min": 0, "name": "gnss.warn_dimens", "shortDesc": "device health warning", "type": "Int32", "values": [{"description": "disables the feature", "value": 0}, {"description": "time-only solution", "value": 1}, {"description": "planar (2D) solution", "value": 2}, {"description": "full (3D) solution", "value": 3}]}, {"category": "Standard", "default": 0, "group": "UAVCAN GNSS", "longDesc": "Set the device health to Warning if the number of satellites\n used in the GNSS solution is below this threshold. Zero\n disables the feature\n ", "name": "gnss.warn_sats", "shortDesc": "", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "UAVCAN GNSS", "longDesc": "Set the device health to Warning if the number of satellites\n used in the GNSS solution is below this threshold. Zero\n disables the feature\n ", "max": 1000000, "min": 0, "name": "uavcan.pubp-pres", "shortDesc": "", "type": "Int32", "units": "us"}, {"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 For CALLSIGN shorter than 8 characters use the null terminator at the end '\\0'.", "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 For CALLSIGN shorter than 8 characters use the null terminator at the end '\\0'.", "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", "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.", "max": 15, "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", "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", "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", "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.", "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", "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.", "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", "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", "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.", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. Note: this is only useful for servos.", "max": 65535, "min": 0, "name": "PWM_MAIN_REV", "shortDesc": "Reverse Output Range for SIM", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "Airspeed Validator", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "max": 5, "min": 1, "name": "ASPD_BETA_GATE", "shortDesc": "Gate size for sideslip angle fusion", "type": "Int32", "units": "SD"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "Airspeed Validator", "longDesc": "Sideslip measurement noise of the internal wind estimator(s) of the airspeed selector.", "max": 1.0, "min": 0.0, "name": "ASPD_BETA_NOISE", "shortDesc": "Wind estimator sideslip measurement noise", "type": "Float", "units": "rad"}, {"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.", "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. 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.", "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, 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.", "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. Larger values make the check less sensitive, smaller positive values make it more sensitive.", "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. Set to a negative value to disable the re-enabling in flight.", "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.", "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", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_1", "rebootRequired": true, "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", "rebootRequired": true, "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", "rebootRequired": true, "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. When 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": 3, "default": 0.55, "group": "Airspeed Validator", "longDesc": "The synthetic airspeed estimate (from groundspeed and heading) will be declared valid as soon and as long the horizontal wind uncertainty is below this value.", "max": 5.0, "min": 0.001, "name": "ASPD_WERR_THR", "shortDesc": "Horizontal wind uncertainty threshold for synthetic airspeed", "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. When 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. Set 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, as the declination is looked up based on the GPS 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, a new set of gains is available and can be applied immediately 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 Set bits in the following positions to enable: 0 : Roll 1 : Pitch 2 : 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 RC channel used to enable/disable auto tuning.", "max": 6, "min": 0, "name": "FW_AT_MAN_AUX", "shortDesc": "Enable/disable auto tuning using an RC 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", "default": 0, "group": "Autotune", "longDesc": "WARNING: this will inject steps to the rate controller and can be dangerous. Only activate if you know what you are doing, and in a safe environment. Any motion of the remote stick will abort the signal injection and reset this parameter Best is to perform the identification in position or hold mode. Increase the amplitude of the injected signal using FW_AT_SYSID_AMP for more signal/noise ratio", "name": "FW_AT_START", "shortDesc": "Start the autotuning sequence", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Autotune", "longDesc": "This parameter scales the signal sent to the rate controller during system identification.", "max": 6.0, "min": 0.1, "name": "FW_AT_SYSID_AMP", "shortDesc": "Amplitude of the injected signal", "type": "Float"}, {"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": 20.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": 0, "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, 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.", "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", "default": 0, "group": "Autotune", "longDesc": "WARNING: this will inject steps to the rate controller and can be dangerous. Only activate if you know what you are doing, and in a safe environment. Any motion of the remote stick will abort the signal injection and reset this parameter Best is to perform the identification in position or hold mode. Increase the amplitude of the injected signal using MC_AT_SYSID_AMP for more signal/noise ratio", "name": "MC_AT_START", "shortDesc": "Start the autotuning sequence", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"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' means that measurements are expected to come from a power module. If the value is set to 'External' then the system expects to receive mavlink battery status messages. If the value is set to 'ESCs', the battery information are taken from the esc_status message. This requires the ESC to provide both voltage as well as current.", "name": "BAT1_SOURCE", "rebootRequired": true, "shortDesc": "Battery 1 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module", "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. For 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. 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.", "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' means that measurements are expected to come from a power module. If the value is set to 'External' then the system expects to receive mavlink battery status messages. If the value is set to 'ESCs', the battery information are taken from the esc_status message. This requires the ESC to provide both voltage as well as current.", "name": "BAT2_SOURCE", "rebootRequired": true, "shortDesc": "Battery 2 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module", "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. For 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. 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.", "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' means that measurements are expected to come from a power module. If the value is set to 'External' then the system expects to receive mavlink battery status messages. If the value is set to 'ESCs', the battery information are taken from the esc_status message. This requires the ESC to provide both voltage as well as current.", "name": "BAT3_SOURCE", "rebootRequired": true, "shortDesc": "Battery 3 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module", "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. For 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. 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.", "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, which 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. This has to be lower than the low threshold. This threshold commonly will 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. This has to be lower than the critical threshold. This threshold commonly will 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. This 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 the 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. Setting this parameter to 782090 will disable the startup tune, while keeping all 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 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.", "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. WARNING: 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 checks in the commander. WARNING: 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 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.", "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 mode for VTOLs. WARNING: 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_* parameters.", "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: - 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.", "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. Used 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. A 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. This 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 SD 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 disturbance (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. Depending on the value of the parameter, the check can be disabled, 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. Depending on the value of the parameter, the check can be disabled, 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. 1: Arming/disarming triggers when holding the momentary button down for COM_RC_ARM_HYST 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": 1, "group": "Commander", "longDesc": "Measures taken when a check defined by EKF2_GPS_CHECK is failing.", "name": "COM_ARM_WO_GPS", "shortDesc": "GPS preflight check", "type": "Int32", "values": [{"description": "Deny arming", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Disabled", "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. A 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 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.", "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 1: Allow disarming in multicopter flight in modes where the thrust is directly controlled by thr throttle stick e.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 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.", "name": "COM_DISARM_PRFLT", "shortDesc": "Time-out for auto disarm if not taking off", "type": "Float", "units": "s"}, {"bitmask": [{"description": "Mission", "index": 0}, {"description": "Hold", "index": 1}, {"description": "Offboard", "index": 2}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which datalink loss is ignored and the failsafe action not triggered.", "max": 7, "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 for the user to realize. During that time the user 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 and the user cannot take over via stick movements (switching modes is still allowed).", "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 disarming in order to remember the next flight UUID. The 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 selected 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": "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 selected 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": "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 selected 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": "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 selected 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": "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 selected 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": "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 selected 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": "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": 3, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when the remaining flight time is below the 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. 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).", "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 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.", "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' flag 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.", "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 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.", "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. See 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, "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 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.", "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 for 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 allows 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, set 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", "default": 0, "group": "Commander", "longDesc": "This sets the flight mode that will be used if navigation accuracy is no longer adequate for position control in manual Position mode.", "name": "COM_POSCTL_NAVL", "shortDesc": "Position mode navigation loss response", "type": "Int32", "values": [{"description": "Altitude mode", "value": 0}, {"description": "Land mode (descend)", "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. The default is appropriate for a multicopter. Can be increased for a fixed-wing. 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). Set to -1 to disable.", "max": 400.0, "min": -1.0, "name": "COM_POS_FS_EPH", "shortDesc": "Horizontal position error threshold", "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. 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.", "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. 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.", "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. Note: 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 in 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. A 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": "Hold", "index": 1}, {"description": "Offboard", "index": 2}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which RC loss is ignored and the failsafe action not triggered.", "max": 7, "min": 0, "name": "COM_RCL_EXCEPT", "shortDesc": "RC loss exceptions", "type": "Int32"}, {"category": "Standard", "default": 1000, "group": "Commander", "longDesc": "The default value of 1000 requires the stick to be held in the arm or disarm position for 1 second.", "max": 1500, "min": 100, "name": "COM_RC_ARM_HYST", "shortDesc": "RC input arm/disarm command duration", "type": "Int32", "units": "ms"}, {"category": "Standard", "default": 3, "group": "Commander", "longDesc": "A value of 0 enables RC transmitter control (only). A valid RC transmitter calibration is required. A value of 1 allows joystick control only. RC input handling and the associated checks are disabled. A value of 2 allows either RC Transmitter or Joystick input. The first valid input is used, will fallback to other sources if the input stream becomes invalid. A value of 3 allows either input from RC or joystick. The first available source is selected and used until reboot. A value of 4 ignores any stick input.", "max": 4, "min": 0, "name": "COM_RC_IN_MODE", "shortDesc": "RC control input mode", "type": "Int32", "values": [{"description": "RC Transmitter only", "value": 0}, {"description": "Joystick only", "value": 1}, {"description": "RC and Joystick with fallback", "value": 2}, {"description": "RC or Joystick keep first", "value": 3}, {"description": "Stick input disabled", "value": 4}]}, {"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. This must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers.", "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 RC stick override is enabled, moving the RC 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.", "max": 3, "min": 0, "name": "COM_RC_OVERRIDE", "shortDesc": "Enable RC stick override of auto and/or offboard modes", "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 the autopilot the pilot takes over control.", "max": 80.0, "min": 5.0, "name": "COM_RC_STICK_OV", "shortDesc": "RC 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. 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", "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 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.", "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. 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).", "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. Failsafe 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. 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.", "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. Warning is sent periodically (every 1 minute). Set 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, set by COM_DL_LOSS_T in seconds. Once the timeout occurs the selected action 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 RC loss failsafe will only be entered after a timeout, set by COM_RC_LOSS_T in seconds. If RC input checks have been disabled by setting the COM_RC_IN_MODE param it will not be triggered.", "max": 6, "min": 1, "name": "NAV_RCL_ACT", "shortDesc": "Set RC 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_AGP_CTRL", "shortDesc": "Aux global position (AGP) sensor aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_AGP_DELAY", "rebootRequired": true, "shortDesc": "Aux global position estimator 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_AGP_GATE", "shortDesc": "Gate size for aux global position fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.9, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_AGP_NOISE", "shortDesc": "Measurement noise for aux global position measurements", "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", "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}], "category": "Standard", "default": 1023, "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": 1023, "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", "max": 300.0, "min": 0.0, "name": "EKF2_GPS_DELAY", "rebootRequired": true, "shortDesc": "GPS measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward 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": "Forward 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": "Forward 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.1, "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", "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": "A lower value means HAGL needs to be more stable in order to use range finder for height estimation in range aid mode", "max": 5.0, "min": 0.1, "name": "EKF2_RNG_A_IGATE", "shortDesc": "Gate size used for innovation consistency checks for range aid fusion", "type": "Float", "units": "SD"}, {"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 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.", "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 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. -", "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. It 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 added to the pitch setpoint and should correspond to the pitch at typical 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 (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 (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.0, "group": "FW Attitude Control", "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.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 state 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 current 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. In 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 second).", "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"}, {"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: 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)", "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. If 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. Set this value within the vehicle's performance limits.", "max": 15.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 the loiter-down waypoint before the final approach. Otherwise 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 to trigger the flare. NOTE: 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 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).", "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. 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).", "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. 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.", "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": 1, "default": 0.5, "group": "FW Geometry", "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 to 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 Geometry", "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": 2, "default": 0.05, "group": "FW Launch detection", "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 Launch detection", "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", "default": 0, "group": "FW Launch detection", "longDesc": "Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles. Not 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 Launch detection", "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": 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", "name": "NPFG_EN_MIN_GSP", "shortDesc": "Enable minimum forward ground speed maintaining excess wind handling logic", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "FW NPFG Control", "increment": 0.5, "longDesc": "The maximum value of the minimum forward ground speed that may be commanded by the track keeping excess wind handling logic. Commanded in full at the normalized track error fraction of the track error boundary and reduced to zero on track.", "max": 10.0, "min": 0.0, "name": "NPFG_GSP_MAX_TK", "shortDesc": "Maximum, minimum forward ground speed for track keeping in excess wind", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "FW NPFG Control", "longDesc": "Avoids limit cycling from a too aggressively tuned period/damping combination. If 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 bounding 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. Used 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 to 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", "name": "NPFG_TRACK_KEEP", "shortDesc": "Enable track keeping excess wind handling logic", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"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", "default": 1, "group": "FW NPFG Control", "longDesc": "Disabling this parameter further disables all other airspeed incrementation options.", "name": "NPFG_WIND_REG", "shortDesc": "Enable wind excess regulation", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 0, "default": 90.0, "group": "FW Path Control", "increment": 1.0, "longDesc": "Maximum change in roll angle setpoint per second. Applied 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"}, {"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 Path Control", "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": 50.0, "group": "FW Path Control", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.", "max": 65.0, "min": 35.0, "name": "FW_R_LIM", "shortDesc": "Maximum roll angle setpoint", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "FW Path Control", "increment": 0.5, "max": 30.0, "min": -5.0, "name": "FW_TKO_PITCH_MIN", "shortDesc": "Minimum pitch during takeoff", "type": "Float", "units": "deg"}, {"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. 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).", "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. It is used for airspeed sensor failure detection and for the control surface 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, 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).", "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 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, "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 Set 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 Set 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 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.", "max": 15.0, "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 set to THR_MIN and flown at the same airspeed as used to measure FW_T_CLMB_MAX.", "max": 5.0, "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 disables 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 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.", "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. 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.", "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 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)", "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 normalize 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", "decimalPlaces": 2, "default": 1.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Sets a fraction of full flaps during landing. Also 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"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW Rate Control", "increment": 0.01, "longDesc": "Sets a fraction of full flaps during take-off. Also 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": 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 to 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 to 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 to 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. 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, "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: - Rate controller: output scaling - Attitude controller: coordinated turn controller - Position controller: airspeed setpoint tracking, takeoff logic - 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", "decimalPlaces": 1, "default": 5.0, "group": "FW TECS", "increment": 0.5, "longDesc": "The controller will increase the commanded airspeed to maintain this 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": 1, "default": 30.0, "group": "FW TECS", "increment": 0.5, "longDesc": "Applies in any altitude controlled flight mode.", "max": 60.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 TECS", "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": 2, "default": 0.0, "group": "FW TECS", "increment": 0.01, "longDesc": "This is the minimum throttle while on the ground (\"landed\") in auto modes.", "max": 0.4, "min": 0.0, "name": "FW_THR_IDLE", "shortDesc": "Idle throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "FW TECS", "increment": 0.01, "longDesc": "Applies in any altitude controlled flight mode. Should 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 TECS", "increment": 0.01, "longDesc": "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.", "max": 1.0, "min": 0.0, "name": "FW_THR_MIN", "shortDesc": "Throttle limit min", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "FW TECS", "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": 1, "default": -1.0, "group": "FW TECS", "increment": 0.1, "longDesc": "The calibrated airspeed setpoint during the takeoff climbout. If 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": 2, "default": 5.0, "group": "FW TECS", "increment": 0.5, "min": 2.0, "name": "FW_T_ALT_TC", "shortDesc": "Altitude error time constant", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 3.0, "group": "FW TECS", "increment": 0.01, "longDesc": "In auto modes: default climb rate output by controller to achieve altitude setpoints. In manual modes: maximum climb rate setpoint.", "max": 15.0, "min": 0.5, "name": "FW_T_CLMB_R_SP", "shortDesc": "Default target climbrate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 0, "default": -1.0, "group": "FW TECS", "longDesc": "Minimum altitude error needed to descend with max airspeed and minimal throttle. A 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 TECS", "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 TECS", "increment": 0.05, "longDesc": "Increase it to trim out speed and height offsets faster, with 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 TECS", "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 TECS", "increment": 0.5, "longDesc": "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.", "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 TECS", "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 TECS", "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": 2.0, "group": "FW TECS", "increment": 0.01, "longDesc": "In auto modes: default sink rate output by controller to achieve altitude setpoints. In manual modes: maximum sink rate setpoint.", "max": 15.0, "min": 0.5, "name": "FW_T_SINK_R_SP", "shortDesc": "Default target sinkrate", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "FW TECS", "increment": 1.0, "longDesc": "Adjusts the amount of weighting that the pitch control applies to speed vs height errors. 0 -> control height only 2 -> control speed only (gliders)", "max": 2.0, "min": 0.0, "name": "FW_T_SPDWEIGHT", "shortDesc": "Speed <--> Altitude weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "FW TECS", "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 TECS", "increment": 0.1, "longDesc": "This is defining the noise in the airspeed rate for the constant airspeed rate model of 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 TECS", "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 TECS", "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 TECS", "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 TECS", "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 TECS", "increment": 0.005, "longDesc": "Increase it to trim out speed and height offsets faster, with 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 TECS", "increment": 1.0, "longDesc": "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.", "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 TECS", "increment": 0.5, "longDesc": "This is the maximum vertical acceleration either up or down that the controller will use to correct speed or 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 TECS", "increment": 0.01, "longDesc": "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.0, "name": "FW_WIND_ARSP_SC", "shortDesc": "Wind-based airspeed scaling factor", "type": "Float"}, {"category": "Standard", "default": 1, "group": "Failure Detector", "longDesc": "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.", "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": 2.0, "group": "Failure Detector", "increment": 1.0, "longDesc": "Motor failure triggers only below this current value", "max": 50.0, "min": 0.0, "name": "FD_ACT_MOT_C2T", "shortDesc": "Motor Failure Current/Throttle Threshold", "type": "Float", "units": "A/%"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Failure Detector", "increment": 0.01, "longDesc": "Motor failure triggers only above this throttle value.", "max": 1.0, "min": 0.0, "name": "FD_ACT_MOT_THR", "shortDesc": "Motor Failure Throttle Threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 100, "group": "Failure Detector", "increment": 100, "longDesc": "Motor failure triggers only if the throttle threshold and the current to throttle threshold are violated for this time.", "max": 10000, "min": 10, "name": "FD_ACT_MOT_TOUT", "shortDesc": "Motor Failure Time Threshold", "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. Timeout 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. External 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. 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", "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. 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", "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 vertical acceleration variance) triggers a failure Setting 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": "RC Controlled", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Follow target", "longDesc": "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.", "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 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.", "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 an 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 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", "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. Auto-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 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", "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. Auto-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": "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.", "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. Not 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. 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, "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": 7, "group": "GPS", "longDesc": "u-blox receivers support different dynamic platform models to adjust the navigation engine to the 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": 0, "group": "GPS", "longDesc": "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.", "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}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "GPS", "longDesc": "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).", "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, which 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. Disabled 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. Disabled 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. 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).", "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 no dependence on the position estimator 0 = 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. 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.", "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}]}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "This is used to specify how to handle motor failures reported 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. Use 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. Use 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. Use 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. Use 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. Use 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. motor_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 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.", "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. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0\u00b0 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)", "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. 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)", "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. 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", "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": "Used to linearize mechanical output of swashplate servos to avoid axis coupling and binding with 4 servo redundancy. This requires a symmetric setup where the servo horn is exactly centered with a 0 command. Setting 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. If 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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.", "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.", "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.", "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.", "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.", "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.", "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.", "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.", "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", "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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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 by 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 by 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 more stable, increase if the real hover thrust is 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. 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).", "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 to reduce the sensitivity of the estimator from biased measurement. Set 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 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.", "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. Only 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. 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).", "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. A 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.0, "group": "Land Detector", "longDesc": "Total time it takes to go through all three land detection stages: ground contact, maybe landed, landed when all necessary conditions are constantly met.", "max": 10.0, "min": 0.1, "name": "LNDMC_TRIG_TIME", "shortDesc": "Multicopter land detection trigger time", "type": "Float", "units": "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. 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.", "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. Flight 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. Flight 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. Higher 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. Higher 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. 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.", "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) Larger 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: 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)", "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. Decrease 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. Decrease 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 on 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 instance. 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 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).", "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 HIGH_LATENCY2 stream for instance 0, configured in iridium mode. This 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 vehicle'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 `txbuf` field reported by radio_status. Requires 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. 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).", "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, selected 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, selected 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 on 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 instance. 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 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).", "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 HIGH_LATENCY2 stream for instance 1, configured in iridium mode. This 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 vehicle'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 `txbuf` field reported by radio_status. Requires 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. 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).", "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, selected 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, selected 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 on 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 instance. 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 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).", "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 HIGH_LATENCY2 stream for instance 2, configured in iridium mode. This 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 vehicle'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 `txbuf` field reported by radio_status. Requires 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. 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).", "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, selected 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, selected 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 to 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 stream 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'. The 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": 0, "group": "MAVLink", "name": "MAV_PROTO_VER", "shortDesc": "MAVLink protocol version", "type": "Int32", "values": [{"description": "Default to 1, switch to 2 if GCS sends version 2", "value": 0}, {"description": "Always use version 1", "value": 1}, {"description": "Always use version 2", "value": 2}]}, {"category": "Standard", "default": 5, "group": "MAVLink", "longDesc": "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.", "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 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", "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", "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 before 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 Decrease 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 arms 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": -1.0, "group": "Manual Control", "longDesc": "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.", "max": 15.0, "min": -1.0, "name": "MAN_KILL_GEST_T", "shortDesc": "Trigger time for kill stick gesture", "type": "Float", "units": "s"}, {"category": "Standard", "default": 30, "group": "Mission", "longDesc": "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.", "max": 3600, "min": 0, "name": "FW_GPSF_LT", "shortDesc": "GPS failure loiter time", "type": "Int32", "units": "s"}, {"category": "Standard", "decimalPlaces": 1, "default": 15.0, "group": "Mission", "increment": 0.5, "longDesc": "Roll angle in GPS failure loiter mode.", "max": 30.0, "min": 0.0, "name": "FW_GPSF_R", "shortDesc": "GPS failure fixed roll angle", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mission", "longDesc": "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.", "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. Has no effect on mission validity. Set 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. Then vehicle will loiter in this altitude until further command is received. Only 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. If 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 if 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. Validity 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 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.", "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. For 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 than 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 FW mode (e.g. for Loiter mode).", "max": 1000.0, "min": 25.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, 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.", "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 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.", "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 to 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. Assumes 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 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.", "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. This is required for a gimbal which is not capable of stabilizing itself and relies on the IMU's attitude estimation.", "max": 2, "min": 0, "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}]}, {"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", "default": -1, "group": "Mount", "longDesc": "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.", "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. Recommended 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": 0.0, "group": "Mount", "max": 360.0, "min": -360.0, "name": "MNT_OFF_PITCH", "shortDesc": "Offset for pitch channel output in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mount", "max": 360.0, "min": -360.0, "name": "MNT_OFF_ROLL", "shortDesc": "Offset for roll channel output in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mount", "max": 360.0, "min": -360.0, "name": "MNT_OFF_YAW", "shortDesc": "Offset for yaw channel output in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_PITCH", "shortDesc": "Range of pitch channel output in degrees (only in AUX output mode)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_ROLL", "shortDesc": "Range of roll channel output in degrees (only in AUX output mode)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 360.0, "group": "Mount", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_YAW", "shortDesc": "Range of yaw channel output in degrees (only in AUX output mode)", "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", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "Exponential factor for tuning the input curve shape. 0 Purely linear input curve 1 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. 0 Purely linear input curve 1 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. 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", "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. 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", "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). 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.", "max": 1800.0, "min": 0.0, "name": "MC_PITCHRATE_MAX", "shortDesc": "Max pitch rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 6.5, "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). 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.", "max": 1800.0, "min": 0.0, "name": "MC_ROLLRATE_MAX", "shortDesc": "Max roll rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 6.5, "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. 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.", "max": 1.0, "min": 0.0, "name": "MC_YAW_WEIGHT", "shortDesc": "Yaw weight", "type": "Float"}, {"category": "Standard", "decimalPlaces": 0, "default": 60.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limits the acceleration of the yaw setpoint to avoid large control 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": 45.0, "group": "Multicopter Attitude Control", "increment": 5.0, "longDesc": "Limits the rate of change of the yaw setpoint to avoid large control 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. 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.", "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 1 just deceleration 4 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 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", "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.1, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Does not apply to manual throttle and direct attitude piloting by stick.", "max": 1.0, "min": 0.0, "name": "MPC_HOLD_DZ", "shortDesc": "Deadzone for sticks in manual piloted modes", "type": "Float"}, {"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). A 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. 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.", "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 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\"", "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 limited to \"MPC_LAND_SPEED\" Value 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, limit 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": 1000.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "When nudging is enabled (see MPC_LAND_RC_HELP), this controls the maximum allowed horizontal displacement from the original landing point.", "min": 0.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. 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).", "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. 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).", "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 or Altitude 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 Setting 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: 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", "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. 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.", "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). Used for initialization of the hover thrust estimator (see MPC_USE_HTE). 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.", "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. With airmode enabled this parameters can be set to 0 while 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. To 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. Any 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. If it's too slow the drone might scratch the ground and tip over. A 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", "default": 1, "group": "Multicopter Position Control", "longDesc": "Disable to use the fixed parameter MPC_THR_HOVER instead of the hover thrust estimate in the position controller. This parameter does not influence Stabilized mode throttle curve (see MPC_THR_CURVE).", "name": "MPC_USE_HTE", "shortDesc": "Use hover thrust estimate for altitude control", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"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. The maximum sideways and backward speed can be set differently using 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 MPC_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 MPC_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. A 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 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.", "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.6, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The higher the value the less sensitivity the stick has around zero while still reaching the maximum value with full stick deflection. 0 Purely linear input curve 1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MPC_XY_MAN_EXPO", "shortDesc": "Manual position control stick exponential curve sensitivity", "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 MPC_XY_VEL_MAX or MPC_VEL_MANUAL). If 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 Allows 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. Any 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": 0.6, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The higher the value the less sensitivity the stick has around zero while still reaching the maximum value with full stick deflection. 0 Purely linear input curve 1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MPC_YAW_EXPO", "shortDesc": "Manual control stick yaw rotation exponential curve", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.6, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The higher the value the less sensitivity the stick has around zero while still reaching the maximum value with full stick deflection. 0 Purely linear input curve 1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MPC_Z_MAN_EXPO", "shortDesc": "Manual control stick vertical exponential curve", "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 MPC_Z_VEL_MAX_UP or MPC_LAND_SPEED). If 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. In manually piloted modes full stick deflection commands this velocity. For 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. In manually piloted modes full stick deflection commands this velocity. For 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. 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.", "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 no aux channel is mapped and no 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 no aux channel is mapped and no 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 no aux channel is mapped and no 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 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.", "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. 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.", "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. 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.", "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": 2, "default": 0.0, "group": "Multicopter Rate Control", "increment": 0.01, "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", "increment": 0.01, "longDesc": "Improves tracking performance.", "min": 0.0, "name": "MC_YAWRATE_FF", "shortDesc": "Yaw rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "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. 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.", "max": 5.0, "min": 0.0, "name": "MC_YAWRATE_K", "shortDesc": "Yaw rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "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. 0 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. Resolution is limited by OSD to 15 discrete values. Negative values 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": 125, "group": "OSD", "longDesc": "Scroll rate in milliseconds for OSD messages longer than available character width. This 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 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.", "max": 1.0, "min": 0.0, "name": "THR_MDL_FAC", "shortDesc": "Thrust to motor control signal model parameter", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Payload Deliverer", "name": "PD_GRIPPER_EN", "rebootRequired": true, "shortDesc": "Enable Gripper actuation in Payload Deliverer", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 3.0, "group": "Payload Deliverer", "longDesc": "Maximum time Gripper will wait while the successful griper actuation isn't recognised. 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", "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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC10_DZ", "shortDesc": "RC channel 10 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC11_DZ", "shortDesc": "RC channel 11 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC12_DZ", "shortDesc": "RC channel 12 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC13_DZ", "shortDesc": "RC channel 13 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC14_DZ", "shortDesc": "RC channel 14 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC15_DZ", "shortDesc": "RC channel 15 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC16_DZ", "shortDesc": "RC channel 16 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC17_DZ", "shortDesc": "RC channel 17 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC18_DZ", "shortDesc": "RC channel 18 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC1_DZ", "shortDesc": "RC channel 1 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC2_DZ", "shortDesc": "RC channel 2 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC3_DZ", "shortDesc": "RC channel 3 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC4_DZ", "shortDesc": "RC channel 4 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC5_DZ", "shortDesc": "RC channel 5 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC6_DZ", "shortDesc": "RC channel 6 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC7_DZ", "shortDesc": "RC channel 7 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC8_DZ", "shortDesc": "RC channel 8 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC9_DZ", "shortDesc": "RC channel 9 dead zone", "type": "Float"}, {"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 of channels which were used during RC calibration. It is only meant for 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. 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).", "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 (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.", "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. Set 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. Set 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. Set 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 which channel should be used for reading pitch inputs from. A 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 which channel should be used for reading roll inputs from. A 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 which channel should be used for reading throttle inputs from. A 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 which channel should be used for reading yaw inputs from. A 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 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.", "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 for 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 for 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 for straight and level flight.", "max": 0.5, "min": -0.5, "name": "TRIM_YAW", "shortDesc": "Yaw trim", "type": "Float"}, {"category": "Standard", "default": 0.75, "group": "Radio Switches", "longDesc": "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 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 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).", "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": 2, "default": 0.0, "group": "Rover Differential", "increment": 0.01, "longDesc": "This parameter is used to calculate the feedforward term of the closed loop yaw rate control. The controller first calculates the required speed difference between the left and right motor to achieve the desired yaw rate. This desired speed difference is then linearly mapped to normalized motor commands. A good starting point is half the speed the rover drives at maximum throttle (RD_MAX_THR_SPD)). Increase this parameter if the rover turns faster than the setpoint, and decrease if the rover turns slower.", "max": 100.0, "min": 0.0, "name": "RD_MAX_THR_YAW_R", "shortDesc": "Yaw rate turning left/right wheels at max speed in opposite directions", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Differential", "increment": 0.01, "longDesc": "The waypoint transition speed is calculated as: Transition_speed = Maximum_speed * (1 - normalized_transition_angle * RM_MISS_VEL_GAIN) The normalized transition angle is the angle between the line segment from prev-curr WP and curr-next WP interpolated from [0, 180] -> [0, 1]. Higher value -> More speed reduction during waypoint transitions. Set to -1 to disable any speed reduction during waypoint transition.", "max": 100.0, "min": -1.0, "name": "RD_MISS_SPD_GAIN", "shortDesc": "Tuning parameter for the speed reduction during waypoint transition", "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 error between the desired and actual yaw. It is also used as the threshold whether the rover should come 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.", "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 error 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": 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 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.", "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": 2, "default": 0.0, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "This parameter is used to calculate the feedforward term of the closed loop yaw rate control. The controller first calculates the required speed difference between the left and right motor to achieve the desired yaw rate. This desired speed difference is then linearly mapped to normalized motor commands. A good starting point is half the speed the rover drives at maximum throttle (RD_MAX_THR_SPD)). Increase this parameter if the rover turns faster than the setpoint, and decrease if the rover turns slower.", "max": 100.0, "min": 0.0, "name": "RM_MAX_THR_YAW_R", "shortDesc": "Yaw rate turning left/right wheels at max speed in opposite directions", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "The waypoint transition speed is calculated as: Transition_speed = Maximum_speed * (1 - normalized_transition_angle * RM_MISS_VEL_GAIN) The normalized transition angle is the angle between the line segment from prev-curr waypoint and curr-next waypoint interpolated from [0, 180] -> [0, 1]. Higher value -> More speed reduction during waypoint transitions. Set to -1 to disable any speed reduction during waypoint transition.", "max": 100.0, "min": -1.0, "name": "RM_MISS_SPD_GAIN", "shortDesc": "Tuning parameter for the speed reduction during waypoint transition", "type": "Float"}, {"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": 2, "default": 0.75, "group": "Rover Position Control (Deprecated)", "increment": 0.05, "longDesc": "Damping factor for L1 control.", "max": 0.9, "min": 0.6, "name": "GND_L1_DAMPING", "shortDesc": "L1 damping", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Rover Position Control (Deprecated)", "increment": 0.1, "longDesc": "This is the distance at which the next waypoint is activated. This should be set to about 2-4x of GND_WHEEL_BASE and not smaller than one meter (due to GPS accuracy).", "max": 50.0, "min": 1.0, "name": "GND_L1_DIST", "shortDesc": "L1 distance", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Rover Position Control (Deprecated)", "increment": 0.5, "longDesc": "This is the L1 distance and defines the tracking point ahead of the rover it's following. Use values around 2-5m for a 0.3m wheel base. Tuning instructions: Shorten slowly during tuning until response is sharp without oscillation.", "max": 50.0, "min": 0.5, "name": "GND_L1_PERIOD", "shortDesc": "L1 period", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 150.0, "group": "Rover Position Control (Deprecated)", "max": 400.0, "min": 0.0, "name": "GND_MAN_Y_MAX", "shortDesc": "Max manual yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.7854, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "At a control output of 0, the steering wheels are at 0 radians. At a control output of 1, the steering wheels are at GND_MAX_ANG radians.", "max": 3.14159, "min": 0.0, "name": "GND_MAX_ANG", "shortDesc": "Maximum turn angle for Ackerman steering", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.001, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the derivative gain for the speed closed loop controller", "max": 50.0, "min": 0.0, "name": "GND_SPEED_D", "shortDesc": "Speed proportional gain", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 3.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the integral gain for the speed closed loop controller", "max": 50.0, "min": 0.0, "name": "GND_SPEED_I", "shortDesc": "Speed Integral gain", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the maxim value the integral can reach to prevent wind-up.", "max": 50.0, "min": 0.005, "name": "GND_SPEED_IMAX", "shortDesc": "Speed integral maximum value", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Rover Position Control (Deprecated)", "increment": 0.5, "max": 40.0, "min": 0.0, "name": "GND_SPEED_MAX", "shortDesc": "Maximum ground speed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 2.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the proportional gain for the speed closed loop controller", "max": 50.0, "min": 0.005, "name": "GND_SPEED_P", "shortDesc": "Speed proportional gain", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is a gain to map the speed control output to the throttle linearly.", "max": 50.0, "min": 0.005, "name": "GND_SPEED_THR_SC", "shortDesc": "Speed to throttle scaler", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Rover Position Control (Deprecated)", "increment": 0.5, "max": 40.0, "min": 0.0, "name": "GND_SPEED_TRIM", "shortDesc": "Trim ground speed", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "Rover Position Control (Deprecated)", "longDesc": "This allows the user to choose between closed loop gps speed or open loop cruise throttle speed", "max": 1, "min": 0, "name": "GND_SP_CTRL_MODE", "shortDesc": "Control mode for speed", "type": "Int32", "values": [{"description": "open loop control", "value": 0}, {"description": "close the loop with gps speed", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "This is the throttle setting required to achieve the desired cruise speed. 10% is ok for a traxxas stampede vxl with ESC set to training mode", "max": 1.0, "min": 0.0, "name": "GND_THR_CRUISE", "shortDesc": "Cruise throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "This is the maximum throttle % that can be used by the controller. For a Traxxas stampede vxl with the ESC set to training, 30 % is enough", "max": 1.0, "min": 0.0, "name": "GND_THR_MAX", "shortDesc": "Throttle limit max", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "This is the minimum throttle % that can be used by the controller. Set to 0 for rover", "max": 1.0, "min": 0.0, "name": "GND_THR_MIN", "shortDesc": "Throttle limit min", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.31, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "A value of 0.31 is typical for 1/10 RC cars.", "min": 0.0, "name": "GND_WHEEL_BASE", "shortDesc": "Distance from front axle to rear axle", "type": "Float", "units": "m"}, {"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. Set 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. Set 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": 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 in 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": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable. For 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. 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.", "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. 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.", "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": 0.1, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable. The 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", "default": 0, "group": "Runway Takeoff", "longDesc": "0: airframe heading when takeoff is initiated 1: position control along runway direction (bearing defined from vehicle position on takeoff initiation to MAV_CMD_TAKEOFF position defined by operator)", "max": 1, "min": 0, "name": "RWTO_HDG", "shortDesc": "Specifies which heading should be held during the runway takeoff ground roll", "type": "Int32", "values": [{"description": "Airframe", "value": 0}, {"description": "Runway", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 1.0, "group": "Runway Takeoff", "increment": 0.01, "max": 1.0, "min": 0.0, "name": "RWTO_MAX_THR", "shortDesc": "Max throttle during runway takeoff", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Runway Takeoff", "increment": 0.1, "max": 100.0, "min": 1.0, "name": "RWTO_NPFG_PERIOD", "shortDesc": "NPFG period while steering on runway", "type": "Float", "units": "s"}, {"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. Particularly 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 a little to keep its wheel on the ground before airspeed to 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). 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)", "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}]}, {"category": "Standard", "default": 2, "group": "SD Logging", "longDesc": "Selects the algorithm used for logfile encryption", "name": "SDLOG_ALGORITHM", "shortDesc": "Logfile Encryption algorithm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "XChaCha20", "value": 2}]}, {"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": 1, "group": "SD Logging", "longDesc": "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.", "max": 255, "min": 0, "name": "SDLOG_EXCH_KEY", "shortDesc": "Logfile Encryption key exchange key", "type": "Int32"}, {"category": "Standard", "default": 2, "group": "SD Logging", "longDesc": "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", "max": 255, "min": 0, "name": "SDLOG_KEY", "shortDesc": "Logfile Encryption key index", "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.", "name": "SDLOG_MODE", "rebootRequired": true, "shortDesc": "Logging Mode", "type": "Int32", "values": [{"description": "disabled", "value": -1}, {"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}], "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": 2047, "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 when the battery is simulated externally and interfaced with PX4 through 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. Particularly 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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. 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.", "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. This 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. 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.", "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 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.", "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. The 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 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.", "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. This 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": 30.0, "group": "Sensors", "increment": 0.1, "longDesc": "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.", "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. 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.", "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. Requires 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. 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.", "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. 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.", "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. 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.", "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. 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.", "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 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.", "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. Recommended 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, actual 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": "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", "default": 0.0, "group": "Sensors", "longDesc": "This parameter defines a rotational offset in degrees around the X (Roll) axis It allows the user to fine tune the board offset in the event of misalignment.", "name": "SENS_BOARD_X_OFF", "shortDesc": "Board rotation X (Roll) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0.0, "group": "Sensors", "longDesc": "This parameter defines a rotational offset in degrees around the Y (Pitch) axis. It allows the user to fine tune the board offset in the event of misalignment.", "name": "SENS_BOARD_Y_OFF", "shortDesc": "Board rotation Y (Pitch) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0.0, "group": "Sensors", "longDesc": "This parameter defines a rotational offset in degrees around the Z (Yaw) axis. It allows the user to fine tune the board offset in the event of misalignment.", "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, actual 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. Zero 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. 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", "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. 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 have an equal priority of all the instances, set this parameter to -1 and the best receiver will be used. This parameter has no effect if blending is active.", "max": 1, "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, actual 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 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", "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", "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. It 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. This 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. This 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. It 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. This 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. It 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. 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]", "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. 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.", "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. 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.", "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. 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.", "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. 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.", "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 This value can be measured with a ruler. This 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 This value can be measured with a ruler. This 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 when the motor is running at full speed. This 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 when the motor is running at full speed. This 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": "Multicopter", "value": 0}, {"description": "Fixed-Wing", "value": 1}, {"description": "Tailsitter", "value": 2}, {"description": "Standard VTOL", "value": 3}]}, {"bitmask": [{"description": "Stuck", "index": 0}, {"description": "Drift", "index": 1}], "category": "Standard", "default": 0, "group": "Simulator", "longDesc": "Stuck: freeze the measurement to the current location Drift: 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). Platform-specific values are used if available. RC* 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. 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", "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 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)", "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 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)", "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 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)", "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. 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.", "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), the 'Default storage' backend uses a file on persistent storage. If not supported, this backend uses non-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. Note: this is only supported on boards with a separate calibration storage /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. WARNING: 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 F4 SD variants. If disabled, the preflight checks will not check for the presence of a barometer.", "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. If disabled, the sensors hub will not process sensor_gps, and 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. 1-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. If set to 0, the preflight checks will not check for the presence of an airspeed 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. Disable 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) 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).", "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 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, "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": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_PITCH", "shortDesc": "Direct pitch input", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_ROLL", "shortDesc": "Direct roll input", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_THRUST", "shortDesc": "Direct thrust input", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_YAW", "shortDesc": "Direct yaw input", "type": "Float"}, {"category": "Standard", "default": 0, "group": "UUV Attitude Control", "name": "UUV_INPUT_MODE", "shortDesc": "Select Input Mode", "type": "Int32", "values": [{"description": "use Attitude Setpoints", "value": 0}, {"description": "Direct Feedthrough", "value": 1}]}, {"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": 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": 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": 1, "group": "UUV Position Control", "name": "UUV_STAB_MODE", "shortDesc": "Stabilization mode(1) or Position Control(0)", "type": "Int32", "values": [{"description": "Position Control", "value": 0}, {"description": "Stabilization Mode", "value": 1}]}, {"category": "Standard", "default": 2130706433, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS, the selected Agent IP address will be set and used. 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.", "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": 1, "group": "UXRCE-DDS Client", "longDesc": "uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.", "name": "UXRCE_DDS_KEY", "rebootRequired": true, "shortDesc": "uXRCE-DDS session key", "type": "Int32"}, {"category": "Standard", "default": 8888, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS, the 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. 0: Use the default configuration. 1: Restrict messages to localhost (use in combination with ROS_LOCALHOST_ONLY=1). 2: 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. A 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. A 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 pitch 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. For 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. 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.", "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. Enabled 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. 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.", "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 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.", "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 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.", "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. 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.", "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. 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.", "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. When airspeed is used, transition timeout is declared if airspeed does not reach 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": -5.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "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.", "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": -5.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 VT_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. Zero will deactivate the slew rate limiting and thus produce an instant throttle rise 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. 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.", "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 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.", "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"}, {"category": "Standard", "default": 0, "group": "Miscellaneous", "name": "UUV_SKIP_CTRL", "shortDesc": "Skip the controller", "type": "Int32", "values": [{"description": "use the module's controller", "value": 0}, {"description": "skip the controller and feedthrough the setpoints", "value": 1}]}], "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": 75, "group": "UAVCAN Motor Parameters", "longDesc": "Speed controller bandwidth, in Hz. Higher values result in faster speed and current rise times, but may result in overshoot and higher current consumption. For fixed-wing aircraft, this value should be less than 50 Hz; for multirotors, values up to 100 Hz may provide improvements in responsiveness.", "max": 250, "min": 10, "name": "ctl_bw", "shortDesc": "Speed controller bandwidth", "type": "Int32", "units": "Hz"}, {"category": "Standard", "default": 1, "group": "UAVCAN Motor Parameters", "longDesc": "Motor spin direction as detected during initial enumeration. Use 0 or 1 to reverse direction.", "max": 1, "min": 0, "name": "ctl_dir", "shortDesc": "Reverse direction", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "UAVCAN Motor Parameters", "longDesc": "Speed (RPM) controller gain. Determines controller\n aggressiveness; units are amp-seconds per radian. Systems with\n higher rotational inertia (large props) will need gain increased;\n systems with low rotational inertia (small props) may need gain\n decreased. Higher values result in faster response, but may result\n in oscillation and excessive overshoot. Lower values result in a\n slower, smoother response.", "max": 1.0, "min": 0.0, "name": "ctl_gain", "shortDesc": "Speed (RPM) controller gain", "type": "Float", "units": "C/rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 3.5, "group": "UAVCAN Motor Parameters", "longDesc": "Idle speed (e Hz)", "max": 100.0, "min": 0.0, "name": "ctl_hz_idle", "shortDesc": "Idle speed (e Hz)", "type": "Float", "units": "Hz"}, {"category": "Standard", "default": 25, "group": "UAVCAN Motor Parameters", "longDesc": "Spin-up rate (e Hz/s)", "max": 1000, "min": 5, "name": "ctl_start_rate", "shortDesc": "Spin-up rate (e Hz/s)", "type": "Int32", "units": "1/s^2"}, {"category": "Standard", "default": 0, "group": "UAVCAN Motor Parameters", "longDesc": "Index of this ESC in throttle command messages.", "max": 15, "min": 0, "name": "esc_index", "shortDesc": "Index of this ESC in throttle command messages.", "type": "Int32"}, {"category": "Standard", "default": 20034, "group": "UAVCAN Motor Parameters", "longDesc": "Extended status ID", "max": 1000000, "min": 1, "name": "id_ext_status", "shortDesc": "Extended status ID", "type": "Int32"}, {"category": "Standard", "default": 50000, "group": "UAVCAN Motor Parameters", "longDesc": "Extended status interval (\u00b5s)", "max": 1000000, "min": 0, "name": "int_ext_status", "shortDesc": "Extended status interval (\u00b5s)", "type": "Int32", "units": "us"}, {"category": "Standard", "default": 50000, "group": "UAVCAN Motor Parameters", "longDesc": "ESC status interval (\u00b5s)", "max": 1000000, "name": "int_status", "shortDesc": "ESC status interval (\u00b5s)", "type": "Int32", "units": "us"}, {"category": "Standard", "decimalPlaces": 3, "default": 12.0, "group": "UAVCAN Motor Parameters", "longDesc": "Motor current limit in amps. This determines the maximum\n current controller setpoint, as well as the maximum allowable\n current setpoint slew rate. This value should generally be set to\n the continuous current rating listed in the motor\u2019s specification\n sheet, or set equal to the motor\u2019s specified continuous power\n divided by the motor voltage limit.", "max": 80.0, "min": 1.0, "name": "mot_i_max", "shortDesc": "Motor current limit in amps", "type": "Float", "units": "A"}, {"category": "Standard", "default": 2300, "group": "UAVCAN Motor Parameters", "longDesc": "Motor Kv in RPM per volt. This can be taken from the motor\u2019s\n specification sheet; accuracy will help control performance but\n some deviation from the specified value is acceptable.", "max": 4000, "min": 0, "name": "mot_kv", "shortDesc": "Motor Kv in RPM per volt", "type": "Int32", "units": "rpm/V"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "UAVCAN Motor Parameters", "longDesc": "READ ONLY: Motor inductance in henries. This is measured on start-up.", "name": "mot_ls", "shortDesc": "READ ONLY: Motor inductance in henries.", "type": "Float", "units": "H"}, {"category": "Standard", "default": 14, "group": "UAVCAN Motor Parameters", "longDesc": "Number of motor poles. Used to convert mechanical speeds to\n electrical speeds. This number should be taken from the motor\u2019s\n specification sheet.", "max": 40, "min": 2, "name": "mot_num_poles", "shortDesc": "Number of motor poles.", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "UAVCAN Motor Parameters", "longDesc": "READ ONLY: Motor resistance in ohms. This is measured on start-up. When\n tuning a new motor, check that this value is approximately equal\n to the value shown in the motor\u2019s specification sheet.", "name": "mot_rs", "shortDesc": "READ ONLY: Motor resistance in ohms", "type": "Float", "units": "Ohm"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.5, "group": "UAVCAN Motor Parameters", "longDesc": "Acceleration limit (V)", "max": 1.0, "min": 0.01, "name": "mot_v_accel", "shortDesc": "Acceleration limit (V)", "type": "Float", "units": "V"}, {"category": "Standard", "decimalPlaces": 3, "default": 14.8, "group": "UAVCAN Motor Parameters", "longDesc": "Motor voltage limit in volts. The current controller\u2019s\n commanded voltage will never exceed this value. Note that this may\n safely be above the nominal voltage of the motor; to determine the\n actual motor voltage limit, divide the motor\u2019s rated power by the\n motor current limit.", "min": 0.0, "name": "mot_v_max", "shortDesc": "Motor voltage limit in volts", "type": "Float", "units": "V"}, {"category": "Standard", "default": 2, "group": "UAVCAN GNSS", "longDesc": "Dynamic model used in the GNSS positioning engine. 0 \u2013\n Automotive, 1 \u2013 Sea, 2 \u2013 Airborne.\n ", "max": 2, "min": 0, "name": "gnss.dyn_model", "shortDesc": "GNSS dynamic model", "type": "Int32", "values": [{"description": "Automotive", "value": 0}, {"description": "Sea", "value": 1}, {"description": "Airborne", "value": 2}]}, {"category": "Standard", "default": 1, "group": "UAVCAN GNSS", "longDesc": "Broadcast the old (deprecated) GNSS fix message\n uavcan.equipment.gnss.Fix alongside the new alternative\n uavcan.equipment.gnss.Fix2. It is recommended to\n disable this feature to reduce the CAN bus traffic.\n ", "max": 1, "min": 0, "name": "gnss.old_fix_msg", "shortDesc": "Broadcast old GNSS fix message", "type": "Int32", "values": [{"description": "Fix2", "value": 0}, {"description": "Fix and Fix2", "value": 1}]}, {"category": "Standard", "default": 0, "group": "UAVCAN GNSS", "longDesc": "Set the device health to Warning if the dimensionality of\n the GNSS solution is less than this value. 3 for the full (3D)\n solution, 2 for planar (2D) solution, 1 for time-only solution,\n 0 disables the feature.\n ", "max": 3, "min": 0, "name": "gnss.warn_dimens", "shortDesc": "device health warning", "type": "Int32", "values": [{"description": "disables the feature", "value": 0}, {"description": "time-only solution", "value": 1}, {"description": "planar (2D) solution", "value": 2}, {"description": "full (3D) solution", "value": 3}]}, {"category": "Standard", "default": 0, "group": "UAVCAN GNSS", "longDesc": "Set the device health to Warning if the number of satellites\n used in the GNSS solution is below this threshold. Zero\n disables the feature\n ", "name": "gnss.warn_sats", "shortDesc": "", "type": "Int32"}, {"category": "Standard", "default": 0, "group": "UAVCAN GNSS", "longDesc": "Set the device health to Warning if the number of satellites\n used in the GNSS solution is below this threshold. Zero\n disables the feature\n ", "max": 1000000, "min": 0, "name": "uavcan.pubp-pres", "shortDesc": "", "type": "Int32", "units": "us"}, {"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 For CALLSIGN shorter than 8 characters use the null terminator at the end '\\0'.", "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 For CALLSIGN shorter than 8 characters use the null terminator at the end '\\0'.", "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", "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.", "max": 15, "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", "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", "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", "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.", "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", "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.", "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", "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", "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.", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. 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", "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. Note: this is only useful for servos.", "max": 65535, "min": 0, "name": "PWM_MAIN_REV", "shortDesc": "Reverse Output Range for SIM", "type": "Int32"}, {"category": "Standard", "default": 1, "group": "Airspeed Validator", "longDesc": "Sets the number of standard deviations used by the innovation consistency test.", "max": 5, "min": 1, "name": "ASPD_BETA_GATE", "shortDesc": "Gate size for sideslip angle fusion", "type": "Int32", "units": "SD"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.15, "group": "Airspeed Validator", "longDesc": "Sideslip measurement noise of the internal wind estimator(s) of the airspeed selector.", "max": 1.0, "min": 0.0, "name": "ASPD_BETA_NOISE", "shortDesc": "Wind estimator sideslip measurement noise", "type": "Float", "units": "rad"}, {"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.", "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. 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.", "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, 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.", "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. Larger values make the check less sensitive, smaller positive values make it more sensitive.", "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. Set to a negative value to disable the re-enabling in flight.", "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.", "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", "max": 2.0, "min": 0.5, "name": "ASPD_SCALE_1", "rebootRequired": true, "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", "rebootRequired": true, "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", "rebootRequired": true, "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. When 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": 3, "default": 0.55, "group": "Airspeed Validator", "longDesc": "The synthetic airspeed estimate (from groundspeed and heading) will be declared valid as soon and as long the horizontal wind uncertainty is below this value.", "max": 5.0, "min": 0.001, "name": "ASPD_WERR_THR", "shortDesc": "Horizontal wind uncertainty threshold for synthetic airspeed", "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. When 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. Set 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, as the declination is looked up based on the GPS 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, a new set of gains is available and can be applied immediately 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 Set bits in the following positions to enable: 0 : Roll 1 : Pitch 2 : 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 RC channel used to enable/disable auto tuning.", "max": 6, "min": 0, "name": "FW_AT_MAN_AUX", "shortDesc": "Enable/disable auto tuning using an RC 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", "default": 0, "group": "Autotune", "longDesc": "WARNING: this will inject steps to the rate controller and can be dangerous. Only activate if you know what you are doing, and in a safe environment. Any motion of the remote stick will abort the signal injection and reset this parameter Best is to perform the identification in position or hold mode. Increase the amplitude of the injected signal using FW_AT_SYSID_AMP for more signal/noise ratio", "name": "FW_AT_START", "shortDesc": "Start the autotuning sequence", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Autotune", "longDesc": "This parameter scales the signal sent to the rate controller during system identification.", "max": 6.0, "min": 0.1, "name": "FW_AT_SYSID_AMP", "shortDesc": "Amplitude of the injected signal", "type": "Float"}, {"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": 20.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": 0, "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, 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.", "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", "default": 0, "group": "Autotune", "longDesc": "WARNING: this will inject steps to the rate controller and can be dangerous. Only activate if you know what you are doing, and in a safe environment. Any motion of the remote stick will abort the signal injection and reset this parameter Best is to perform the identification in position or hold mode. Increase the amplitude of the injected signal using MC_AT_SYSID_AMP for more signal/noise ratio", "name": "MC_AT_START", "shortDesc": "Start the autotuning sequence", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"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' means that measurements are expected to come from a power module. If the value is set to 'External' then the system expects to receive mavlink battery status messages. If the value is set to 'ESCs', the battery information are taken from the esc_status message. This requires the ESC to provide both voltage as well as current.", "name": "BAT1_SOURCE", "rebootRequired": true, "shortDesc": "Battery 1 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module", "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. For 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. 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.", "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' means that measurements are expected to come from a power module. If the value is set to 'External' then the system expects to receive mavlink battery status messages. If the value is set to 'ESCs', the battery information are taken from the esc_status message. This requires the ESC to provide both voltage as well as current.", "name": "BAT2_SOURCE", "rebootRequired": true, "shortDesc": "Battery 2 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module", "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. For 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. 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.", "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' means that measurements are expected to come from a power module. If the value is set to 'External' then the system expects to receive mavlink battery status messages. If the value is set to 'ESCs', the battery information are taken from the esc_status message. This requires the ESC to provide both voltage as well as current.", "name": "BAT3_SOURCE", "rebootRequired": true, "shortDesc": "Battery 3 monitoring source", "type": "Int32", "values": [{"description": "Disabled", "value": -1}, {"description": "Power Module", "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. For 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. 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.", "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, which 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. This has to be lower than the low threshold. This threshold commonly will 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. This has to be lower than the critical threshold. This threshold commonly will 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. This 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 the 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. Setting this parameter to 782090 will disable the startup tune, while keeping all 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 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.", "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. WARNING: 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 checks in the commander. WARNING: 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 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.", "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 mode for VTOLs. WARNING: 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_* parameters.", "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: - 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.", "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. Used 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. A 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. This 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 SD 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 disturbance (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. Depending on the value of the parameter, the check can be disabled, 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. Depending on the value of the parameter, the check can be disabled, 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. 1: Arming/disarming triggers when holding the momentary button down for COM_RC_ARM_HYST 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": 1, "group": "Commander", "longDesc": "Measures taken when a check defined by EKF2_GPS_CHECK is failing.", "name": "COM_ARM_WO_GPS", "shortDesc": "GPS preflight check", "type": "Int32", "values": [{"description": "Deny arming", "value": 0}, {"description": "Warning only", "value": 1}, {"description": "Disabled", "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. A 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 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.", "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 1: Allow disarming in multicopter flight in modes where the thrust is directly controlled by thr throttle stick e.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 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.", "name": "COM_DISARM_PRFLT", "shortDesc": "Time-out for auto disarm if not taking off", "type": "Float", "units": "s"}, {"bitmask": [{"description": "Mission", "index": 0}, {"description": "Hold", "index": 1}, {"description": "Offboard", "index": 2}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which datalink loss is ignored and the failsafe action not triggered.", "max": 7, "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 for the user to realize. During that time the user 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 and the user cannot take over via stick movements (switching modes is still allowed).", "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 disarming in order to remember the next flight UUID. The 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 selected 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": "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 selected 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": "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 selected 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": "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 selected 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": "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 selected 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": "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 selected 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": "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": 3, "group": "Commander", "increment": 1, "longDesc": "Action the system takes when the remaining flight time is below the 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. 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).", "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 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.", "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' flag 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.", "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 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.", "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. See 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, "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 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.", "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 for 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 get assigned to the same index independent from their startup order, which 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 allows 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, set 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", "default": 0, "group": "Commander", "longDesc": "This sets the flight mode that will be used if navigation accuracy is no longer adequate for position control in manual Position mode.", "name": "COM_POSCTL_NAVL", "shortDesc": "Position mode navigation loss response", "type": "Int32", "values": [{"description": "Altitude mode", "value": 0}, {"description": "Land mode (descend)", "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. The default is appropriate for a multicopter. Can be increased for a fixed-wing. 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). Set to -1 to disable.", "max": 400.0, "min": -1.0, "name": "COM_POS_FS_EPH", "shortDesc": "Horizontal position error threshold", "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. 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.", "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. 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.", "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. Note: 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 in 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. A 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": "Hold", "index": 1}, {"description": "Offboard", "index": 2}], "category": "Standard", "default": 0, "group": "Commander", "longDesc": "Specify modes in which RC loss is ignored and the failsafe action not triggered.", "max": 7, "min": 0, "name": "COM_RCL_EXCEPT", "shortDesc": "RC loss exceptions", "type": "Int32"}, {"category": "Standard", "default": 1000, "group": "Commander", "longDesc": "The default value of 1000 requires the stick to be held in the arm or disarm position for 1 second.", "max": 1500, "min": 100, "name": "COM_RC_ARM_HYST", "shortDesc": "RC input arm/disarm command duration", "type": "Int32", "units": "ms"}, {"category": "Standard", "default": 3, "group": "Commander", "longDesc": "A value of 0 enables RC transmitter control (only). A valid RC transmitter calibration is required. A value of 1 allows joystick control only. RC input handling and the associated checks are disabled. A value of 2 allows either RC Transmitter or Joystick input. The first valid input is used, will fallback to other sources if the input stream becomes invalid. A value of 3 allows either input from RC or joystick. The first available source is selected and used until reboot. A value of 4 ignores any stick input.", "max": 4, "min": 0, "name": "COM_RC_IN_MODE", "shortDesc": "RC control input mode", "type": "Int32", "values": [{"description": "RC Transmitter only", "value": 0}, {"description": "Joystick only", "value": 1}, {"description": "RC and Joystick with fallback", "value": 2}, {"description": "RC or Joystick keep first", "value": 3}, {"description": "Stick input disabled", "value": 4}]}, {"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. This must be kept short as the vehicle will use the last supplied setpoint until the timeout triggers.", "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 RC stick override is enabled, moving the RC 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.", "max": 3, "min": 0, "name": "COM_RC_OVERRIDE", "shortDesc": "Enable RC stick override of auto and/or offboard modes", "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 the autopilot the pilot takes over control.", "max": 80.0, "min": 5.0, "name": "COM_RC_STICK_OV", "shortDesc": "RC 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. 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", "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 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.", "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. 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).", "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. Failsafe 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. 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.", "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. Warning is sent periodically (every 1 minute). Set 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, set by COM_DL_LOSS_T in seconds. Once the timeout occurs the selected action 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 RC loss failsafe will only be entered after a timeout, set by COM_RC_LOSS_T in seconds. If RC input checks have been disabled by setting the COM_RC_IN_MODE param it will not be triggered.", "max": 6, "min": 1, "name": "NAV_RCL_ACT", "shortDesc": "Set RC 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_AGP_CTRL", "shortDesc": "Aux global position (AGP) sensor aiding", "type": "Int32"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "EKF2", "max": 300.0, "min": 0.0, "name": "EKF2_AGP_DELAY", "rebootRequired": true, "shortDesc": "Aux global position estimator 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_AGP_GATE", "shortDesc": "Gate size for aux global position fusion", "type": "Float", "units": "SD"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.9, "group": "EKF2", "longDesc": "Used to lower bound or replace the uncertainty included in the message", "min": 0.01, "name": "EKF2_AGP_NOISE", "shortDesc": "Measurement noise for aux global position measurements", "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", "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}], "category": "Standard", "default": 1023, "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": 1023, "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", "max": 300.0, "min": 0.0, "name": "EKF2_GPS_DELAY", "rebootRequired": true, "shortDesc": "GPS measurement delay relative to IMU measurements", "type": "Float", "units": "ms"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "EKF2", "longDesc": "Forward 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": "Forward 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": "Forward 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.1, "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", "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": "A lower value means HAGL needs to be more stable in order to use range finder for height estimation in range aid mode", "max": 5.0, "min": 0.1, "name": "EKF2_RNG_A_IGATE", "shortDesc": "Gate size used for innovation consistency checks for range aid fusion", "type": "Float", "units": "SD"}, {"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 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.", "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 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. -", "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. It 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 added to the pitch setpoint and should correspond to the pitch at typical 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 (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 (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 state 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 current 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. In 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 second).", "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. Also 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: 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)", "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. If 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. Set this value within the vehicle's performance limits.", "max": 15.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 the loiter-down waypoint before the final approach. Otherwise 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 to trigger the flare. NOTE: 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 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).", "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. 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).", "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. 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.", "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. Also 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", "default": 0, "group": "FW Auto Takeoff", "longDesc": "Enables automatic launch detection based on measured acceleration. Use for hand- or catapult-launched vehicles. Not 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. If 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": 30.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 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.", "max": 3600, "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": 30.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": 60.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": 65.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": 0.4, "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. Should 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. Usually set to 0 but can be increased to prevent the motor from stopping when descending, 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. In manual modes: maximum climb rate setpoint.", "max": 15.0, "min": 0.5, "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. In manual modes: maximum sink rate setpoint.", "max": 15.0, "min": 0.5, "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 applies to speed vs height errors. 0 -> control height only 2 -> 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 to 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. Applied 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 this 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. A 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, with 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. Increase this gain if the aircraft initially loses energy in turns and 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 of 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, with 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 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.", "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 either up or down that the controller will use to correct speed or 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 added to the minimum airspeed setpoint limit. This helps to make the system 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. If 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 bounding 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. Used 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 to 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. 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).", "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. It is used for airspeed sensor failure detection and for the control surface 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, 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).", "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 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, "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 Set 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 Set 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 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.", "max": 15.0, "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 set to THR_MIN and flown at the same airspeed as used to measure FW_T_CLMB_MAX.", "max": 5.0, "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 disables 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 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.", "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. 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.", "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 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)", "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 normalize 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", "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 to 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 to 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 to 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. 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, "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: - Rate controller: output scaling - Attitude controller: coordinated turn controller - Position controller: airspeed setpoint tracking, takeoff logic - 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": 1, "group": "Failure Detector", "longDesc": "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.", "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": 2.0, "group": "Failure Detector", "increment": 1.0, "longDesc": "Motor failure triggers only below this current value", "max": 50.0, "min": 0.0, "name": "FD_ACT_MOT_C2T", "shortDesc": "Motor Failure Current/Throttle Threshold", "type": "Float", "units": "A/%"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.2, "group": "Failure Detector", "increment": 0.01, "longDesc": "Motor failure triggers only above this throttle value.", "max": 1.0, "min": 0.0, "name": "FD_ACT_MOT_THR", "shortDesc": "Motor Failure Throttle Threshold", "type": "Float", "units": "norm"}, {"category": "Standard", "default": 100, "group": "Failure Detector", "increment": 100, "longDesc": "Motor failure triggers only if the throttle threshold and the current to throttle threshold are violated for this time.", "max": 10000, "min": 10, "name": "FD_ACT_MOT_TOUT", "shortDesc": "Motor Failure Time Threshold", "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. Timeout 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. External 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. 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", "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. 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", "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 vertical acceleration variance) triggers a failure Setting 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": "RC Controlled", "value": 4}]}, {"category": "Standard", "default": 0, "group": "Follow target", "longDesc": "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.", "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 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.", "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 an 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 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", "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. Auto-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 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", "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. Auto-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": "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.", "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. Not 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. 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, "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": 7, "group": "GPS", "longDesc": "u-blox receivers support different dynamic platform models to adjust the navigation engine to the 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": 0, "group": "GPS", "longDesc": "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.", "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}]}, {"category": "Standard", "decimalPlaces": 3, "default": 0.0, "group": "GPS", "longDesc": "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).", "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, which 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. Disabled 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. Disabled 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. 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).", "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 no dependence on the position estimator 0 = 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. 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.", "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}]}, {"category": "Standard", "default": 0, "group": "Geometry", "longDesc": "This is used to specify how to handle motor failures reported 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. Use 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. Use 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. Use 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. Use 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. Use 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. motor_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 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.", "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. This is used to increase the accuracy of the yaw drag torque compensation based on collective pitch by aligning the lowest rotor drag with zero compensation. For symmetric profile blades this is the command that results in exactly 0\u00b0 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)", "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. 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)", "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. 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", "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": "Used to linearize mechanical output of swashplate servos to avoid axis coupling and binding with 4 servo redundancy. This requires a symmetric setup where the servo horn is exactly centered with a 0 command. Setting 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. If 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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) to traverse its full range (normally [0, 1], or if reversible [-1, 1]). Zero 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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, where u (with value between actuator minimum and maximum) is 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. Use a positive value for a rotor with CCW rotation. Use 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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) to traverse its full range [-100%, 100%]. Zero 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.", "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.", "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.", "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.", "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.", "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.", "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.", "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.", "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", "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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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. An 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. An 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. For example if the minimum tilt angle is -90, the maximum 90, and the direction 'Towards Front', the 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 by 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 by 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 more stable, increase if the real hover thrust is 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. 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).", "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 to reduce the sensitivity of the estimator from biased measurement. Set 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 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.", "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. Only 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. 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).", "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. A 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.0, "group": "Land Detector", "longDesc": "Total time it takes to go through all three land detection stages: ground contact, maybe landed, landed when all necessary conditions are constantly met.", "max": 10.0, "min": 0.1, "name": "LNDMC_TRIG_TIME", "shortDesc": "Multicopter land detection trigger time", "type": "Float", "units": "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. 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.", "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. Flight 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. Flight 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. Higher 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. Higher 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. 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.", "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) Larger 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: 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)", "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. Decrease 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. Decrease 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 on 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 instance. 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 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).", "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 HIGH_LATENCY2 stream for instance 0, configured in iridium mode. This 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 vehicle'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 `txbuf` field reported by radio_status. Requires 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. 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).", "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, selected 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, selected 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 on 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 instance. 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 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).", "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 HIGH_LATENCY2 stream for instance 1, configured in iridium mode. This 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 vehicle'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 `txbuf` field reported by radio_status. Requires 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. 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).", "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, selected 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, selected 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 on 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 instance. 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 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).", "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 HIGH_LATENCY2 stream for instance 2, configured in iridium mode. This 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 vehicle'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 `txbuf` field reported by radio_status. Requires 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. 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).", "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, selected 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, selected 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 to 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 stream 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'. The 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": 0, "group": "MAVLink", "name": "MAV_PROTO_VER", "shortDesc": "MAVLink protocol version", "type": "Int32", "values": [{"description": "Default to 1, switch to 2 if GCS sends version 2", "value": 0}, {"description": "Always use version 1", "value": 1}, {"description": "Always use version 2", "value": 2}]}, {"category": "Standard", "default": 5, "group": "MAVLink", "longDesc": "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.", "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 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", "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", "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 before 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 Decrease 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 arms 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": -1.0, "group": "Manual Control", "longDesc": "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.", "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: 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.", "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. Has no effect on mission validity. Set 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. Then vehicle will loiter in this altitude until further command is received. Only 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. If 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 if 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. Validity 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 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.", "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. For 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 than 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 FW mode (e.g. for Loiter mode).", "max": 1000.0, "min": 25.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, 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.", "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 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.", "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 to 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. Assumes 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 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.", "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. This is required for a gimbal which is not capable of stabilizing itself and relies on the IMU's attitude estimation.", "max": 2, "min": 0, "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}]}, {"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", "default": -1, "group": "Mount", "longDesc": "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.", "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. Recommended 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": 0.0, "group": "Mount", "max": 360.0, "min": -360.0, "name": "MNT_OFF_PITCH", "shortDesc": "Offset for pitch channel output in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mount", "max": 360.0, "min": -360.0, "name": "MNT_OFF_ROLL", "shortDesc": "Offset for roll channel output in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 0.0, "group": "Mount", "max": 360.0, "min": -360.0, "name": "MNT_OFF_YAW", "shortDesc": "Offset for yaw channel output in degrees", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_PITCH", "shortDesc": "Range of pitch channel output in degrees (only in AUX output mode)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 90.0, "group": "Mount", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_ROLL", "shortDesc": "Range of roll channel output in degrees (only in AUX output mode)", "type": "Float", "units": "deg"}, {"category": "Standard", "decimalPlaces": 1, "default": 360.0, "group": "Mount", "max": 720.0, "min": 1.0, "name": "MNT_RANGE_YAW", "shortDesc": "Range of yaw channel output in degrees (only in AUX output mode)", "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", "decimalPlaces": 2, "default": 0.0, "group": "Multicopter Acro Mode", "longDesc": "Exponential factor for tuning the input curve shape. 0 Purely linear input curve 1 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. 0 Purely linear input curve 1 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. 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", "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. 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", "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). 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.", "max": 1800.0, "min": 0.0, "name": "MC_PITCHRATE_MAX", "shortDesc": "Max pitch rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 6.5, "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). 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.", "max": 1800.0, "min": 0.0, "name": "MC_ROLLRATE_MAX", "shortDesc": "Max roll rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 2, "default": 6.5, "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. 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.", "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 control 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 control 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. 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.", "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 1 just deceleration 4 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 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", "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.1, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "Does not apply to manual throttle and direct attitude piloting by stick.", "max": 1.0, "min": 0.0, "name": "MPC_HOLD_DZ", "shortDesc": "Deadzone for sticks in manual piloted modes", "type": "Float"}, {"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). A 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. 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.", "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 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\"", "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 limited to \"MPC_LAND_SPEED\" Value 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, limit 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": 1000.0, "group": "Multicopter Position Control", "increment": 1.0, "longDesc": "When nudging is enabled (see MPC_LAND_RC_HELP), this controls the maximum allowed horizontal displacement from the original landing point.", "min": 0.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. 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).", "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. 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).", "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 or Altitude 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 Setting 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: 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", "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. 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.", "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). Used for initialization of the hover thrust estimator (see MPC_USE_HTE). 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.", "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. With airmode enabled this parameters can be set to 0 while 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. To 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. Any 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. If it's too slow the drone might scratch the ground and tip over. A 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", "default": 1, "group": "Multicopter Position Control", "longDesc": "Disable to use the fixed parameter MPC_THR_HOVER instead of the hover thrust estimate in the position controller. This parameter does not influence Stabilized mode throttle curve (see MPC_THR_CURVE).", "name": "MPC_USE_HTE", "shortDesc": "Use hover thrust estimate for altitude control", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"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. The maximum sideways and backward speed can be set differently using 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 MPC_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 MPC_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. A 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 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.", "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.6, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The higher the value the less sensitivity the stick has around zero while still reaching the maximum value with full stick deflection. 0 Purely linear input curve 1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MPC_XY_MAN_EXPO", "shortDesc": "Manual position control stick exponential curve sensitivity", "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 MPC_XY_VEL_MAX or MPC_VEL_MANUAL). If 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 Allows 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. Any 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": 0.6, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The higher the value the less sensitivity the stick has around zero while still reaching the maximum value with full stick deflection. 0 Purely linear input curve 1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MPC_YAW_EXPO", "shortDesc": "Manual control stick yaw rotation exponential curve", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.6, "group": "Multicopter Position Control", "increment": 0.01, "longDesc": "The higher the value the less sensitivity the stick has around zero while still reaching the maximum value with full stick deflection. 0 Purely linear input curve 1 Purely cubic input curve", "max": 1.0, "min": 0.0, "name": "MPC_Z_MAN_EXPO", "shortDesc": "Manual control stick vertical exponential curve", "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 MPC_Z_VEL_MAX_UP or MPC_LAND_SPEED). If 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. In manually piloted modes full stick deflection commands this velocity. For 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. In manually piloted modes full stick deflection commands this velocity. For 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. 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.", "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 no aux channel is mapped and no 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 no aux channel is mapped and no 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 no aux channel is mapped and no 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 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.", "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. 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.", "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. 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.", "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": 2, "default": 0.0, "group": "Multicopter Rate Control", "increment": 0.01, "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", "increment": 0.01, "longDesc": "Improves tracking performance.", "min": 0.0, "name": "MC_YAWRATE_FF", "shortDesc": "Yaw rate feedforward", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "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. 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.", "max": 5.0, "min": 0.0, "name": "MC_YAWRATE_K", "shortDesc": "Yaw rate controller gain", "type": "Float"}, {"category": "Standard", "decimalPlaces": 2, "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. 0 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. Resolution is limited by OSD to 15 discrete values. Negative values 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": 125, "group": "OSD", "longDesc": "Scroll rate in milliseconds for OSD messages longer than available character width. This 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 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.", "max": 1.0, "min": 0.0, "name": "THR_MDL_FAC", "shortDesc": "Thrust to motor control signal model parameter", "type": "Float"}, {"category": "Standard", "default": 0, "group": "Payload Deliverer", "name": "PD_GRIPPER_EN", "rebootRequired": true, "shortDesc": "Enable Gripper actuation in Payload Deliverer", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "Enabled", "value": 1}]}, {"category": "Standard", "default": 3.0, "group": "Payload Deliverer", "longDesc": "Maximum time Gripper will wait while the successful griper actuation isn't recognised. 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", "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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC10_DZ", "shortDesc": "RC channel 10 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC11_DZ", "shortDesc": "RC channel 11 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC12_DZ", "shortDesc": "RC channel 12 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC13_DZ", "shortDesc": "RC channel 13 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC14_DZ", "shortDesc": "RC channel 14 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC15_DZ", "shortDesc": "RC channel 15 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC16_DZ", "shortDesc": "RC channel 16 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC17_DZ", "shortDesc": "RC channel 17 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC18_DZ", "shortDesc": "RC channel 18 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC1_DZ", "shortDesc": "RC channel 1 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC2_DZ", "shortDesc": "RC channel 2 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC3_DZ", "shortDesc": "RC channel 3 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC4_DZ", "shortDesc": "RC channel 4 dead zone", "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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC5_DZ", "shortDesc": "RC channel 5 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC6_DZ", "shortDesc": "RC channel 6 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC7_DZ", "shortDesc": "RC channel 7 dead zone", "type": "Float"}, {"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": 10.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC8_DZ", "shortDesc": "RC channel 8 dead zone", "type": "Float"}, {"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": 0.0, "group": "Radio Calibration", "longDesc": "The +- range of this value around the trim value will be considered as zero.", "max": 100.0, "min": 0.0, "name": "RC9_DZ", "shortDesc": "RC channel 9 dead zone", "type": "Float"}, {"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 of channels which were used during RC calibration. It is only meant for 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. 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).", "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 (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.", "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. Set 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. Set 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. Set 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 which channel should be used for reading pitch inputs from. A 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 which channel should be used for reading roll inputs from. A 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 which channel should be used for reading throttle inputs from. A 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 which channel should be used for reading yaw inputs from. A 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 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.", "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 for 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 for 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 for straight and level flight.", "max": 0.5, "min": -0.5, "name": "TRIM_YAW", "shortDesc": "Yaw trim", "type": "Float"}, {"category": "Standard", "default": 0.75, "group": "Radio Switches", "longDesc": "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 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 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).", "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": 2, "default": 0.0, "group": "Rover Differential", "increment": 0.01, "longDesc": "This parameter is used to calculate the feedforward term of the closed loop yaw rate control. The controller first calculates the required speed difference between the left and right motor to achieve the desired yaw rate. This desired speed difference is then linearly mapped to normalized motor commands. A good starting point is half the speed the rover drives at maximum throttle (RD_MAX_THR_SPD)). Increase this parameter if the rover turns faster than the setpoint, and decrease if the rover turns slower.", "max": 100.0, "min": 0.0, "name": "RD_MAX_THR_YAW_R", "shortDesc": "Yaw rate turning left/right wheels at max speed in opposite directions", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Differential", "increment": 0.01, "longDesc": "The waypoint transition speed is calculated as: Transition_speed = Maximum_speed * (1 - normalized_transition_angle * RM_MISS_VEL_GAIN) The normalized transition angle is the angle between the line segment from prev-curr WP and curr-next WP interpolated from [0, 180] -> [0, 1]. Higher value -> More speed reduction during waypoint transitions. Set to -1 to disable any speed reduction during waypoint transition.", "max": 100.0, "min": -1.0, "name": "RD_MISS_SPD_GAIN", "shortDesc": "Tuning parameter for the speed reduction during waypoint transition", "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 error between the desired and actual yaw. It is also used as the threshold whether the rover should come 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.", "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 error 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": 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 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.", "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": 2, "default": 0.0, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "This parameter is used to calculate the feedforward term of the closed loop yaw rate control. The controller first calculates the required speed difference between the left and right motor to achieve the desired yaw rate. This desired speed difference is then linearly mapped to normalized motor commands. A good starting point is half the speed the rover drives at maximum throttle (RD_MAX_THR_SPD)). Increase this parameter if the rover turns faster than the setpoint, and decrease if the rover turns slower.", "max": 100.0, "min": 0.0, "name": "RM_MAX_THR_YAW_R", "shortDesc": "Yaw rate turning left/right wheels at max speed in opposite directions", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 2, "default": -1.0, "group": "Rover Mecanum", "increment": 0.01, "longDesc": "The waypoint transition speed is calculated as: Transition_speed = Maximum_speed * (1 - normalized_transition_angle * RM_MISS_VEL_GAIN) The normalized transition angle is the angle between the line segment from prev-curr waypoint and curr-next waypoint interpolated from [0, 180] -> [0, 1]. Higher value -> More speed reduction during waypoint transitions. Set to -1 to disable any speed reduction during waypoint transition.", "max": 100.0, "min": -1.0, "name": "RM_MISS_SPD_GAIN", "shortDesc": "Tuning parameter for the speed reduction during waypoint transition", "type": "Float"}, {"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": 2, "default": 0.75, "group": "Rover Position Control (Deprecated)", "increment": 0.05, "longDesc": "Damping factor for L1 control.", "max": 0.9, "min": 0.6, "name": "GND_L1_DAMPING", "shortDesc": "L1 damping", "type": "Float"}, {"category": "Standard", "decimalPlaces": 1, "default": 1.0, "group": "Rover Position Control (Deprecated)", "increment": 0.1, "longDesc": "This is the distance at which the next waypoint is activated. This should be set to about 2-4x of GND_WHEEL_BASE and not smaller than one meter (due to GPS accuracy).", "max": 50.0, "min": 1.0, "name": "GND_L1_DIST", "shortDesc": "L1 distance", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 5.0, "group": "Rover Position Control (Deprecated)", "increment": 0.5, "longDesc": "This is the L1 distance and defines the tracking point ahead of the rover it's following. Use values around 2-5m for a 0.3m wheel base. Tuning instructions: Shorten slowly during tuning until response is sharp without oscillation.", "max": 50.0, "min": 0.5, "name": "GND_L1_PERIOD", "shortDesc": "L1 period", "type": "Float", "units": "m"}, {"category": "Standard", "decimalPlaces": 1, "default": 150.0, "group": "Rover Position Control (Deprecated)", "max": 400.0, "min": 0.0, "name": "GND_MAN_Y_MAX", "shortDesc": "Max manual yaw rate", "type": "Float", "units": "deg/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.7854, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "At a control output of 0, the steering wheels are at 0 radians. At a control output of 1, the steering wheels are at GND_MAX_ANG radians.", "max": 3.14159, "min": 0.0, "name": "GND_MAX_ANG", "shortDesc": "Maximum turn angle for Ackerman steering", "type": "Float", "units": "rad"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.001, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the derivative gain for the speed closed loop controller", "max": 50.0, "min": 0.0, "name": "GND_SPEED_D", "shortDesc": "Speed proportional gain", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 3.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the integral gain for the speed closed loop controller", "max": 50.0, "min": 0.0, "name": "GND_SPEED_I", "shortDesc": "Speed Integral gain", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the maxim value the integral can reach to prevent wind-up.", "max": 50.0, "min": 0.005, "name": "GND_SPEED_IMAX", "shortDesc": "Speed integral maximum value", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 10.0, "group": "Rover Position Control (Deprecated)", "increment": 0.5, "max": 40.0, "min": 0.0, "name": "GND_SPEED_MAX", "shortDesc": "Maximum ground speed", "type": "Float", "units": "m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 2.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is the proportional gain for the speed closed loop controller", "max": 50.0, "min": 0.005, "name": "GND_SPEED_P", "shortDesc": "Speed proportional gain", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 3, "default": 1.0, "group": "Rover Position Control (Deprecated)", "increment": 0.005, "longDesc": "This is a gain to map the speed control output to the throttle linearly.", "max": 50.0, "min": 0.005, "name": "GND_SPEED_THR_SC", "shortDesc": "Speed to throttle scaler", "type": "Float", "units": "%m/s"}, {"category": "Standard", "decimalPlaces": 1, "default": 3.0, "group": "Rover Position Control (Deprecated)", "increment": 0.5, "max": 40.0, "min": 0.0, "name": "GND_SPEED_TRIM", "shortDesc": "Trim ground speed", "type": "Float", "units": "m/s"}, {"category": "Standard", "default": 1, "group": "Rover Position Control (Deprecated)", "longDesc": "This allows the user to choose between closed loop gps speed or open loop cruise throttle speed", "max": 1, "min": 0, "name": "GND_SP_CTRL_MODE", "shortDesc": "Control mode for speed", "type": "Int32", "values": [{"description": "open loop control", "value": 0}, {"description": "close the loop with gps speed", "value": 1}]}, {"category": "Standard", "decimalPlaces": 2, "default": 0.1, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "This is the throttle setting required to achieve the desired cruise speed. 10% is ok for a traxxas stampede vxl with ESC set to training mode", "max": 1.0, "min": 0.0, "name": "GND_THR_CRUISE", "shortDesc": "Cruise throttle", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.3, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "This is the maximum throttle % that can be used by the controller. For a Traxxas stampede vxl with the ESC set to training, 30 % is enough", "max": 1.0, "min": 0.0, "name": "GND_THR_MAX", "shortDesc": "Throttle limit max", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 2, "default": 0.0, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "This is the minimum throttle % that can be used by the controller. Set to 0 for rover", "max": 1.0, "min": 0.0, "name": "GND_THR_MIN", "shortDesc": "Throttle limit min", "type": "Float", "units": "norm"}, {"category": "Standard", "decimalPlaces": 3, "default": 0.31, "group": "Rover Position Control (Deprecated)", "increment": 0.01, "longDesc": "A value of 0.31 is typical for 1/10 RC cars.", "min": 0.0, "name": "GND_WHEEL_BASE", "shortDesc": "Distance from front axle to rear axle", "type": "Float", "units": "m"}, {"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. Set 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. Set 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": 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 in 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": -1.0, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable. For 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. 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.", "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. 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.", "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": 0.1, "group": "Rover Velocity Control", "increment": 0.01, "longDesc": "Set to -1 to disable. The 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. Particularly 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 a little to keep its wheel on the ground before airspeed to 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). 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)", "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}]}, {"category": "Standard", "default": 2, "group": "SD Logging", "longDesc": "Selects the algorithm used for logfile encryption", "name": "SDLOG_ALGORITHM", "shortDesc": "Logfile Encryption algorithm", "type": "Int32", "values": [{"description": "Disabled", "value": 0}, {"description": "XChaCha20", "value": 2}]}, {"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": 1, "group": "SD Logging", "longDesc": "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.", "max": 255, "min": 0, "name": "SDLOG_EXCH_KEY", "shortDesc": "Logfile Encryption key exchange key", "type": "Int32"}, {"category": "Standard", "default": 2, "group": "SD Logging", "longDesc": "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", "max": 255, "min": 0, "name": "SDLOG_KEY", "shortDesc": "Logfile Encryption key index", "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.", "name": "SDLOG_MODE", "rebootRequired": true, "shortDesc": "Logging Mode", "type": "Int32", "values": [{"description": "disabled", "value": -1}, {"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 when the battery is simulated externally and interfaced with PX4 through 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. Particularly 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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. Set 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 X component of magnetometer in body frame axis 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]", "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 Y component of magnetometer in body frame axis 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]", "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 Z component of magnetometer in body frame axis 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]", "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. 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.", "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. This 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. 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.", "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 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.", "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. The 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 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.", "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. This 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": 30.0, "group": "Sensors", "increment": 0.1, "longDesc": "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.", "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. 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.", "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. Requires 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. 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.", "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. 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.", "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. 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.", "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. 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.", "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 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.", "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. Recommended 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, actual 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": "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", "default": 0.0, "group": "Sensors", "longDesc": "This parameter defines a rotational offset in degrees around the X (Roll) axis It allows the user to fine tune the board offset in the event of misalignment.", "name": "SENS_BOARD_X_OFF", "shortDesc": "Board rotation X (Roll) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0.0, "group": "Sensors", "longDesc": "This parameter defines a rotational offset in degrees around the Y (Pitch) axis. It allows the user to fine tune the board offset in the event of misalignment.", "name": "SENS_BOARD_Y_OFF", "shortDesc": "Board rotation Y (Pitch) offset", "type": "Float", "units": "deg"}, {"category": "Standard", "default": 0.0, "group": "Sensors", "longDesc": "This parameter defines a rotational offset in degrees around the Z (Yaw) axis. It allows the user to fine tune the board offset in the event of misalignment.", "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, actual 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. Zero 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. 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", "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. 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 have an equal priority of all the instances, set this parameter to -1 and the best receiver will be used. This parameter has no effect if blending is active.", "max": 1, "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, actual 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 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", "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", "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. It 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. This 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. This 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. It 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. This 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. It 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. 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]", "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. 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.", "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. 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.", "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. 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.", "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. 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.", "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 This value can be measured with a ruler. This 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 This value can be measured with a ruler. This 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 when the motor is running at full speed. This 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 when the motor is running at full speed. This 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}]}, {"bitmask": [{"description": "Stuck", "index": 0}, {"description": "Drift", "index": 1}], "category": "Standard", "default": 0, "group": "Simulator", "longDesc": "Stuck: freeze the measurement to the current location Drift: 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). Platform-specific values are used if available. RC* 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. 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", "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 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)", "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 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)", "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 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)", "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. 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.", "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), the 'Default storage' backend uses a file on persistent storage. If not supported, this backend uses non-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. Note: this is only supported on boards with a separate calibration storage /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. WARNING: 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 F4 SD variants. If disabled, the preflight checks will not check for the presence of a barometer.", "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. If disabled, the sensors hub will not process sensor_gps, and 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. 1-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. If set to 0, the preflight checks will not check for the presence of an airspeed 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. Disable 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) 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).", "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 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, "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": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_PITCH", "shortDesc": "Direct pitch input", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_ROLL", "shortDesc": "Direct roll input", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_THRUST", "shortDesc": "Direct thrust input", "type": "Float"}, {"category": "Standard", "default": 0.0, "group": "UUV Attitude Control", "name": "UUV_DIRCT_YAW", "shortDesc": "Direct yaw input", "type": "Float"}, {"category": "Standard", "default": 0, "group": "UUV Attitude Control", "name": "UUV_INPUT_MODE", "shortDesc": "Select Input Mode", "type": "Int32", "values": [{"description": "use Attitude Setpoints", "value": 0}, {"description": "Direct Feedthrough", "value": 1}]}, {"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": 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": 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": 1, "group": "UUV Position Control", "name": "UUV_STAB_MODE", "shortDesc": "Stabilization mode(1) or Position Control(0)", "type": "Int32", "values": [{"description": "Position Control", "value": 0}, {"description": "Stabilization Mode", "value": 1}]}, {"category": "Standard", "default": 2130706433, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS, the selected Agent IP address will be set and used. 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.", "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": 1, "group": "UXRCE-DDS Client", "longDesc": "uXRCE-DDS key, must be different from zero. In a single agent - multi client configuration, each client must have a unique session key.", "name": "UXRCE_DDS_KEY", "rebootRequired": true, "shortDesc": "uXRCE-DDS session key", "type": "Int32"}, {"category": "Standard", "default": 8888, "group": "UXRCE-DDS Client", "longDesc": "If ethernet is enabled and is the selected configuration for uXRCE-DDS, the 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. 0: Use the default configuration. 1: Restrict messages to localhost (use in combination with ROS_LOCALHOST_ONLY=1). 2: 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. A 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. A 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 pitch 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. For 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. 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.", "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. Enabled 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. 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.", "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 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.", "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 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.", "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. 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.", "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. 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.", "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. When airspeed is used, transition timeout is declared if airspeed does not reach 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": -5.0, "group": "VTOL Attitude Control", "increment": 0.1, "longDesc": "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.", "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": -5.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 VT_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. Zero will deactivate the slew rate limiting and thus produce an instant throttle rise 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. 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.", "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 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.", "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"}, {"category": "Standard", "default": 0, "group": "Miscellaneous", "name": "UUV_SKIP_CTRL", "shortDesc": "Skip the controller", "type": "Int32", "values": [{"description": "use the module's controller", "value": 0}, {"description": "skip the controller and feedthrough the setpoints", "value": 1}]}], "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/public/middleware/graph_full.json b/docs/public/middleware/graph_full.json index ebce6e1a1d..01bb52fd5b 100644 --- a/docs/public/middleware/graph_full.json +++ b/docs/public/middleware/graph_full.json @@ -1 +1 @@ -{"nodes": [{"id": "m_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_system_power_simulator", "name": "system_power_simulator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_pm_selector_auterion", "name": "pm_selector_auterion", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_differential", "name": "rover_differential", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_rover_ackermann", "name": "rover_ackermann", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_agp_sim", "name": "sensor_agp_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rpm_simulator", "name": "rpm_simulator", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_rover_mecanum", "name": "rover_mecanum", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_i2c_launcher", "name": "i2c_launcher", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_rpm_capture", "name": "rpm_capture", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_vertiq_io", "name": "vertiq_io", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_roboclaw", "name": "roboclaw", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_iim42653", "name": "iim42653", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_voxl_esc", "name": "voxl_esc", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_voxl2_io", "name": "voxl2_io", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_asp5033", "name": "asp5033", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_pcf8583", "name": "pcf8583", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_sch16t", "name": "sch16t", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_bmm350", "name": "bmm350", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_auav", "name": "auav", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d8c841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#5cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#5c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "topic", "color": "#56d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#41b8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_internal_combustion_engine_status", "name": "internal_combustion_engine_status", "type": "topic", "color": "#d88741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#7fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#aed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#c6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#8541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41d895", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41cfd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#41a0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#6841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#419bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#d8bc41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#41bed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d84181", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d84152", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d87041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#9dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#4ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41acd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#d84187", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#d88d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#9741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d86441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_velocity_setpoint", "name": "rover_velocity_setpoint", "type": "topic", "color": "#d8a441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_obstacle_distance_fused", "name": "obstacle_distance_fused", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ObstacleDistance.msg"}, {"id": "t_rover_steering_setpoint", "name": "rover_steering_setpoint", "type": "topic", "color": "#b4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#79d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_throttle_setpoint", "name": "rover_throttle_setpoint", "type": "topic", "color": "#41d860", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#41d883", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#41d8a6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_attitude_setpoint", "name": "rover_attitude_setpoint", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_rover_position_setpoint", "name": "rover_position_setpoint", "type": "topic", "color": "#4a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#c641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#d841aa", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d84199", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d84164", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d8ac", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#4189d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#4142d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#a8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#4160d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#414ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d841cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#d841c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d8415e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#d8cd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#4195d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#4171d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d84158", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#d89e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_serial_passthru", "name": "esc_serial_passthru", "type": "topic", "color": "#6ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/MavlinkTunnel.msg"}, {"id": "t_rover_rate_setpoint", "name": "rover_rate_setpoint", "type": "topic", "color": "#41d84e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d85a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#4441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#9d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_aux_global_position", "name": "aux_global_position", "type": "topic", "color": "#a841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource2d.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d841bc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d84170", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#97d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#50d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#41d8b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#7f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#d841c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d841a4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#d84641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#91d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_obstacle_distance", "name": "obstacle_distance", "type": "topic", "color": "#68d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ObstacleDistance.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#41d8a0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#4177d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#4154d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#b441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d89341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d8d341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#d7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#41d8cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41a6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#417dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#415ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#ae41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d84193", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos", "name": "actuator_servos", "type": "topic", "color": "#d8aa41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#8bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#41d842", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d88f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#41d89b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#41d8b2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#41d8be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#6241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#cc41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#d141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d85241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d85841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d88141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#85d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d871", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41cad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#41b2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#5041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d8418d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d84c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#62d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41d848", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#418fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#4148d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#5641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#9141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#d89941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#ccd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#a2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#41c4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#7341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d8416a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d86a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d8c241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#73d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#41d87d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#41d889", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#7941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d841d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d841b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d84146", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d8b641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41d877", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#41d8c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41d8ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#a241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#ba41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_sensor_uwb", "name": "sensor_uwb", "type": "topic", "color": "#d8419e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#44d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#6e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#d85e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#4183d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d8414c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d854", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#8b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#bad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_actuator_test", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_tests", "target": "t_dataman_request", "color": "#41d89b", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#44d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_sensor_uwb", "color": "#d8419e", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#41d8be", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#ba41d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#85d841", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#d84641", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#4177d8", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_asp5033", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_auav", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_auav", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#7f41d8", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#a2d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41d848", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#41d8be", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#ba41d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#85d841", "style": "dashed"}, {"source": "m_rpm_simulator", "target": "t_rpm", "color": "#bad841", "style": "dashed"}, {"source": "m_pcf8583", "target": "t_rpm", "color": "#bad841", "style": "dashed"}, {"source": "m_cyphal", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41d848", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d8418d", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d84c41", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#d841b0", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_bmm350", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#41d8ca", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#ccd841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#41d8ca", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#d88d41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41d848", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#4189d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d8418d", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_obstacle_distance", "color": "#68d841", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_obstacle_distance_fused", "color": "#d8b041", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_attitude", "color": "#d8d341", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_selection", "color": "#417dd8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#ba41d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_estimator_status", "color": "#ae41d8", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_pwm_input", "color": "#44d841", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_rpm", "color": "#bad841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#41d8be", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_attitude_setpoint", "color": "#41d8d5", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_steering_setpoint", "color": "#b4d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_position_controller_status", "color": "#d84181", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_velocity_setpoint", "color": "#d8a441", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_position_setpoint", "color": "#4a41d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_throttle_setpoint", "color": "#41d860", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_rate_setpoint", "color": "#41d84e", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#8b41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#ae41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#4ad841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#417dd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#4160d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d8d341", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#d7d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d84175", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d84164", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d8ac", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#d85e41", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#9d41d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#aed841", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#a8d841", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#aed841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#4142d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#41d8b8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#4142d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#4142d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d87b41", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_attitude_setpoint", "color": "#41d8d5", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_steering_setpoint", "color": "#b4d841", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_velocity_setpoint", "color": "#d8a441", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_position_setpoint", "color": "#4a41d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_throttle_setpoint", "color": "#41d860", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_rate_setpoint", "color": "#41d84e", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41d5d8", "style": "dashed"}, {"source": "m_system_power_simulator", "target": "t_system_power", "color": "#ccd841", "style": "dashed"}, {"source": "m_sensor_agp_sim", "target": "t_aux_global_position", "color": "#a841d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#41a0d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8c841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#5c41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d87541", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d1d841", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#4171d8", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_attitude_status", "color": "#8541d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#79d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_obstacle_distance", "color": "#68d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_information", "color": "#d87041", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gps", "color": "#ba41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#41a6d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#41a0d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8c841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#d1d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#5c41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#79d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d84c41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#41a0d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#41d877", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#416cd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8c841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#d1d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#bad841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#5c41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#ba41d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#7f41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#5cd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#a241d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#41b2d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#41d842", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#b441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#d141d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d841b6", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#418fd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#41d86c", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d871", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#d84187", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#41d89b", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#d84164", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#d8414c", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#a8d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d88141", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d854", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#41b2d8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#9141d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d85841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d84158", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#418fd8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#50d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d86441", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#4148d8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#6841d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#7341d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#4441d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d84170", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#7341d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d84199", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41cad8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#41b2d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#41d8a6", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41acd8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41acd8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#41d883", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d84181", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#4166d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#4142d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d84152", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#4195d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#c0d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos", "color": "#d8aa41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#41d889", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#d841c8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#417dd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#8bd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d87541", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d841a4", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#4166d8", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d883", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#4166d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d883", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d84193", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#c641d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#c6d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#7341d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#d89941", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_figure_eight_status", "color": "#d89e41", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#d84146", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#41b8d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#d84181", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flight_phase_estimation", "color": "#d841aa", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#d87b41", "style": "dashed"}, {"source": "m_internal_combustion_engine_control", "target": "t_internal_combustion_engine_status", "color": "#d88741", "style": "dashed"}, {"source": "m_internal_combustion_engine_control", "target": "t_internal_combustion_engine_control", "color": "#56d841", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#4183d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#d84164", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#ae41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#d7d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#d84175", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#7fd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#6e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#8541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#79d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#7f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d84c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_esc_serial_passthru", "color": "#6ed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_obstacle_distance", "color": "#68d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#9741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#73d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41cfd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#9d41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d86a41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d87041", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#ba41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d87541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d89341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#c041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d854", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41acd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#cc41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#419bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d841cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#d841c2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#d841bc", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d8b641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#41d87d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#416cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d8c241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#415ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#d8cd41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d8d341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41d895", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#414ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#41d89b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d84175", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d84164", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#4142d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d8416a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#41d8b2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#4441d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#41d8be", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#41d8c4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d8414c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#9dd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#5641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#41d8cf", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d8415e", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#8541d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#d8bc41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#91d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#41bed8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#4154d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#6241d8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d841d3", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#62d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#4166d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d883", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41acd8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d741d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d866", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d87b41", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#97d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d88f", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#7941d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#41d8a0", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#41d85a", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#c6d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#4441d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41acd8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d85241", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#d84170", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#41d8a6", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_attitude_setpoint", "color": "#41d8d5", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_steering_setpoint", "color": "#b4d841", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_velocity_setpoint", "color": "#d8a441", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_position_setpoint", "color": "#4a41d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_throttle_setpoint", "color": "#41d860", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_rate_setpoint", "color": "#41d84e", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_actuator_motors", "color": "#d8417b", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d8d341", "style": "dashed"}, {"source": "t_vehicle_status", "target": "m_i2c_launcher", "color": "#41b2d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#d88141", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#73d841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#41d8cf", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#41d85a", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#6e41d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_tests", "color": "#d84193", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#41a6d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#41d8ca", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d8d341", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#41b2d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_dshot", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d8417b", "style": "normal"}, {"source": "t_sensor_uwb", "target": "m_uwb_sr150", "color": "#d8419e", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#d8416a", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#7941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#7341d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_tap_esc", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_tap_esc", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#d8417b", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pca9685_pwm_out", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d8417b", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#41d8be", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_roboclaw", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d8d341", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#d84164", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d84175", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#5041d8", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#418fd8", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41d877", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#a8d841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#7f41d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#ba41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#41b2d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d88f", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#a2d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_px4io", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#41b2d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#d8417b", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_linux_pwm_out", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_linux_pwm_out", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#d8417b", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#41d8be", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#d85841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#9141d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#ba41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#d85841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#d85841", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d8416a", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pm_selector_auterion", "color": "#d85841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina238", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#41b2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxlpm", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#41b2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina220", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#41b2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#41b2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina228", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d88f", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#d841b0", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#ba41d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#6e41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#d84164", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#97d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#d8d341", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#5041d8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#418fd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#d84175", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#41b2d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41d8ca", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#7941d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#7341d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#9141d8", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#9741d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#d85841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_uavcan", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#41b2d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#4195d8", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#d841c2", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#418fd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d88f", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#d8cd41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#d84175", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d8416a", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#41d8b8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#41d8be", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#a8d841", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#9dd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl_esc", "color": "#d8417b", "style": "normal"}, {"source": "t_led_control", "target": "m_voxl_esc", "color": "#7941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl_esc", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl_esc", "color": "#7341d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl_esc", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl_esc", "color": "#9141d8", "style": "normal"}, {"source": "t_esc_serial_passthru", "target": "m_voxl_esc", "color": "#6ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl_esc", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_voxl_esc", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl_esc", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl_esc", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl_esc", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl_esc", "color": "#d85e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxl_esc", "color": "#41b2d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl_esc", "color": "#6241d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxl_esc", "color": "#d841aa", "style": "normal"}, {"source": "t_landing_gear", "target": "m_vertiq_io", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_vertiq_io", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_vertiq_io", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_vertiq_io", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_vertiq_io", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vertiq_io", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_vertiq_io", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_vertiq_io", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_vertiq_io", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_vertiq_io", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_vertiq_io", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d88f", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#d841b0", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d84175", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#5cd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#41b2d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#44d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_lightware_sf45_serial", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_lightware_sf45_serial", "color": "#d8d341", "style": "normal"}, {"source": "t_obstacle_distance", "target": "m_lightware_sf45_serial", "color": "#68d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d8417b", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#41c4d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl2_io", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl2_io", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl2_io", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl2_io", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl2_io", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl2_io", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl2_io", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl2_io", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl2_io", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl2_io", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl2_io", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#d8d341", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#41b2d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#41b2d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#7941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#7941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#7941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#7941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#7941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#7941d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#8bd841", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_ackermann", "color": "#41d8d5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_ackermann", "color": "#d84199", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_ackermann", "color": "#4441d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_ackermann", "color": "#b4d841", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_ackermann", "color": "#d8a441", "style": "normal"}, {"source": "t_actuator_servos", "target": "m_rover_ackermann", "color": "#d8aa41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_ackermann", "color": "#d84158", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_ackermann", "color": "#41d860", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_ackermann", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_ackermann", "color": "#d8d341", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_ackermann", "color": "#4a41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_ackermann", "color": "#d84187", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_ackermann", "color": "#41d84e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_ackermann", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_ackermann", "color": "#d84175", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#c641d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#79d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#41d889", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d88f", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#9d41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#97d841", "style": "normal"}, {"source": "t_aux_global_position", "target": "m_ekf2", "color": "#a841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#41b2d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#417dd8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#8bd841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d87541", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d841a4", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41d88f", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d84c41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d84175", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#d84164", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#c641d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#4166d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#4441d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d85241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#d841c8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#97d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#d84187", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#41b2d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#417dd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#73d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#41c4d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#41d8a0", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#41b2d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d883", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d84152", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41acd8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d8d341", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#97d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41acd8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#4142d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d84199", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#a8d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#97d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_mecanum", "color": "#41d8d5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_mecanum", "color": "#d84199", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_mecanum", "color": "#4441d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_mecanum", "color": "#b4d841", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_mecanum", "color": "#d8a441", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_mecanum", "color": "#d84158", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_mecanum", "color": "#4a41d8", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_mecanum", "color": "#41d860", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_mecanum", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_mecanum", "color": "#d8d341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_mecanum", "color": "#d84187", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_mecanum", "color": "#41d84e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_mecanum", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_mecanum", "color": "#d84175", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d8418d", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d8d341", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#d84164", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_agp_sim", "color": "#5c41d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#5c41d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#41a6d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41d88f", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_simulator", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#41b2d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out_sim", "color": "#56d841", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#5c41d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d1d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#7341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#d84199", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#41d8b8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#9141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41d88f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#4195d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_gz_bridge", "color": "#56d841", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_gz_bridge", "color": "#41bed8", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#d85e41", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#6241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#d8417b", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#41a6d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41d88f", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#41b2d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#5c41d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#5c41d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#41a0d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d84164", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#7f41d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#8b41d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d84193", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#d141d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#a8d841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d8414c", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d88f", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#9d41d8", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#a241d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#418fd8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#41b8d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#41b2d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d84181", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d84175", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d88141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d88f", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#41b2d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#4183d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#8b41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#73d841", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#62d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d85841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41cad8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#41c4d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#50d841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#ae41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#41b2d8", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41d848", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#4ad841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#41d842", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#b441d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#44d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#ba41d8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d89341", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#c041d8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d854", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d85a", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d841cd", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d866", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#418fd8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#d841c8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#41d86c", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#41d87d", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#4183d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d871", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41d877", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#4177d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#417dd8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d841a4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d84199", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#4160d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d8d341", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#414ed8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#41d8a0", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d84175", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#41d8a6", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d84164", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#ccd841", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d8ac", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d8417b", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#a8d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#97d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#5041d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41d877", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#41b2d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#417dd8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#d841c8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#73d841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#41d8cf", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41acd8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d85241", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d84175", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#41cad8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#d84199", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#41d8a6", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d8d341", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#4441d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#d84164", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d84199", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#4441d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41acd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d8d341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#d84187", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#4142d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d84199", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d84158", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#4166d8", "style": "normal"}, {"source": "t_rpm", "target": "m_control_allocator", "color": "#bad841", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#41d883", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#d84158", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d741d8", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d86441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#41b2d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#41d8a6", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d87b41", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#4160d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#41d889", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#73d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#d841c8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d841bc", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#41c4d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41d8ca", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#417dd8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#414ed8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#41d8a0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#4142d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41acd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d8d341", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#41d89b", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#d84164", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#d84199", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#4441d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#a8d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#97d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#d8d341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#d84187", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_internal_combustion_engine_control", "color": "#d8417b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_internal_combustion_engine_control", "color": "#d84199", "style": "normal"}, {"source": "t_rpm", "target": "m_internal_combustion_engine_control", "color": "#bad841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_internal_combustion_engine_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#416cd8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#79d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#d85841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41d88f", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#9d41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#d8d341", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#8bd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#d84641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d85841", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d86a41", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#d87041", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d88141", "style": "normal"}, {"source": "t_internal_combustion_engine_status", "target": "m_mavlink", "color": "#d88741", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#d88d41", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#d89941", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#d89e41", "style": "normal"}, {"source": "t_obstacle_distance_fused", "target": "m_mavlink", "color": "#d8b041", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d8b641", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#d8bc41", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d8c241", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d8c841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#c6d841", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#bad841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#a8d841", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#91d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#97d841", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#85d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#4ad841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#41d842", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d854", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d85a", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#41d87d", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d871", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#41d877", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#41d889", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#41d8a6", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#41d8a0", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#41d8be", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#41d8c4", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41d5d8", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#41bed8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#41b2d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41acd8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#41a6d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#41a0d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#418fd8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#4189d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#4183d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#417dd8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#4160d8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#4154d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#414ed8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#4148d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#4142d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#5641d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#5c41d8", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#6841d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#6e41d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#7f41d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#8541d8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#8b41d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#9d41d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#ae41d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#b441d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#ba41d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#c041d8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#cc41d8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d841d3", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#d841c8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d84199", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#d8418d", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d84193", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#d84187", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#d84181", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d84164", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d8415e", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d84158", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#d8414c", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d84146", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#41b2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#d841aa", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41d8ca", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#d84164", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#7fd841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#8541d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d88f", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#419bd8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d841b6", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#d84187", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d87041", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d84199", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#41d8b2", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d88f", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#5041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#41b2d8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41cfd8", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#41b2d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#418fd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d8d341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#d84187", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d895", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d84158", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#97d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d84146", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#c641d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#4166d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#a8d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d84146", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d8d341", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#ae41d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#4ad841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#41b2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#d841aa", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#73d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d88f", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#41c4d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#41d87d", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#4441d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d84158", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d84170", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#6e41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#41d8a6", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#415ad8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_differential", "color": "#41d8d5", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_differential", "color": "#d84199", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_differential", "color": "#4441d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_differential", "color": "#b4d841", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_differential", "color": "#d8a441", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_differential", "color": "#d84158", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_differential", "color": "#4a41d8", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_differential", "color": "#41d860", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_differential", "color": "#d841cd", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_differential", "color": "#d8d341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_differential", "color": "#d84187", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_differential", "color": "#41d84e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_differential", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_differential", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#79d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d8d341", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#8bd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#41b2d8", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_system_power_simulator", "name": "system_power_simulator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_pm_selector_auterion", "name": "pm_selector_auterion", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_differential", "name": "rover_differential", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_rover_ackermann", "name": "rover_ackermann", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_agp_sim", "name": "sensor_agp_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rpm_simulator", "name": "rpm_simulator", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_rover_mecanum", "name": "rover_mecanum", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_i2c_launcher", "name": "i2c_launcher", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_rpm_capture", "name": "rpm_capture", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_vertiq_io", "name": "vertiq_io", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_roboclaw", "name": "roboclaw", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_iim42653", "name": "iim42653", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_voxl_esc", "name": "voxl_esc", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_voxl2_io", "name": "voxl2_io", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_asp5033", "name": "asp5033", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_pcf8583", "name": "pcf8583", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_sch16t", "name": "sch16t", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_bmm350", "name": "bmm350", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_auav", "name": "auav", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#7bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#d84174", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#d8a141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#41d84a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "topic", "color": "#d84196", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_internal_combustion_engine_status", "name": "internal_combustion_engine_status", "type": "topic", "color": "#41d89a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#6541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#87d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#d8415d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#41a5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#d841c3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#4ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41d883", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41c1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#d8ad41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#cbd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#41d8c1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#a941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#ba41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#d85241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d88541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#5f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#8741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#c5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#419ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_throttle_setpoint", "name": "rover_throttle_setpoint", "type": "topic", "color": "#d86341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_obstacle_distance_fused", "name": "obstacle_distance_fused", "type": "topic", "color": "#d89041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ObstacleDistance.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d89641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_position_setpoint", "name": "rover_position_setpoint", "type": "topic", "color": "#d8a741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d8b241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#afd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#9dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#5fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#41d861", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41abd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#5341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#8141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_velocity_setpoint", "name": "rover_velocity_setpoint", "type": "topic", "color": "#c541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_attitude_setpoint", "name": "rover_attitude_setpoint", "type": "topic", "color": "#d841ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_steering_setpoint", "name": "rover_steering_setpoint", "type": "topic", "color": "#d841a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d844", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#4144d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d841a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d84146", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d8c941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#d8d441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#4841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#4e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#9d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d841cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d8417f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_rate_setpoint", "name": "rover_rate_setpoint", "type": "topic", "color": "#a9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#81d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#65d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_aux_global_position", "name": "aux_global_position", "type": "topic", "color": "#41d872", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource2d.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41b0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_serial_passthru", "name": "esc_serial_passthru", "type": "topic", "color": "#7041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/MavlinkTunnel.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#4172d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#5941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d84168", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_obstacle_distance", "name": "obstacle_distance", "type": "topic", "color": "#d87941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ObstacleDistance.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#59d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#41d878", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#41d8c7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#414ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d8418a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d84c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d8cf41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#92d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#42d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#41d87d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41c7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#4189d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#415bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#9241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#d841c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d87f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#bad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos", "name": "actuator_servos", "type": "topic", "color": "#98d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#41d855", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d89f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#41d8d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#4155d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#4241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d84163", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d84152", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d85d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#53d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#41d889", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d8ab", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#4178d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#a341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d841d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d84185", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d84641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#41d85b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41bcd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#417dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#4161d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#af41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#419fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#cb41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d841b2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d84190", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d86841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d8b841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d8c341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#76d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#41d8bc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#7641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#9841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#b441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d841b8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#d87441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#d88a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#a3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#70d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_uwb", "name": "sensor_uwb", "type": "topic", "color": "#d141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#d84179", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#d8414c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#7b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#b4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#48d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#41d850", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#4150d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d8b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#41d8a5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#4183d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_actuator_test", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_tests", "target": "t_dataman_request", "color": "#41d8d3", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#7b41d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_sensor_uwb", "color": "#d141d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#41d86c", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#d84179", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#41d8ab", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#41d8c7", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#414ad8", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_asp5033", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_auav", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_auav", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#5941d8", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41bcd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#419fd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d8ab", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#d84179", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#41d86c", "style": "dashed"}, {"source": "m_rpm_simulator", "target": "t_rpm", "color": "#4183d8", "style": "dashed"}, {"source": "m_pcf8583", "target": "t_rpm", "color": "#4183d8", "style": "dashed"}, {"source": "m_cyphal", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41bcd8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d84141", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d84641", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#41d8bc", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_bmm350", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#70d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d841b2", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#70d841", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#4144d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41bcd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#419ad8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d84141", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_obstacle_distance", "color": "#d87941", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_obstacle_distance_fused", "color": "#d89041", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_attitude", "color": "#415bd8", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_selection", "color": "#4189d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_estimator_status", "color": "#41c7d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#d84179", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_rpm", "color": "#4183d8", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_pwm_input", "color": "#7b41d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#41d86c", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_steering_setpoint", "color": "#d841a1", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_velocity_setpoint", "color": "#c541d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_throttle_setpoint", "color": "#d86341", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_position_controller_status", "color": "#41d8c1", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_rate_setpoint", "color": "#a9d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_position_setpoint", "color": "#d8a741", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_attitude_setpoint", "color": "#d841ad", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#7641d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#afd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#4189d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d88541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d89641", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#41d87d", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#415bd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d841a7", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#4841d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#41d8a5", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41c7d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d84146", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#41d850", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#4166d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#87d841", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#c041d8", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#87d841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d844", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d84168", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d844", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#41d878", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d844", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#53d841", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_steering_setpoint", "color": "#d841a1", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_velocity_setpoint", "color": "#c541d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_throttle_setpoint", "color": "#d86341", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_rate_setpoint", "color": "#a9d841", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_position_setpoint", "color": "#d8a741", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_attitude_setpoint", "color": "#d841ad", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#d841be", "style": "dashed"}, {"source": "m_system_power_simulator", "target": "t_system_power", "color": "#d841b2", "style": "dashed"}, {"source": "m_sensor_agp_sim", "target": "t_aux_global_position", "color": "#41d872", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#418ed8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#7bd841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#6ad841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#41d8d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#4ed841", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d8417f", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#9241d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#7bd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#6ad841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#4ed841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#418ed8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_obstacle_distance", "color": "#d87941", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gps", "color": "#d84179", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_information", "color": "#5f41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_attitude_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#8141d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#7bd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d84641", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#6ad841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#4ed841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#418ed8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#4183d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#d88a41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d89c41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#8141d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#d84179", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#8741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#8c41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#4194d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#48d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#c041d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#42d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#417dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#416cd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#4178d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#d89641", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#d84174", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#5941d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#bad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d84152", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#41d8d3", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#d8414c", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#41d889", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d8b0", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#41d894", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#417dd8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#6a41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#4178d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#4161d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#41d85b", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#a341d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d1d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d8b241", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#65d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d84190", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d84157", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d84190", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d841d4", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#4178d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#5341d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41abd8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#5fd841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#41d861", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#41d8c1", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#ba41d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d844", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#c5d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d841cf", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos", "color": "#98d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#4189d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d87f41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#9841d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d866", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d8416e", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41d8d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_orbit_status", "color": "#8cd841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#d8415d", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#d84190", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_figure_eight_status", "color": "#81d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#41d84a", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#41a5d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#d841c3", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#d8a141", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#d8ad41", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#9dd841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#41d878", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#d85241", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#53d841", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#5fd841", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d861", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#5fd841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d861", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#92d841", "style": "dashed"}, {"source": "m_internal_combustion_engine_control", "target": "t_internal_combustion_engine_status", "color": "#41d89a", "style": "dashed"}, {"source": "m_internal_combustion_engine_control", "target": "t_internal_combustion_engine_control", "color": "#d84196", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#4150d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#d89641", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#41c7d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#41d87d", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#d84146", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d84641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#76d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#9d41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#af41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#65d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#b441d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d84c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#d85741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#48d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#41d844", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#cb41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d86841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#d86e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#d87441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_obstacle_distance", "color": "#d87941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d841c9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#41d855", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d89641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d89c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#4166d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#415bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41d883", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#4155d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#41d86c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#d8419c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d8c341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#4e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d8c941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d8cf41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#d8d441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#d84179", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#5941d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#cbd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#5f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d84163", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#6541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d8b0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#b4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_esc_serial_passthru", "color": "#7041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#41d8d3", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#a3d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41c1d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#8141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d84146", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d84185", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d8418a", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d8be41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#41b6d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#41d8cd", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#a941d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#59d841", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d841b8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#41d8b6", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#c0d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#5fd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41b0d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d861", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#41d878", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#53d841", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#4172d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d89f", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d6d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#41d3d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#d8b841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d85d41", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#d84157", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#41a5d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#65d841", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#5341d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_steering_setpoint", "color": "#d841a1", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_velocity_setpoint", "color": "#c541d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_throttle_setpoint", "color": "#d86341", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_actuator_motors", "color": "#4241d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_rate_setpoint", "color": "#a9d841", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_position_setpoint", "color": "#d8a741", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_attitude_setpoint", "color": "#d841ad", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#415bd8", "style": "dashed"}, {"source": "t_vehicle_status", "target": "m_i2c_launcher", "color": "#4178d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#41d889", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#d841c9", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#d86841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#d84146", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#41d3d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#b4d841", "style": "normal"}, {"source": "t_dataman_response", "target": "m_tests", "color": "#92d841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#9241d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#70d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#415bd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_dshot", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d84168", "style": "normal"}, {"source": "t_sensor_uwb", "target": "m_uwb_sr150", "color": "#d141d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_tap_esc", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#d84190", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#d8b841", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_tap_esc", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#d84168", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pca9685_pwm_out", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d84168", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_roboclaw", "color": "#a341d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#415bd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#d84185", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d84146", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#417dd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#d84185", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#d88a41", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#c041d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#5941d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#d84179", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#4178d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_px4io", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#41d850", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#4178d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d89f", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#419fd8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d84168", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_linux_pwm_out", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_linux_pwm_out", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#d84168", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#a341d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#41d85b", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#a341d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#d84179", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#a341d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pm_selector_auterion", "color": "#a341d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina238", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#4178d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxlpm", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#4178d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina220", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#4178d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#4178d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina228", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d89f", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#41d8bc", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#d84179", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#b4d841", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#417dd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#d84185", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#d84146", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#4178d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#d84146", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#70d841", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#9d41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#a341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#41abd8", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#c041d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d641d8", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#417dd8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#41d850", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#4178d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#41d85b", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#41d86c", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#d8419c", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_uavcan", "color": "#d84196", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#d8b841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d84190", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#d8d441", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d84168", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#d84146", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl_esc", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl_esc", "color": "#d84196", "style": "normal"}, {"source": "t_led_control", "target": "m_voxl_esc", "color": "#d8b841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl_esc", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl_esc", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl_esc", "color": "#41d850", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxl_esc", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxl_esc", "color": "#4178d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl_esc", "color": "#41d85b", "style": "normal"}, {"source": "t_esc_serial_passthru", "target": "m_voxl_esc", "color": "#7041d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl_esc", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl_esc", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl_esc", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl_esc", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_voxl_esc", "color": "#d1d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl_esc", "color": "#d84168", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_vertiq_io", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_vertiq_io", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_vertiq_io", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_vertiq_io", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_vertiq_io", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_test", "target": "m_vertiq_io", "color": "#41d85b", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_vertiq_io", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_vertiq_io", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_vertiq_io", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vertiq_io", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_vertiq_io", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d89f", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#41d8bc", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d84146", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#d84174", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#4178d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#7b41d8", "style": "normal"}, {"source": "t_obstacle_distance", "target": "m_lightware_sf45_serial", "color": "#d87941", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_lightware_sf45_serial", "color": "#d84163", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_lightware_sf45_serial", "color": "#415bd8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d84168", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#cb41d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl2_io", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl2_io", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl2_io", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl2_io", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl2_io", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl2_io", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl2_io", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl2_io", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl2_io", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl2_io", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl2_io", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#415bd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#4178d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#4178d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#d8b841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d8b841", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#d8b841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#d8b841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#d8b841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#d8b841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#d87f41", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_ackermann", "color": "#d841a1", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_ackermann", "color": "#c541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_ackermann", "color": "#4241d8", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_ackermann", "color": "#d86341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_ackermann", "color": "#8741d8", "style": "normal"}, {"source": "t_actuator_servos", "target": "m_rover_ackermann", "color": "#98d841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_rover_ackermann", "color": "#41d8c1", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_ackermann", "color": "#d8c941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_ackermann", "color": "#41abd8", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_ackermann", "color": "#a9d841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_ackermann", "color": "#d8a741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_ackermann", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_ackermann", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_ackermann", "color": "#415bd8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_ackermann", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_ackermann", "color": "#d84146", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#c041d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#41d8a5", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#d8415d", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#4178d8", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d8a141", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d841c3", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#d8ad41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#415bd8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#53d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#d84146", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#c041d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d84163", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#9dd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#4189d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#9841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#4178d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#8141d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d89f", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d8416e", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#4166d8", "style": "normal"}, {"source": "t_aux_global_position", "target": "m_ekf2", "color": "#41d872", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#41d3d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#415bd8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d84641", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d84146", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#4178d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d85d41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#8741d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d1d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#4189d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#4178d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#4172d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#a341d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d866", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#9dd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#5fd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d84146", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d6d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#cb41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d86841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#4178d8", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#ba41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#4178d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d861", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#4178d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#4172d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#415bd8", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#d85241", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d84146", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#87d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#4178d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d84146", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#c5d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#41d844", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#4178d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#4172d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d1d841", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_mecanum", "color": "#d841a1", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_mecanum", "color": "#c541d8", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_mecanum", "color": "#d86341", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_mecanum", "color": "#4241d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_mecanum", "color": "#8741d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_mecanum", "color": "#d8c941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_mecanum", "color": "#41abd8", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_mecanum", "color": "#a9d841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_mecanum", "color": "#d8a741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_mecanum", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_mecanum", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_mecanum", "color": "#415bd8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_mecanum", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_mecanum", "color": "#d84146", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#415bd8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_agp_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#9241d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#41d89f", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_simulator", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#4178d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out_sim", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#4241d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_gz_bridge", "color": "#d84196", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#d84190", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_gz_bridge", "color": "#d8be41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d841cf", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#41d850", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#41d8cd", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#41abd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d84168", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#9241d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#d84185", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#4ed841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#c041d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#41d8a5", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#bad841", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#92d841", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#d8414c", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#417dd8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#41d84a", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#41d8c1", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#4166d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#5941d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d84146", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#4150d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#41d889", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d89f", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41bcd8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#8c41d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41b0d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#a341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41abd8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#b441d8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d84c41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#c041d8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#42d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#cb41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d86841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#d87441", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d841d4", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#4189d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#417dd8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d88541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#4178d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#416cd8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#d88a41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d866", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d841b2", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#415bd8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d841a7", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#4150d8", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#414ad8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#4241d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#41d894", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#4841d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#4e41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d84185", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d8c941", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#5341d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#d84179", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d89f", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d6d841", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d8416e", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#41d8a5", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d84163", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d8b0", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d84152", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#41d8b6", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41c7d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d3d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#7b41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d84146", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#d88a41", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#4178d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#4189d8", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#d841c9", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#d86841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#41d866", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d85d41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d84146", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#d841d4", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#5341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#d84146", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#8741d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#d89641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#d84146", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#c5d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d844", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#4178d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d1d841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#c0d841", "style": "normal"}, {"source": "t_rpm", "target": "m_control_allocator", "color": "#4183d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#4178d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#5341d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#41d878", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#41d861", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#d1d841", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#53d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#5fd841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d8b241", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#cb41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d86841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d86e41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#d87441", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#4189d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#4841d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#9841d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#4e41d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#70d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d866", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d6d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#c041d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#41d8a5", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#8741d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#d89641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#d84146", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#41d844", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d1d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#415bd8", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#41d8d3", "style": "normal"}, {"source": "t_rpm", "target": "m_internal_combustion_engine_control", "color": "#4183d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_internal_combustion_engine_control", "color": "#4241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_internal_combustion_engine_control", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_internal_combustion_engine_control", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#c041d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d84163", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#d87f41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#a341d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41d89f", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#4166d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#8141d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#d84146", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#d87441", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d88541", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#d88a41", "style": "normal"}, {"source": "t_obstacle_distance_fused", "target": "m_mavlink", "color": "#d89041", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d89641", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d8be41", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d8c341", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d6d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d1d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#b4d841", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#a3d841", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#92d841", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#8cd841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#87d841", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#81d841", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#7bd841", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#76d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#5fd841", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#59d841", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#4ed841", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#48d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#41d844", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#41d866", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#41d87d", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41d88e", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#41d889", "style": "normal"}, {"source": "t_internal_combustion_engine_status", "target": "m_mavlink", "color": "#41d89a", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41d89f", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#41d8a5", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d8ab", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d8b0", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#41d8c1", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#41d8c7", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#41cdd8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41d8d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41c7d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d3d8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#41b6d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#41a5d8", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#419ad8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#418ed8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#4189d8", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#4183d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#417dd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#4178d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#416cd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#4172d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#4161d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#415bd8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#4155d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#4150d8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#4144d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#4841d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#4e41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#5341d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#5941d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#5f41d8", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#6a41d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#7641d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#8741d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#8c41d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#9841d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#a341d8", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#a941d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#af41d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#b441d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#c041d8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#d841be", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d841b8", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d8418a", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d84185", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#d8417f", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#d84179", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d84163", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#d84152", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d84146", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#afd841", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#70d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#4178d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#5f41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#c041d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#8741d8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#6541d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#d89641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41abd8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41cdd8", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#cbd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#4194d8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#41d855", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#4178d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41abd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d89f", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#8741d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#41a5d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#c041d8", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d841d4", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#417dd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#415bd8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d883", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d89f", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d1d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#7641d8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41c1d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d84146", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#5fd841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d88541", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#afd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#4178d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#7641d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41c7d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#9dd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d84146", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#cb41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d86841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d89f", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#b441d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d84146", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#b4d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#5341d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d8cf41", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_differential", "color": "#d841a1", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_differential", "color": "#c541d8", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_differential", "color": "#d86341", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_differential", "color": "#4241d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_differential", "color": "#8741d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_differential", "color": "#d8c941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_differential", "color": "#41abd8", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_differential", "color": "#a9d841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_differential", "color": "#d8a741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_differential", "color": "#d1d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_differential", "color": "#65d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_differential", "color": "#415bd8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_differential", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_differential", "color": "#d84146", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#415bd8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#8141d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#d84146", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#4178d8", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_full_no_mavlink.json b/docs/public/middleware/graph_full_no_mavlink.json index c0ff7fa2ff..6f6ffe10df 100644 --- a/docs/public/middleware/graph_full_no_mavlink.json +++ b/docs/public/middleware/graph_full_no_mavlink.json @@ -1 +1 @@ -{"nodes": [{"id": "m_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_system_power_simulator", "name": "system_power_simulator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_pm_selector_auterion", "name": "pm_selector_auterion", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_differential", "name": "rover_differential", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_rover_ackermann", "name": "rover_ackermann", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_agp_sim", "name": "sensor_agp_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rpm_simulator", "name": "rpm_simulator", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_rover_mecanum", "name": "rover_mecanum", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_i2c_launcher", "name": "i2c_launcher", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_rpm_capture", "name": "rpm_capture", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_vertiq_io", "name": "vertiq_io", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_roboclaw", "name": "roboclaw", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_iim42653", "name": "iim42653", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_voxl_esc", "name": "voxl_esc", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_voxl2_io", "name": "voxl2_io", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_asp5033", "name": "asp5033", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_pcf8583", "name": "pcf8583", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_sch16t", "name": "sch16t", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_bmm350", "name": "bmm350", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_auav", "name": "auav", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d841d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#d8418d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d8ac41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#41d85a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#92d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41d888", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d88541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#419fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d84176", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d85041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d86741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#a9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#41d8ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_rover_throttle_setpoint", "name": "rover_throttle_setpoint", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d85f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_rover_velocity_setpoint", "name": "rover_velocity_setpoint", "type": "topic", "color": "#d89541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#b1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#8ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_attitude_setpoint", "name": "rover_attitude_setpoint", "type": "topic", "color": "#41d890", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_steering_setpoint", "name": "rover_steering_setpoint", "type": "topic", "color": "#41d89f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#4190d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_position_setpoint", "name": "rover_position_setpoint", "type": "topic", "color": "#8341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#a941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#d841b3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d841ac", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#a1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#55d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#4188d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#8a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#9ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#4169d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#7b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d8bb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#c8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d84167", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d8c341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#41d869", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d871", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_rate_setpoint", "name": "rover_rate_setpoint", "type": "topic", "color": "#41aed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#415ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_aux_global_position", "name": "aux_global_position", "type": "topic", "color": "#d841c3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource2d.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d8ca41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#5dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#46d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#41d897", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#d84185", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#7bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#41d8cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_obstacle_distance", "name": "obstacle_distance", "type": "topic", "color": "#d841bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ObstacleDistance.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d8417e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#64d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#4197d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#4641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#4d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#9a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d8d241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#74d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos", "name": "actuator_servos", "type": "topic", "color": "#4dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#4162d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#9241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#b141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#d84150", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d87641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d87e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#cfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#b8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41d4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41cdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41c5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#6c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d88d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#7441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#41d8a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#5541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#d841ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#83d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#6cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#41d862", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#6441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#cf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#41a7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#4171d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#b841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#c841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_uwb", "name": "sensor_uwb", "type": "topic", "color": "#d841a4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#d8415f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#a141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#d8a441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#41d8c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#41d8d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d84195", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#5d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#d8b341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_tests", "target": "t_dataman_request", "color": "#d84150", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#a141d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_sensor_uwb", "color": "#d841a4", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#b141d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#b841d8", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#7bd841", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_asp5033", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_auav", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_auav", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#41d852", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#7441d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#d841ca", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#b141d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#b841d8", "style": "dashed"}, {"source": "m_rpm_simulator", "target": "t_rpm", "color": "#d8b341", "style": "dashed"}, {"source": "m_pcf8583", "target": "t_rpm", "color": "#d8b341", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_cyphal", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#7441d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#6c41d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#c0d841", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#41d8bd", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_bmm350", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#d8415f", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#41d8a7", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#d8415f", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#7441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#6c41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_attitude", "color": "#d84148", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_obstacle_distance", "color": "#d841bb", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_selection", "color": "#d8416e", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#b841d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_estimator_status", "color": "#9a41d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_pwm_input", "color": "#a141d8", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_rpm", "color": "#d8b341", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#b141d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_attitude_setpoint", "color": "#41d890", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_velocity_setpoint", "color": "#d89541", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_rate_setpoint", "color": "#41aed8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_position_setpoint", "color": "#8341d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_steering_setpoint", "color": "#41d89f", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_position_controller_status", "color": "#d741d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_throttle_setpoint", "color": "#d85741", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#41bdd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d84841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#55d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d8416e", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#8a41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#9a41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d84148", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#9ad841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#a941d8", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#41d8d4", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d871", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41d85a", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#4169d8", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41d85a", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#a1d841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#5dd841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#a1d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#41d8cd", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#a1d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d87641", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_attitude_setpoint", "color": "#41d890", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_velocity_setpoint", "color": "#d89541", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_rate_setpoint", "color": "#41aed8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_position_setpoint", "color": "#8341d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_steering_setpoint", "color": "#41d89f", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_throttle_setpoint", "color": "#d85741", "style": "dashed"}, {"source": "m_system_power_simulator", "target": "t_system_power", "color": "#41d8a7", "style": "dashed"}, {"source": "m_sensor_agp_sim", "target": "t_aux_global_position", "color": "#d841c3", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#4152d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d8ac41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d841d2", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d88541", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d84167", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gps", "color": "#b841d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_information", "color": "#d85041", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#64d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#d841d2", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_obstacle_distance", "color": "#d841bb", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#d841ac", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#d88541", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_attitude_status", "color": "#41d888", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#d8ac41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_distance_sensor", "color": "#d8d241", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#c841d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#6cd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#d841d2", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#4188d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d841ac", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#41d879", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#d88541", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#4143d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#d8a441", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#d8ac41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#d8c341", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#d8b341", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#4641d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#c0d841", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#b841d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#41a7d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#83d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#4197d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#41d852", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#4179d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#4169d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#4162d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#d84195", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#d8418d", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d89c41", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d8417e", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#d84150", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d7d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#a9d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#a941d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41c5d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#8ad841", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#5541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#5d41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d88d41", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d7d841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#cfd841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d89c41", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d87e41", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d8bb41", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#46d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#41d84b", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#415ad8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#41d869", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#41d84b", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#d7d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#4190d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41d4d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#b1d841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d741d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d85f41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#a1d841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d84176", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#c8d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos", "color": "#4dd841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#41d843", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#4152d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#414bd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#d84185", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#7b41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#cf41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d8416e", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d8ca41", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d85f41", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d85f41", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#4d41d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#41d84b", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#41d8cd", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#6441d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flight_phase_estimation", "color": "#c041d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#d87641", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#41b6d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#d741d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#d841b3", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_internal_combustion_engine_control", "target": "t_internal_combustion_engine_control", "color": "#d86e41", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#41d8c5", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#9a41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#55d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#a941d8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41cdd8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41d888", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#74d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#419fd8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#41d8b6", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#41d8cd", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d84141", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d87641", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d880", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d85f41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#41d8ae", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#41d897", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#41d862", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d84157", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#9241d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d8419c", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#415ad8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#41d869", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#b8d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d86741", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#92d841", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#b1d841", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_attitude_setpoint", "color": "#41d890", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_velocity_setpoint", "color": "#d89541", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_actuator_motors", "color": "#4180d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_rate_setpoint", "color": "#41aed8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_position_setpoint", "color": "#8341d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_steering_setpoint", "color": "#41d89f", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_throttle_setpoint", "color": "#d85741", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d84148", "style": "dashed"}, {"source": "t_vehicle_status", "target": "m_i2c_launcher", "color": "#d7d841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#4641d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#55d841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#d87e41", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#d8419c", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#d8a441", "style": "normal"}, {"source": "t_dataman_response", "target": "m_tests", "color": "#4d41d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#64d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d84148", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41cdd8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#d8415f", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_dshot", "color": "#d86e41", "style": "normal"}, {"source": "t_sensor_uwb", "target": "m_uwb_sr150", "color": "#d841a4", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_tap_esc", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#9241d8", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#41d862", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_tap_esc", "color": "#d86e41", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#5541d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pca9685_pwm_out", "color": "#d86e41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#b141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_roboclaw", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d84148", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d7d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#a941d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#4152d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#c841d8", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d89c41", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41cdd8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#41d852", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#4169d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d88d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d7d841", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#4190d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#cfd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_px4io", "color": "#d86e41", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#d841ca", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_linux_pwm_out", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_linux_pwm_out", "color": "#d86e41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#b141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#cfd841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#b841d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#d88d41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#cfd841", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#5541d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pm_selector_auterion", "color": "#cfd841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina238", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#d7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxlpm", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#d7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina220", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#d7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina228", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#9241d8", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#41d8bd", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#b841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d7d841", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#d89c41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#41d897", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#d8a441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#d84148", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#a941d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#d7d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#d8415f", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#74d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_uavcan", "color": "#d86e41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#55d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#41d84b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#4190d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#4169d8", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#41d862", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d88d41", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#d89c41", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#5541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#d7d841", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#41d8d4", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl_esc", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl_esc", "color": "#d88d41", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxl_esc", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxl_esc", "color": "#d7d841", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl_esc", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl_esc", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl_esc", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl_esc", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl_esc", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl_esc", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl_esc", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_voxl_esc", "color": "#d8bb41", "style": "normal"}, {"source": "t_led_control", "target": "m_voxl_esc", "color": "#41d862", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl_esc", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl_esc", "color": "#d86e41", "style": "normal"}, {"source": "t_landing_gear", "target": "m_vertiq_io", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_vertiq_io", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_vertiq_io", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_vertiq_io", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_vertiq_io", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_vertiq_io", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_vertiq_io", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_vertiq_io", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vertiq_io", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_vertiq_io", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_vertiq_io", "color": "#d86e41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#55d841", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#41d8bd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#d7d841", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#d8418d", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#a141d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_lightware_sf45_serial", "color": "#d8d241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_lightware_sf45_serial", "color": "#d84148", "style": "normal"}, {"source": "t_obstacle_distance", "target": "m_lightware_sf45_serial", "color": "#d841bb", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out", "color": "#d86e41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#4143d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl2_io", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl2_io", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl2_io", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl2_io", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl2_io", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl2_io", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl2_io", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl2_io", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl2_io", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl2_io", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl2_io", "color": "#d86e41", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#d7d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#d7d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#41d862", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#41d862", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#41d862", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#41d862", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#41d862", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#41d862", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#414bd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_ackermann", "color": "#4190d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_ackermann", "color": "#d89541", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_ackermann", "color": "#41d890", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_ackermann", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_ackermann", "color": "#55d841", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_ackermann", "color": "#41aed8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_ackermann", "color": "#41d89f", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_ackermann", "color": "#8341d8", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_ackermann", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_ackermann", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_ackermann", "color": "#d8bb41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_ackermann", "color": "#a9d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_ackermann", "color": "#41d869", "style": "normal"}, {"source": "t_actuator_servos", "target": "m_rover_ackermann", "color": "#4dd841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#4152d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d7d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d8d241", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d8416e", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#414bd8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#cf41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#41d897", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#9241d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#d841b3", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d841ac", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d871", "style": "normal"}, {"source": "t_aux_global_position", "target": "m_ekf2", "color": "#d841c3", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d8ca41", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#d8419c", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#9241d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d84148", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d7d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#d84185", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#41d869", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#41d897", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#a9d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#b8d841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#d841b3", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d85f41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d8bb41", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d8416e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#55d841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d7d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d84157", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#4190d8", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#4190d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#41d897", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#4169d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#41d85a", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#4190d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#41d897", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#a1d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41cdd8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#41d843", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_mecanum", "color": "#4190d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_mecanum", "color": "#41d890", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_mecanum", "color": "#d89541", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_mecanum", "color": "#4180d8", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_mecanum", "color": "#41aed8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_mecanum", "color": "#8341d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_mecanum", "color": "#41d89f", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_mecanum", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_mecanum", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_mecanum", "color": "#d8bb41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_mecanum", "color": "#a9d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_mecanum", "color": "#41d869", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_mecanum", "color": "#55d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41d888", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#6c41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_agp_sim", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d841d2", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d84167", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#64d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#9241d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_simulator", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#d7d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#41d8d4", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#4190d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#74d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#9241d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out_sim", "color": "#d86e41", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d8ac41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d841d2", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#41d84b", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#d88d41", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#41d8d4", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#74d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#4190d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#4180d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#9241d8", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_gz_bridge", "color": "#419fd8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#5dd841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_gz_bridge", "color": "#d86e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#9241d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#64d841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#d84167", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8ac41", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d88541", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d841d2", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d84195", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d7d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#41b6d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#41d852", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d89c41", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#9241d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d741d8", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#4169d8", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#4162d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#55d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d871", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#4d41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#a941d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#41d8c5", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d7d841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d87e41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#9241d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41cdd8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#41bdd8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#b841d8", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#7bd841", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#c841d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#6cd841", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d84841", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#4197d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#55d841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#46d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#4190d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#4180d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#4169d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d8419c", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#d84185", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d89c41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#41d897", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#4143d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d8417e", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#41d8a7", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d8416e", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#41d8b6", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d8ca41", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#41d8c5", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d84157", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#5d41d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d8d241", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d7d841", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#7441d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#cfd841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#7b41d8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#9241d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#8a41d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#a141d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d84148", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#b1d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#9ad841", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#a941d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41c5d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d7d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#c841d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d8416e", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#4641d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d7d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#9241d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#b8d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#55d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#b1d841", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#41d869", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#4190d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#41d869", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#a9d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#a1d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41cdd8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#41d843", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#8ad841", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#41d8cd", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d7d841", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d87641", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d85f41", "style": "normal"}, {"source": "t_rpm", "target": "m_control_allocator", "color": "#d8b341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#d8bb41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#b1d841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#41d8ae", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d84157", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#d84185", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#7b41d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#4143d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#cf41d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d8c341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d8bb41", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#9ad841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d8416e", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#d8415f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#a1d841", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#d84150", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#4190d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#41d869", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#41d897", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#d84841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#a9d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#a941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_internal_combustion_engine_control", "color": "#4190d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_internal_combustion_engine_control", "color": "#4180d8", "style": "normal"}, {"source": "t_rpm", "target": "m_internal_combustion_engine_control", "color": "#d8b341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_internal_combustion_engine_control", "color": "#d7d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d8d241", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#414bd8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#4188d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#d841ac", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#55d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#41d871", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d7d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#d8415f", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#83d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41d888", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#4190d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#a9d841", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d85041", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d7d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#9241d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41cdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#4169d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d89c41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#41d897", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#6441d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d7d841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41d4d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#9241d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d84148", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#a9d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#92d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#41bdd8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#6441d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d7d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#4152d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#c041d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#d85f41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d84148", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#d841b3", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#55d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#4143d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#41a7d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#6cd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#9241d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#415ad8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#41d869", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#4169d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#55d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#d8a441", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#b1d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_differential", "color": "#4190d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_differential", "color": "#d89541", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_differential", "color": "#41d890", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_differential", "color": "#4180d8", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_differential", "color": "#41aed8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_differential", "color": "#8341d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_differential", "color": "#41d89f", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_differential", "color": "#d85741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_differential", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_differential", "color": "#d8bb41", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_differential", "color": "#a9d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_differential", "color": "#41d869", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_differential", "color": "#55d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#414bd8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#d841ac", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d7d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#41a7d8", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_system_power_simulator", "name": "system_power_simulator", "type": "Module", "color": "#666666"}, {"id": "m_lightware_sf45_serial", "name": "lightware_sf45_serial", "type": "Module", "color": "#666666"}, {"id": "m_pm_selector_auterion", "name": "pm_selector_auterion", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_differential", "name": "rover_differential", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_io_bypass_control", "name": "io_bypass_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_template_module", "name": "template_module", "type": "Module", "color": "#666666"}, {"id": "m_rover_ackermann", "name": "rover_ackermann", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_agp_sim", "name": "sensor_agp_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_linux_pwm_out", "name": "linux_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_rpm_simulator", "name": "rpm_simulator", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_rover_mecanum", "name": "rover_mecanum", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_i2c_launcher", "name": "i2c_launcher", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_ets_airspeed", "name": "ets_airspeed", "type": "Module", "color": "#666666"}, {"id": "m_sagetech_mxs", "name": "sagetech_mxs", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_pps_capture", "name": "pps_capture", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1_mag", "name": "lsm9ds1_mag", "type": "Module", "color": "#666666"}, {"id": "m_rpm_capture", "name": "rpm_capture", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_microbench", "name": "microbench", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_iridiumsbd", "name": "iridiumsbd", "type": "Module", "color": "#666666"}, {"id": "m_iam20680hp", "name": "iam20680hp", "type": "Module", "color": "#666666"}, {"id": "m_bmi088_i2c", "name": "bmi088_i2c", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls_pwm", "name": "ll40ls_pwm", "type": "Module", "color": "#666666"}, {"id": "m_leddar_one", "name": "leddar_one", "type": "Module", "color": "#666666"}, {"id": "m_uavcannode", "name": "uavcannode", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_rpi_rc_in", "name": "rpi_rc_in", "type": "Module", "color": "#666666"}, {"id": "m_uwb_sr150", "name": "uwb_sr150", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_tattu_can", "name": "tattu_can", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm40609d", "name": "icm40609d", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_adis16477", "name": "adis16477", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_adis16497", "name": "adis16497", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_vertiq_io", "name": "vertiq_io", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_tcbp001ta", "name": "tcbp001ta", "type": "Module", "color": "#666666"}, {"id": "m_mpl3115a2", "name": "mpl3115a2", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_roboclaw", "name": "roboclaw", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm42605", "name": "icm42605", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_iim42653", "name": "iim42653", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_voxl_esc", "name": "voxl_esc", "type": "Module", "color": "#666666"}, {"id": "m_mappydot", "name": "mappydot", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_voxl2_io", "name": "voxl2_io", "type": "Module", "color": "#666666"}, {"id": "m_neopixel", "name": "neopixel", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_tap_esc", "name": "tap_esc", "type": "Module", "color": "#666666"}, {"id": "m_asp5033", "name": "asp5033", "type": "Module", "color": "#666666"}, {"id": "m_mpu6500", "name": "mpu6500", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_lsm9ds1", "name": "lsm9ds1", "type": "Module", "color": "#666666"}, {"id": "m_pcf8583", "name": "pcf8583", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_gy_us42", "name": "gy_us42", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_afbrs50", "name": "afbrs50", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_ms4515", "name": "ms4515", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_bmi085", "name": "bmi085", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_bmi270", "name": "bmi270", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_sch16t", "name": "sch16t", "type": "Module", "color": "#666666"}, {"id": "m_cyphal", "name": "cyphal", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_voxlpm", "name": "voxlpm", "type": "Module", "color": "#666666"}, {"id": "m_ina220", "name": "ina220", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_bmm350", "name": "bmm350", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_pga460", "name": "pga460", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_mb12xx", "name": "mb12xx", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_lps25h", "name": "lps25h", "type": "Module", "color": "#666666"}, {"id": "m_ms5837", "name": "ms5837", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_srf02", "name": "srf02", "type": "Module", "color": "#666666"}, {"id": "m_srf05", "name": "srf05", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_auav", "name": "auav", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#d89941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d8bd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d8a741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#41d863", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_internal_combustion_engine_control", "name": "internal_combustion_engine_control", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#d84199", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#41d854", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#416ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#9441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#d841cc", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d841a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#415bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#4341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#a2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#4163d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#7641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#b1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d89e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#41d8d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#419ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#418fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#76d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d841bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_position_setpoint", "name": "rover_position_setpoint", "type": "topic", "color": "#d84841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#d8c541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#ced841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#85d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_rover_steering_setpoint", "name": "rover_steering_setpoint", "type": "topic", "color": "#68d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#41d86a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_attitude_setpoint", "name": "rover_attitude_setpoint", "type": "topic", "color": "#41d896", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#4196d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#6841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#7e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_velocity_setpoint", "name": "rover_velocity_setpoint", "type": "topic", "color": "#ce41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_throttle_setpoint", "name": "rover_throttle_setpoint", "type": "topic", "color": "#d641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#d84183", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d871", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#41d8ac", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#a241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d84191", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#d8b641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#6fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#41d8b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#aad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#41d84d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#b141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d84f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_rate_setpoint", "name": "rover_rate_setpoint", "type": "topic", "color": "#d8d341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#43d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_aux_global_position", "name": "aux_global_position", "type": "topic", "color": "#41d8a5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource2d.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#c741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d8416d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d84148", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d8cc41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#4ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#41d887", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d88f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_iridiumsbd_status", "name": "iridiumsbd_status", "type": "topic", "color": "#d8a041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_obstacle_distance", "name": "obstacle_distance", "type": "topic", "color": "#41cad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ObstacleDistance.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d841c5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d84165", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d86d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#d88341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d88a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d841af", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#d8418a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#d8415e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d86541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#c0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#b8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#59d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#41d845", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#41d8bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#4187d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos", "name": "actuator_servos", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#8541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#d841d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d85741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#c7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#9bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41d85b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#41bbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#4171d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#4154d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#5241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d89141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#7ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#414dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#d841b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d841a0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41d8ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#41a5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#4145d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d84157", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d87441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pps_capture", "name": "pps_capture", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#41acd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#5941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#aa41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#c041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#94d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#41c2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41b4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#6f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_uwb", "name": "sensor_uwb", "type": "topic", "color": "#b841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#d8414f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#52d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d8af41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#d6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d85e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#41d8c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#4a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#9b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#d84174", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_tests", "target": "t_dataman_request", "color": "#d841d3", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_io_bypass_control", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#52d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_rpi_rc_in", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_uwb_sr150", "target": "t_sensor_uwb", "color": "#b841d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_tap_esc", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#94d841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#41d8bb", "style": "dashed"}, {"source": "m_iridiumsbd", "target": "t_iridiumsbd_status", "color": "#d8a041", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_asp5033", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_auav", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_auav", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_ms4515", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_ets_airspeed", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_sagetech_mxs", "target": "t_transponder_report", "color": "#4ad841", "style": "dashed"}, {"source": "m_tattu_can", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#d89141", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41d8ca", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_mpu6500", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm40609d", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm42605", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_iam20680hp", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_iim42653", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_lsm9ds1", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_bmi085", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_bmi270", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_bmi088_i2c", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_sch16t", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_adis16477", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_adis16497", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_linux_pwm_out", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#41d8bb", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#94d841", "style": "dashed"}, {"source": "m_rpm_simulator", "target": "t_rpm", "color": "#d84174", "style": "dashed"}, {"source": "m_pcf8583", "target": "t_rpm", "color": "#d84174", "style": "dashed"}, {"source": "m_cyphal", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_cyphal", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#d89141", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_voxlpm", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_ina220", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d8417b", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#7ed841", "style": "dashed"}, {"source": "m_pps_capture", "target": "t_pps_capture", "color": "#8cd841", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_bmm350", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_lsm9ds1_mag", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_ads1115", "target": "t_adc_report", "color": "#41b4d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#41b4d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d84157", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#d89141", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_voxl_esc", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_vertiq_io", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d8417b", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_gy_us42", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_srf02", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_pga460", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_afbrs50", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_ll40ls_pwm", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_mb12xx", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_mappydot", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_leddar_one", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_obstacle_distance", "color": "#41cad8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_attitude", "color": "#41d8d8", "style": "dashed"}, {"source": "m_lightware_sf45_serial", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_srf05", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#94d841", "style": "dashed"}, {"source": "m_vectornav", "target": "t_estimator_status", "color": "#d86d41", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_selection", "color": "#d841af", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_tcbp001ta", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_mpl3115a2", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_lps25h", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_ms5837", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_rpm", "color": "#d84174", "style": "dashed"}, {"source": "m_rpm_capture", "target": "t_pwm_input", "color": "#52d841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_voxl2_io", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_gps_inject_data", "color": "#41d8bb", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_uavcannode", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_rate_setpoint", "color": "#d8d341", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_position_setpoint", "color": "#d84841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_velocity_setpoint", "color": "#ce41d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_attitude_setpoint", "color": "#41d896", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_steering_setpoint", "color": "#68d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_throttle_setpoint", "color": "#d641d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_position_controller_status", "color": "#7641d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#c041d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#d8c541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#4196d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#6fd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#418fd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d86d41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d841af", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d871", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#8c41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41d8d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#a241d8", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#41d8c2", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d8416d", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41d854", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#d8b641", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#41d854", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#41d887", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#5241d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_rate_setpoint", "color": "#d8d341", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_position_setpoint", "color": "#d84841", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_velocity_setpoint", "color": "#ce41d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_attitude_setpoint", "color": "#41d896", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_steering_setpoint", "color": "#68d841", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_throttle_setpoint", "color": "#d641d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_system_power_simulator", "target": "t_system_power", "color": "#d84157", "style": "dashed"}, {"source": "m_sensor_agp_sim", "target": "t_aux_global_position", "color": "#41d8a5", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#415bd8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d8a741", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d8af41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d8bd41", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#41d84d", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_obstacle_distance", "color": "#41cad8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#d84141", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_distance_sensor", "color": "#d86541", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#415bd8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_attitude_status", "color": "#d841a7", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#d8a741", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#d8bd41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#d8418a", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gps", "color": "#94d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_information", "color": "#41d8d1", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#aa41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d84141", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#d84f41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#41a5d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#415bd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#d8a741", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#d8bd41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#6041d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#6f41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#d6d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#d84174", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41d8ac", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d8415e", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#7ed841", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#94d841", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#d8414f", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#41c2d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#d85e41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#4196d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#d841d3", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d87441", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#59d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#4154d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#d88341", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#4ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#414dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#d89941", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#d8b641", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#c7d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#b8d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d84165", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#b1d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#41d879", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d87b41", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#aad841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d85741", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#414dd8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d841a0", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#9bd841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#d84183", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#9b41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#c7d841", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#4145d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d84148", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#c741d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#4145d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41d85b", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#41d86a", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#7e41d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#c7d841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d89e", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#7641d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#85d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d89e", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#6841d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#a2d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos", "color": "#4180d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#b141d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d841bd", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#c0d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d841af", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#41d8b4", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#41acd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d88f", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d8af41", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#60d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#416ad8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#419ed8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#4145d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#4341d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#9441d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#5241d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#d84199", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#41d863", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#ced841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#d841cc", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#85d841", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#6841d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#85d841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#6841d8", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d88a41", "style": "dashed"}, {"source": "m_internal_combustion_engine_control", "target": "t_internal_combustion_engine_control", "color": "#41d880", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#4a41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#4196d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#d86d41", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#a241d8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#4171d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#4163d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d841a7", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#41d845", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#d841b6", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d1d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#76d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#6841d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#85d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d89e", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#5241d8", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d8cc41", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#5941d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#43d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#8541d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d841c5", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#41bbd8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#c741d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#9441d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#d84148", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d89e", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#41d86a", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_rate_setpoint", "color": "#d8d341", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_position_setpoint", "color": "#d84841", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_velocity_setpoint", "color": "#ce41d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_attitude_setpoint", "color": "#41d896", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_steering_setpoint", "color": "#68d841", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_throttle_setpoint", "color": "#d641d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_actuator_motors", "color": "#4187d8", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#41d8d8", "style": "dashed"}, {"source": "t_vehicle_status", "target": "m_i2c_launcher", "color": "#c7d841", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_microbench", "color": "#d8415e", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_microbench", "color": "#d85741", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_microbench", "color": "#aa41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_microbench", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#43d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#d6d841", "style": "normal"}, {"source": "t_dataman_response", "target": "m_tests", "color": "#d88a41", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_io_bypass_control", "color": "#d8418a", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#4171d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#41b4d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#c7d841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_dshot", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#41d845", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#41d887", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#8541d8", "style": "normal"}, {"source": "t_sensor_uwb", "target": "m_uwb_sr150", "color": "#b841d8", "style": "normal"}, {"source": "t_led_control", "target": "m_tap_esc", "color": "#5941d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tap_esc", "color": "#41d879", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_tap_esc", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_tap_esc", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_tap_esc", "color": "#41d845", "style": "normal"}, {"source": "t_gripper", "target": "m_tap_esc", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_tap_esc", "color": "#41d887", "style": "normal"}, {"source": "t_landing_gear", "target": "m_tap_esc", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_tap_esc", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_tap_esc", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_tap_esc", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_tap_esc", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_tap_esc", "color": "#8541d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pca9685_pwm_out", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#41d845", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#41d887", "style": "normal"}, {"source": "t_gripper", "target": "m_pca9685_pwm_out", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#8541d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#41d8bb", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_roboclaw", "color": "#9bd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#41d8d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#4171d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#4196d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#a241d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#4171d8", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#414dd8", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#6f41d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d8af41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_sagetech_mxs", "color": "#d8b641", "style": "normal"}, {"source": "t_transponder_report", "target": "m_sagetech_mxs", "color": "#4ad841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_sagetech_mxs", "color": "#94d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_sagetech_mxs", "color": "#c7d841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_px4io", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#41d845", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41d8ca", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#9bd841", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#41d887", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#c7d841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_linux_pwm_out", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_linux_pwm_out", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_linux_pwm_out", "color": "#41d845", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_linux_pwm_out", "color": "#41d887", "style": "normal"}, {"source": "t_gripper", "target": "m_linux_pwm_out", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear", "target": "m_linux_pwm_out", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_linux_pwm_out", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_linux_pwm_out", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_linux_pwm_out", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_linux_pwm_out", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_linux_pwm_out", "color": "#8541d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#41d8bb", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cyphal", "color": "#9bd841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_cyphal", "color": "#94d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_cyphal", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#9bd841", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#41d879", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pm_selector_auterion", "color": "#9bd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#c7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina238", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxlpm", "color": "#c7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxlpm", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina220", "color": "#c7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina220", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#c7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#c7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina228", "color": "#d8c541", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_capture", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#8541d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_pps_capture", "color": "#94d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#a241d8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#414dd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#4196d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#d8cc41", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#d6d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#41d8d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#a241d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41b4d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#b141d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#4187d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#41d845", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#414dd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d841a0", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#4145d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#d8b641", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#5941d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#41d879", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_uavcan", "color": "#41d880", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#41d887", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#c7d841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#41d8bb", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#41d8c2", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#9bd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#a241d8", "style": "normal"}, {"source": "t_led_control", "target": "m_voxl_esc", "color": "#5941d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl_esc", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl_esc", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_voxl_esc", "color": "#aad841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl_esc", "color": "#41d845", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_voxl_esc", "color": "#d8c541", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl_esc", "color": "#d841a0", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl_esc", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl_esc", "color": "#41d887", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl_esc", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl_esc", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl_esc", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl_esc", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl_esc", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_voxl_esc", "color": "#c7d841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_vertiq_io", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_vertiq_io", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_vertiq_io", "color": "#41d845", "style": "normal"}, {"source": "t_gripper", "target": "m_vertiq_io", "color": "#41d8c2", "style": "normal"}, {"source": "t_actuator_test", "target": "m_vertiq_io", "color": "#d841a0", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_vertiq_io", "color": "#41d887", "style": "normal"}, {"source": "t_landing_gear", "target": "m_vertiq_io", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_vertiq_io", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_vertiq_io", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_vertiq_io", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vertiq_io", "color": "#8541d8", "style": "normal"}, {"source": "t_pps_capture", "target": "m_camera_trigger", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#a241d8", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#d89941", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#c7d841", "style": "normal"}, {"source": "t_pwm_input", "target": "m_ll40ls_pwm", "color": "#52d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_lightware_sf45_serial", "color": "#41d8d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_lightware_sf45_serial", "color": "#d86541", "style": "normal"}, {"source": "t_obstacle_distance", "target": "m_lightware_sf45_serial", "color": "#41cad8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#41d845", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#41d887", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#8541d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#41a5d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_voxl2_io", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_voxl2_io", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_voxl2_io", "color": "#41d845", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_voxl2_io", "color": "#41d887", "style": "normal"}, {"source": "t_gripper", "target": "m_voxl2_io", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear", "target": "m_voxl2_io", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_voxl2_io", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_voxl2_io", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_voxl2_io", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_voxl2_io", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_voxl2_io", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#41d8d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#c7d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#c7d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#5941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#5941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_neopixel", "color": "#5941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#5941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#5941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#5941d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_template_module", "color": "#c0d841", "style": "normal"}, {"source": "t_actuator_servos", "target": "m_rover_ackermann", "color": "#4180d8", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_ackermann", "color": "#d8d341", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_ackermann", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_ackermann", "color": "#aad841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_ackermann", "color": "#d84841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_ackermann", "color": "#c741d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_ackermann", "color": "#ce41d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_rover_ackermann", "color": "#7641d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_ackermann", "color": "#41d896", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_ackermann", "color": "#68d841", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_ackermann", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_ackermann", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_ackermann", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_ackermann", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_ackermann", "color": "#a241d8", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#416ad8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#aad841", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d841cc", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#d8cc41", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#4341d8", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#8c41d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#5241d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#c0d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d841af", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#41acd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d8cc41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d86541", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d8af41", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#60d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#d8b641", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#ced841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#8541d8", "style": "normal"}, {"source": "t_aux_global_position", "target": "m_ekf2", "color": "#41d8a5", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#43d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#41d8d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#7ed841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#a241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#c7d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#41bbd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#b1d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d841af", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#6841d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#9bd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d88f", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d8cc41", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#c741d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#4196d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#ced841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#a241d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#41a5d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d841c5", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#c7d841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#a2d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#85d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#aad841", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#419ed8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#41d854", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d8cc41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d89e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#aad841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#41d854", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d89e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#a241d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#4171d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d841bd", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d84191", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d8cc41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#d8b641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#c7d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_mecanum", "color": "#b1d841", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_mecanum", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_mecanum", "color": "#aad841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_mecanum", "color": "#d84841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_mecanum", "color": "#c741d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_mecanum", "color": "#ce41d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_mecanum", "color": "#41d896", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_mecanum", "color": "#68d841", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_mecanum", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_mecanum", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_mecanum", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_mecanum", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_mecanum", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#4196d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d841a7", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#41d8d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_agp_sim", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d8bd41", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#d8418a", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#41d84d", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_simulator", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#c7d841", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_pwm_out_sim", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#41d845", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#41d887", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d8a741", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d8bd41", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_gz_bridge", "color": "#4163d8", "style": "normal"}, {"source": "t_internal_combustion_engine_control", "target": "m_gz_bridge", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#b141d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#41d845", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#41d8c2", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#41d887", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#4145d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#9bd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#d841a0", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#4187d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#8541d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#4171d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#41d84d", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#d8418a", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8a741", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#415bd8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d8416d", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#41c2d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#a241d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d88a41", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#4ad841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d85e41", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#414dd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#4196d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#7641d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#d8b641", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#41d863", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#8541d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#8c41d8", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#59d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#c7d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#4171d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d85741", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#4a41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#c7d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d1d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#41a5d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#4196d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#6fd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d86541", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d86d41", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#418fd8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#60d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#4187d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d841c5", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d87b41", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#4171d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#4154d8", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#52d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d841af", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#d841b6", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#d88341", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#43d841", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d89141", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#414dd8", "style": "normal"}, {"source": "t_iridiumsbd_status", "target": "m_commander", "color": "#d8a041", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#d8b641", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#4a41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#41d86a", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d871", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#6041d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#6f41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d88f", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d8cc41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#c7d841", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#8c41d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#b8d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d84165", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#41d8b4", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#9bd841", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d84157", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#94d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#d8414f", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#9b41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#a241d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#6f41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#c7d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#41d88f", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#d8415e", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d841af", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#41bbd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d89e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#a241d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#41d86a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#a241d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#c741d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#4196d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#c741d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d89e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#a241d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d841bd", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d84191", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#d8b641", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#c7d841", "style": "normal"}, {"source": "t_rpm", "target": "m_control_allocator", "color": "#d84174", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#6841d8", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#76d841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#d84183", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#41d86a", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#85d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#c7d841", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#5241d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d841af", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#41d8b4", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d84f41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#aad841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#41a5d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41b4d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#41acd8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d88f", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#6fd841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#d8414f", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d841c5", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#aad841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#c741d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#4196d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#d8cc41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#8541d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#a241d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#d84191", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d89e", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#d841d3", "style": "normal"}, {"source": "t_rpm", "target": "m_internal_combustion_engine_control", "color": "#d84174", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_internal_combustion_engine_control", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_internal_combustion_engine_control", "color": "#c7d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_internal_combustion_engine_control", "color": "#4187d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#c0d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d8416d", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#41d8ac", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#9bd841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#d86541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#a241d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41b4d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#d8c541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#c7d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#b1d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d841a7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#4196d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#41d8d1", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d87441", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#4171d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#c7d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#c041d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#414dd8", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41d85b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#d8b641", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d8cc41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#c7d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#9441d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#a241d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#c041d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#6841d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#d8c541", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#418fd8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#d86d41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#d8b641", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#ced841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#c7d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#41d8d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d8af41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#a241d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#6041d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#aa41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#41a5d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#d8414f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#8541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#aad841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#c741d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d84148", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#a241d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#d6d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#41d86a", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_differential", "color": "#b1d841", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_differential", "color": "#d8d341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_differential", "color": "#aad841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_differential", "color": "#d84841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_differential", "color": "#c741d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_differential", "color": "#ce41d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_differential", "color": "#41d896", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_differential", "color": "#68d841", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_differential", "color": "#d641d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_differential", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_differential", "color": "#41d8d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_differential", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_differential", "color": "#a241d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#c0d841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#41d8ac", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#a241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#c7d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#d8414f", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_px4_fmu-v2.json b/docs/public/middleware/graph_px4_fmu-v2.json index b1d931e96e..86eeea468f 100644 --- a/docs/public/middleware/graph_px4_fmu-v2.json +++ b/docs/public/middleware/graph_px4_fmu-v2.json @@ -1 +1 @@ -{"nodes": [{"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#41d875", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d84b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d89441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#41d855", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d86041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d8c941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41d8d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#41d3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41c9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#9fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d841d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#41d88a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#419fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#4175d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#417fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#a941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d87f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#4b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#5541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#7541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#7f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#41d8b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#4160d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d84160", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41d89f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d8be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41a9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#4155d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#8a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#be41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d841a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d84194", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#d87f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#7fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#416ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d841c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#d841b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#d8419f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d8a941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d8d341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#75d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#55d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d860", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41d8a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#b441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#a9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#41b4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#418ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#9441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d8417f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#d8414b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#bed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d86a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d8b441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#c9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#94d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#41bed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#9f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d8416a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#d88a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#b4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#4bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d86a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#c941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d89f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41d8c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#8ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d8418a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_board_adc", "target": "t_adc_report", "color": "#d88a41", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#4194d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#9f41d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#41d86a", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#414bd8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#b441d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d86a", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#414bd8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#b441d8", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#d8416a", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#4141d8", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#d8416a", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#4141d8", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#b4d841", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#b4d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d8a941", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#418ad8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41d84b", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#416ad8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#d8419f", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d341d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#41d8c9", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d8a941", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#7541d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#418ad8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#41d84b", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#416ad8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#bed841", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d86a41", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#d8417f", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d341d8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d84155", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#d8419f", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d8418a", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d8d341", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d341d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d8a941", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41d8d3", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#7541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#418ad8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d86a41", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#9441d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#a941d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#d8414b", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d84160", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#75d841", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#d85541", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d86041", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#417fd8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#416ad8", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d84194", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41d894", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#8a41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#7541d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d84b41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d841d3", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d841a9", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d87541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41a9d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#419fd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#41d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d8be41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#7f41d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#6041d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#4b41d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#4175d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#a9d841", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d8b441", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#7541d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#d8419f", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#d8c941", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#6041d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41c9d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#75d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41d8a9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#5541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#41d894", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#7541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#7f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#d3d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#9f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#be41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#b4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d8be", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41d8c9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d341d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#9fd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#94d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#8ad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#41d3d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#41bed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d841be", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d8416a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#d841b4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#41b4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d87541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#d8419f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#d87f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#4bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#60d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d89441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d8418a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#41d855", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d86a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d87f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d84175", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d84155", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#414bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#4141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#41d88a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d8be41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d89f41", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#9fd841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#55d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#41d875", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89441", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#7f41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#4b41d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#9fd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d84141", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#7541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#9441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41d89f", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#c941d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#8ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#7fd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#75d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#6ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#d841b4", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#d8419f", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#4175d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d860", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#4155d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d84175", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#d8be41", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d8c941", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d3d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#c9d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d841c9", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d89f41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#4160d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d841a9", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#41d8b4", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d341d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#d88a41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#d8a941", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#414bd8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#414bd8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#d8419f", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#6041d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d8a941", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#418ad8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#417fd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41c9d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#416ad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#d8419f", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#6041d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d8a941", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#418ad8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#417fd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#41c9d8", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#bed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#75d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#416ad8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d341d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#75d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#d88a41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d8c941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41d894", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#7541d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d3d841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#9f41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#9441d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d84b41", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41d89f", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41d8a9", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#41d8b4", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#b4d841", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d8be", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#a9d841", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d841d3", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#d8419f", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d841a9", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41a9d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#60d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#419fd8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#4194d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#4175d8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d8418a", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d8417f", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#416ad8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#4160d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d86a", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d860", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d8a941", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#4155d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#4141d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#41d88a", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d8be41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d8416a", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d84160", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d84155", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d8c941", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41d8d3", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#75d841", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#d841b4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#d8419f", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#60d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#41d3d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d841a9", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d841c9", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#75d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d89f41", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#41d8b4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#d8419f", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d89441", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d87541", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#55d841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d8a941", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#7f41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#d8be41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#75d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#4160d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#d8419f", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#6a41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#75d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d84155", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#75d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d8c941", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#41d8a9", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#41c9d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d84b41", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d89441", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d89f41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d8a941", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d8b441", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d8be41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d8c941", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d8d341", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#d3d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#c9d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#b4d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#9fd841", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#94d841", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#75d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#60d841", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#4bd841", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#41d84b", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#41d855", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d86a", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d860", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#41d875", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d87f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#41d894", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#41d89f", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41d8c9", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#41bed8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41c9d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#41b4d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41a9d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#419fd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#4160d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#414bd8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#8a41d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#7541d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#9441d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#a941d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#9f41d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#b441d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d841be", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#d8419f", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d84194", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d8418a", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d84175", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d84155", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#d8414b", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d89441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41d894", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#a941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41c9d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d87541", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#7f41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#4b41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#9fd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41c9d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d86041", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#75d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d84155", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#d8419f", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#c941d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d84194", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d84175", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d87f", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#41d841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d8be41", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#9441d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#4175d8", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d87541", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#be41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d8c941", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41d8c9", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#5541d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#b4d841", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#d88a41", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#419fd8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d3d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#c9d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#a941d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d8416a", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#4160d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d841a9", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_mpu6000", "name": "mpu6000", "type": "Module", "color": "#666666"}, {"id": "m_lsm303d", "name": "lsm303d", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_l3gd20", "name": "l3gd20", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#c941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#8ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#4155d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#d84160", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d86a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#416ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#5541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#a941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d8416a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#9fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#41b4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#b441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d8a941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#c9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#41d88a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#41d8a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d88a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#75d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#7fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#417fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#7f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d84194", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#41c9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#4b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d87f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#d8b441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#d8c941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#b4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#418ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d841d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d8419f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#d8418a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d8417f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#d84b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#41d855", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#41d860", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#41d3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#41bed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41a9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#419fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#be41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d86041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d89441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#4bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d8b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d8be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#4160d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#9441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#41d8c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#7541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#8a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#9f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d841b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#bed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41d89f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d8d341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#94d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#55d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#4175d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d841a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#a9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41d86a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#41d875", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#d8414b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41d87f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41d8d3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d841c9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d89f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_board_adc", "target": "t_system_power", "color": "#d84141", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#41d86a", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#94d841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#41d3d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#d8414b", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#41d8b4", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#41d3d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d8b4", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#d8414b", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_accel", "color": "#bed841", "style": "dashed"}, {"source": "m_mpu6000", "target": "t_sensor_gyro", "color": "#d84155", "style": "dashed"}, {"source": "m_l3gd20", "target": "t_sensor_gyro", "color": "#d84155", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_accel", "color": "#bed841", "style": "dashed"}, {"source": "m_lsm303d", "target": "t_sensor_mag", "color": "#d8be41", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#d8be41", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#4194d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d86041", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#d8b441", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d841b4", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#4194d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#417fd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#4175d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#9f41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d86041", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#6041d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d841b4", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#be41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#d8b441", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41d89f", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#41d87f", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#6041d8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#4bd841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#4160d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#9441d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#75d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#417fd8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d841c9", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#4175d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d86041", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#6041d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d841b4", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#be41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#41c9d8", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#7541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#6a41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#41d894", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41d84b", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d86a41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#4194d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d88a41", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d8419f", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d841d3", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#41b4d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#418ad8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#417fd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d89f41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#d8c941", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#c9d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#b4d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d8416a", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#9fd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#8ad841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#7fd841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d84194", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d341d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#41d8a9", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#41d8c9", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#417fd8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d3d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#9441d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d89441", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#5541d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#be41d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d341d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#a941d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#41d3d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#6ad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#d84b41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#b441d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#60d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#94d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#55d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d87541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#be41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#4bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d841d3", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d87f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#41d855", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#41b4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#41d860", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d841c9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#417fd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d841be", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#d8a941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#416ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41d87f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d841a9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#d8be41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#d84194", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#4155d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#41d88a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#4b41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#4141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#6041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#bed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#7f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#8a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d8417f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d8416a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#a9d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d84155", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41d8d3", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#d8414b", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#b441d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#d84194", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#4155d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d84175", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#c941d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#7fd841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#b441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#d84b41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#be41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#41bed8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#419fd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#417fd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#d841be", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#41d875", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#414bd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#4b41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#d8418a", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#7541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#41d8a9", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#9441d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d8be", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#d8416a", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#d84160", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#a941d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d85541", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41a9d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#418ad8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d8d341", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d8a941", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41d8d3", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#6041d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41d86a", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#d86041", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#41d3d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#41d3d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#4175d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d88a41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#4194d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d86041", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#5541d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d841b4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d341d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d88a41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#9441d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#4194d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d86041", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#5541d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d841b4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#be41d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#d341d8", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41d89f", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#6041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#9441d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41d86a", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d85541", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d86041", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#be41d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#41c9d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#4bd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d841d3", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#41d855", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#41b4d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#d8414b", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#419fd8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#417fd8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d89441", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d841c9", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d89f41", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d8a941", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#418ad8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#4194d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#a941d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#d8be41", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#41d88a", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#414bd8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#c9d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#bed841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#5541d8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#d8418a", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#7541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#41d8a9", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d8417f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#9441d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d8be", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#b4d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d8416a", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#9f41d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#9fd841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d84155", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#41d8c9", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#94d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#9441d8", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41d84b", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#75d841", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#d84b41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#9441d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d85541", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41a9d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#60d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d8d341", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#418ad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#be41d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#416ad8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41d8d3", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#41d8a9", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#41d855", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#41b4d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#4155d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#9441d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#be41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#41b4d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#9441d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#418ad8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#d8416a", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#d84160", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d86041", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#9441d8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#4141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#5541d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#be41d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#4bd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#a941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#5541d8", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#d89441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#9441d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d86041", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d89f41", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#d8a941", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#d8b441", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#d8be41", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#d8c941", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d8d341", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d3d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#c9d841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#b4d841", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#a9d841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#94d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#8ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#75d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#60d841", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#55d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#4bd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#41d855", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#41d860", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#d8414b", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41d87f", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#41d894", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#41d8a9", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d8b4", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d8be", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41d8d3", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#41d3d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#41b4d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#419fd8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#418ad8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#417fd8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#4160d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#4155d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#414bd8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#4b41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#5541d8", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#6a41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#7541d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#8a41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#9441d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#a941d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#b441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#be41d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#c941d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d841d3", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d841c9", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#d841be", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d841a9", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d8419f", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d8416a", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#d84160", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#41b4d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#4155d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#9441d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#5541d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d841d3", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#41b4d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d84194", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#9441d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#b441d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d86a41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#5541d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#4bd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#41b4d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d8419f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#9441d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d8416a", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#4b41d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d89f41", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#60d841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d841be", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#be41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#7541d8", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#41d875", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#41d8a9", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#41bed8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#a941d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41d87f", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d87f41", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41d86a", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#418ad8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d8d341", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d8a941", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#c9d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#bed841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d84155", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#7f41d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#d8be41", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_px4_fmu-v4.json b/docs/public/middleware/graph_px4_fmu-v4.json index f4a5be44af..2f2a7e7b5e 100644 --- a/docs/public/middleware/graph_px4_fmu-v4.json +++ b/docs/public/middleware/graph_px4_fmu-v4.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d841c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#d841bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d84162", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d89941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#67d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#4cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d8b441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#59d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#45d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#d841cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#41cbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d86941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#5941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#8941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#9dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d84169", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#d88441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d8a041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#d8c241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#9d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d87e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#75d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#6ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#419bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#4150d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#6741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#d441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d8418b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d85c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#41c4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#9041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#ab41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#d89241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d8d641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#53d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#41d887", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#4541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#41d857", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#414ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#8241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d84199", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#97d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#41d84a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#41d865", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#4172d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#d8417e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#b9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#90d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#bf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d841c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d841ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d88b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#bfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#41d8d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d8415c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#c6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#abd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#41d8a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d8a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#4c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#9741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#cd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d84170", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d8bb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#d8c841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#89d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#41d1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41afd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#415ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#5341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#6e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d86241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#d87041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d87741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#7bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d85e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41d8c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41d8cb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#7541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#d8ad41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#b2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#a441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#b241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#c641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d84177", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d8cf41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#41d89b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#cdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#a4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#41d872", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#4187d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#b941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d841a0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d84192", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#82d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41d850", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d8af", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4157d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d841d6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#d841b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#d8a641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41a2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#7b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#4165d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d841a6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41a9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d84184", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#82d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#82d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#416cd8", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#4143d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#4143d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#53d841", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#53d841", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#53d841", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41d850", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#abd841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#41d880", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#d87741", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#5341d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#41d8af", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#41d85e", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d8af", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d85e", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#5341d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_vectornav", "target": "t_estimator_status", "color": "#9741d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_selection", "color": "#c6d841", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#41d8af", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d4d841", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#97d841", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#97d841", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#97d841", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#97d841", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#97d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#abd841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#41d880", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#d87741", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#d8a641", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#abd841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#41d880", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d87741", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#7b41d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#c641d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#b941d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41d850", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41d850", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#ab41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#b941d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#abd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#c641d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#d8c241", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#41d880", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#d87741", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d841ad", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d84170", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#d87041", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#419bd8", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#7bd841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d87741", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d85541", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#414ad8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#b941d8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41a9d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#b2d841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d84177", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d84147", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#d841cf", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d84199", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#41d880", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d8a041", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#41d8a2", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#9741d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#41d8d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#cd41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d86c", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d84184", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#c6d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#6741d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d84170", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d84169", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#9041d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#b941d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d8cf41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#4172d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#bf41d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d85c41", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#67d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_figure_eight_status", "color": "#41d84a", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#418ed8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#d84741", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flight_phase_estimation", "color": "#6ed841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#d8cf41", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#60d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#7541d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#41d879", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4cd841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#d84192", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d85c41", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#7541d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#d8c841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#41d8d1", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d8415c", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d86941", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#4541d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#5941d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#d89241", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#d8417e", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#4165d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#9741d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#cd41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#9041d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#6741d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#d8ad41", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#41d872", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d8418b", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d8cf41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41d8cb", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#d84147", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#d87e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#90d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#89d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#41cbd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#41bdd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#75d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#b241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#d85c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#59d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41a9d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#53d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#45d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41a2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d841d6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#d88441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#4194d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d89941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#41d857", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d841a6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#41d887", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#415ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#d8417e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#41d894", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d8d641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d8a9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#a4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#5341d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#6741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d8af", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#41d8b6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#97d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d84170", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#7b41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#9041d8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d85c41", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#67d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d86241", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#4172d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4cd841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#8941d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d85c41", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#90d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#41d1d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#89d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41b6d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#41d843", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d88b41", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#d841bb", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#d89241", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#d841b4", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#d841a6", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#cdd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#4c41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d84177", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#9dd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#6741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d84147", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d87e41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#d441d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d84741", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d841c8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#c6d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#b9d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d84155", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#53d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d8bb41", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41a2d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#8241d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#abd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#41d880", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d87741", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#d841a0", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#41d8af", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#4157d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d841c2", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#4187d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#41d8bd", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d84e41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d84162", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d8b441", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#6e41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#41a2d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#b941d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#bfd841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d441d8", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#41afd8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#9d41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#7541d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#41d865", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#6041d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d441d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#a441d8", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#b941d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#41d89b", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#41d8af", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#82d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41afd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41afd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#d87741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#d84147", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#d841bb", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d8418b", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#d8c841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d8cf41", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41afd8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#bf41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d84199", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#d87741", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#5341d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#5341d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d84e41", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#b941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#b941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#b941d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#b941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#d8418b", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#d8c841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d8cf41", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#41afd8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#bf41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d84199", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#d87741", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#6ed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d84147", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d8418b", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#d8c841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d8cf41", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41afd8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#bf41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d84199", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d87741", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#82d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d84170", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41afd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d84147", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#d87741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d84170", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41d8c4", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#6741d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41d850", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41d8c4", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d84177", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#41a2d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#41d89b", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#d84141", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41afd8", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#b941d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#bf41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#d87741", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#d88441", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#d89241", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#41d857", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#d84147", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#41d880", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#41d887", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d8418b", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#d8c841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d8cf41", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#41d89b", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#5341d8", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#9041d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#9741d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#d89241", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#6ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#4150d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d84169", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d84147", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#9041d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#41a2d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d84192", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#41c4d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d84170", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#9041d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#6ed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d84147", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#82d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d8414e", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#6741d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#9741d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#41d8d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#41d1d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d84e41", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d85541", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41afd8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41a9d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#53d841", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#c641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d87741", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d87e41", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d841c8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d88b41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#d89241", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#4187d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41d850", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#41d865", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d86c", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#d8a641", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#d8ad41", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d841a0", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#416cd8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#4165d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#41d880", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d8418b", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d84184", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4157d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d8d641", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#c6d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#b9d841", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d8a9", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#4c41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d84177", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#6041d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#6741d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d8af", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d84170", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41d8c4", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41d8cb", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d84169", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#6e41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d84147", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#419bd8", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#9d41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#414ad8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#7541d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#d441d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d87e41", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#89d841", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d841c8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#75d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#d8417e", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#d89241", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#6e41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41afd8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d84155", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#41d879", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d84147", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41a2d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#6ed841", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41d850", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d84147", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#7bd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41afd8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#4165d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41afd8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d86241", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d88e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d84170", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#67d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#414ad8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d84147", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#d8418b", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#d84184", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#414ad8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#d841ad", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#41afd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#9041d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#9dd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#6741d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#414ad8", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d85c41", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d8a041", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d84147", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d8418b", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#41cbd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#d89241", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#41bdd8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d89941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41afd8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d8414e", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#9dd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#6741d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#4187d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#bfd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#4150d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d841ad", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#414ad8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#b9d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d86241", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#9dd841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d84147", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d87741", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#6741d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d84170", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d4d841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#41c4d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#75d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#d8417e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#d84170", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#6e41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#41afd8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#9041d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#d87741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d8418b", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#4194d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41afd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d84147", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#4157d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d84147", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#d8418b", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d84147", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d87e41", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#d85c41", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d86941", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#d87041", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d87741", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d87e41", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d88b41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d8b441", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#d8c241", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#b9d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#c6d841", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#b2d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#bfd841", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#a4d841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#abd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#9dd841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#90d841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#7bd841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#67d841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#53d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#4cd841", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#41d84a", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#41d850", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d85e", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#41d865", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#41d872", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41d88e", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#41d894", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#41d8a2", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d8af", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#41d8bd", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#41d8c4", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#41d8d1", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#41d8d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#41d1d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#41bdd8", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41afd8", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41a9d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41a2d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#418ed8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#4165d8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#415ed8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4157d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#414ad8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#4143d8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#4541d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#5341d8", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#5941d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#6741d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#6e41d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#7b41d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#8241d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#9041d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#9741d8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#ab41d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#b241d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#cd41d8", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#d841cf", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d841d6", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d841c2", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d841ad", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#d841a6", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#d841a0", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d84192", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d8418b", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d84184", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#d8417e", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d84170", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d84169", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d84162", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d84155", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d84170", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#67d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d8418b", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#8941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d441d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#414ad8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#4172d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#9041d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#414ad8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41d8c4", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d8a041", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d85c41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d84147", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#90d841", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d84184", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#d89241", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#d8417e", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#d841b4", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#60d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41afd8", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d841a6", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#41d8a2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#9041d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d84177", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d84147", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#41d843", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#6741d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#41d8b6", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#7b41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d87e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#414ad8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#9041d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#9dd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#6741d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#41d8d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#82d841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#97d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4157d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#4187d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#b9d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#c6d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d84155", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#53d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d8418b", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#d8c841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d8cf41", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#a441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#41afd8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#bf41d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d84199", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#41d880", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d87741", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d84162", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84162", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#41d8bd", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d84162", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d8b441", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#8241d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#abd841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#4157d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#4187d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41afd8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#d841a0", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#414ad8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#d85c41", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d84170", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#414ad8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#4180d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#41d865", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41afd8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#59d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#4cd841", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#45d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#d89241", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d84147", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d84192", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#414ad8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d84177", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#9dd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d84170", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#9041d8", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250_i2c", "name": "mpu9250_i2c", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm20608g", "name": "icm20608g", "type": "Module", "color": "#666666"}, {"id": "m_vectornav", "name": "vectornav", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_mpu9250", "name": "mpu9250", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#a5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d8a941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#41d8a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d8b641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d8c441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#d84161", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d8ca41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#4941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d841d7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d86141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#d3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#ccd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#84d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#9ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#d841bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d85441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#d85b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d88941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#b241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#b9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#71d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#41d8b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#ab41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#bf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#41bbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#9841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#56d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#41d873", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d89a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#41c8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#41c1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#4173d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d841a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#b2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#49d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#41ced8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d841b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#91d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#41d859", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#41d8ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#5041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d8bd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#abd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#63d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#41d8bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#41a7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#4145d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#9141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#98d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#4193d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#7741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#a541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#418dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d841c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d841a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d86841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#bfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#5dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#41d8c1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d8ce", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#4341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#7141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#8b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#b941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d8d741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#41d845", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#41d85f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#41d893", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41d8a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#4159d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#cc41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#d341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#c6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41d886", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#4186d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#415fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#d8418f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d84168", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d84154", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#50d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41b4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#41aed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#7e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#9e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d8415b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#7ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#77d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d841ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d8a341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d8d141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#8bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#41d8c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#6341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#8441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#41a1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#419ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#5d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#c641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#d84189", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#d89641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d88f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#43d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#5641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#d841d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d88d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d84196", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#419ad8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#419ad8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#7ed841", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#41d886", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41d886", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#91d841", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#91d841", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#91d841", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#b941d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41d5d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#c6d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d8d741", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#d8418f", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#4159d8", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#c641d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#d8418f", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#c641d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#4159d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_icm20608g", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_mpu9250", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_mpu9250_i2c", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_vectornav", "target": "t_estimator_status", "color": "#4341d8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_selection", "color": "#d86841", "style": "dashed"}, {"source": "m_vectornav", "target": "t_sensor_gps", "color": "#c641d8", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#d8415b", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#4145d8", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#4145d8", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#4145d8", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#4145d8", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#4145d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#b941d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#c6d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#d8d741", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#d89641", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#b941d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#c6d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d8d741", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#43d841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#8441d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41b4d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41d5d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#b941d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#41ced8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41d5d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#8441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#c6d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d8d741", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41b4d8", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#98d841", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#8b41d8", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#4180d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#63d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#4186d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#d84e41", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#8441d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#4173d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#c6d841", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#84d841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d88d", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#4166d8", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#415fd8", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#41aed8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d8d741", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#41bbd8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d8bd41", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#7141d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#bf41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d86841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d86e41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#5dd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d841b6", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#41d859", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d84196", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#4341d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d89a", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#8b41d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#8441d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#41a7d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#d84741", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#b2d841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#4193d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#6ad841", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#d8a341", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#41c8d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#d84161", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_orbit_status", "color": "#d8419c", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#d841bd", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_figure_eight_status", "color": "#d87b41", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#d84741", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#56d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#d84154", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#4941d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#d8c441", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#d841b0", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#ab41d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#4152d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d84154", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#b2d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d841b0", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#d8b041", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#41d8d5", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d88941", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d841d7", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#b241d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d841a3", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d84147", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#41d8ae", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#416cd8", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#5641d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#5dd841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#41d89a", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#4341d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#d841b6", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#9e41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d8d141", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d84168", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#d84741", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#4186d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41d86c", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#41c1d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#b9d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#b2d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d8ce", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#9ed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#c641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#cc41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#91d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#8bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d841d7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#d841d1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#41a1d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#d87541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d841b6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#416cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#49d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d841a9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d88f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#43d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d89c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#4159d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#4145d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#41d85f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#5041d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d8ca41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d84182", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d88d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#d8417b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#bfd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#d3d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#ccd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#41d893", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d8415b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#7741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#7e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d89a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#8b41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#41d8b4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#41d8bb", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#b2d841", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#6ad841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#41a7d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#4179d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#41d880", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d8416e", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d85441", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#b2d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d84141", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#d841d1", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#41aed8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#71d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#418dd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#4186d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#41d84b", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#414bd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d866", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#41d85f", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#d84189", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#7741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#41d89a", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#41d8a7", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#41d8ae", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#41d8c1", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#41c1d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#d85b41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#41d873", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88241", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41d8a1", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#91d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d84175", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d88f41", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#a541d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#6341d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d86841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#b941d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#abd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#c6d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d8d741", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#41d8c8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#c641d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#5d41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d8b641", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#a5d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#41d879", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d88f41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d86141", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#41d845", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d8a941", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d841ca", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d841c4", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#8441d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d873", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88241", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#d341d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#6a41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d88241", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d84154", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#41d873", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#9141d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#9841d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d841b0", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#50d841", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#8441d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#77d841", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#c641d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#419ad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#d341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#d341d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d841b6", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#c6d841", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#41d8a7", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#4186d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#4193d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#d84741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d8bd41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#d341d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d8d741", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#4159d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#4159d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d841ca", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#8441d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#8441d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#8441d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#8441d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#4193d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#d84741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#d8bd41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#d341d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#d8d741", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#4186d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#41c8d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#4193d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#d84741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d8bd41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#d341d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d8d741", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#419ad8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#d341d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#d89c41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#c6d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#41d89a", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d841b6", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#d89c41", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41d5d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d88f41", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#d89c41", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#41aed8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#77d841", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#b9d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#d341d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#77d841", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#41aed8", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#d87541", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#4186d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#50d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#d841b6", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#4159d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#d8b041", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d8bd41", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#5041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d8d741", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#8441d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#41d8ae", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#c6d841", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#41d8bb", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#4186d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#bf41d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#4341d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#d88241", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#56d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d841b6", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#41c8d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#41d8ae", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d88f41", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d8a341", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#8b41d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#49d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#d841a9", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#419ad8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#4186d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#41c8d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d89a", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41d886", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#8b41d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d841d7", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#41d8c8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d8ce", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#bf41d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41d5d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#c641d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#91d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#41c1d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#d341d8", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#7ed841", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41b4d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#41aed8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d841ca", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d86841", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d86e41", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d841c4", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#418dd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d841b6", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#4166d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d89c41", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#d89641", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#41d845", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#41d84b", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#41d859", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d866", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d84196", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#4341d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41d86c", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#41d879", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#5641d8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d88d", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#d8417b", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d84175", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#5d41d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d8d741", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#6a41d8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d89a", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#8b41d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#9141d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#41d8ae", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#9e41d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#a541d8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#41d8c1", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d88241", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d84154", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#41d873", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#9841d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#41c1d8", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#4173d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d841b0", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#41d85f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#4186d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#56d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d86841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#98d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#41d8ae", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#416cd8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d88f41", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d84175", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#d341d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#6341d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#41d845", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#4186d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#41c8d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#4186d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#d341d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d89c41", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#415fd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#d341d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d8416e", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#41d852", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#4186d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#ab41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#41d852", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#4186d8", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d84161", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#d84196", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#63d841", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#d841bd", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#4186d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#d84154", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#d841b6", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#4941d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#4152d8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#d84196", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#41d89a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#8b41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#d841b6", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#d341d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#b2d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#4186d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41d86c", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#41bbd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d89a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41d86c", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#9ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#41d8ae", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d8ca41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#d341d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d841d7", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#41d8b4", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#71d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d841c4", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#4186d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d841ca", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d88241", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#56d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#41d89a", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d841b6", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#4179d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#a541d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d8416e", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#71d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d86841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#8b41d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d8415b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#8b41d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#41d845", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#d841b6", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#41d8ae", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#d341d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#d841a9", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#49d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#416cd8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#4186d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#d341d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d89c41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#4186d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#5d41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#41c1d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#41d86c", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#4186d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#d84e41", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#d85b41", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d86141", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d86841", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d88241", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d88941", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d88f41", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d89c41", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d8a341", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d8a941", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#d8b641", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d8d141", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#b2d841", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#a5d841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#abd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#98d841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#91d841", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#84d841", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#8bd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#71d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#5dd841", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#43d841", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#41d84b", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#41d852", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#41d845", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#41d859", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d866", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#41d880", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#41d886", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d88d", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d89a", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#41d8ae", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#41d8b4", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#41d8c8", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#41d8d5", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#41d5d8", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#41ced8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#41c1d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#41aed8", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#41a1d8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#4180d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#418dd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#4186d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#416cd8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#415fd8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#4159d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#4341d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#5641d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#5d41d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#6a41d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#7141d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#7741d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#7e41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#a541d8", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#b241d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#b941d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#bf41d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#c641d8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#cc41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#d341d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d841d7", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#d841d1", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d841c4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d841b6", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d841a3", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#d8419c", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d84196", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#d8418f", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d84182", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#d8414e", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d84147", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#4186d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#4186d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d873", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d85441", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#63d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#b2d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#4186d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41d86c", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#41bbd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d89c41", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#7141d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d84196", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d89a", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#d84189", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#41d8ae", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#d341d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#d85b41", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#d841d1", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#414bd8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#41aed8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#41c1d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#bfd841", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#43d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#41d89a", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#41d852", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#71d841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#4145d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d841c4", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#419ad8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#63d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d86841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#41d879", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#91d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#a541d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#5d41d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#6341d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#41d859", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d841ca", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#d8b041", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#4193d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#d84741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41d86c", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d8bd41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#d341d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d8d741", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d8a941", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8a941", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d86141", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d8a941", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#b941d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#abd841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#41d8c8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#d341d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#5d41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d841ca", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#b2d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#6a41d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#d341d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#41aed8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#71d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#4186d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d841b6", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d8a341", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#41d880", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#d3d841", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#ccd841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#8b41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#41d8ae", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_px4_fmu-v5.json b/docs/public/middleware/graph_px4_fmu-v5.json index aab845cf57..b63dd33682 100644 --- a/docs/public/middleware/graph_px4_fmu-v5.json +++ b/docs/public/middleware/graph_px4_fmu-v5.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#418fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#6bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#41d8d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#a7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#9341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#43d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#d8416f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#4341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#41d845", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#57d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41d8b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#6b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d841d4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#41d8b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#5ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#c941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d8419e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d87d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d89841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#41d8a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#9a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d841c0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#bbd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#4160d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#72d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41d859", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#4174d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#8641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#ae41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d84191", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#d84183", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#d84162", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d89141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d89c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#41d8c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#d86f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#93d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#7fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#c241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#d8c041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#a0d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#6441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#bb41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#d8ac41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#41d874", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d8cb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#4145d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#5041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#7f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#aed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#78d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#419cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#4941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#a041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d841cd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d85b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d8a541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#64d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#41d86d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#4188d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#4181d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41d881", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41d888", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41d88f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#4195d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#416dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#cf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d8417d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d88a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#cfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#b5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#41d895", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#41a3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#417bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#5e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#d841c6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d84198", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d87641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#d88341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#d8cd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#50d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#49d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41d84c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41d87b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#41b7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#4159d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#7241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d89e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#41d860", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#414cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#d841b9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#d841b2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#d86941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d8b241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8c641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#86d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41c4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d8b941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d8d441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#c2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#41b0d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#41a9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#b541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d841ac", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d8418a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d8415b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#c9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#9ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#41d8a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#41cbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#5741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#d841a5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d86241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#7841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#a741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d84169", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d84176", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#41d8a9", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#41d8a9", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d8b241", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41d84c", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#d88341", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#d88341", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#93d841", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#93d841", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#93d841", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#41d888", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#41cbd8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#5741d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#4159d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d88a41", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#4181d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#41d852", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#41d874", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#41d874", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#41d874", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#41d874", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#41d874", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#41d888", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41d84c", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#d841a5", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41d888", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#41d888", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#d841b9", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41c4d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#d841b9", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41d84c", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#41cbd8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#41d866", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#4160d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#41d888", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#d841b9", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#41cbd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#a041d8", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#41d88f", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41d84c", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41d87b", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d89e41", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d84169", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#72d841", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#6b41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#7241d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#aed841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#41d860", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#41bdd8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#a0d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#6441d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d641d8", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d8417d", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d84741", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#416dd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#d86f41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d841c0", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d89141", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41d881", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#d84183", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41d88f", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d89c", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d84176", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41d84c", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#d8ac41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#86d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#4145d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#8cd841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#4941d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d8416f", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#4174d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#41d8bd", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#d86941", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#86d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#d8b941", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_figure_eight_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#d8cd41", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#4188d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#a7d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flight_phase_estimation", "color": "#d84147", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4341d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#4188d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#d8cd41", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#8cd841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#41d86d", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#41d895", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#64d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#41d845", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#4152d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#5ed841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d8419e", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#7fd841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d8cb", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#7841d8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#41b0d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#d841b2", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#86d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d87641", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#ae41d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41d859", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#41bdd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#93d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#8cd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#9a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#a741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#c241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#cf41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#57d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#417bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d841cd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d86241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#43d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#41d845", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#41d84c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d87d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#41d852", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#414cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d88a41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d89141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#4145d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d89841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#41d874", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#5741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#d8c041", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#d84183", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d8d441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#41d88f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41d8b7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#41d8b0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#41d8c4", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d8cb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#8641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d84169", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#bbd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d8415b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d2d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#b5d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#d84155", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#9ad841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#8cd841", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d8416f", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#d8ac41", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4341d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#4145d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#8cd841", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#c941d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#7fd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#a741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#6bd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#41a9d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#4195d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d841cd", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#49d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#d841c6", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d89e41", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d8a541", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#5e41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#d84183", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#41d8a3", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#c9d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#41d8d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#41bdd8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#ae41d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#41d8bd", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#d84162", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#93d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d86241", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d84741", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#78d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d841ac", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#419cd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d6d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#41d888", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#41a3d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#bb41d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#50d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#b541d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#5741d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#4166d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d86241", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d84198", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#9341d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d8418a", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#41d8d2", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8c641", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#418fd8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d841d4", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d85b41", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d84162", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89841", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#cfd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#7f41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d84191", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#d84e41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#d84162", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d85541", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#d8cd41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#4188d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#c2d841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#8c41d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d89141", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#50d841", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#6bd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#41bdd8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#86d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#4941d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#41d895", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#6441d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#41a3d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#50d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d8414e", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d88a41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#d8c641", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#c2d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#c2d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#c2d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#c2d841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#c2d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#41bdd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#d89141", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#d84141", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#d89e41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#a041d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#d84183", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#d89141", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#86d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#4941d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#41d895", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#6441d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#41a3d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#41bdd8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#d84147", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#86d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#4941d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#41d895", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#6441d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#41a3d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#50d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d8414e", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#86d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#4941d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#41d895", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#41a3d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#6441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#cfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#41d859", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#50d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d8414e", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41c4d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#41bdd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#41bdd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#41bdd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#cfd841", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#41d8a9", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#50d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#d84183", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41d84c", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d89141", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d86241", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#d89e41", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41d84c", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#41cbd8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#7fd841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#86d841", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#9a41d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#41a3d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#50d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#41d859", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d88a41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#d89141", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#d89e41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#4941d8", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#d8c041", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#6441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#cfd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#41d895", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#c2d841", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#bbd841", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#8c41d8", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#d84155", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#41bdd8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#4174d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d86241", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#7fd841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41d881", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#d84191", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d8b941", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d841c0", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d89141", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#8641d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#41d88f", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#d6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#41bdd8", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#41d8a9", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#d84183", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#41d845", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#41d88f", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#d88341", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#93d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#7fd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#78d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#d84e41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#a041d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#ae41d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#b541d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#41a3d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#419cd8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#c241d8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#4195d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d85b41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#50d841", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#49d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4166d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#d86f41", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d87641", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#d841b9", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d841c0", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#d841b2", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41d84c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41d859", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#d841a5", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d89141", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d84198", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d8418a", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d8b241", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#41cbd8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d89e41", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d8a541", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#5741d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41d881", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8c641", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#d84183", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#5e41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#cfd841", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d89c", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#7841d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#7f41d8", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d84169", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d2d8", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#aed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d84191", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#d84162", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#72d841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d85541", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#ae41d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#d8cd41", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#4188d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#a0d841", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#41d8d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d86241", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#4174d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d84198", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d8cb", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#8641d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#7fd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#a041d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d841ac", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#419cd8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d6d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#41bdd8", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#41cbd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#41bdd8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#d84147", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#7841d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41d84c", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#7241d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d89841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#a0d841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d89841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#a041d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#a0d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#a041d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#d84183", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#d84176", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#cfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#41d8a3", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#a0d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#4145d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#a041d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41d84c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#a0d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d641d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#7fd841", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#43d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#41d845", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#d84183", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#41a9d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d87d41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#cfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#41d8a3", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#41d8b0", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d85b41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d8418a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#41bdd8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8c641", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#4174d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#78d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d84191", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#41b7d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#a041d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#d84183", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#50d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#41d8a3", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#a0d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#4145d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#41d852", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#41bdd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41d84c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#cfd841", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#417bd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#41bdd8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#4166d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#41d859", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#d87641", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#ae41d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d84741", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d85b41", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#d86941", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d86241", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#d86f41", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#d87d41", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#d88341", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d88a41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d89841", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d89e41", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d8a541", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d8b941", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d8d441", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#cfd841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#b5d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#a0d841", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#9ad841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#93d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#78d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#7fd841", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#64d841", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#5ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#50d841", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#49d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#41d845", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#41d84c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41d859", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#41d860", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#41d866", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#41d86d", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41d87b", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41d881", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#41d88f", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#41d8a3", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#41d8bd", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#41d8d2", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#41cbd8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#41bdd8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#41b0d8", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#418fd8", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#4181d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#416dd8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#4160d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#4159d8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#4152d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#414cd8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#4341d8", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#5041d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#5741d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#5e41d8", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#6b41d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#7241d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#7841d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#7f41d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#9341d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#a041d8", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#a741d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#ae41d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#b541d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d841d4", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d841cd", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d841c0", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d841ac", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d8419e", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d84198", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d84191", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#d84183", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d8417d", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d84176", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#d8416f", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d84169", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d8415b", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d89841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#a0d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d84162", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#c941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#d8ac41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#a0d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#4145d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#7fd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41d84c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41d859", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d641d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#a0d841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d841cd", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#41d8bd", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d89141", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d89e41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#7fd841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d8cb", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#d841c6", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#a741d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#d84183", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d8417d", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#cfd841", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#c9d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#a7d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#41bdd8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d84176", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#d84141", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#cf41d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#ae41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#d89841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#d84183", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#a0d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#41d8a3", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#d89141", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#4145d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#93d841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#41d874", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4166d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#78d841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d8418a", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d84741", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#d86f41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8c641", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d841ac", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d85b41", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#a0d841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#86d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#4941d8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#41d895", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#6441d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#41a3d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#50d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#cfd841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#41d8d2", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#41d8d2", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#9341d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#41d8d2", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d841d4", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#41d888", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#bb41d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#4166d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d8418a", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8c641", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#b541d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#cfd841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#d89841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#8cd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#41d88f", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#a0d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#d89141", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#4145d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#a0d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#7f41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#7fd841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#a041d8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#57d841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d87641", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d89141", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#4341d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d89e41", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d8b941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#41d88f", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#cfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#41d8a3", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d8b7", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#a0d841", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_pca9685_pwm_out", "name": "pca9685_pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_pwm", "name": "rgbled_pwm", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_pwm_input", "name": "pwm_input", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp101xx", "name": "icp101xx", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20689", "name": "icm20689", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_lps22hb", "name": "lps22hb", "type": "Module", "color": "#666666"}, {"id": "m_lps33hw", "name": "lps33hw", "type": "Module", "color": "#666666"}, {"id": "m_mpc2520", "name": "mpc2520", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp280", "name": "bmp280", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_bmp581", "name": "bmp581", "type": "Module", "color": "#666666"}, {"id": "m_dps310", "name": "dps310", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi055", "name": "bmi055", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_atxxxx", "name": "atxxxx", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_spa06", "name": "spa06", "type": "Module", "color": "#666666"}, {"id": "m_spl06", "name": "spl06", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_sht3x", "name": "sht3x", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#4161d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#c841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#d8ae41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d8b541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#9bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#41d867", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#41d89b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#cf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#d87441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#4174d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#6141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#d85a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#c2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#414dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d841cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#d85441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#6ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#54d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#41d8c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#41a8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d841c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#bbd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#88d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#7bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#4154d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#4188d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#4181d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#8841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#d84161", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d8bb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#c8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#94d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#8ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#47d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41d854", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d881", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#5a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d84154", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#d8a841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41cfd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#416ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#4147d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#5441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#d86141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#41d85a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#41d8c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#b541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#bb41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d8419b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#41aed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#a141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#41d84d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d8bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#41a1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#9b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d84174", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d84167", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d8cf41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#41c2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#4741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d841a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d8418e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_hygrometer", "name": "sensor_hygrometer", "type": "topic", "color": "#aed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#a8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#a1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41d8b5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d84181", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d8414d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d8a141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d8d541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#61d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#5ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#41d86e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#41d874", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#6741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#d84d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d88141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d88841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d8c241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#67d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#41d87b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#41c8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#c241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#d841bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d8c841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#4dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41b5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#4d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#a841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#d841d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d841c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#d841ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d841a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d8415a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#d88e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#41d847", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#41d8ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#41bbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#7b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#8e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#9441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#74d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#6e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#7441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#8141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#d84194", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d86741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d89b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#b5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#41d861", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#41d8a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#419bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#415ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#d89441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#cfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#41d8a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#417bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#d84188", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_pwm_input", "name": "pwm_input", "type": "topic", "color": "#ae41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41d8cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d841b5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#81d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#41d888", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#4167d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#d84188", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#d86e41", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#d84188", "style": "dashed"}, {"source": "m_bmp280", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_bmp581", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_dps310", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_spa06", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_spl06", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_icp101xx", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_lps22hb", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_lps33hw", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_mpc2520", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#d841a8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#41b5d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41b5d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#b541d8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#b541d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#b541d8", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#61d841", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#cfd841", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d8c241", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#d841d5", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#417bd8", "style": "dashed"}, {"source": "m_sht3x", "target": "t_sensor_hygrometer", "color": "#aed841", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_bmi055", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_icm20689", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#41bbd8", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#41a1d8", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#41a1d8", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#41a1d8", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#41a1d8", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#41a1d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_outputs", "color": "#61d841", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_pca9685_pwm_out", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#d841a8", "style": "dashed"}, {"source": "m_pwm_input", "target": "t_pwm_input", "color": "#ae41d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#61d841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#d84194", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#61d841", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#7b41d8", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#7b41d8", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#d841a8", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#cfd841", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#61d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#d84161", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#cfd841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#d8a841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#7b41d8", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d8cf41", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#d87b41", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d841a8", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#d841ae", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#41d847", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41d854", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d8418e", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#a141d8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#9441d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#4dd841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d841c2", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#d85a41", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d894", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#8841d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#41aed8", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#41d86e", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41cfd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#d86141", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#d87b41", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#41d874", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#416ed8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d881", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#4167d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d8d541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d8417b", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#88d841", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#d841a8", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#41d84d", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#8141d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d84167", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#4147d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d841a1", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#cf41d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#b5d841", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#94d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#a8d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#41d89b", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_figure_eight_status", "color": "#9b41d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#6141d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#4154d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#d85441", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#c8d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#d8ae41", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#d8b541", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#4d41d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_orbit_status", "color": "#7441d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#8141d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#d87441", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#4147d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#a8d841", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#4d41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#a1d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#41d8c2", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d8419b", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d841c8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#4141d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d8414d", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#4174d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#bb41d8", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d8bb", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#41d888", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d541d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#8e41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#8ed841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d8416e", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#4dd841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#d84154", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#8141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#6ed841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#41d8c8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d84141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41d8cf", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#41d8d5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#5ad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#41bbd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#b541d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d86741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#41a1d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#d87b41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d88841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#d88e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#41d85a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#c241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#41d867", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d841b5", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d8a141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#4181d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#4174d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#416ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d881", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d841a8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d8c241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#41d88e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#415ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#414dd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d5d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#c2d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#4147d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#bbd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d894", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#4741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#41d8a1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#5441d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#5a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#d84167", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#81d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#417bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d8bb", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#4147d8", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#cf41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#41d84d", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#d84167", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d8415a", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d5d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#d87441", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#4147d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#41a8d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#a841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#4dd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#bb41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#41d847", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#c841d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#419bd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#d841bb", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#418ed8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#41d87b", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#41d881", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#41d88e", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#4741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41d8b5", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#81d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#6741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#7bd841", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d84154", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d8bb41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#54d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d5d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#47d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#41d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#41d8a8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#67d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#41c2d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d841b5", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#b541d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d8417b", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d8c841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#61d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d84741", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#41c8d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#d89b41", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#417bd8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#d89441", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#9bd841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d88141", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#41d861", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d841cf", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#4161d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d841b5", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#6e41d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#d84147", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d84181", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d8bb41", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#47d841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d5d841", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#d84d41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#a8d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d8bb41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#47d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d84174", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d5d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#4194d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#4d41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#4188d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#41d8ae", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#41d5d8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#74d841", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#d84188", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#d84d41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#d8c841", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#c841d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#4dd841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d841a1", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#8ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#d8c841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#41c8d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#d84d41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#41aed8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#8141d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d8c241", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#6e41d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#41d5d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#41d5d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#41d5d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#41d5d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_pwm", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_atxxxx", "color": "#416ed8", "style": "normal"}, {"source": "t_battery_status", "target": "m_atxxxx", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_atxxxx", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#41d881", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#d841a8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#41d847", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#d87b41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#d8cf41", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#41d8cf", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#4dd841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pca9685_pwm_out", "color": "#d841a1", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pca9685_pwm_out", "color": "#8ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pca9685_pwm_out", "color": "#d8c841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pca9685_pwm_out", "color": "#41c8d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pca9685_pwm_out", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pca9685_pwm_out", "color": "#d84d41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pca9685_pwm_out", "color": "#41aed8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pca9685_pwm_out", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pca9685_pwm_out", "color": "#8141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#4dd841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#94d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d841a1", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#8ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d8c841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#41c8d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#d84d41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#41aed8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#8141d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d841a1", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#d84194", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#8ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d8c841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#41c8d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#4dd841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#41aed8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#8141d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#4dd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#d841a8", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#d87b41", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#d84188", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#4dd841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#d8c841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#d87b41", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#41d881", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#4dd841", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#d841a8", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#41d847", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#cfd841", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d841b5", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#74d841", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#74d841", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#41d8d5", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#41d5d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#41c8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#4dd841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#41aed8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#bb41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#41d847", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#41d85a", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#4181d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#416ed8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d841a1", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d8c241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#d8c841", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#bbd841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#4141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#8ed841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#41d8ae", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#8141d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#d87b41", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#94d841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#d8d541", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#88d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#4dd841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#c8d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d841b5", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#b5d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#d87b41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#67d841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#5441d8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#5a41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#4dd841", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#d84188", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#94d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d881", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#d87b41", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#4174d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41b5d8", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#8e41d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#41d8c8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d84154", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41cfd8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#a841d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#41c8d8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#6741d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#4dd841", "style": "normal"}, {"source": "t_pwm_input", "target": "m_commander", "color": "#ae41d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#41c2d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#b541d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#d86141", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#d86e41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#41d841", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#41d847", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d88141", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#41d861", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#d89441", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d89b41", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#4194d8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d8a141", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d881", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d841a8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#41d888", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d8cf41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d8c841", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d8418e", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d8d541", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#4167d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#cfd841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d84181", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d894", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d84174", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#8ed841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d8416e", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#88d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41d8b5", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#6e41d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#417bd8", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#7b41d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#a8d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#47d841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41d854", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#4dd841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d84154", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#4d41d8", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#4188d8", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#41d8a8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d8417b", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d88141", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d8cf41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#67d841", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#5a41d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#41c2d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#bb41d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d841b5", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#c8d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#d84d41", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d8bb", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#4dd841", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#cfd841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#94d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d841a8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#41d888", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#4dd841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d841c2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#a141d8", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d8415a", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d5d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#8ed841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d8cf41", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#cf41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#a141d8", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#4154d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d5d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#4dd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#d87b41", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#d8cf41", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#41d89b", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#4167d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#a141d8", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#6141d8", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#d85441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#4dd841", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d8ae41", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#4d41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#41d881", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#d87b41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#8ed841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#d8cf41", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#4167d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#a141d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#4dd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#7bd841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#8841d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d841a8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#8ed841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d8cf41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d881", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#d87b41", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#6ed841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#8ed841", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d84141", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#41d867", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#419bd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#7bd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#bb41d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#4174d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d84181", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#41d861", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#4dd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#6e41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d8bb41", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#41d881", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d8cf41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d8c841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#a141d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d84167", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d8415a", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#4dd841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#c8d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#7bd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#d87b41", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#41bbd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d841a8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#8ed841", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d88841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#4dd841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#d89441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#4dd841", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#d8416e", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d84154", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#8ed841", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#d84d41", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#d85a41", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#d86141", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d86741", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#d87b41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d88141", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#d88e41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#d89441", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#d89b41", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#d8a841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d8bb41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d8c241", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d8c841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#d8d541", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d8cf41", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d5d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#cfd841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#b5d841", "style": "normal"}, {"source": "t_sensor_hygrometer", "target": "m_mavlink", "color": "#aed841", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#9bd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#8ed841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#88d841", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#81d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#7bd841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#61d841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#54d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#41d847", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#41d874", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#41d86e", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#41d87b", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d881", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#41d888", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d894", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#41d8a8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#41d8b5", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d8bb", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#41d8c2", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41d8cf", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#41b5d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#4174d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#416ed8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#4167d8", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#4161d8", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#415ad8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#4147d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#4741d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#7441d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#9441d8", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#9b41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#a141d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d84154", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#a841d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#b541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#bb41d8", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#c241d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#cf41d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d841cf", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d541d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#d841d5", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d841c8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d841c2", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d841b5", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#d841ae", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d841a8", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d8419b", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d84181", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#d84174", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#d84161", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#417bd8", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d8414d", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#8ed841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#cf41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d5d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#47d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#4dd841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#41d84d", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#a141d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#8841d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d841a8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d881", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d8bb", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#41d847", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#4167d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#54d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#4dd841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#81d841", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#d841bb", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#418ed8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d8b541", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#41d86e", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#4741d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#bb41d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#5ad841", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41d8cf", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d84154", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#41d881", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#d87b41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#a141d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#d5d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#7bd841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#41d8a8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d8417b", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d84181", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#41d861", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#a141d8", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#d84188", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#d89441", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#6e41d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#b541d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#d86141", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#41a1d8", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d841a1", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#8ed841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d8c841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#41c8d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#d84d41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#41aed8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#8141d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#9bd841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d841cf", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#d84147", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#61d841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d84741", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#41d861", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#d84d41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#d89441", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#d89b41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#6e41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#8ed841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#d5d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#416ed8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#d87b41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#a141d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#d84167", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#d84174", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#d84d41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#4dd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#bb41d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#d87441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#d87b41", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#41d847", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#416ed8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d8cf41", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#414dd8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#c2d841", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#b5d841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d8416e", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#7bd841", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_px4_fmu-v5x.json b/docs/public/middleware/graph_px4_fmu-v5x.json new file mode 100644 index 0000000000..e356726e0b --- /dev/null +++ b/docs/public/middleware/graph_px4_fmu-v5x.json @@ -0,0 +1 @@ +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_pm_selector_auterion", "name": "pm_selector_auterion", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_frsky_telemetry", "name": "frsky_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_hott_telemetry", "name": "hott_telemetry", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_batt_smbus", "name": "batt_smbus", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16448", "name": "adis16448", "type": "Module", "color": "#666666"}, {"id": "m_adis16507", "name": "adis16507", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_thoneflow", "name": "thoneflow", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_paa3905", "name": "paa3905", "type": "Module", "color": "#666666"}, {"id": "m_paw3902", "name": "paw3902", "type": "Module", "color": "#666666"}, {"id": "m_pmw3901", "name": "pmw3901", "type": "Module", "color": "#666666"}, {"id": "m_px4flow", "name": "px4flow", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_crsf_rc", "name": "crsf_rc", "type": "Module", "color": "#666666"}, {"id": "m_ghst_rc", "name": "ghst_rc", "type": "Module", "color": "#666666"}, {"id": "m_sbus_rc", "name": "sbus_rc", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_irlock", "name": "irlock", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_dsm_rc", "name": "dsm_rc", "type": "Module", "color": "#666666"}, {"id": "m_batmon", "name": "batmon", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "m_bst", "name": "bst", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#41d2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#89d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#7c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#9dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#4ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#4196d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#4189d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#4175d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#c441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#d841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#41d89d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d84162", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d85b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#d8b141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#be41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#41d862", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#41d8b1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#75d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#41c4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#4168d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#96d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#6f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#9d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#a341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#41d8b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#41aad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#419dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d8416f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d89641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#aad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#5bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#54d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#47d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#41d8a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#8941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d84190", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#90d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#7cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#41d87c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#d841b7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d8be41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#cbd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#b7d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#62d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#41d84e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#6841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#d8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#41d8aa", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#41cbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#d841be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d85441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#82d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#4190d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#6241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#cb41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#d84196", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d84154", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#41b1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#5441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#8241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#9641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d841d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d8417c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#d2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#b1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#41d8be", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#417cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#d841c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d86f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#41d86f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#41d8cb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#416fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#4741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d8415b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#d87c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d8cb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#41d85b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#41d868", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#41d896", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#415bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#4e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#d841b1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d8419d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d86241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d88941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#c4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41d875", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d882", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#41d890", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#41a3d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#4162d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#414ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#d841cb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d84189", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#d89041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#bed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#a3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41d854", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#41b7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#4182d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d8aa41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#41d8c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#41d8d2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#5b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#9041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d8a341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d8b741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d8c441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d8d241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#6fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#41d889", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d841a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d84168", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#d86841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d89d41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#68d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#41d847", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4147d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#b741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#b141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d841aa", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#4154d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#aa41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41bed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#7541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#68d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#41d8d2", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#68d841", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#41d889", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#41d889", "style": "dashed"}, {"source": "m_batt_smbus", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#4162d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#4162d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#6841d8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#6841d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#6841d8", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d241d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#d86241", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#b741d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#416fd8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d882", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#d86841", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d8cb41", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_baro", "color": "#41d889", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_adis16448", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_adis16507", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_irlock", "target": "t_irlock_report", "color": "#4182d8", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_paa3905", "target": "t_sensor_optical_flow", "color": "#6241d8", "style": "dashed"}, {"source": "m_paw3902", "target": "t_sensor_optical_flow", "color": "#6241d8", "style": "dashed"}, {"source": "m_pmw3901", "target": "t_sensor_optical_flow", "color": "#6241d8", "style": "dashed"}, {"source": "m_px4flow", "target": "t_sensor_optical_flow", "color": "#6241d8", "style": "dashed"}, {"source": "m_thoneflow", "target": "t_sensor_optical_flow", "color": "#6241d8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d241d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#d86241", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#416fd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#d241d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#41d8c4", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41d854", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#d86241", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#416fd8", "style": "dashed"}, {"source": "m_crsf_rc", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_dsm_rc", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_ghst_rc", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_sbus_rc", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41d854", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_batmon", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_hott_telemetry", "target": "t_esc_status", "color": "#b741d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d241d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#b741d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41d854", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#d86241", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#90d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#416fd8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#419dd8", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d841d2", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41d875", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d88941", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#d89041", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#a3d841", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d86241", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#d841cb", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#54d841", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d8417c", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41bed8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#be41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#d8d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d8416f", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d241d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#41d8aa", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d87541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#7cd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#41d8cb", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#a341d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#d88241", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#d841b7", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#47d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#4741d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#cbd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d8415b", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#7541d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#4190d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#41d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d84154", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d87c", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#8241d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#c441d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#41d8a3", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#d841a3", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#4196d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_figure_eight_status", "color": "#d84196", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#d841d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#41d862", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_orbit_status", "color": "#5b41d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#9dd841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#9d41d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#41d89d", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#414ed8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#417cd8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#41d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#4175d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#8941d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#417cd8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d87c", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#414ed8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d8be41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#b1d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#41d85b", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d84162", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#41c4d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#41d8be", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#75d841", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#62d841", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#cb41d8", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#d84147", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d84141", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#d84741", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#d88941", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d84190", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#41d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#41a3d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#d84175", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#41d8cb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#aa41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#41cbd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#d86841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d86f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#b141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#41b7d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41bed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#41b1d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#41aad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#cb41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#4189d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d89641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d89d41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#4182d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#d8b141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#47d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#d841b7", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d8a341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#415bd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d841aa", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#41d84e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#41d868", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d8cb41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#d84182", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#41d86f", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#41d87c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#b7d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#41d889", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#41d890", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d84168", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#41d896", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d84162", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#96d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#6841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#6f41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#d84154", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#6241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#41d8b1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#41d87c", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#c441d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#4190d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#d841d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d84189", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#d84154", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#6f41d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#4168d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#41d87c", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#d84e41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#aa41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#41b1d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d88941", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#6fd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#62d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#47d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#d841b1", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#41d847", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#d2d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#c4d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#41d896", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#4e41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#a3d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#7c41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#4154d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d84175", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d8b741", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d841aa", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#5441d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#9641d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d8415b", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#6841d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#4141d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d241d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d86241", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#d841be", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#416fd8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#41d889", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#d86841", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#4147d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#d841aa", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#d8419d", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d85b41", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#41d2d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#4ed841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#89d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d8d241", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#9041d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#d841c4", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#d87c41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#82d841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d85441", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#aad841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#6f41d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#5bd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#414ed8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#417cd8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#41d8b7", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#bed841", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#d8c441", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d8aa41", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#68d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#d87c41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#d87c41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#d86241", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#d88941", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#7c41d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d241d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#bed841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#41d85b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#d86241", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#8241d8", "style": "normal"}, {"source": "t_gripper", "target": "m_dshot", "color": "#4154d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#d87c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#41d8aa", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#41d841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d8cb41", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#9041d8", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d8c441", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#d8c441", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#d8c441", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#d8c441", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#41d8cb", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#a3d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#d841d2", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#b141d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#47d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#d88941", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#41d8a3", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#d88941", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina228", "color": "#41d8a3", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#d88941", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina238", "color": "#41d8a3", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pm_selector_auterion", "color": "#d86241", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d241d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#bed841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#41d85b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#d86241", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#8241d8", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out", "color": "#4154d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#d87c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#41d8aa", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#d241d8", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#41d8c4", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#bed841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#41d85b", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#d86241", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d84190", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#8241d8", "style": "normal"}, {"source": "t_gripper", "target": "m_px4io", "color": "#4154d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#d87c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#41d8aa", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_crsf_rc", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_crsf_rc", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_crsf_rc", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_dsm_rc", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dsm_rc", "color": "#d87c41", "style": "normal"}, {"source": "t_battery_status", "target": "m_ghst_rc", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#d88941", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#68d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#d87c41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#d86241", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_bst", "color": "#41d8cb", "style": "normal"}, {"source": "t_battery_status", "target": "m_bst", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_frsky_telemetry", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_frsky_telemetry", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_frsky_telemetry", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_frsky_telemetry", "color": "#47d841", "style": "normal"}, {"source": "t_airspeed", "target": "m_hott_telemetry", "color": "#d841aa", "style": "normal"}, {"source": "t_battery_status", "target": "m_hott_telemetry", "color": "#41d890", "style": "normal"}, {"source": "t_home_position", "target": "m_hott_telemetry", "color": "#a3d841", "style": "normal"}, {"source": "t_esc_status", "target": "m_hott_telemetry", "color": "#b741d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d8aa41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#d86241", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#41cbd8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#d87c41", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#41aad8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d241d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#62d841", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#d8aa41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#d841b7", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#41d841", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#d8c441", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#41d85b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d84190", "style": "normal"}, {"source": "t_gripper", "target": "m_uavcan", "color": "#4154d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d8cb41", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#b7d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#bed841", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#a3d841", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#96d841", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#41d8aa", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#8241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d88941", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d841aa", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#62d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#aad841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#a341d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#41d8a3", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#d88241", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#d841b7", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#8941d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#d88941", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#41d8a3", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#68d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#41d8cb", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#4162d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#47d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d84162", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#82d841", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#d84741", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#7cd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#41d8cb", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#41d8d2", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d85441", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#9641d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d86241", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#d86841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#a341d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#d87c41", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#d88241", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41bed8", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#b741d8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#41a3d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d88941", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d241d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#62d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d841d2", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#d841c4", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#47d841", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#41d84e", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41d854", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d8419d", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d84190", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d8417c", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4147d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d8d241", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#41d86f", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d84175", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#d2d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#cbd841", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#c4d841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#41d889", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#41d890", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#4e41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#5441d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#a3d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d8415b", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#6841d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#7541d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#d84147", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#aad841", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#5bd841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#54d841", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d84175", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#414ed8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#417cd8", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#41d8b7", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#d8d841", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#41d896", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d8b741", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d841aa", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d8419d", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#62d841", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#9641d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#8941d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d89641", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d8415b", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#d87c41", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#4141d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#cb41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#d88941", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#b741d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#41d8a3", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#41d890", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#d841cb", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#d87c41", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#62d841", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d84189", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#d87c41", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#6f41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#62d841", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#9d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d84190", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#6f41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#d841b7", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d88941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d84190", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#d88941", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#4196d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#62d841", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#41d89d", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#41d862", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#d841d2", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#7541d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#d841b7", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#4175d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#41d8cb", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#62d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#d84190", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#d841d2", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#d84154", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#d87c41", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#7541d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#47d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#41d87c", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d8416f", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#62d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d84190", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#6fd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#62d841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#d84e41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d84190", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d84162", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#4189d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#d87c41", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#d84182", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#47d841", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#41d8b1", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d88941", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d8d241", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#d841c4", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d88941", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#5441d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#aad841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d86241", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d841d2", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d8415b", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d84189", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d84154", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#47d841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#8941d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#41d8cb", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#4182d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d88941", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#415bd8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#41d890", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d84190", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#d87c41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d88941", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d88941", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#41a3d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#d84190", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d84175", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d85b41", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#d85441", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d86241", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#d86841", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#d87c41", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#d88241", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d88941", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#d89041", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d89d41", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d8a341", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d8b741", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d8be41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d8cb41", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#d8d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#d2d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#cbd841", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#c4d841", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#b1d841", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#aad841", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#a3d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#89d841", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#90d841", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#75d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#62d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#47d841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#41d868", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41d875", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#41d87c", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d882", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#41d889", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#41d890", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#41d8be", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#41d2d8", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#41c4d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#41b7d8", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41bed8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#41b1d8", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#419dd8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#416fd8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#4162d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#4741d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#4e41d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#5441d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#5b41d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#6841d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#6f41d8", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#7541d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#a341d8", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#aa41d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#b141d8", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#be41d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#b741d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#c441d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#cb41d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#d841d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d841d2", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#d841cb", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#d841be", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#d841c4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#d841b7", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d841aa", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d841a3", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#d84196", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d8419d", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d84190", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#d84182", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d84175", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d84168", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d84162", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d8415b", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#62d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d84190", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#6f41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#d841b7", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#d8d841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#4168d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d88941", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d84190", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#5bd841", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#4190d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#62d841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d84154", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#d8d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d8416f", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#41d87c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d88941", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#41d890", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#62d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d84190", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d88941", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#d841b1", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#41d847", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#62d841", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#aa41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#a3d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#9dd841", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d87541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#d87c41", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#7541d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#d841b7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#47d841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#41b1d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#cb41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#d87c41", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d86f41", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d84175", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#b141d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#cbd841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d8b741", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#68d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#d8d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#5441d8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#6241d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d8415b", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#6841d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#d841c4", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4147d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d8d241", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#9041d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d241d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#bed841", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#41d85b", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#d84190", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d86241", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#8241d8", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#4154d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#d87c41", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#41d8aa", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#41d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#89d841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#89d841", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d85b41", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#89d841", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#416fd8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#d841be", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#41d889", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#d87c41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#4147d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d8d241", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#d85441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#d84e41", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#d87c41", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#41a3d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d88941", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#62d841", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#d841d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d841d2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#d841b7", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#d8b141", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d841a3", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#d8d841", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#a3d841", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_px4_fmu-v6x.json b/docs/public/middleware/graph_px4_fmu-v6x.json new file mode 100644 index 0000000000..559e95c2e7 --- /dev/null +++ b/docs/public/middleware/graph_px4_fmu-v6x.json @@ -0,0 +1 @@ +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_serial", "name": "lightware_laser_serial", "type": "Module", "color": "#666666"}, {"id": "m_pm_selector_auterion", "name": "pm_selector_auterion", "type": "Module", "color": "#666666"}, {"id": "m_lightware_laser_i2c", "name": "lightware_laser_i2c", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_is31fl3195", "name": "rgbled_is31fl3195", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_cdcacm_autostart", "name": "cdcacm_autostart", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_ncp5623c", "name": "rgbled_ncp5623c", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_capture", "name": "camera_capture", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_ulanding_radar", "name": "ulanding_radar", "type": "Module", "color": "#666666"}, {"id": "m_battery_status", "name": "battery_status", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_rgbled_lp5562", "name": "rgbled_lp5562", "type": "Module", "color": "#666666"}, {"id": "m_safety_button", "name": "safety_button", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_i2c_launcher", "name": "i2c_launcher", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_esc_battery", "name": "esc_battery", "type": "Module", "color": "#666666"}, {"id": "m_led_control", "name": "led_control", "type": "Module", "color": "#666666"}, {"id": "m_teraranger", "name": "teraranger", "type": "Module", "color": "#666666"}, {"id": "m_septentrio", "name": "septentrio", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_board_adc", "name": "board_adc", "type": "Module", "color": "#666666"}, {"id": "m_ms5525dso", "name": "ms5525dso", "type": "Module", "color": "#666666"}, {"id": "m_adis16470", "name": "adis16470", "type": "Module", "color": "#666666"}, {"id": "m_icm42670p", "name": "icm42670p", "type": "Module", "color": "#666666"}, {"id": "m_icm42688p", "name": "icm42688p", "type": "Module", "color": "#666666"}, {"id": "m_lsm303agr", "name": "lsm303agr", "type": "Module", "color": "#666666"}, {"id": "m_mmc5983ma", "name": "mmc5983ma", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_icp201xx", "name": "icp201xx", "type": "Module", "color": "#666666"}, {"id": "m_ms4525do", "name": "ms4525do", "type": "Module", "color": "#666666"}, {"id": "m_icm20602", "name": "icm20602", "type": "Module", "color": "#666666"}, {"id": "m_icm20649", "name": "icm20649", "type": "Module", "color": "#666666"}, {"id": "m_icm20948", "name": "icm20948", "type": "Module", "color": "#666666"}, {"id": "m_icm45686", "name": "icm45686", "type": "Module", "color": "#666666"}, {"id": "m_iim42652", "name": "iim42652", "type": "Module", "color": "#666666"}, {"id": "m_qmc5883l", "name": "qmc5883l", "type": "Module", "color": "#666666"}, {"id": "m_vcm1193l", "name": "vcm1193l", "type": "Module", "color": "#666666"}, {"id": "m_rc_input", "name": "rc_input", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_ads1115", "name": "ads1115", "type": "Module", "color": "#666666"}, {"id": "m_cm8jl65", "name": "cm8jl65", "type": "Module", "color": "#666666"}, {"id": "m_tf02pro", "name": "tf02pro", "type": "Module", "color": "#666666"}, {"id": "m_vl53l0x", "name": "vl53l0x", "type": "Module", "color": "#666666"}, {"id": "m_vl53l1x", "name": "vl53l1x", "type": "Module", "color": "#666666"}, {"id": "m_ak09916", "name": "ak09916", "type": "Module", "color": "#666666"}, {"id": "m_hmc5883", "name": "hmc5883", "type": "Module", "color": "#666666"}, {"id": "m_ist8308", "name": "ist8308", "type": "Module", "color": "#666666"}, {"id": "m_ist8310", "name": "ist8310", "type": "Module", "color": "#666666"}, {"id": "m_lis3mdl", "name": "lis3mdl", "type": "Module", "color": "#666666"}, {"id": "m_iis2mdc", "name": "iis2mdc", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out", "name": "pwm_out", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_bmp388", "name": "bmp388", "type": "Module", "color": "#666666"}, {"id": "m_ms5611", "name": "ms5611", "type": "Module", "color": "#666666"}, {"id": "m_ll40ls", "name": "ll40ls", "type": "Module", "color": "#666666"}, {"id": "m_tfmini", "name": "tfmini", "type": "Module", "color": "#666666"}, {"id": "m_heater", "name": "heater", "type": "Module", "color": "#666666"}, {"id": "m_bmi088", "name": "bmi088", "type": "Module", "color": "#666666"}, {"id": "m_rgbled", "name": "rgbled", "type": "Module", "color": "#666666"}, {"id": "m_ak8963", "name": "ak8963", "type": "Module", "color": "#666666"}, {"id": "m_bmm150", "name": "bmm150", "type": "Module", "color": "#666666"}, {"id": "m_rm3100", "name": "rm3100", "type": "Module", "color": "#666666"}, {"id": "m_ina226", "name": "ina226", "type": "Module", "color": "#666666"}, {"id": "m_ina228", "name": "ina228", "type": "Module", "color": "#666666"}, {"id": "m_ina238", "name": "ina238", "type": "Module", "color": "#666666"}, {"id": "m_uavcan", "name": "uavcan", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_sdp3x", "name": "sdp3x", "type": "Module", "color": "#666666"}, {"id": "m_dshot", "name": "dshot", "type": "Module", "color": "#666666"}, {"id": "m_px4io", "name": "px4io", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_distance_sensor_mode_change_request", "name": "distance_sensor_mode_change_request", "type": "topic", "color": "#5541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#8cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#8541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d89a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#d84193", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#b641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#41d847", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#8c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#c4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41d855", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#a141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#415cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#b6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#78d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#d841b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d89341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_operator_id", "name": "open_drone_id_operator_id", "type": "topic", "color": "#d8bd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#41d1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#417fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#4e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#6341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_request", "name": "uavcan_parameter_request", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d86a41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#41d863", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_arm_status", "name": "open_drone_id_arm_status", "type": "topic", "color": "#c441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#d87841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d8a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#41d8ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#41a8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#418cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#4163d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#7141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#d841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d8ca41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_uavcan_parameter_value", "name": "uavcan_parameter_value", "type": "topic", "color": "#71d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41d8d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#4147d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#85d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#41d84e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_self_id", "name": "open_drone_id_self_id", "type": "topic", "color": "#41d8a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#4171d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#4155d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#d841a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d8d141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#4ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_open_drone_id_system", "name": "open_drone_id_system", "type": "topic", "color": "#a841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d88541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#7fd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#41d885", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#41cad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#4185d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d8419a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#bdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#a1d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#4741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41d88c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#41d8c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d841bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#d841a8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#d8418c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#d8af41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#a8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#5cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41a1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#416ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#414ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#d841d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d841c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#d85c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d88c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d8a841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#d8b641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#d8d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#55d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#41d85c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#41d87f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#bd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d84185", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d84178", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#cad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#41d878", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#41d893", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#41d8af", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#41c4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#419ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#5c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#af41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#d84171", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d87f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_safety_button", "name": "safety_button", "type": "topic", "color": "#41d86a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#41d89a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#4193d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#d8416a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_px4io_status", "name": "px4io_status", "type": "topic", "color": "#d8c441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#afd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#9ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#63d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#ca41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_led_control", "name": "led_control", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d87141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#7841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#9a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d841ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d841af", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#d8417f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d84163", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#d86341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#47d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#41d871", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#4178d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_adc_report", "name": "adc_report", "type": "topic", "color": "#4141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#9341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41afd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#d8415c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#41d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#7f41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#93d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d8a141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}], "links": [{"source": "m_ads1115", "target": "t_adc_report", "color": "#4141d8", "style": "dashed"}, {"source": "m_board_adc", "target": "t_system_power", "color": "#63d841", "style": "dashed"}, {"source": "m_board_adc", "target": "t_adc_report", "color": "#4141d8", "style": "dashed"}, {"source": "m_bmp388", "target": "t_sensor_baro", "color": "#7841d8", "style": "dashed"}, {"source": "m_icp201xx", "target": "t_sensor_baro", "color": "#7841d8", "style": "dashed"}, {"source": "m_ms5611", "target": "t_sensor_baro", "color": "#7841d8", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_camera_trigger", "color": "#41d8af", "style": "dashed"}, {"source": "m_camera_capture", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#41d8af", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_ms4525do", "target": "t_differential_pressure", "color": "#4171d8", "style": "dashed"}, {"source": "m_ms5525dso", "target": "t_differential_pressure", "color": "#4171d8", "style": "dashed"}, {"source": "m_sdp3x", "target": "t_differential_pressure", "color": "#4171d8", "style": "dashed"}, {"source": "m_cm8jl65", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_lightware_laser_i2c", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_lightware_laser_serial", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_ll40ls", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_teraranger", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_tf02pro", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_tfmini", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_ulanding_radar", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_vl53l0x", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_vl53l1x", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_outputs", "color": "#41d8d8", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_armed", "color": "#41d878", "style": "dashed"}, {"source": "m_dshot", "target": "t_esc_status", "color": "#d86341", "style": "dashed"}, {"source": "m_dshot", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_dshot", "target": "t_actuator_motors", "color": "#d8a841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_sensor_gps", "color": "#47d841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_gps_inject_data", "color": "#d8d841", "style": "dashed"}, {"source": "m_septentrio", "target": "t_satellite_info", "color": "#5c41d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#47d841", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#d8d841", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#5c41d8", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_adis16470", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_bmi088", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_icm20602", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_icm20649", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_icm20948", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_icm42670p", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_icm42688p", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_icm45686", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_iim42652", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_ak09916", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_ak8963", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_bmm150", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_hmc5883", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_ist8308", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_ist8310", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_lis3mdl", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_lsm303agr", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_mmc5983ma", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_qmc5883l", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_rm3100", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_iis2mdc", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_vcm1193l", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_ina226", "target": "t_battery_status", "color": "#d85541", "style": "dashed"}, {"source": "m_ina228", "target": "t_battery_status", "color": "#d85541", "style": "dashed"}, {"source": "m_ina238", "target": "t_battery_status", "color": "#d85541", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_outputs", "color": "#41d8d8", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_armed", "color": "#41d878", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_pwm_out", "target": "t_actuator_motors", "color": "#d8a841", "style": "dashed"}, {"source": "m_px4io", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_px4io", "target": "t_safety_button", "color": "#41d86a", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_outputs", "color": "#41d8d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_px4io", "target": "t_px4io_status", "color": "#d8c441", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_armed", "color": "#41d878", "style": "dashed"}, {"source": "m_px4io", "target": "t_input_rc", "color": "#41afd8", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_px4io", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_px4io", "target": "t_actuator_motors", "color": "#d8a841", "style": "dashed"}, {"source": "m_rc_input", "target": "t_input_rc", "color": "#41afd8", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_rc_input", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_safety_button", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_safety_button", "target": "t_safety_button", "color": "#41d86a", "style": "dashed"}, {"source": "m_safety_button", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_safety_button", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_uavcan", "target": "t_safety_button", "color": "#41d86a", "style": "dashed"}, {"source": "m_uavcan", "target": "t_open_drone_id_arm_status", "color": "#c441d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_outputs", "color": "#41d8d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_uavcan_parameter_value", "color": "#71d841", "style": "dashed"}, {"source": "m_uavcan", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_uavcan", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_armed", "color": "#41d878", "style": "dashed"}, {"source": "m_uavcan", "target": "t_esc_status", "color": "#d86341", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_uavcan", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_uavcan", "target": "t_actuator_motors", "color": "#d8a841", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#a1d841", "style": "dashed"}, {"source": "m_battery_status", "target": "t_battery_status", "color": "#d85541", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#419ad8", "style": "dashed"}, {"source": "m_commander", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#4163d8", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#41d8b6", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#41d878", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#93d841", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#6ad841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#4ed841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#41d893", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#d8416a", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#af41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#c4d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d8d141", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#41d863", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d8a841", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d841c4", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d8a141", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#4155d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#414ed8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d8a1", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#a8d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#4147d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#6341d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41d8d1", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#5cd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41a1d8", "style": "dashed"}, {"source": "m_esc_battery", "target": "t_battery_status", "color": "#d85541", "style": "dashed"}, {"source": "m_send_event", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#41cad8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d8419a", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#afd841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d1d841", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d84193", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#41a8d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#d84163", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#afd841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#41d1d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#415cd8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_orbit_status", "color": "#41b6d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#d841d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#41bdd8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#41d847", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#8541d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#8cd841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#b641d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#d84147", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_figure_eight_status", "color": "#7fd841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#d841bd", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d841bd", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#41bdd8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#b6d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#d841a8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#78d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#41d87f", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#41d84e", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#8c41d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#d8418c", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#d841a1", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#41d885", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#7f41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#d8417f", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#41d89a", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#afd841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#d84171", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#d87841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#41d8ca", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#41d893", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#47d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_uavcan_parameter_request", "color": "#d84741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#41d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#418cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#bd41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#55d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d85541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#417fd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41d855", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d841ca", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d87f41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#d841d1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#4178d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#4171d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d88c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d89341", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d89a41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#416ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#41d871", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d841af", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#d8b641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_operator_id", "color": "#d8bd41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#41d885", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#d8419a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#d8d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#414ed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_self_id", "color": "#41d8a8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d8a1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#41d8bd", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#9ad841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#93d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#4147d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#4741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#85d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#d8415c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#6a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#7841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41afd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#a141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#8c41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#9a41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_open_drone_id_system", "color": "#a841d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#4193d8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#d84193", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#41cad8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#41c4d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#b641d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#d8419a", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89341", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#d841b6", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#41d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#bd41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d84e41", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#d85c41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#d8af41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#d841a1", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41d88c", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#41d893", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#cad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#41d8a1", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d84178", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#4741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#4e41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_distance_sensor_mode_change_request", "color": "#5541d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#6ad841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#9341d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#41d8ca", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d84185", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#bdd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#d84155", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d87141", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#5cd841", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#4171d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#d8415c", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#41d8c4", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#41d85c", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#4185d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d141d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#41bdd8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#7141d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d86a41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d88541", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d89341", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d841bd", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d8414e", "style": "dashed"}, {"source": "m_led_control", "target": "t_led_control", "color": "#d84141", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#ca41d8", "style": "dashed"}, {"source": "t_adc_report", "target": "m_board_adc", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_capture", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#41d85c", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_cdcacm_autostart", "color": "#41d878", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_lightware_laser_i2c", "color": "#41d893", "style": "normal"}, {"source": "t_distance_sensor_mode_change_request", "target": "m_lightware_laser_i2c", "color": "#5541d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_dshot", "color": "#afd841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_dshot", "color": "#41d878", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_dshot", "color": "#41d87f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_dshot", "color": "#d8d141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_dshot", "color": "#41d85c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_dshot", "color": "#d87841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_dshot", "color": "#d1d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_dshot", "color": "#d8414e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_dshot", "color": "#d8a841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_septentrio", "color": "#d8d841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#d8d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_heater", "color": "#9ad841", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled", "color": "#d84141", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_is31fl3195", "color": "#d84141", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_lp5562", "color": "#d84141", "style": "normal"}, {"source": "t_led_control", "target": "m_rgbled_ncp5623c", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#41d8a1", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#d85541", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#a1d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#41afd8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina226", "color": "#41d893", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina226", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina228", "color": "#41d893", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina228", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ina238", "color": "#41d893", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_ina238", "color": "#41a8d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pm_selector_auterion", "color": "#41d878", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out", "color": "#afd841", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out", "color": "#41d878", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out", "color": "#41d87f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out", "color": "#d8d141", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out", "color": "#41d85c", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out", "color": "#d1d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out", "color": "#d8414e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out", "color": "#d8a841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_px4io", "color": "#afd841", "style": "normal"}, {"source": "t_px4io_status", "target": "m_px4io", "color": "#d8c441", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_px4io", "color": "#41d878", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_px4io", "color": "#41d87f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_px4io", "color": "#d8d141", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_px4io", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_px4io", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_px4io", "color": "#d87841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_px4io", "color": "#d1d841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_px4io", "color": "#d8414e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_px4io", "color": "#d8a841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rc_input", "color": "#414ed8", "style": "normal"}, {"source": "t_battery_status", "target": "m_rc_input", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_rc_input", "color": "#41d893", "style": "normal"}, {"source": "t_adc_report", "target": "m_rc_input", "color": "#4141d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_rc_input", "color": "#41d85c", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_safety_button", "color": "#41d878", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#ca41d8", "style": "normal"}, {"source": "t_led_control", "target": "m_uavcan", "color": "#d84141", "style": "normal"}, {"source": "t_uavcan_parameter_request", "target": "m_uavcan", "color": "#d84741", "style": "normal"}, {"source": "t_tune_control", "target": "m_uavcan", "color": "#ca41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_uavcan", "color": "#41d85c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uavcan", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_uavcan", "color": "#d8a841", "style": "normal"}, {"source": "t_open_drone_id_operator_id", "target": "m_uavcan", "color": "#d8bd41", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_uavcan", "color": "#41d878", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_uavcan", "color": "#d841a1", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_uavcan", "color": "#41d87f", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_uavcan", "color": "#d8d141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_uavcan", "color": "#41d893", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_uavcan", "color": "#d8d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_uavcan", "color": "#d1d841", "style": "normal"}, {"source": "t_open_drone_id_self_id", "target": "m_uavcan", "color": "#41d8a8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_uavcan", "color": "#afd841", "style": "normal"}, {"source": "t_open_drone_id_system", "target": "m_uavcan", "color": "#a841d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uavcan", "color": "#4147d8", "style": "normal"}, {"source": "t_home_position", "target": "m_uavcan", "color": "#6ad841", "style": "normal"}, {"source": "t_actuator_test", "target": "m_uavcan", "color": "#d8414e", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#6341d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#d141d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#d841a1", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#d841d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#4147d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d84163", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41a1d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#41d893", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#41a8d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_status", "color": "#41d893", "style": "normal"}, {"source": "t_adc_report", "target": "m_battery_status", "color": "#4141d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_status", "color": "#41a8d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#414ed8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#8c41d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d8a1", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#41d8af", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#47d841", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#4185d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d85541", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#d841d1", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#d86341", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#41d85c", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d88541", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#4171d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d8a141", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d8a841", "style": "normal"}, {"source": "t_safety_button", "target": "m_commander", "color": "#41d86a", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d841af", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#d8af41", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#d8b641", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#41d878", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#d841a1", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41d88c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#41d893", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#cad841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#4155d8", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#41d89a", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#bdd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d8a1", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#41d8b6", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d84178", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#a1d841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#9ad841", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#d84171", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#93d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#4147d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#41d8ca", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#85d841", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#6341d8", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41d8d1", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#7841d8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#d84155", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#63d841", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#7f41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#6ad841", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41a1d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#5cd841", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#4163d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d141d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#7141d8", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d86a41", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#41d8ca", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#4ed841", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d841bd", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#bd41d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d84185", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#418cd8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#d8b641", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#41d885", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#d841a1", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#d84155", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#d841d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d87141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#41d85c", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#5cd841", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#d8415c", "style": "normal"}, {"source": "t_esc_status", "target": "m_esc_battery", "color": "#d86341", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_esc_battery", "color": "#41d893", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_esc_battery", "color": "#41a8d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#41d893", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#7f41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#41d85c", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#af41d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#d841a1", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#41c4d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d89341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#414ed8", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#41d1d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#d841a1", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#4147d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#d84193", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d89341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#414ed8", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#415cd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#d841a1", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#a1d841", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#41d847", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#4ed841", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#8cd841", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#d84147", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#d8a141", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#414ed8", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#d8a141", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#d841a1", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#4147d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#d87841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#d8419a", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#41d85c", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#4e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#4ed841", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#d841a1", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#a1d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d8ca41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#41d893", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#41d863", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d84e41", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#41d8bd", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#d841a1", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#417fd8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#41d85c", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#8c41d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#4e41d8", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d89a41", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#41d893", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d841af", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#bdd841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d141d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#41d878", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#41c4d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#a1d841", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#d841d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#4e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#4147d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#5cd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d8419a", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#414ed8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d87f41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#4147d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d85541", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#41d893", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d88c41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#41d8ca", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#d84171", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d87141", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#d86341", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#d88541", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d89341", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d8a141", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#d8b641", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#d8ca41", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#d8d841", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#cad841", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#c4d841", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#bdd841", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#b6d841", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#a8d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#a1d841", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#93d841", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#7fd841", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#78d841", "style": "normal"}, {"source": "t_uavcan_parameter_value", "target": "m_mavlink", "color": "#71d841", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#5cd841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#55d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#4ed841", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#47d841", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#41d841", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#41d84e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#41d85c", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#41d871", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#41d878", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#41d885", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#41d88c", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d8a1", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#41d8af", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#41d8c4", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#41d8ca", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#41d8d8", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#41b6d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41afd8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41a1d8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#419ad8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#4193d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#417fd8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#4178d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#4171d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#4155d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#4147d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#4741d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#4e41d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#5c41d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#6341d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#7841d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#7f41d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#8c41d8", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#9a41d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#b641d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#af41d8", "style": "normal"}, {"source": "t_open_drone_id_arm_status", "target": "m_mavlink", "color": "#c441d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d141d8", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d841ca", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d841c4", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#d841a8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#d841a1", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#d84193", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#d8418c", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#d8417f", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#d84178", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#d8416a", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d84163", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#414ed8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#d841a1", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#d87841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#d84193", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#4147d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d89341", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#7141d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#41d893", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#d87841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#41cad8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#d841a1", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#4147d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d8419a", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#4ed841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#d841a1", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d8ca41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#d87841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#41d893", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#41d863", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d8a1", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#41d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#41d885", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#d841a1", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#d85c41", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#6ad841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#41d893", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#8541d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#4741d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#4147d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d841c4", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d8a141", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#9341d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41afd8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#41d8ca", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#416ad8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#bdd841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#4155d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d841af", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#6a41d8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#9ad841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d87141", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#4178d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#41d8c4", "style": "normal"}, {"source": "t_adc_report", "target": "m_sensors", "color": "#4141d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#5cd841", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#4171d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#4ed841", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d841af", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#9ad841", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#7841d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#4178d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#d88541", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d855", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#41d85c", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#d841a1", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#41d893", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#414ed8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#a1d841", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#d84171", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#4147d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d84163", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#4e41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#6ad841", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#a141d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#b641d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#4ed841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_i2c_launcher", "color": "#41d893", "style": "normal"}]} \ No newline at end of file diff --git a/docs/public/middleware/graph_px4_sitl.json b/docs/public/middleware/graph_px4_sitl.json index 4b358194da..2262923a1f 100644 --- a/docs/public/middleware/graph_px4_sitl.json +++ b/docs/public/middleware/graph_px4_sitl.json @@ -1 +1 @@ -{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_system_power_simulator", "name": "system_power_simulator", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rover_differential", "name": "rover_differential", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_fake_magnetometer", "name": "fake_magnetometer", "type": "Module", "color": "#666666"}, {"id": "m_px4_mavlink_debug", "name": "px4_mavlink_debug", "type": "Module", "color": "#666666"}, {"id": "m_work_item_example", "name": "work_item_example", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_ackermann", "name": "rover_ackermann", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_fw_pos_control", "name": "fw_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_agp_sim", "name": "sensor_agp_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_px4_simple_app", "name": "px4_simple_app", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_rover_mecanum", "name": "rover_mecanum", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_fake_imu", "name": "fake_imu", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d84184", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#b941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#d85541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d8415c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#d8417e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#82d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#4c41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#d841bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#d8c841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#41d8a2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#4172d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#b241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#d8ad41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d89241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#67d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#4cd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#4165d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#41d894", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#ab41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#bf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d841c2", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#d8418b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d84162", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#d86941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_throttle_setpoint", "name": "rover_throttle_setpoint", "type": "topic", "color": "#d87741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#d8a641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#cdd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#abd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_rover_velocity_setpoint", "name": "rover_velocity_setpoint", "type": "topic", "color": "#41d88e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#41d8bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_steering_setpoint", "name": "rover_steering_setpoint", "type": "topic", "color": "#41d1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#41bdd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#419bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_attitude_setpoint", "name": "rover_attitude_setpoint", "type": "topic", "color": "#cd41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#d841b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_rover_position_setpoint", "name": "rover_position_setpoint", "type": "topic", "color": "#d84155", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#53d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#41d8cb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#4150d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#d84170", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#59d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#41a9d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#4143d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#c641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d84177", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#4541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#7541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#a441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_rate_setpoint", "name": "rover_rate_setpoint", "type": "topic", "color": "#d86241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d89941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#b2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#a4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#90d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#41d857", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#41d872", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#41a2d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_aux_global_position", "name": "aux_global_position", "type": "topic", "color": "#d841a0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource2d.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#d8a041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#41d887", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#6741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#9d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#d87e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#d88441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#60d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#41d865", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41cbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#b9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#7bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#45d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#41d89b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#41d8c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#41d8d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41c4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#d841ad", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#d88b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#c6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#97d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#89d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos", "name": "actuator_servos", "type": "topic", "color": "#41d8b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#41d8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#4187d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#5941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#9741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#d841c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#d84192", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#d4d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#bfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#6ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#41d84a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#415ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#7b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#d841cf", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#d84169", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#d85c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d8bb41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#d8cf41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#75d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#41d8a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#4157d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#41d85e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#41b6d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#414ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#6e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d87041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#d8b441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#d8c241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d8d641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#41d8af", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#6041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#9041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#d841a6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#9dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#4194d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#5341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#d441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#d841d6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#41afd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#8941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#41d850", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#418ed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#8241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#41d843", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#d84199", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#4179d8", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#89d841", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#4194d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#41d84a", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#6e41d8", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d841b4", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#abd841", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#d8a041", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#b9d841", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#d84741", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#4541d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#75d841", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#6ed841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#d84169", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#41d8a2", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#41d8a9", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#6e41d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#41d8bd", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#4180d8", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#bfd841", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#41d843", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d8bb41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#5941d8", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos", "color": "#41d8b6", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#d8418b", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#a441d8", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#41d8d1", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41c4d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#59d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#45d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#41d880", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#41d894", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#41d8c4", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#b9d841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#41d8cb", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#d84170", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#6e41d8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#90d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#414ad8", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#41d857", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d84147", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#82d841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_orbit_status", "color": "#41d85e", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4c41d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_spoilers_setpoint", "color": "#d88441", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flight_phase_estimation", "color": "#d84141", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_landing_status", "color": "#d85541", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_figure_eight_status", "color": "#41a2d8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_position_controller_status", "color": "#4cd841", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_tecs_status", "color": "#d841a6", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_launch_detection_status", "color": "#419bd8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_landing_gear", "color": "#414ad8", "style": "dashed"}, {"source": "m_fw_pos_control", "target": "t_flaps_setpoint", "color": "#7b41d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#d88441", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#7b41d8", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#41d865", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#d841bb", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#67d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d89241", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d84177", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#c6d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#d87e41", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#4143d8", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#b2d841", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#418ed8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#41d8cb", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#45d841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#41c4d8", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#d8cf41", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#6041d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#415ed8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#414ad8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#d8a641", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#bfd841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#41bdd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#41afd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#41a9d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#53d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#ab41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#d85c41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d86941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#b241d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d87041", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#4194d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#41d843", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#41d850", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#41d857", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#41d879", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#9741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#c641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#d841d6", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#d841c8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#d8ad41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#d8b441", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d841c2", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#d841bb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#d8c241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#4172d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d8d641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#416cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#4157d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#d4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#b9d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d8414e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#41d8cb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#d8417e", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#b2d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#41d8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#a4d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#97d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#6741d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#9dd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#6e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#89d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#7bd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#8941d8", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#82d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841c2", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#4c41d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#d84e41", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#90d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#41d857", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#4150d8", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#4165d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#41d850", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#41d86c", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#bf41d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#d88b41", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#41d89b", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#41d8a9", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#d841cf", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#d841c8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#41d8af", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#cdd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#bfd841", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#5341d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#6741d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41cbd8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#4143d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#8241d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#d8a641", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_velocity_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_motors", "color": "#5941d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_servos", "color": "#41d8b6", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_attitude_setpoint", "color": "#cd41d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_steering_setpoint", "color": "#41d1d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_position_setpoint", "color": "#d84155", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_position_controller_status", "color": "#4cd841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_rate_setpoint", "color": "#d86241", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_throttle_setpoint", "color": "#d87741", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_velocity_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_attitude_setpoint", "color": "#cd41d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_actuator_motors", "color": "#5941d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_steering_setpoint", "color": "#41d1d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_position_setpoint", "color": "#d84155", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_rate_setpoint", "color": "#d86241", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_throttle_setpoint", "color": "#d87741", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_velocity_setpoint", "color": "#41d88e", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_attitude_setpoint", "color": "#cd41d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_actuator_motors", "color": "#5941d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_steering_setpoint", "color": "#41d1d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_position_setpoint", "color": "#d84155", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_rate_setpoint", "color": "#d86241", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_throttle_setpoint", "color": "#d87741", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#4cd841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841c2", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#abd841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#d841b4", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#41afd8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#41d887", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#c641d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#9d41d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#d84192", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#41d8c4", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#9041d8", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#d4d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_information", "color": "#ab41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#d86941", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gps", "color": "#4194d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#b941d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#c641d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#d441d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#d8b441", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#d8bb41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_attitude_status", "color": "#d841bb", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#d8c841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#d8c241", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_servos", "color": "#41d8b6", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#d841ad", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d84184", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_distance_sensor", "color": "#41d8d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#5941d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_optical_flow", "color": "#a4d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#d84169", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#d8415c", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_mag", "color": "#9dd841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#d8414e", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#5941d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_servos", "color": "#41d8b6", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#d84169", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#d841ad", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#7541d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d8bb41", "style": "dashed"}, {"source": "m_sensor_agp_sim", "target": "t_aux_global_position", "color": "#d841a0", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#c641d8", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#d8b441", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#4194d8", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#9dd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#53d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#d85c41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#d86941", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#b941d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#c641d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#d441d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#d8b441", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#d8c841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#d8c241", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#416cd8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#d84199", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d84184", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#a4d841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#d8415c", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#9dd841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#d8414e", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#8941d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8414e", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d84184", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#41afd8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#d8c841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#d8c241", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#41d8d8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#416cd8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d8415c", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#b941d8", "style": "dashed"}, {"source": "m_system_power_simulator", "target": "t_system_power", "color": "#41b6d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#60d841", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d841b4", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#abd841", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841c2", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d841c2", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#d88441", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#41d872", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#d841b4", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d89941", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#abd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d84162", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#7b41d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d8bb41", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#4187d8", "style": "dashed"}, {"source": "m_tests", "target": "t_dataman_request", "color": "#d841c8", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#6e41d8", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#4194d8", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro", "color": "#d8c241", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro_fifo", "color": "#416cd8", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_esc_status", "color": "#d441d8", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_accel", "color": "#d8414e", "style": "dashed"}, {"source": "m_fake_magnetometer", "target": "t_sensor_mag", "color": "#9dd841", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_key_value", "color": "#97d841", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_value", "color": "#d87041", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_array", "color": "#d8d641", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_vect", "color": "#d841d6", "style": "dashed"}, {"source": "m_px4_simple_app", "target": "t_vehicle_attitude", "color": "#b9d841", "style": "dashed"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#4187d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#89d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#41d8cb", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#d4d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#d8a041", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#b9d841", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#8941d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#6e41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#41d8cb", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#41afd8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#41d894", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#d841b4", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#d84141", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#d841a6", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#419bd8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41c4d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#53d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#d84192", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#d86941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#b9d841", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#4179d8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#b9d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#d841bb", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#41b6d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#9d41d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#60d841", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#41a9d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#59d841", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#41d843", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#4194d8", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#41d872", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#7bd841", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#41d880", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#418ed8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#41d887", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#41d894", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#c641d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d89941", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#d441d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#4187d8", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#41d89b", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#d8a041", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#d841cf", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#41d8a9", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#4180d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#d8a641", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#d8b441", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#d8c241", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#d8cf41", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#415ed8", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#d4d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#cdd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#41d8cb", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#d84170", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#d88b41", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#5941d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#41d8d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#d84169", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#9dd841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41cbd8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8414e", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41c4d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#4143d8", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#d88441", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#7b41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#d841b4", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#abd841", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d84162", "style": "normal"}, {"source": "t_rpm", "target": "m_control_allocator", "color": "#d84199", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#41d8bd", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#d8a641", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#4541d8", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#d841c8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#4143d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#41afd8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#41d887", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#b2d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#41d8d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#4187d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#419bd8", "style": "normal"}, {"source": "t_aux_global_position", "target": "m_ekf2", "color": "#d841a0", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#d8a041", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#d84192", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#d86941", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#9041d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#6ed841", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#4187d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#d4d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d841c2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#41d8cb", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#d84e41", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d841c2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#b9d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#d8a041", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#82d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_pos_control", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_pos_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_wind", "target": "m_fw_pos_control", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_pos_control", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_pos_control", "color": "#4187d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_pos_control", "color": "#d8a041", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_pos_control", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_pos_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_pos_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_pos_control", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_pos_control", "color": "#41d857", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#d4d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#4150d8", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#d8418b", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#d8a041", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#4143d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#41d8af", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#d841bb", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#d8417e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#4187d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#ab41d8", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#d8ad41", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#cdd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#4143d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#d8c241", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#60d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#bfd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8414e", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#d8c241", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#9d41d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#41d8c4", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#416cd8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#9d41d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#d841b4", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#d84169", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#d84e41", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#419bd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#d8a041", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#cdd841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#41d857", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#d85c41", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#41d8cb", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#b2d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#41d8d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#d84169", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#4187d8", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#53d841", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#d84192", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#d86941", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#4187d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#d4d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#41bdd8", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#9741d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#9dd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#bfd841", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#415ed8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#d8a641", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#d84741", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d87041", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#d87e41", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#d88b41", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d89241", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#d89941", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#d8a041", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#d8a641", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#d8b441", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#d8c841", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d8d641", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#d4d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#b9d841", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#b2d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#9dd841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#97d841", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#89d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#82d841", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#75d841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#6ed841", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#67d841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#60d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#59d841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#4cd841", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#45d841", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#41d843", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#41d84a", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#41d850", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#41d85e", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#41d865", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#41d880", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#41d894", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#41d8a2", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#41d8a9", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#41d8cb", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#41d8d1", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#41d8d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#41cbd8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41c4d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#41bdd8", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#41afd8", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#41a2d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#4194d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#418ed8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#4187d8", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#4179d8", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#4157d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#4c41d8", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#6041d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#6741d8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#7541d8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#8941d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#9041d8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#9d41d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#ab41d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#b941d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#bf41d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#c641d8", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#d441d8", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#d841d6", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#d841cf", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d841c2", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#d841bb", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#d841b4", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#d841ad", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#d841a6", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#d84199", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d84184", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d84177", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#d84169", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d841c2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#b9d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#82d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#abd841", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#4165d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#90d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#41d857", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#d4d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#d8418b", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#4150d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#bfd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#4143d8", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#41d86c", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#41d8cb", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#41d880", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#5341d8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#41d8d1", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#b2d841", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#d85541", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#4187d8", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#41d850", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#4cd841", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#6741d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#41d8a9", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#cdd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#4187d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#41d879", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#d8a641", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#8941d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_ackermann", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_ackermann", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_ackermann", "color": "#b9d841", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_ackermann", "color": "#41d88e", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_ackermann", "color": "#5941d8", "style": "normal"}, {"source": "t_actuator_servos", "target": "m_rover_ackermann", "color": "#41d8b6", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_ackermann", "color": "#41a9d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_ackermann", "color": "#cd41d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_ackermann", "color": "#41d1d8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_ackermann", "color": "#d84155", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_ackermann", "color": "#d86241", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_ackermann", "color": "#d87741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_ackermann", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_ackermann", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_ackermann", "color": "#41d857", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_differential", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_differential", "color": "#41d8cb", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_differential", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_differential", "color": "#b9d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_differential", "color": "#5941d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_differential", "color": "#cd41d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_differential", "color": "#41a9d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_differential", "color": "#41d1d8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_differential", "color": "#d84155", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_differential", "color": "#d86241", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_differential", "color": "#d87741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_differential", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_differential", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_differential", "color": "#41d857", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_mecanum", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_mecanum", "color": "#41d8cb", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_mecanum", "color": "#41d88e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_mecanum", "color": "#b9d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_mecanum", "color": "#5941d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_mecanum", "color": "#cd41d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_mecanum", "color": "#41a9d8", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_mecanum", "color": "#41d1d8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_mecanum", "color": "#d84155", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_mecanum", "color": "#d86241", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_mecanum", "color": "#d87741", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_mecanum", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_mecanum", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_mecanum", "color": "#41d857", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#d841c2", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#cdd841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#41d857", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#d8c241", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#9d41d8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#c641d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#60d841", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#a4d841", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#59d841", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#9dd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8414e", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#41d8c4", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#9041d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_simulator", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#4187d8", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#8241d8", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_gz_bridge", "color": "#d89241", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#5941d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#d84169", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#4187d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#a441d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#414ad8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#c6d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#41bdd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#d8bb41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d84147", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#8241d8", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#5941d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#d84169", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#4187d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#a441d8", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#414ad8", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#c6d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#41bdd8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d8bb41", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_agp_sim", "color": "#b941d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#b941d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#b941d8", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d8415c", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#b941d8", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#d8c841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#b941d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#d841ad", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#4187d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#d4d841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#7541d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#bfd841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#7541d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#d841ad", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#d8c241", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#4187d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#9dd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8414e", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#d8b441", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#d841c2", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#4150d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#41bdd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#4541d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#41d857", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#d89941", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#b241d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#bf41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#4187d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#d8a041", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#41d8a9", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#4172d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#d841a6", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#415ed8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#4541d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#4c41d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#41d8cb", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#4143d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#d89941", "style": "normal"}, {"source": "t_dataman_response", "target": "m_tests", "color": "#41d8d1", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#8941d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fake_magnetometer", "color": "#b9d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_work_item_example", "color": "#bfd841", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_work_item_example", "color": "#d8414e", "style": "normal"}]} \ No newline at end of file +{"nodes": [{"id": "m_fw_autotune_attitude_control", "name": "fw_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_autotune_attitude_control", "name": "mc_autotune_attitude_control", "type": "Module", "color": "#666666"}, {"id": "m_landing_target_estimator", "name": "landing_target_estimator", "type": "Module", "color": "#666666"}, {"id": "m_local_position_estimator", "name": "local_position_estimator", "type": "Module", "color": "#666666"}, {"id": "m_temperature_compensation", "name": "temperature_compensation", "type": "Module", "color": "#666666"}, {"id": "m_system_power_simulator", "name": "system_power_simulator", "type": "Module", "color": "#666666"}, {"id": "m_attitude_estimator_q", "name": "attitude_estimator_q", "type": "Module", "color": "#666666"}, {"id": "m_airship_att_control", "name": "airship_att_control", "type": "Module", "color": "#666666"}, {"id": "m_flight_mode_manager", "name": "flight_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_sensor_airspeed_sim", "name": "sensor_airspeed_sim", "type": "Module", "color": "#666666"}, {"id": "m_fw_lat_lon_control", "name": "fw_lat_lon_control", "type": "Module", "color": "#666666"}, {"id": "m_mag_bias_estimator", "name": "mag_bias_estimator", "type": "Module", "color": "#666666"}, {"id": "m_rover_differential", "name": "rover_differential", "type": "Module", "color": "#666666"}, {"id": "m_airspeed_selector", "name": "airspeed_selector", "type": "Module", "color": "#666666"}, {"id": "m_control_allocator", "name": "control_allocator", "type": "Module", "color": "#666666"}, {"id": "m_payload_deliverer", "name": "payload_deliverer", "type": "Module", "color": "#666666"}, {"id": "m_rover_pos_control", "name": "rover_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_battery_simulator", "name": "battery_simulator", "type": "Module", "color": "#666666"}, {"id": "m_simulator_mavlink", "name": "simulator_mavlink", "type": "Module", "color": "#666666"}, {"id": "m_fake_magnetometer", "name": "fake_magnetometer", "type": "Module", "color": "#666666"}, {"id": "m_px4_mavlink_debug", "name": "px4_mavlink_debug", "type": "Module", "color": "#666666"}, {"id": "m_work_item_example", "name": "work_item_example", "type": "Module", "color": "#666666"}, {"id": "m_gyro_calibration", "name": "gyro_calibration", "type": "Module", "color": "#666666"}, {"id": "m_uxrce_dds_client", "name": "uxrce_dds_client", "type": "Module", "color": "#666666"}, {"id": "m_vtol_att_control", "name": "vtol_att_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_feedback", "name": "camera_feedback", "type": "Module", "color": "#666666"}, {"id": "m_fw_mode_manager", "name": "fw_mode_manager", "type": "Module", "color": "#666666"}, {"id": "m_fw_rate_control", "name": "fw_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_rate_control", "name": "mc_rate_control", "type": "Module", "color": "#666666"}, {"id": "m_rover_ackermann", "name": "rover_ackermann", "type": "Module", "color": "#666666"}, {"id": "m_sensor_baro_sim", "name": "sensor_baro_sim", "type": "Module", "color": "#666666"}, {"id": "m_uuv_att_control", "name": "uuv_att_control", "type": "Module", "color": "#666666"}, {"id": "m_uuv_pos_control", "name": "uuv_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_camera_trigger", "name": "camera_trigger", "type": "Module", "color": "#666666"}, {"id": "m_fw_att_control", "name": "fw_att_control", "type": "Module", "color": "#666666"}, {"id": "m_manual_control", "name": "manual_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_att_control", "name": "mc_att_control", "type": "Module", "color": "#666666"}, {"id": "m_mc_pos_control", "name": "mc_pos_control", "type": "Module", "color": "#666666"}, {"id": "m_sensor_agp_sim", "name": "sensor_agp_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_gps_sim", "name": "sensor_gps_sim", "type": "Module", "color": "#666666"}, {"id": "m_sensor_mag_sim", "name": "sensor_mag_sim", "type": "Module", "color": "#666666"}, {"id": "m_px4_simple_app", "name": "px4_simple_app", "type": "Module", "color": "#666666"}, {"id": "m_land_detector", "name": "land_detector", "type": "Module", "color": "#666666"}, {"id": "m_rover_mecanum", "name": "rover_mecanum", "type": "Module", "color": "#666666"}, {"id": "m_simulator_sih", "name": "simulator_sih", "type": "Module", "color": "#666666"}, {"id": "m_actuator_test", "name": "actuator_test", "type": "Module", "color": "#666666"}, {"id": "m_tune_control", "name": "tune_control", "type": "Module", "color": "#666666"}, {"id": "m_pwm_out_sim", "name": "pwm_out_sim", "type": "Module", "color": "#666666"}, {"id": "m_tone_alarm", "name": "tone_alarm", "type": "Module", "color": "#666666"}, {"id": "m_send_event", "name": "send_event", "type": "Module", "color": "#666666"}, {"id": "m_commander", "name": "commander", "type": "Module", "color": "#666666"}, {"id": "m_navigator", "name": "navigator", "type": "Module", "color": "#666666"}, {"id": "m_rc_update", "name": "rc_update", "type": "Module", "color": "#666666"}, {"id": "m_gz_bridge", "name": "gz_bridge", "type": "Module", "color": "#666666"}, {"id": "m_gyro_fft", "name": "gyro_fft", "type": "Module", "color": "#666666"}, {"id": "m_load_mon", "name": "load_mon", "type": "Module", "color": "#666666"}, {"id": "m_fake_gps", "name": "fake_gps", "type": "Module", "color": "#666666"}, {"id": "m_fake_imu", "name": "fake_imu", "type": "Module", "color": "#666666"}, {"id": "m_msp_osd", "name": "msp_osd", "type": "Module", "color": "#666666"}, {"id": "m_dataman", "name": "dataman", "type": "Module", "color": "#666666"}, {"id": "m_mavlink", "name": "mavlink", "type": "Module", "color": "#666666"}, {"id": "m_sensors", "name": "sensors", "type": "Module", "color": "#666666"}, {"id": "m_failure", "name": "failure", "type": "Module", "color": "#666666"}, {"id": "m_gimbal", "name": "gimbal", "type": "Module", "color": "#666666"}, {"id": "m_logger", "name": "logger", "type": "Module", "color": "#666666"}, {"id": "m_tests", "name": "tests", "type": "Module", "color": "#666666"}, {"id": "m_ekf2", "name": "ekf2", "type": "Module", "color": "#666666"}, {"id": "m_gps", "name": "gps", "type": "Module", "color": "#666666"}, {"id": "t_vehicle_angular_velocity_groundtruth", "name": "vehicle_angular_velocity_groundtruth", "type": "topic", "color": "#d8a941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_global_position_groundtruth", "name": "vehicle_global_position_groundtruth", "type": "topic", "color": "#abd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_landing_status", "name": "position_controller_landing_status", "type": "topic", "color": "#41d845", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_longitudinal_control_configuration", "name": "longitudinal_control_configuration", "type": "topic", "color": "#d8416e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_groundtruth", "name": "vehicle_local_position_groundtruth", "type": "topic", "color": "#d84161", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_manual_control", "name": "gimbal_manager_set_manual_control", "type": "topic", "color": "#ccd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_longitudinal_setpoint", "name": "fixed_wing_longitudinal_setpoint", "type": "topic", "color": "#41d8b4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_autotune_attitude_control_status", "name": "autotune_attitude_control_status", "type": "topic", "color": "#7141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position_setpoint", "name": "vehicle_local_position_setpoint", "type": "topic", "color": "#415fd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_attitude_status", "name": "gimbal_device_attitude_status", "type": "topic", "color": "#77d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_lateral_control_configuration", "name": "lateral_control_configuration", "type": "topic", "color": "#d84196", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_groundtruth", "name": "vehicle_attitude_groundtruth", "type": "topic", "color": "#6ad841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mc_virtual_attitude_setpoint", "name": "mc_virtual_attitude_setpoint", "type": "topic", "color": "#41d886", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fw_virtual_attitude_setpoint", "name": "fw_virtual_attitude_setpoint", "type": "topic", "color": "#41c8d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_register_ext_component_reply", "name": "register_ext_component_reply", "type": "topic", "color": "#d8415b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_lateral_setpoint", "name": "fixed_wing_lateral_setpoint", "type": "topic", "color": "#d85441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_set_attitude", "name": "gimbal_manager_set_attitude", "type": "topic", "color": "#9ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_controller_status", "name": "position_controller_status", "type": "topic", "color": "#b2d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_controls_status_0", "name": "actuator_controls_status_0", "type": "topic", "color": "#41d880", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorControlsStatus.msg"}, {"id": "t_gimbal_manager_information", "name": "gimbal_manager_information", "type": "topic", "color": "#4159d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_set_attitude", "name": "gimbal_device_set_attitude", "type": "topic", "color": "#d841a3", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_selector_status", "name": "estimator_selector_status", "type": "topic", "color": "#d84141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_fixed_wing_runway_control", "name": "fixed_wing_runway_control", "type": "topic", "color": "#d89641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude_setpoint", "name": "vehicle_attitude_setpoint", "type": "topic", "color": "#d8ca41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_device_information", "name": "gimbal_device_information", "type": "topic", "color": "#91d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_position_setpoint_triplet", "name": "position_setpoint_triplet", "type": "topic", "color": "#5d41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tiltrotor_extra_controls", "name": "tiltrotor_extra_controls", "type": "topic", "color": "#d84e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_control_allocator_status", "name": "control_allocator_status", "type": "topic", "color": "#a5d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_position_setpoint", "name": "rover_position_setpoint", "type": "topic", "color": "#d89c41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_setpoint", "name": "manual_control_setpoint", "type": "topic", "color": "#63d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failure_detector_status", "name": "failure_detector_status", "type": "topic", "color": "#50d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_thrust_setpoint", "name": "vehicle_thrust_setpoint", "type": "topic", "color": "#41d852", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleThrustSetpoint.msg"}, {"id": "t_vehicle_global_position", "name": "vehicle_global_position", "type": "topic", "color": "#41d8ae", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_torque_setpoint", "name": "vehicle_torque_setpoint", "type": "topic", "color": "#4180d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/VehicleTorqueSetpoint.msg"}, {"id": "t_rover_steering_setpoint", "name": "rover_steering_setpoint", "type": "topic", "color": "#5641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_manual_control_switches", "name": "manual_control_switches", "type": "topic", "color": "#7741d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_visual_odometry", "name": "vehicle_visual_odometry", "type": "topic", "color": "#9141d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_throttle_setpoint", "name": "rover_throttle_setpoint", "type": "topic", "color": "#a541d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_launch_detection_status", "name": "launch_detection_status", "type": "topic", "color": "#b241d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_attitude_setpoint", "name": "rover_attitude_setpoint", "type": "topic", "color": "#bf41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flight_phase_estimation", "name": "flight_phase_estimation", "type": "topic", "color": "#d841d1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_velocity_setpoint", "name": "rover_velocity_setpoint", "type": "topic", "color": "#d8418f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_rates_setpoint", "name": "vehicle_rates_setpoint", "type": "topic", "color": "#d84741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_local_position", "name": "vehicle_local_position", "type": "topic", "color": "#bfd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status_flags", "name": "estimator_status_flags", "type": "topic", "color": "#41b4d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_mocap_odometry", "name": "vehicle_mocap_odometry", "type": "topic", "color": "#d8419c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_differential_pressure", "name": "differential_pressure", "type": "topic", "color": "#d88941", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_manager_status", "name": "gimbal_manager_status", "type": "topic", "color": "#d8b041", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_offboard_control_mode", "name": "offboard_control_mode", "type": "topic", "color": "#84d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_land_detected", "name": "vehicle_land_detected", "type": "topic", "color": "#41a7d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_sensor_bias", "name": "estimator_sensor_bias", "type": "topic", "color": "#6341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_control_mode", "name": "vehicle_control_mode", "type": "topic", "color": "#41d8d5", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs_sim", "name": "actuator_outputs_sim", "type": "topic", "color": "#4166d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_actuator_servos_trim", "name": "actuator_servos_trim", "type": "topic", "color": "#d841ca", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_trajectory_setpoint", "name": "trajectory_setpoint", "type": "topic", "color": "#d86141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vtol_vehicle_status", "name": "vtol_vehicle_status", "type": "topic", "color": "#8bd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_figure_eight_status", "name": "figure_eight_status", "type": "topic", "color": "#41d85f", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_aux_global_position", "name": "aux_global_position", "type": "topic", "color": "#414bd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource2d.msg"}, {"id": "t_vehicle_constraints", "name": "vehicle_constraints", "type": "topic", "color": "#4941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rover_rate_setpoint", "name": "rover_rate_setpoint", "type": "topic", "color": "#6a41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_target_pose", "name": "landing_target_pose", "type": "topic", "color": "#9e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_optical_flow", "name": "sensor_optical_flow", "type": "topic", "color": "#d841b0", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command_ack", "name": "vehicle_command_ack", "type": "topic", "color": "#d84168", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_power_button_state", "name": "power_button_state", "type": "topic", "color": "#d8a341", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu_status", "name": "vehicle_imu_status", "type": "topic", "color": "#d8bd41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed_validated", "name": "airspeed_validated", "type": "topic", "color": "#41d866", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensors_status_imu", "name": "sensors_status_imu", "type": "topic", "color": "#4152d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear_wheel", "name": "landing_gear_wheel", "type": "topic", "color": "#d341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_transponder_report", "name": "transponder_report", "type": "topic", "color": "#d8417b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mount_orientation", "name": "mount_orientation", "type": "topic", "color": "#71d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_time_estimate", "name": "rtl_time_estimate", "type": "topic", "color": "#41d84b", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_v1_command", "name": "gimbal_v1_command", "type": "topic", "color": "#41d88d", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_spoilers_setpoint", "name": "spoilers_setpoint", "type": "topic", "color": "#41d8ce", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_sensor_correction", "name": "sensor_correction", "type": "topic", "color": "#418dd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_outputs", "name": "actuator_outputs", "type": "topic", "color": "#d87541", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ActuatorOutputs.msg"}, {"id": "t_rc_parameter_map", "name": "rc_parameter_map", "type": "topic", "color": "#d8b641", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_estimator_status", "name": "estimator_status", "type": "topic", "color": "#41d873", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_telemetry_status", "name": "telemetry_status", "type": "topic", "color": "#419ad8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_attitude", "name": "vehicle_attitude", "type": "topic", "color": "#416cd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_navigator_status", "name": "navigator_status", "type": "topic", "color": "#4341d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_odometry", "name": "vehicle_odometry", "type": "topic", "color": "#7e41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_selection", "name": "sensor_selection", "type": "topic", "color": "#d841c4", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_response", "name": "dataman_response", "type": "topic", "color": "#d841b6", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro_fifo", "name": "sensor_gyro_fifo", "type": "topic", "color": "#d84154", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_servos", "name": "actuator_servos", "type": "topic", "color": "#d87b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream_ack", "name": "ulog_stream_ack", "type": "topic", "color": "#d88241", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_motors", "name": "actuator_motors", "type": "topic", "color": "#d3d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_dataman_request", "name": "dataman_request", "type": "topic", "color": "#b9d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gimbal_controls", "name": "gimbal_controls", "type": "topic", "color": "#7ed841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_key_value", "name": "debug_key_value", "type": "topic", "color": "#5dd841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_distance_sensor", "name": "distance_sensor", "type": "topic", "color": "#41d8c8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_combined", "name": "sensor_combined", "type": "topic", "color": "#41d5d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_command", "name": "vehicle_command", "type": "topic", "color": "#4193d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_result", "name": "geofence_result", "type": "topic", "color": "#4179d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gps_inject_data", "name": "gps_inject_data", "type": "topic", "color": "#c641d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_geofence_status", "name": "geofence_status", "type": "topic", "color": "#d841bd", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_trigger", "name": "camera_trigger", "type": "topic", "color": "#c6d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_takeoff_status", "name": "takeoff_status", "type": "topic", "color": "#49d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_failsafe_flags", "name": "failsafe_flags", "type": "topic", "color": "#43d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission_result", "name": "mission_result", "type": "topic", "color": "#41d859", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_flaps_setpoint", "name": "flaps_setpoint", "type": "topic", "color": "#41d879", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/NormalizedUnsignedSetpoint.msg"}, {"id": "t_actuator_armed", "name": "actuator_armed", "type": "topic", "color": "#41c1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_capture", "name": "camera_capture", "type": "topic", "color": "#41bbd8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_satellite_info", "name": "satellite_info", "type": "topic", "color": "#4173d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_action_request", "name": "action_request", "type": "topic", "color": "#b941d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_battery_status", "name": "battery_status", "type": "topic", "color": "#cc41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_status", "name": "vehicle_status", "type": "topic", "color": "#d8414e", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_camera_status", "name": "camera_status", "type": "topic", "color": "#d86e41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_irlock_report", "name": "irlock_report", "type": "topic", "color": "#41d8bb", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_health_report", "name": "health_report", "type": "topic", "color": "#8441d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_logger_status", "name": "logger_status", "type": "topic", "color": "#8b41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_home_position", "name": "home_position", "type": "topic", "color": "#d841d7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_actuator_test", "name": "actuator_test", "type": "topic", "color": "#d84175", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tune_control", "name": "tune_control", "type": "topic", "color": "#d86841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_accel", "name": "sensor_accel", "type": "topic", "color": "#d8d141", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_landing_gear", "name": "landing_gear", "type": "topic", "color": "#56d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_orbit_status", "name": "orbit_status", "type": "topic", "color": "#41d86c", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_system_power", "name": "system_power", "type": "topic", "color": "#41d8a7", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_imu", "name": "vehicle_imu", "type": "topic", "color": "#d85b41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_ulog_stream", "name": "ulog_stream", "type": "topic", "color": "#41d893", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gyro", "name": "sensor_gyro", "type": "topic", "color": "#41ced8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_tecs_status", "name": "tecs_status", "type": "topic", "color": "#41a1d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_baro", "name": "sensor_baro", "type": "topic", "color": "#ab41d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_array", "name": "debug_array", "type": "topic", "color": "#d841a9", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_value", "name": "debug_value", "type": "topic", "color": "#d84189", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_vehicle_roi", "name": "vehicle_roi", "type": "topic", "color": "#d84147", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_esc_status", "name": "esc_status", "type": "topic", "color": "#d88f41", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_sensor_gps", "name": "sensor_gps", "type": "topic", "color": "#41d89a", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorGps.msg"}, {"id": "t_sensor_mag", "name": "sensor_mag", "type": "topic", "color": "#41d8a1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_debug_vect", "name": "debug_vect", "type": "topic", "color": "#4186d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_rtl_status", "name": "rtl_status", "type": "topic", "color": "#5041d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_airspeed", "name": "airspeed", "type": "topic", "color": "#98d841", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorAidSource1d.msg"}, {"id": "t_input_rc", "name": "input_rc", "type": "topic", "color": "#41aed8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_gripper", "name": "gripper", "type": "topic", "color": "#d8c441", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_cpuload", "name": "cpuload", "type": "topic", "color": "#41d8c1", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_mission", "name": "mission", "type": "topic", "color": "#4145d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}, {"id": "t_event", "name": "event", "type": "topic", "color": "#d84182", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/ButtonEvent.msg"}, {"id": "t_wind", "name": "wind", "type": "topic", "color": "#d8d741", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/Wind.msg"}, {"id": "t_rpm", "name": "rpm", "type": "topic", "color": "#9841d8", "url": "https://github.com/PX4/PX4-Autopilot/blob/main/msg/no_file.msg"}], "links": [{"source": "m_camera_trigger", "target": "t_camera_trigger", "color": "#c6d841", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_camera_trigger", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_gps", "target": "t_satellite_info", "color": "#4173d8", "style": "dashed"}, {"source": "m_gps", "target": "t_sensor_gps", "color": "#41d89a", "style": "dashed"}, {"source": "m_gps", "target": "t_gps_inject_data", "color": "#c641d8", "style": "dashed"}, {"source": "m_tone_alarm", "target": "t_tune_control", "color": "#d86841", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_airship_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_airspeed_selector", "target": "t_airspeed_validated", "color": "#41d866", "style": "dashed"}, {"source": "m_attitude_estimator_q", "target": "t_vehicle_attitude", "color": "#416cd8", "style": "dashed"}, {"source": "m_camera_feedback", "target": "t_camera_capture", "color": "#41bbd8", "style": "dashed"}, {"source": "m_commander", "target": "t_home_position", "color": "#d841d7", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_armed", "color": "#41c1d8", "style": "dashed"}, {"source": "m_commander", "target": "t_health_report", "color": "#8441d8", "style": "dashed"}, {"source": "m_commander", "target": "t_failure_detector_status", "color": "#50d841", "style": "dashed"}, {"source": "m_commander", "target": "t_power_button_state", "color": "#d8a341", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_control_mode", "color": "#41d8d5", "style": "dashed"}, {"source": "m_commander", "target": "t_register_ext_component_reply", "color": "#d8415b", "style": "dashed"}, {"source": "m_commander", "target": "t_failsafe_flags", "color": "#43d841", "style": "dashed"}, {"source": "m_commander", "target": "t_event", "color": "#d84182", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_commander", "target": "t_actuator_test", "color": "#d84175", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_commander", "target": "t_tune_control", "color": "#d86841", "style": "dashed"}, {"source": "m_commander", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos", "color": "#d87b41", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_servos_trim", "color": "#d841ca", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_control_allocator_status", "color": "#a5d841", "style": "dashed"}, {"source": "m_control_allocator", "target": "t_actuator_motors", "color": "#d3d841", "style": "dashed"}, {"source": "m_dataman", "target": "t_dataman_response", "color": "#d841b6", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_selector_status", "color": "#d84141", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_odometry", "color": "#7e41d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_sensor_selection", "color": "#d841c4", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status_flags", "color": "#41b4d8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_attitude", "color": "#416cd8", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_status", "color": "#41d873", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_global_position", "color": "#41d8ae", "style": "dashed"}, {"source": "m_ekf2", "target": "t_wind", "color": "#d8d741", "style": "dashed"}, {"source": "m_ekf2", "target": "t_vehicle_local_position", "color": "#bfd841", "style": "dashed"}, {"source": "m_ekf2", "target": "t_estimator_sensor_bias", "color": "#6341d8", "style": "dashed"}, {"source": "m_send_event", "target": "t_tune_control", "color": "#d86841", "style": "dashed"}, {"source": "m_send_event", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_landing_gear", "color": "#56d841", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_trajectory_setpoint", "color": "#d86141", "style": "dashed"}, {"source": "m_flight_mode_manager", "target": "t_vehicle_constraints", "color": "#4941d8", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d84741", "style": "dashed"}, {"source": "m_fw_att_control", "target": "t_landing_gear_wheel", "color": "#d341d8", "style": "dashed"}, {"source": "m_fw_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#7141d8", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_flight_phase_estimation", "color": "#d841d1", "style": "dashed"}, {"source": "m_fw_lat_lon_control", "target": "t_tecs_status", "color": "#41a1d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_flaps_setpoint", "color": "#41d879", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_spoilers_setpoint", "color": "#41d8ce", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_figure_eight_status", "color": "#41d85f", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_landing_gear", "color": "#56d841", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_runway_control", "color": "#d89641", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_longitudinal_setpoint", "color": "#41d8b4", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_orbit_status", "color": "#41d86c", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_launch_detection_status", "color": "#b241d8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_position_controller_landing_status", "color": "#41d845", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_vehicle_local_position_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_longitudinal_control_configuration", "color": "#d8416e", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_lateral_control_configuration", "color": "#d84196", "style": "dashed"}, {"source": "m_fw_mode_manager", "target": "t_fixed_wing_lateral_setpoint", "color": "#d85441", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_flaps_setpoint", "color": "#41d879", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_spoilers_setpoint", "color": "#41d8ce", "style": "dashed"}, {"source": "m_fw_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d84741", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_v1_command", "color": "#41d88d", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_controls", "color": "#7ed841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_attitude_status", "color": "#77d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_mount_orientation", "color": "#71d841", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_status", "color": "#d8b041", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_device_set_attitude", "color": "#d841a3", "style": "dashed"}, {"source": "m_gimbal", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_gimbal", "target": "t_gimbal_manager_information", "color": "#4159d8", "style": "dashed"}, {"source": "m_land_detector", "target": "t_vehicle_land_detected", "color": "#41a7d8", "style": "dashed"}, {"source": "m_landing_target_estimator", "target": "t_landing_target_pose", "color": "#9e41d8", "style": "dashed"}, {"source": "m_load_mon", "target": "t_cpuload", "color": "#41d8c1", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_odometry", "color": "#7e41d8", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_global_position", "color": "#41d8ae", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_vehicle_local_position", "color": "#bfd841", "style": "dashed"}, {"source": "m_local_position_estimator", "target": "t_estimator_status", "color": "#41d873", "style": "dashed"}, {"source": "m_logger", "target": "t_logger_status", "color": "#8b41d8", "style": "dashed"}, {"source": "m_logger", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_logger", "target": "t_ulog_stream", "color": "#41d893", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_switches", "color": "#7741d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_landing_gear", "color": "#56d841", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_action_request", "color": "#b941d8", "style": "dashed"}, {"source": "m_manual_control", "target": "t_vehicle_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_manual_control", "target": "t_manual_control_setpoint", "color": "#63d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_airspeed", "color": "#98d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_information", "color": "#91d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_rates_setpoint", "color": "#d84741", "style": "dashed"}, {"source": "m_mavlink", "target": "t_distance_sensor", "color": "#41d8c8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_offboard_control_mode", "color": "#84d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_visual_odometry", "color": "#9141d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_landing_target_pose", "color": "#9e41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_device_attitude_status", "color": "#77d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_baro", "color": "#ab41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro", "color": "#41ced8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gps_inject_data", "color": "#c641d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_fw_virtual_attitude_setpoint", "color": "#41c8d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_battery_status", "color": "#cc41d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_key_value", "color": "#5dd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_input_rc", "color": "#41aed8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_trajectory_setpoint", "color": "#d86141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_telemetry_status", "color": "#419ad8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_optical_flow", "color": "#d841b0", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_array", "color": "#d841a9", "style": "dashed"}, {"source": "m_mavlink", "target": "t_tune_control", "color": "#d86841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_camera_status", "color": "#d86e41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_vect", "color": "#4186d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d8419c", "style": "dashed"}, {"source": "m_mavlink", "target": "t_ulog_stream_ack", "color": "#d88241", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude", "color": "#416cd8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_differential_pressure", "color": "#d88941", "style": "dashed"}, {"source": "m_mavlink", "target": "t_debug_value", "color": "#d84189", "style": "dashed"}, {"source": "m_mavlink", "target": "t_transponder_report", "color": "#d8417b", "style": "dashed"}, {"source": "m_mavlink", "target": "t_rc_parameter_map", "color": "#d8b641", "style": "dashed"}, {"source": "m_mavlink", "target": "t_event", "color": "#d84182", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_attitude_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mc_virtual_attitude_setpoint", "color": "#41d886", "style": "dashed"}, {"source": "m_mavlink", "target": "t_mission", "color": "#4145d8", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gps", "color": "#41d89a", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_mag", "color": "#41d8a1", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_global_position", "color": "#41d8ae", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_accel", "color": "#d8d141", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_manual_control", "color": "#ccd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_irlock_report", "color": "#41d8bb", "style": "dashed"}, {"source": "m_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d84154", "style": "dashed"}, {"source": "m_mavlink", "target": "t_vehicle_local_position", "color": "#bfd841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_dataman_request", "color": "#b9d841", "style": "dashed"}, {"source": "m_mavlink", "target": "t_gimbal_manager_set_attitude", "color": "#9ed841", "style": "dashed"}, {"source": "m_mc_att_control", "target": "t_vehicle_rates_setpoint", "color": "#d84741", "style": "dashed"}, {"source": "m_mc_autotune_attitude_control", "target": "t_autotune_attitude_control_status", "color": "#7141d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_trajectory_setpoint", "color": "#d86141", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_constraints", "color": "#4941d8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_takeoff_status", "color": "#49d841", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_local_position_setpoint", "color": "#415fd8", "style": "dashed"}, {"source": "m_mc_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_actuator_controls_status_0", "color": "#41d880", "style": "dashed"}, {"source": "m_mc_rate_control", "target": "t_vehicle_rates_setpoint", "color": "#d84741", "style": "dashed"}, {"source": "m_navigator", "target": "t_home_position", "color": "#d841d7", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_status", "color": "#d841bd", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_land_detected", "color": "#41a7d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_time_estimate", "color": "#41d84b", "style": "dashed"}, {"source": "m_navigator", "target": "t_geofence_result", "color": "#4179d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission_result", "color": "#41d859", "style": "dashed"}, {"source": "m_navigator", "target": "t_transponder_report", "color": "#d8417b", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_navigator", "target": "t_mission", "color": "#4145d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_navigator_status", "color": "#4341d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_global_position", "color": "#41d8ae", "style": "dashed"}, {"source": "m_navigator", "target": "t_rtl_status", "color": "#5041d8", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_roi", "color": "#d84147", "style": "dashed"}, {"source": "m_navigator", "target": "t_vehicle_status", "color": "#d8414e", "style": "dashed"}, {"source": "m_navigator", "target": "t_dataman_request", "color": "#b9d841", "style": "dashed"}, {"source": "m_navigator", "target": "t_position_setpoint_triplet", "color": "#5d41d8", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_gripper", "color": "#d8c441", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_payload_deliverer", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_rc_update", "target": "t_manual_control_switches", "color": "#7741d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_servos", "color": "#d87b41", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_position_controller_status", "color": "#b2d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_velocity_setpoint", "color": "#d8418f", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_rate_setpoint", "color": "#6a41d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_attitude_setpoint", "color": "#bf41d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_position_setpoint", "color": "#d89c41", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_throttle_setpoint", "color": "#a541d8", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_actuator_motors", "color": "#d3d841", "style": "dashed"}, {"source": "m_rover_ackermann", "target": "t_rover_steering_setpoint", "color": "#5641d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_velocity_setpoint", "color": "#d8418f", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_attitude_setpoint", "color": "#bf41d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_position_setpoint", "color": "#d89c41", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_throttle_setpoint", "color": "#a541d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_actuator_motors", "color": "#d3d841", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_steering_setpoint", "color": "#5641d8", "style": "dashed"}, {"source": "m_rover_differential", "target": "t_rover_rate_setpoint", "color": "#6a41d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_velocity_setpoint", "color": "#d8418f", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_position_setpoint", "color": "#d89c41", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_throttle_setpoint", "color": "#a541d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_actuator_motors", "color": "#d3d841", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_steering_setpoint", "color": "#5641d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_attitude_setpoint", "color": "#bf41d8", "style": "dashed"}, {"source": "m_rover_mecanum", "target": "t_rover_rate_setpoint", "color": "#6a41d8", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_position_controller_status", "color": "#b2d841", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_rover_pos_control", "target": "t_vehicle_torque_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensors_status_imu", "color": "#4152d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_airspeed", "color": "#98d841", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_selection", "color": "#d841c4", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu", "color": "#d85b41", "style": "dashed"}, {"source": "m_sensors", "target": "t_differential_pressure", "color": "#d88941", "style": "dashed"}, {"source": "m_sensors", "target": "t_sensor_combined", "color": "#41d5d8", "style": "dashed"}, {"source": "m_sensors", "target": "t_vehicle_imu_status", "color": "#d8bd41", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_battery_simulator", "target": "t_battery_status", "color": "#cc41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_information", "color": "#91d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_distance_sensor", "color": "#41d8c8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_visual_odometry", "color": "#9141d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_gimbal_device_attitude_status", "color": "#77d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_baro", "color": "#ab41d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gyro", "color": "#41ced8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_attitude_groundtruth", "color": "#6ad841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_armed", "color": "#41c1d8", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_optical_flow", "color": "#d841b0", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_outputs", "color": "#d87541", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_servos", "color": "#d87b41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_differential_pressure", "color": "#d88941", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_esc_status", "color": "#d88f41", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8a941", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_test", "color": "#d84175", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_gps", "color": "#41d89a", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_mag", "color": "#41d8a1", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_sensor_accel", "color": "#d8d141", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_local_position_groundtruth", "color": "#d84161", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_actuator_motors", "color": "#d3d841", "style": "dashed"}, {"source": "m_gz_bridge", "target": "t_vehicle_global_position_groundtruth", "color": "#abd841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_servos", "color": "#d87b41", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_armed", "color": "#41c1d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs_sim", "color": "#4166d8", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_motors", "color": "#d3d841", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_test", "color": "#d84175", "style": "dashed"}, {"source": "m_pwm_out_sim", "target": "t_actuator_outputs", "color": "#d87541", "style": "dashed"}, {"source": "m_sensor_agp_sim", "target": "t_aux_global_position", "color": "#414bd8", "style": "dashed"}, {"source": "m_sensor_airspeed_sim", "target": "t_differential_pressure", "color": "#d88941", "style": "dashed"}, {"source": "m_sensor_baro_sim", "target": "t_sensor_baro", "color": "#ab41d8", "style": "dashed"}, {"source": "m_sensor_gps_sim", "target": "t_sensor_gps", "color": "#41d89a", "style": "dashed"}, {"source": "m_sensor_mag_sim", "target": "t_sensor_mag", "color": "#41d8a1", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_visual_odometry", "color": "#9141d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_rpm", "color": "#9841d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_baro", "color": "#ab41d8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro", "color": "#41ced8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_attitude_groundtruth", "color": "#6ad841", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_input_rc", "color": "#41aed8", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_optical_flow", "color": "#d841b0", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_mocap_odometry", "color": "#d8419c", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_differential_pressure", "color": "#d88941", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_esc_status", "color": "#d88f41", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8a941", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_mag", "color": "#41d8a1", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_accel", "color": "#d8d141", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_local_position_groundtruth", "color": "#d84161", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_irlock_report", "color": "#41d8bb", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_sensor_gyro_fifo", "color": "#d84154", "style": "dashed"}, {"source": "m_simulator_mavlink", "target": "t_vehicle_global_position_groundtruth", "color": "#abd841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_airspeed", "color": "#98d841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_distance_sensor", "color": "#41d8c8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_accel", "color": "#d8d141", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_local_position_groundtruth", "color": "#d84161", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_angular_velocity_groundtruth", "color": "#d8a941", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro_fifo", "color": "#d84154", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_sensor_gyro", "color": "#41ced8", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_attitude_groundtruth", "color": "#6ad841", "style": "dashed"}, {"source": "m_simulator_sih", "target": "t_vehicle_global_position_groundtruth", "color": "#abd841", "style": "dashed"}, {"source": "m_system_power_simulator", "target": "t_system_power", "color": "#41d8a7", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_sensor_correction", "color": "#418dd8", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_temperature_compensation", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_uuv_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_uuv_pos_control", "target": "t_vehicle_attitude_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_uxrce_dds_client", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_flaps_setpoint", "color": "#41d879", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_thrust_setpoint", "color": "#41d852", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_spoilers_setpoint", "color": "#41d8ce", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_tiltrotor_extra_controls", "color": "#d84e41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vtol_vehicle_status", "color": "#8bd841", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_attitude_setpoint", "color": "#d8ca41", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_command_ack", "color": "#d84168", "style": "dashed"}, {"source": "m_vtol_att_control", "target": "t_vehicle_torque_setpoint", "color": "#4180d8", "style": "dashed"}, {"source": "m_actuator_test", "target": "t_actuator_test", "color": "#d84175", "style": "dashed"}, {"source": "m_failure", "target": "t_vehicle_command", "color": "#4193d8", "style": "dashed"}, {"source": "m_tests", "target": "t_dataman_request", "color": "#b9d841", "style": "dashed"}, {"source": "m_tune_control", "target": "t_tune_control", "color": "#d86841", "style": "dashed"}, {"source": "m_fake_gps", "target": "t_sensor_gps", "color": "#41d89a", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_esc_status", "color": "#d88f41", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_accel", "color": "#d8d141", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro_fifo", "color": "#d84154", "style": "dashed"}, {"source": "m_fake_imu", "target": "t_sensor_gyro", "color": "#41ced8", "style": "dashed"}, {"source": "m_fake_magnetometer", "target": "t_sensor_mag", "color": "#41d8a1", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_key_value", "color": "#5dd841", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_vect", "color": "#4186d8", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_value", "color": "#d84189", "style": "dashed"}, {"source": "m_px4_mavlink_debug", "target": "t_debug_array", "color": "#d841a9", "style": "dashed"}, {"source": "m_px4_simple_app", "target": "t_vehicle_attitude", "color": "#416cd8", "style": "dashed"}, {"source": "t_vehicle_local_position", "target": "m_camera_trigger", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_camera_trigger", "color": "#4193d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_gps", "color": "#c641d8", "style": "normal"}, {"source": "t_home_position", "target": "m_msp_osd", "color": "#d841d7", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_msp_osd", "color": "#416cd8", "style": "normal"}, {"source": "t_input_rc", "target": "m_msp_osd", "color": "#41aed8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_msp_osd", "color": "#41d8ae", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_msp_osd", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_msp_osd", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_msp_osd", "color": "#d8414e", "style": "normal"}, {"source": "t_battery_status", "target": "m_msp_osd", "color": "#cc41d8", "style": "normal"}, {"source": "t_tune_control", "target": "m_tone_alarm", "color": "#d86841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_airship_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airship_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_airspeed_selector", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_airspeed_selector", "color": "#41d852", "style": "normal"}, {"source": "t_airspeed", "target": "m_airspeed_selector", "color": "#98d841", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_airspeed_selector", "color": "#d841d1", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_airspeed_selector", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_airspeed_selector", "color": "#41a7d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_airspeed_selector", "color": "#41a1d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_airspeed_selector", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_airspeed_selector", "color": "#d8414e", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_airspeed_selector", "color": "#b241d8", "style": "normal"}, {"source": "t_estimator_status", "target": "m_airspeed_selector", "color": "#41d873", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_attitude_estimator_q", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_attitude_estimator_q", "color": "#9141d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_attitude_estimator_q", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_attitude_estimator_q", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_attitude_estimator_q", "color": "#d8419c", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_camera_feedback", "color": "#77d841", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_camera_feedback", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_camera_feedback", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_camera_feedback", "color": "#416cd8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_commander", "color": "#7741d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_commander", "color": "#d84141", "style": "normal"}, {"source": "t_vtol_vehicle_status", "target": "m_commander", "color": "#8bd841", "style": "normal"}, {"source": "t_logger_status", "target": "m_commander", "color": "#8b41d8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_commander", "color": "#84d841", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_commander", "color": "#41d8c8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_commander", "color": "#ab41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_commander", "color": "#41ced8", "style": "normal"}, {"source": "t_action_request", "target": "m_commander", "color": "#b941d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_commander", "color": "#63d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_commander", "color": "#cc41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_commander", "color": "#d841d7", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_commander", "color": "#41c1d8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_commander", "color": "#d841c4", "style": "normal"}, {"source": "t_estimator_status_flags", "target": "m_commander", "color": "#41b4d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_commander", "color": "#41a7d8", "style": "normal"}, {"source": "t_telemetry_status", "target": "m_commander", "color": "#419ad8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_commander", "color": "#4193d8", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_commander", "color": "#41d84b", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_commander", "color": "#418dd8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_commander", "color": "#4179d8", "style": "normal"}, {"source": "t_mission_result", "target": "m_commander", "color": "#41d859", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_commander", "color": "#416cd8", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_commander", "color": "#d88941", "style": "normal"}, {"source": "t_esc_status", "target": "m_commander", "color": "#d88f41", "style": "normal"}, {"source": "t_event", "target": "m_commander", "color": "#d84182", "style": "normal"}, {"source": "t_power_button_state", "target": "m_commander", "color": "#d8a341", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_commander", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_commander", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_commander", "color": "#d84168", "style": "normal"}, {"source": "t_estimator_status", "target": "m_commander", "color": "#41d873", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_commander", "color": "#4152d8", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_commander", "color": "#41d89a", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_commander", "color": "#41d8a1", "style": "normal"}, {"source": "t_system_power", "target": "m_commander", "color": "#41d8a7", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_commander", "color": "#41d8ae", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_commander", "color": "#d8d141", "style": "normal"}, {"source": "t_navigator_status", "target": "m_commander", "color": "#4341d8", "style": "normal"}, {"source": "t_wind", "target": "m_commander", "color": "#d8d741", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_commander", "color": "#d3d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_commander", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_commander", "color": "#bfd841", "style": "normal"}, {"source": "t_cpuload", "target": "m_commander", "color": "#41d8c1", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_commander", "color": "#6341d8", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_control_allocator", "color": "#41d879", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_control_allocator", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_control_allocator", "color": "#41d852", "style": "normal"}, {"source": "t_spoilers_setpoint", "target": "m_control_allocator", "color": "#41d8ce", "style": "normal"}, {"source": "t_tiltrotor_extra_controls", "target": "m_control_allocator", "color": "#d84e41", "style": "normal"}, {"source": "t_rpm", "target": "m_control_allocator", "color": "#9841d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_control_allocator", "color": "#41d8d5", "style": "normal"}, {"source": "t_failure_detector_status", "target": "m_control_allocator", "color": "#50d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_control_allocator", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_control_allocator", "color": "#4180d8", "style": "normal"}, {"source": "t_dataman_request", "target": "m_dataman", "color": "#b9d841", "style": "normal"}, {"source": "t_aux_global_position", "target": "m_ekf2", "color": "#414bd8", "style": "normal"}, {"source": "t_sensors_status_imu", "target": "m_ekf2", "color": "#4152d8", "style": "normal"}, {"source": "t_airspeed", "target": "m_ekf2", "color": "#98d841", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_ekf2", "color": "#d85b41", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_ekf2", "color": "#d841c4", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_ekf2", "color": "#41d8c8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_ekf2", "color": "#9141d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_ekf2", "color": "#9e41d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_ekf2", "color": "#41d5d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_ekf2", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_ekf2", "color": "#41a7d8", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_ekf2", "color": "#b241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_ekf2", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_ekf2", "color": "#4193d8", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_send_event", "color": "#43d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_send_event", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_send_event", "color": "#4193d8", "style": "normal"}, {"source": "t_cpuload", "target": "m_send_event", "color": "#41d8c1", "style": "normal"}, {"source": "t_battery_status", "target": "m_send_event", "color": "#cc41d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_flight_mode_manager", "color": "#41d8d5", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_flight_mode_manager", "color": "#49d841", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_flight_mode_manager", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_flight_mode_manager", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_flight_mode_manager", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_flight_mode_manager", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_flight_mode_manager", "color": "#d8ca41", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_att_control", "color": "#416cd8", "style": "normal"}, {"source": "t_fixed_wing_runway_control", "target": "m_fw_att_control", "color": "#d89641", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_att_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_att_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_att_control", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_fw_att_control", "color": "#d8ca41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_fw_att_control", "color": "#7141d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_autotune_attitude_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_autotune_attitude_control", "color": "#d8414e", "style": "normal"}, {"source": "t_flaps_setpoint", "target": "m_fw_lat_lon_control", "color": "#41d879", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_lat_lon_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_lat_lon_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_wind", "target": "m_fw_lat_lon_control", "color": "#d8d741", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_lat_lon_control", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_lat_lon_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_fixed_wing_longitudinal_setpoint", "target": "m_fw_lat_lon_control", "color": "#41d8b4", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_lat_lon_control", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_lat_lon_control", "color": "#d8414e", "style": "normal"}, {"source": "t_longitudinal_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d8416e", "style": "normal"}, {"source": "t_lateral_control_configuration", "target": "m_fw_lat_lon_control", "color": "#d84196", "style": "normal"}, {"source": "t_fixed_wing_lateral_setpoint", "target": "m_fw_lat_lon_control", "color": "#d85441", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fw_mode_manager", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_fw_mode_manager", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_mode_manager", "color": "#41d8d5", "style": "normal"}, {"source": "t_wind", "target": "m_fw_mode_manager", "color": "#d8d741", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_mode_manager", "color": "#41d866", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_fw_mode_manager", "color": "#d86141", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_mode_manager", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_fw_mode_manager", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_fw_mode_manager", "color": "#4193d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_fw_mode_manager", "color": "#5d41d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_mode_manager", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_mode_manager", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_fw_rate_control", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_fw_rate_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_fw_rate_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_fw_rate_control", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_fw_rate_control", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_fw_rate_control", "color": "#63d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_fw_rate_control", "color": "#a5d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_fw_rate_control", "color": "#cc41d8", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_gimbal", "color": "#91d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_gimbal", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_gimbal", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_gimbal", "color": "#41a7d8", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_gimbal", "color": "#77d841", "style": "normal"}, {"source": "t_gimbal_manager_set_manual_control", "target": "m_gimbal", "color": "#ccd841", "style": "normal"}, {"source": "t_vehicle_roi", "target": "m_gimbal", "color": "#d84147", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gimbal", "color": "#4193d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_gimbal", "color": "#5d41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gimbal", "color": "#63d841", "style": "normal"}, {"source": "t_gimbal_manager_set_attitude", "target": "m_gimbal", "color": "#9ed841", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_gyro_calibration", "color": "#418dd8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_gyro_calibration", "color": "#d8d141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_gyro_calibration", "color": "#d8414e", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_calibration", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_gyro_fft", "color": "#d8bd41", "style": "normal"}, {"source": "t_sensor_gyro_fifo", "target": "m_gyro_fft", "color": "#d84154", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_gyro_fft", "color": "#41ced8", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_gyro_fft", "color": "#d841c4", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_land_detector", "color": "#41c1d8", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_land_detector", "color": "#41d852", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_land_detector", "color": "#d841c4", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_land_detector", "color": "#d86141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_land_detector", "color": "#41d8d5", "style": "normal"}, {"source": "t_takeoff_status", "target": "m_land_detector", "color": "#49d841", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_land_detector", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_land_detector", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_land_detector", "color": "#d8bd41", "style": "normal"}, {"source": "t_launch_detection_status", "target": "m_land_detector", "color": "#b241d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_land_detector", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_land_detector", "color": "#bfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_land_detector", "color": "#5d41d8", "style": "normal"}, {"source": "t_irlock_report", "target": "m_landing_target_estimator", "color": "#41d8bb", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_landing_target_estimator", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_landing_target_estimator", "color": "#416cd8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_local_position_estimator", "color": "#41c1d8", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_local_position_estimator", "color": "#41d8c8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_local_position_estimator", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_visual_odometry", "target": "m_local_position_estimator", "color": "#9141d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_local_position_estimator", "color": "#9e41d8", "style": "normal"}, {"source": "t_sensor_combined", "target": "m_local_position_estimator", "color": "#41d5d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_local_position_estimator", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_local_position_estimator", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_local_position_estimator", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_mocap_odometry", "target": "m_local_position_estimator", "color": "#d8419c", "style": "normal"}, {"source": "t_ulog_stream_ack", "target": "m_logger", "color": "#d88241", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_logger", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_logger", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_logger", "color": "#63d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_logger", "color": "#cc41d8", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mag_bias_estimator", "color": "#41d8a1", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mag_bias_estimator", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_manual_control", "color": "#7741d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_manual_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_manual_control", "color": "#d8414e", "style": "normal"}, {"source": "t_action_request", "target": "m_manual_control", "color": "#b941d8", "style": "normal"}, {"source": "t_estimator_selector_status", "target": "m_mavlink", "color": "#d84141", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mavlink", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_mavlink", "color": "#d85b41", "style": "normal"}, {"source": "t_camera_status", "target": "m_mavlink", "color": "#d86e41", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_mavlink", "color": "#d88941", "style": "normal"}, {"source": "t_esc_status", "target": "m_mavlink", "color": "#d88f41", "style": "normal"}, {"source": "t_vehicle_angular_velocity_groundtruth", "target": "m_mavlink", "color": "#d8a941", "style": "normal"}, {"source": "t_gimbal_manager_status", "target": "m_mavlink", "color": "#d8b041", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_mavlink", "color": "#d8bd41", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mavlink", "color": "#d8ca41", "style": "normal"}, {"source": "t_wind", "target": "m_mavlink", "color": "#d8d741", "style": "normal"}, {"source": "t_camera_trigger", "target": "m_mavlink", "color": "#c6d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mavlink", "color": "#bfd841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_mavlink", "color": "#b2d841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_mavlink", "color": "#abd841", "style": "normal"}, {"source": "t_airspeed", "target": "m_mavlink", "color": "#98d841", "style": "normal"}, {"source": "t_gimbal_device_information", "target": "m_mavlink", "color": "#91d841", "style": "normal"}, {"source": "t_mount_orientation", "target": "m_mavlink", "color": "#71d841", "style": "normal"}, {"source": "t_gimbal_device_attitude_status", "target": "m_mavlink", "color": "#77d841", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_mavlink", "color": "#6ad841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mavlink", "color": "#63d841", "style": "normal"}, {"source": "t_debug_key_value", "target": "m_mavlink", "color": "#5dd841", "style": "normal"}, {"source": "t_failsafe_flags", "target": "m_mavlink", "color": "#43d841", "style": "normal"}, {"source": "t_rtl_time_estimate", "target": "m_mavlink", "color": "#41d84b", "style": "normal"}, {"source": "t_vehicle_thrust_setpoint", "target": "m_mavlink", "color": "#41d852", "style": "normal"}, {"source": "t_mission_result", "target": "m_mavlink", "color": "#41d859", "style": "normal"}, {"source": "t_figure_eight_status", "target": "m_mavlink", "color": "#41d85f", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_mavlink", "color": "#41d866", "style": "normal"}, {"source": "t_orbit_status", "target": "m_mavlink", "color": "#41d86c", "style": "normal"}, {"source": "t_estimator_status", "target": "m_mavlink", "color": "#41d873", "style": "normal"}, {"source": "t_gimbal_v1_command", "target": "m_mavlink", "color": "#41d88d", "style": "normal"}, {"source": "t_ulog_stream", "target": "m_mavlink", "color": "#41d893", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_mavlink", "color": "#41d8a1", "style": "normal"}, {"source": "t_sensor_gps", "target": "m_mavlink", "color": "#41d89a", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_mavlink", "color": "#41d8ae", "style": "normal"}, {"source": "t_cpuload", "target": "m_mavlink", "color": "#41d8c1", "style": "normal"}, {"source": "t_distance_sensor", "target": "m_mavlink", "color": "#41d8c8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mavlink", "color": "#41d8d5", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_mavlink", "color": "#41c1d8", "style": "normal"}, {"source": "t_camera_capture", "target": "m_mavlink", "color": "#41bbd8", "style": "normal"}, {"source": "t_input_rc", "target": "m_mavlink", "color": "#41aed8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mavlink", "color": "#41a7d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_mavlink", "color": "#41a1d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_mavlink", "color": "#4193d8", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_mavlink", "color": "#418dd8", "style": "normal"}, {"source": "t_debug_vect", "target": "m_mavlink", "color": "#4186d8", "style": "normal"}, {"source": "t_geofence_result", "target": "m_mavlink", "color": "#4179d8", "style": "normal"}, {"source": "t_satellite_info", "target": "m_mavlink", "color": "#4173d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mavlink", "color": "#416cd8", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_mavlink", "color": "#415fd8", "style": "normal"}, {"source": "t_gimbal_manager_information", "target": "m_mavlink", "color": "#4159d8", "style": "normal"}, {"source": "t_mission", "target": "m_mavlink", "color": "#4145d8", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_mavlink", "color": "#5d41d8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_mavlink", "color": "#6341d8", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mavlink", "color": "#7141d8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_mavlink", "color": "#7741d8", "style": "normal"}, {"source": "t_vehicle_odometry", "target": "m_mavlink", "color": "#7e41d8", "style": "normal"}, {"source": "t_health_report", "target": "m_mavlink", "color": "#8441d8", "style": "normal"}, {"source": "t_rpm", "target": "m_mavlink", "color": "#9841d8", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_mavlink", "color": "#9e41d8", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_mavlink", "color": "#ab41d8", "style": "normal"}, {"source": "t_gps_inject_data", "target": "m_mavlink", "color": "#c641d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_mavlink", "color": "#cc41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_mavlink", "color": "#d841d7", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_mavlink", "color": "#d841c4", "style": "normal"}, {"source": "t_dataman_response", "target": "m_mavlink", "color": "#d841b6", "style": "normal"}, {"source": "t_debug_array", "target": "m_mavlink", "color": "#d841a9", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_mavlink", "color": "#d841a3", "style": "normal"}, {"source": "t_debug_value", "target": "m_mavlink", "color": "#d84189", "style": "normal"}, {"source": "t_event", "target": "m_mavlink", "color": "#d84182", "style": "normal"}, {"source": "t_transponder_report", "target": "m_mavlink", "color": "#d8417b", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_mavlink", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_mavlink", "color": "#d84161", "style": "normal"}, {"source": "t_register_ext_component_reply", "target": "m_mavlink", "color": "#d8415b", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mavlink", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_mc_att_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_att_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_att_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_mc_att_control", "color": "#d8ca41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_autotune_attitude_control_status", "target": "m_mc_att_control", "color": "#7141d8", "style": "normal"}, {"source": "t_actuator_controls_status_0", "target": "m_mc_autotune_attitude_control", "color": "#41d880", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_autotune_attitude_control", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_torque_setpoint", "target": "m_mc_autotune_attitude_control", "color": "#4180d8", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_mc_pos_control", "color": "#d86141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_pos_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_constraints", "target": "m_mc_pos_control", "color": "#4941d8", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_pos_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_mc_pos_control", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_mc_rate_control", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_mc_rate_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_mc_rate_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_mc_rate_control", "color": "#d8414e", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_mc_rate_control", "color": "#63d841", "style": "normal"}, {"source": "t_control_allocator_status", "target": "m_mc_rate_control", "color": "#a5d841", "style": "normal"}, {"source": "t_battery_status", "target": "m_mc_rate_control", "color": "#cc41d8", "style": "normal"}, {"source": "t_home_position", "target": "m_navigator", "color": "#d841d7", "style": "normal"}, {"source": "t_mission", "target": "m_navigator", "color": "#4145d8", "style": "normal"}, {"source": "t_geofence_status", "target": "m_navigator", "color": "#d841bd", "style": "normal"}, {"source": "t_dataman_response", "target": "m_navigator", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_navigator", "color": "#41d8ae", "style": "normal"}, {"source": "t_landing_target_pose", "target": "m_navigator", "color": "#9e41d8", "style": "normal"}, {"source": "t_wind", "target": "m_navigator", "color": "#d8d741", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_navigator", "color": "#41a7d8", "style": "normal"}, {"source": "t_transponder_report", "target": "m_navigator", "color": "#d8417b", "style": "normal"}, {"source": "t_rtl_status", "target": "m_navigator", "color": "#5041d8", "style": "normal"}, {"source": "t_position_controller_landing_status", "target": "m_navigator", "color": "#41d845", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_navigator", "color": "#d8414e", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_navigator", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_navigator", "color": "#bfd841", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_navigator", "color": "#b2d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_payload_deliverer", "color": "#4193d8", "style": "normal"}, {"source": "t_rc_parameter_map", "target": "m_rc_update", "color": "#d8b641", "style": "normal"}, {"source": "t_input_rc", "target": "m_rc_update", "color": "#41aed8", "style": "normal"}, {"source": "t_manual_control_switches", "target": "m_rc_update", "color": "#7741d8", "style": "normal"}, {"source": "t_actuator_servos", "target": "m_rover_ackermann", "color": "#d87b41", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_ackermann", "color": "#d8418f", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_ackermann", "color": "#84d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_ackermann", "color": "#416cd8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_ackermann", "color": "#bf41d8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_ackermann", "color": "#d89c41", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_ackermann", "color": "#a541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_ackermann", "color": "#41d8d5", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_ackermann", "color": "#d86141", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_ackermann", "color": "#d3d841", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_ackermann", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_ackermann", "color": "#bfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_ackermann", "color": "#5d41d8", "style": "normal"}, {"source": "t_position_controller_status", "target": "m_rover_ackermann", "color": "#b2d841", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_ackermann", "color": "#63d841", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_ackermann", "color": "#6a41d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_differential", "color": "#d8418f", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_differential", "color": "#84d841", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_differential", "color": "#416cd8", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_differential", "color": "#d89c41", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_differential", "color": "#a541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_differential", "color": "#41d8d5", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_differential", "color": "#d86141", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_differential", "color": "#d3d841", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_differential", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_differential", "color": "#bfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_differential", "color": "#5d41d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_differential", "color": "#bf41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_differential", "color": "#63d841", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_differential", "color": "#6a41d8", "style": "normal"}, {"source": "t_rover_velocity_setpoint", "target": "m_rover_mecanum", "color": "#d8418f", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_mecanum", "color": "#416cd8", "style": "normal"}, {"source": "t_offboard_control_mode", "target": "m_rover_mecanum", "color": "#84d841", "style": "normal"}, {"source": "t_rover_position_setpoint", "target": "m_rover_mecanum", "color": "#d89c41", "style": "normal"}, {"source": "t_rover_throttle_setpoint", "target": "m_rover_mecanum", "color": "#a541d8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_mecanum", "color": "#41d8d5", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_mecanum", "color": "#d86141", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_rover_mecanum", "color": "#d3d841", "style": "normal"}, {"source": "t_rover_steering_setpoint", "target": "m_rover_mecanum", "color": "#5641d8", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_mecanum", "color": "#bfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_mecanum", "color": "#5d41d8", "style": "normal"}, {"source": "t_rover_attitude_setpoint", "target": "m_rover_mecanum", "color": "#bf41d8", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_mecanum", "color": "#63d841", "style": "normal"}, {"source": "t_rover_rate_setpoint", "target": "m_rover_mecanum", "color": "#6a41d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_rover_pos_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_global_position", "target": "m_rover_pos_control", "color": "#41d8ae", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_rover_pos_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_rover_pos_control", "color": "#d86141", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_rover_pos_control", "color": "#bfd841", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_rover_pos_control", "color": "#5d41d8", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_rover_pos_control", "color": "#d8ca41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_rover_pos_control", "color": "#63d841", "style": "normal"}, {"source": "t_sensor_selection", "target": "m_sensors", "color": "#d841c4", "style": "normal"}, {"source": "t_vehicle_imu", "target": "m_sensors", "color": "#d85b41", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_sensors", "color": "#41d8a1", "style": "normal"}, {"source": "t_differential_pressure", "target": "m_sensors", "color": "#d88941", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_sensors", "color": "#d8d141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_sensors", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_imu_status", "target": "m_sensors", "color": "#d8bd41", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_sensors", "color": "#41ced8", "style": "normal"}, {"source": "t_sensor_optical_flow", "target": "m_sensors", "color": "#d841b0", "style": "normal"}, {"source": "t_sensor_correction", "target": "m_sensors", "color": "#418dd8", "style": "normal"}, {"source": "t_estimator_sensor_bias", "target": "m_sensors", "color": "#6341d8", "style": "normal"}, {"source": "t_flight_phase_estimation", "target": "m_battery_simulator", "color": "#d841d1", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_battery_simulator", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_battery_simulator", "color": "#d8414e", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_gz_bridge", "color": "#41c1d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_gz_bridge", "color": "#d841ca", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_gz_bridge", "color": "#7ed841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_gz_bridge", "color": "#56d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_gz_bridge", "color": "#d3d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_gz_bridge", "color": "#4193d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_gz_bridge", "color": "#d84175", "style": "normal"}, {"source": "t_gripper", "target": "m_gz_bridge", "color": "#d8c441", "style": "normal"}, {"source": "t_gimbal_device_set_attitude", "target": "m_gz_bridge", "color": "#d841a3", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_gz_bridge", "color": "#63d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_gz_bridge", "color": "#d341d8", "style": "normal"}, {"source": "t_actuator_armed", "target": "m_pwm_out_sim", "color": "#41c1d8", "style": "normal"}, {"source": "t_actuator_servos_trim", "target": "m_pwm_out_sim", "color": "#d841ca", "style": "normal"}, {"source": "t_gimbal_controls", "target": "m_pwm_out_sim", "color": "#7ed841", "style": "normal"}, {"source": "t_landing_gear", "target": "m_pwm_out_sim", "color": "#56d841", "style": "normal"}, {"source": "t_actuator_motors", "target": "m_pwm_out_sim", "color": "#d3d841", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_pwm_out_sim", "color": "#4193d8", "style": "normal"}, {"source": "t_actuator_test", "target": "m_pwm_out_sim", "color": "#d84175", "style": "normal"}, {"source": "t_gripper", "target": "m_pwm_out_sim", "color": "#d8c441", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_pwm_out_sim", "color": "#63d841", "style": "normal"}, {"source": "t_landing_gear_wheel", "target": "m_pwm_out_sim", "color": "#d341d8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_agp_sim", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_airspeed_sim", "color": "#d84161", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_sensor_airspeed_sim", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_baro_sim", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_local_position_groundtruth", "target": "m_sensor_gps_sim", "color": "#d84161", "style": "normal"}, {"source": "t_vehicle_global_position_groundtruth", "target": "m_sensor_mag_sim", "color": "#abd841", "style": "normal"}, {"source": "t_vehicle_attitude_groundtruth", "target": "m_sensor_mag_sim", "color": "#6ad841", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_mavlink", "color": "#4166d8", "style": "normal"}, {"source": "t_battery_status", "target": "m_simulator_mavlink", "color": "#cc41d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_simulator_mavlink", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_simulator_mavlink", "color": "#d8414e", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_mavlink", "color": "#d87541", "style": "normal"}, {"source": "t_actuator_outputs_sim", "target": "m_simulator_sih", "color": "#4166d8", "style": "normal"}, {"source": "t_actuator_outputs", "target": "m_simulator_sih", "color": "#d87541", "style": "normal"}, {"source": "t_sensor_mag", "target": "m_temperature_compensation", "color": "#41d8a1", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_temperature_compensation", "color": "#d8d141", "style": "normal"}, {"source": "t_sensor_baro", "target": "m_temperature_compensation", "color": "#ab41d8", "style": "normal"}, {"source": "t_sensor_gyro", "target": "m_temperature_compensation", "color": "#41ced8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_temperature_compensation", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_rates_setpoint", "target": "m_uuv_att_control", "color": "#d84741", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_att_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_att_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_attitude_setpoint", "target": "m_uuv_att_control", "color": "#d8ca41", "style": "normal"}, {"source": "t_manual_control_setpoint", "target": "m_uuv_att_control", "color": "#63d841", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_uuv_pos_control", "color": "#bfd841", "style": "normal"}, {"source": "t_trajectory_setpoint", "target": "m_uuv_pos_control", "color": "#d86141", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_uuv_pos_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_uuv_pos_control", "color": "#416cd8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_uxrce_dds_client", "color": "#d84168", "style": "normal"}, {"source": "t_vehicle_control_mode", "target": "m_vtol_att_control", "color": "#41d8d5", "style": "normal"}, {"source": "t_action_request", "target": "m_vtol_att_control", "color": "#b941d8", "style": "normal"}, {"source": "t_fw_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41c8d8", "style": "normal"}, {"source": "t_home_position", "target": "m_vtol_att_control", "color": "#d841d7", "style": "normal"}, {"source": "t_vehicle_land_detected", "target": "m_vtol_att_control", "color": "#41a7d8", "style": "normal"}, {"source": "t_tecs_status", "target": "m_vtol_att_control", "color": "#41a1d8", "style": "normal"}, {"source": "t_vehicle_command", "target": "m_vtol_att_control", "color": "#4193d8", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_vtol_att_control", "color": "#416cd8", "style": "normal"}, {"source": "t_airspeed_validated", "target": "m_vtol_att_control", "color": "#41d866", "style": "normal"}, {"source": "t_vehicle_local_position_setpoint", "target": "m_vtol_att_control", "color": "#415fd8", "style": "normal"}, {"source": "t_mc_virtual_attitude_setpoint", "target": "m_vtol_att_control", "color": "#41d886", "style": "normal"}, {"source": "t_vehicle_local_position", "target": "m_vtol_att_control", "color": "#bfd841", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_vtol_att_control", "color": "#d8414e", "style": "normal"}, {"source": "t_position_setpoint_triplet", "target": "m_vtol_att_control", "color": "#5d41d8", "style": "normal"}, {"source": "t_vehicle_command_ack", "target": "m_failure", "color": "#d84168", "style": "normal"}, {"source": "t_input_rc", "target": "m_tests", "color": "#41aed8", "style": "normal"}, {"source": "t_dataman_response", "target": "m_tests", "color": "#d841b6", "style": "normal"}, {"source": "t_vehicle_attitude", "target": "m_fake_magnetometer", "color": "#416cd8", "style": "normal"}, {"source": "t_sensor_accel", "target": "m_work_item_example", "color": "#d8d141", "style": "normal"}, {"source": "t_vehicle_status", "target": "m_work_item_example", "color": "#d8414e", "style": "normal"}]} \ No newline at end of file diff --git a/docs/uk/SUMMARY.md b/docs/uk/SUMMARY.md index 8217225a0b..f6ec7e91fd 100644 --- a/docs/uk/SUMMARY.md +++ b/docs/uk/SUMMARY.md @@ -459,6 +459,7 @@ - [Vehicles](sim_gazebo_gz/vehicles.md) - [Advanced Lift Drag Tool](sim_gazebo_gz/tools_avl_automation.md) - [Worlds](sim_gazebo_gz/worlds.md) + - [Plugins](sim_gazebo_gz/plugins.md) - [Gazebo Models Repository](sim_gazebo_gz/gazebo_models.md) - [Багатотранспортний Sim](sim_gazebo_gz/multi_vehicle_simulation.md) - [Симуляція Gazebo Classic](sim_gazebo_classic/index.md) @@ -491,12 +492,17 @@ - [Versioned](msg_docs/versioned_messages.md) - [ActuatorMotors](msg_docs/ActuatorMotors.md) - [ActuatorServos](msg_docs/ActuatorServos.md) + - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [ArmingCheckReply](msg_docs/ArmingCheckReply.md) - [ArmingCheckRequest](msg_docs/ArmingCheckRequest.md) - [BatteryStatus](msg_docs/BatteryStatus.md) - [ConfigOverrides](msg_docs/ConfigOverrides.md) + - [FixedWingLateralSetpoint](msg_docs/FixedWingLateralSetpoint.md) + - [FixedWingLongitudinalSetpoint](msg_docs/FixedWingLongitudinalSetpoint.md) - [GotoSetpoint](msg_docs/GotoSetpoint.md) - [HomePosition](msg_docs/HomePosition.md) + - [LateralControlConfiguration](msg_docs/LateralControlConfiguration.md) + - [LongitudinalControlConfiguration](msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](msg_docs/ManualControlSetpoint.md) - [ModeCompleted](msg_docs/ModeCompleted.md) - [RegisterExtComponentReply](msg_docs/RegisterExtComponentReply.md) @@ -525,10 +531,8 @@ - [ActuatorTest](msg_docs/ActuatorTest.md) - [AdcReport](msg_docs/AdcReport.md) - [Airspeed](msg_docs/Airspeed.md) - - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [AirspeedWind](msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](msg_docs/AutotuneAttitudeControlStatus.md) - - [Buffer128](msg_docs/Buffer128.md) - [ButtonEvent](msg_docs/ButtonEvent.md) - [CameraCapture](msg_docs/CameraCapture.md) - [CameraStatus](msg_docs/CameraStatus.md) @@ -567,6 +571,9 @@ - [FailsafeFlags](msg_docs/FailsafeFlags.md) - [FailureDetectorStatus](msg_docs/FailureDetectorStatus.md) - [FigureEightStatus](msg_docs/FigureEightStatus.md) + - [FixedWingLateralGuidanceStatus](msg_docs/FixedWingLateralGuidanceStatus.md) + - [FixedWingLateralStatus](msg_docs/FixedWingLateralStatus.md) + - [FixedWingRunwayControl](msg_docs/FixedWingRunwayControl.md) - [FlightPhaseEstimation](msg_docs/FlightPhaseEstimation.md) - [FollowTarget](msg_docs/FollowTarget.md) - [FollowTargetEstimator](msg_docs/FollowTargetEstimator.md) @@ -619,7 +626,6 @@ - [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) - [NavigatorStatus](msg_docs/NavigatorStatus.md) - [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) - - [NpfgStatus](msg_docs/NpfgStatus.md) - [ObstacleDistance](msg_docs/ObstacleDistance.md) - [OffboardControlMode](msg_docs/OffboardControlMode.md) - [OnboardComputerStatus](msg_docs/OnboardComputerStatus.md) @@ -655,13 +661,12 @@ - [RcParameterMap](msg_docs/RcParameterMap.md) - [RoverAttitudeSetpoint](msg_docs/RoverAttitudeSetpoint.md) - [RoverAttitudeStatus](msg_docs/RoverAttitudeStatus.md) - - [RoverMecanumGuidanceStatus](msg_docs/RoverMecanumGuidanceStatus.md) - - [RoverMecanumSetpoint](msg_docs/RoverMecanumSetpoint.md) - - [RoverMecanumStatus](msg_docs/RoverMecanumStatus.md) + - [RoverPositionSetpoint](msg_docs/RoverPositionSetpoint.md) - [RoverRateSetpoint](msg_docs/RoverRateSetpoint.md) - [RoverRateStatus](msg_docs/RoverRateStatus.md) - [RoverSteeringSetpoint](msg_docs/RoverSteeringSetpoint.md) - [RoverThrottleSetpoint](msg_docs/RoverThrottleSetpoint.md) + - [RoverVelocitySetpoint](msg_docs/RoverVelocitySetpoint.md) - [RoverVelocityStatus](msg_docs/RoverVelocityStatus.md) - [Rpm](msg_docs/Rpm.md) - [RtlStatus](msg_docs/RtlStatus.md) @@ -693,6 +698,7 @@ - [TelemetryStatus](msg_docs/TelemetryStatus.md) - [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) - [TimesyncStatus](msg_docs/TimesyncStatus.md) + - [TrajectorySetpoint6dof](msg_docs/TrajectorySetpoint6dof.md) - [TransponderReport](msg_docs/TransponderReport.md) - [TuneControl](msg_docs/TuneControl.md) - [UavcanParameterRequest](msg_docs/UavcanParameterRequest.md) @@ -716,13 +722,16 @@ - [WheelEncoders](msg_docs/WheelEncoders.md) - [Wind](msg_docs/Wind.md) - [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) + - [AirspeedValidatedV0](msg_docs/AirspeedValidatedV0.md) + - [VehicleAttitudeSetpointV0](msg_docs/VehicleAttitudeSetpointV0.md) - [VehicleStatusV0](msg_docs/VehicleStatusV0.md) - - [Повідомлення MAVLink](middleware/mavlink.md) + - [MAVLink Messaging](mavlink/index.md) - [Adding Messages](mavlink/adding_messages.md) - [Streaming Messages](mavlink/streaming_messages.md) - [Receiving Messages](mavlink/receiving_messages.md) - [Custom MAVLink Messages](mavlink/custom_messages.md) - - [Standard Modes Protocol](mavlink/standard_modes.md) + - [Protocols/Microservices](mavlink/protocols.md) + - [Standard Modes Protocol](mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) - [Модулі & Команди](modules/modules_main.md) - [Автоматичне підлаштування](modules/modules_autotune.md) @@ -739,6 +748,7 @@ - [Магнітометр](modules/modules_driver_magnetometer.md) - [Оптичний потік](modules/modules_driver_optical_flow.md) - [Датчик швидкості обертання](modules/modules_driver_rpm_sensor.md) + - [Radio Control](modules/modules_driver_radio_control.md) - [Транспондер](modules/modules_driver_transponder.md) - [Естіматори](modules/modules_estimator.md) - [Симуляції](modules/modules_simulation.md) @@ -851,6 +861,7 @@ - [Релізи](releases/index.md) - [main (alpha)](releases/main.md) + - [1.16 (release candidate)](releases/1.16.md) - [1.15 (stable)](releases/1.15.md) - [1.14](releases/1.14.md) - [1.13](releases/1.13.md) diff --git a/docs/uk/_sidebar.md b/docs/uk/_sidebar.md index 06be432d30..c676939e34 100644 --- a/docs/uk/_sidebar.md +++ b/docs/uk/_sidebar.md @@ -42,8 +42,9 @@ - [MindRacer BNF & RTF](/complete_vehicles_mc/mindracer_BNF_RTF.md) - [MindRacer 210](/complete_vehicles_mc/mindracer210.md) - [NanoMind 110](/complete_vehicles_mc/nanomind110.md) - - [Holybro Kopis 2](/complete_vehicles_mc/holybro_kopis2.md) - [Bitcraze Crazyflie 2.1](/complete_vehicles_mc/crazyflie21.md) + - [Holybro Kopis 2](/complete_vehicles_mc/holybro_kopis2.md) + - [Amov F410 Drone](/complete_vehicles_mc/amov_F410_drone.md) - [Набори](/frames_multicopter/kits.md) - [X500 v2 (Pixhawk 6C)](/frames_multicopter/holybro_x500v2_pixhawk6c.md) - [X500 v2 (Pixhawk 5X)](/frames_multicopter/holybro_x500V2_pixhawk5x.md) @@ -182,6 +183,7 @@ - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) + - [Holybro Kakute H7 Wing](/flight_controller/kakuteh7-wing.md) - [Holybro Durandal](/flight_controller/durandal.md) - [Wiring Quickstart](/assembly/quick_start_durandal.md) - [Holybro Pix32 v5](/flight_controller/holybro_pix32_v5.md) @@ -253,6 +255,7 @@ - [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 SAM GPS](/gps_compass/ark_sam_gps.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) @@ -314,6 +317,7 @@ - [Джойстики](/config/joystick.md) - [Посилання даних](/data_links/index.md) - [MAVLink Telemetry (OSD/GCS)](/peripherals/mavlink_peripherals.md) + - [Телеметричні радіостанції](/telemetry/index.md) - [SiK Radio](/telemetry/sik_radio.md) - [Телеметричне радіо RFD900 (SiK)](/telemetry/rfd900_telemetry.md) @@ -326,9 +330,13 @@ - [ARK Electron Microhard Серійне Телеметрійне Радіо](/telemetry/ark_microhard_serial.md) - [Holybro Microhard P900 Телеметрійне Радіо](/telemetry/holybro_microhard_p900_radio.md) - [CUAV P8 Телеметрійне радіо](/telemetry/cuav_p8_radio.md) + - [J.Fi Wireless Telemetry Module](/telemetry/jfi_telemetry.md) - [Holybro XBP9X - Припинено](/telemetry/holybro_xbp9x_radio.md) + - [FrSky телеметрія](/peripherals/frsky_telemetry.md) + - [TBS Crossfire (CRSF) телеметрія](/telemetry/crsf_telemetry.md) + - [Супутниковий зв'язок (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) - [Енергетичні системи](/power_systems/index.md) - [Налаштування оцінки батареї](/config/battery.md) @@ -637,6 +645,7 @@ - [PowerButtonState](/msg_docs/PowerButtonState.md) - [PowerMonitor](/msg_docs/PowerMonitor.md) - [PpsCapture](/msg_docs/PpsCapture.md) + - [PurePursuitStatus](/msg_docs/PurePursuitStatus.md) - [PwmInput](/msg_docs/PwmInput.md) - [Px4ioStatus](/msg_docs/Px4ioStatus.md) - [QshellReq](/msg_docs/QshellReq.md) @@ -710,6 +719,10 @@ - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) - [Повідомлення MAVLink](/middleware/mavlink.md) + - [Adding Messages](/mavlink/adding_messages.md) + - [Streaming Messages](/mavlink/streaming_messages.md) + - [Receiving Messages](/mavlink/receiving_messages.md) + - [Custom MAVLink Messages](/mavlink/custom_messages.md) - [Standard Modes Protocol](/mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](/middleware/uxrce_dds.md) - [Модулі & Команди](/modules/modules_main.md) @@ -798,8 +811,10 @@ - [Тест MC_05 - Політ у приміщенні (ручні режими)](/test_cards/mc_05_indoor_flight_manual_modes.md) - [Модульні Тести](/test_and_ci/unit_tests.md) - [Безперервна інтеграція](/test_and_ci/continous_integration.md) - - [MAVSDK Тестування інтеграції ](/test_and_ci/integration_testing_mavsdk.md) - - [ROS Тестування інтеграції ](/test_and_ci/integration_testing.md) + - [Integration Testing](/test_and_ci/integration_testing.md) + - [MAVSDK Тестування інтеграції ](/test_and_ci/integration_testing_mavsdk.md) + - [PX4 ROS2 Interface Library Integration Testing](/test_and_ci/integration_testing_px4_ros2_interface.md) + - [ROS 1 Integration Testing](/test_and_ci/integration_testing_ros1_mavros.md) - [Докер-контейнер](/test_and_ci/docker.md) - [Підтримка](/test_and_ci/maintenance.md) @@ -840,4 +855,4 @@ - [1.15 (stable)](/releases/1.15.md) - [1.14](/releases/1.14.md) - [1.13](/releases/1.13.md) - - [1.12](/releases/1.12.md) \ No newline at end of file + - [1.12](/releases/1.12.md) diff --git a/docs/uk/concept/events_interface.md b/docs/uk/concept/events_interface.md index ccac5195f7..b0c861c861 100644 --- a/docs/uk/concept/events_interface.md +++ b/docs/uk/concept/events_interface.md @@ -175,4 +175,4 @@ Events can have a fixed set of arguments that can be inserted into the message o Для отримання додаткової інформації див. Метадані PX4 (трансляція і публікація). Цей процес такий самий як і для [метаданих параметрів](../advanced/parameters_and_configurations.md#publishing-parameter-metadata-to-a-gcs). -Для отримання додаткової інформації див. [Метадані PX4 (трансляція і публікація)](../advanced/px4_metadata.md) +For more information see [PX4 Metadata (Translation & Publication)](../advanced/px4_metadata.md) diff --git a/docs/uk/config/safety.md b/docs/uk/config/safety.md index 3637702f20..1fae88595d 100644 --- a/docs/uk/config/safety.md +++ b/docs/uk/config/safety.md @@ -185,7 +185,24 @@ Due to the inherent danger of this, this function is disabled using [CBRK_FLIGHT ## Position (GNSS) Loss Failsafe -The _Position Loss Failsafe_ is triggered if the quality of the PX4 global position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. +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: + +- 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). + +The relevant parameters shown below. + +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [EKF2_NOAID_TOUT](../advanced_config/parameter_reference.md#EKF2_NOAID_TOUT) | Maximum inertial dead-reckoning time, so the time after the last data sample was received of any sensor that constrains the velocity drift [microseconds]. | +| [COM_POS_FS_EPH](../advanced_config/parameter_reference.md#COM_POS_FS_EPH) | Horizontal position error threshold for hovering vehicles (Multicopters and VTOLs in hover). Fixed-wing vehicles have this value set to infinity. | + +### Position Loss Failsafe Action The failure action is controlled by [COM_POSCTL_NAVL](../advanced_config/parameter_reference.md#COM_POSCTL_NAVL), based on whether RC control is assumed to be available (and altitude information): diff --git a/docs/uk/contribute/docs.md b/docs/uk/contribute/docs.md index 5de5d30fbb..98f74dc95e 100644 --- a/docs/uk/contribute/docs.md +++ b/docs/uk/contribute/docs.md @@ -181,11 +181,19 @@ Within the repository you created above: 5. 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, on Windows command line you can enable VSCode as your default editor by entering: + For example, you can enable VSCode as your default editor by entering: - ```sh - set EDITOR=code - ``` + - Windows: + + ```sh + set EDITOR=code + ``` + + - Linux: + + ```sh + export EDITOR=code + ``` 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). diff --git a/docs/uk/debug/failure_injection.md b/docs/uk/debug/failure_injection.md index 65cd6e3506..2cfc45ccad 100644 --- a/docs/uk/debug/failure_injection.md +++ b/docs/uk/debug/failure_injection.md @@ -61,7 +61,7 @@ failure [-i ] - _instance number_ (optional): Instance number of affected sensor. 0 (за замовчуванням) вказує на всі сенсори вказаного типу. -### Приклад +### Example Щоб симулювати втрату сигналу RC без вимкнення вашого пульта керування RC: diff --git a/docs/uk/dev_log/log_encryption.md b/docs/uk/dev_log/log_encryption.md index 4685332e74..959d5ce491 100644 --- a/docs/uk/dev_log/log_encryption.md +++ b/docs/uk/dev_log/log_encryption.md @@ -12,7 +12,7 @@ To use it you will need to build firmware with this feature enabled and then upl ::: :::tip -Log encryption was has been improved in PX4 main (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). +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). diff --git a/docs/uk/flight_controller/kakuteh7-wing.md b/docs/uk/flight_controller/kakuteh7-wing.md index 2461dc41bf..bea7e564f5 100644 --- a/docs/uk/flight_controller/kakuteh7-wing.md +++ b/docs/uk/flight_controller/kakuteh7-wing.md @@ -1,4 +1,6 @@ -# Holybro Kakute H7 V2 +# Holybro Kakute H743-Wing + + :::warning PX4 не розробляє цей (або будь-який інший) автопілот. @@ -31,9 +33,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo | Buz-, Buz+ | Piezo buzzer | | | M1 to M14 | Motor signal outputs | | - - -## Оновлення завантажувача PX4 +## PX4 Bootloader Update {#bootloader} The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). Before the PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. @@ -50,7 +50,7 @@ make holybro_kakuteh7-wing_default ## Встановлення прошивки PX4 :::info -KakuteH7-wing is supported with PX4 master & PX4 v1.16 or newer.. +KakuteH7-wing is supported in PX4 v1.16 or newer. До випуску вам потрібно буде вручну зібрати та встановити прошивку. ::: diff --git a/docs/uk/flight_modes_fw/land.md b/docs/uk/flight_modes_fw/land.md index 8e13cca8b7..0ce3f24bfb 100644 --- a/docs/uk/flight_modes_fw/land.md +++ b/docs/uk/flight_modes_fw/land.md @@ -41,11 +41,12 @@ The vehicle will flare if configured to do so (see [Flaring](../flight_modes_fw/ Поведінку режиму приземлення можна налаштувати за допомогою наведених нижче параметрів. -| Параметр | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | Радіус блукання, який контролер відстежує протягом усієї послідовності посадки. | -| [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | Виставте кут шляху пункту налаштувань. | -| [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | Налаштування швидкості. | +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | Радіус блукання, який контролер відстежує протягом усієї послідовності посадки. | +| [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | Виставте кут шляху пункту налаштувань. | +| [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | Налаштування швидкості. | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_LND_AIRSPD is below FW_AIRSPD_MIN. | ## Дивіться також diff --git a/docs/uk/flight_modes_fw/takeoff.md b/docs/uk/flight_modes_fw/takeoff.md index f83346f027..dade7341cf 100644 --- a/docs/uk/flight_modes_fw/takeoff.md +++ b/docs/uk/flight_modes_fw/takeoff.md @@ -43,13 +43,14 @@ Reaching the clearance altitude causes the vehicle to enter [Hold mode](../fligh Параметри, які впливають як на катапульту/ручний старт, так і на зліт зі злітно-посадкової смуги: -| Параметр | Опис | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [MIS_TAKEOFF_ALT](../advanced_config/parameter_reference.md#MIS_TAKEOFF_ALT) | Мінімальна висота встановлення над будинком, на яку підніметься транспортний засіб під час зльоту. | -| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Takeoff airspeed (is set to [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) if not defined by operator) | -| [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | Це мінімальний кут нахилу заданий під час фази зльоту | -| [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Максимальний кут підйому. | -| [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Налаштування закрилок під час зльоту | +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [MIS_TAKEOFF_ALT](../advanced_config/parameter_reference.md#MIS_TAKEOFF_ALT) | Мінімальна висота встановлення над будинком, на яку підніметься транспортний засіб під час зльоту. | +| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Takeoff airspeed (is set to [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) if not defined by operator) | +| [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | Це мінімальний кут нахилу заданий під час фази зльоту | +| [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Максимальний кут підйому. | +| [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Налаштування закрилок під час зльоту | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_TKO_AIRSPD is below FW_AIRSPD_MIN. | :::info The vehicle always respects normal FW max/min throttle settings during takeoff ([FW_THR_MIN](../advanced_config/parameter_reference.md#FW_THR_MIN), [FW_THR_MAX](../advanced_config/parameter_reference.md#FW_THR_MAX)). @@ -101,26 +102,25 @@ The _runway takeoff mode_ has the following phases: :::info For a smooth takeoff, the runway wheel controller possibly needs to be tuned. -It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)) and an outer loop that calculates heading setpoints from course errors and can be tuned via [RWTO_NPFG_PERIOD](#RWTO_NPFG_PERIOD). +It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)). ::: ### Параметри (зліт зі злітної смуги) Зліт зі злітної смуги залежить від наступних параметрів: -| Параметр | Опис | -| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RWTO_TKOFF](../advanced_config/parameter_reference.md#RWTO_TKOFF) | Увімкніть зліт по взлітній смузі | -| [FW_W_EN](../advanced_config/parameter_reference.md#FW_W_EN) | Увімкнути контролер колеса | -| [RWTO_MAX_THR](../advanced_config/parameter_reference.md#RWTO_MAX_THR) | Максимальне розгін під час взліту зі злітної смуги | -| [RWTO_RAMP_TIME](../advanced_config/parameter_reference.md#RWTO_RAMP_TIME) | Час прискорення ручки газу | -| [RWTO_ROT_AIRSPD](../advanced_config/parameter_reference.md#RWTO_ROT_AIRSPD) | Поріг швидкості для початку підняття (нахилення вгору). Якщо не налаштовано оператором, встановлюється на 0,9\*FW_TKO_AIRSPD. | -| [RWTO_ROT_TIME](../advanced_config/parameter_reference.md#RWTO_ROT_TIME) | Це час, який необхідно лінійно нарощувати обмеження швидкості прийому під час обертання на зльоті. | -| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Задана швидкість під час розгону під час зльоту (після відкочування). Якщо не налаштовано оператором, встановлюється на FW_AIRSPD_MIN. | -| [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Увімкніть керування колесом під час руху по злітній смузі | -| [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | Розмах крила транспортного засобу. Використовується для запобігання ударів крилом. | -| [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | Висота крил над землею (дорожній просвіт). Використовується для запобігання ударів крилом. | -| [RWTO_NPFG_PERIOD](../advanced_config/parameter_reference.md#RWTO_NPFG_PERIOD) | Час L1 під час керування на злітній смузі. Збільшення для менш агресивної відповіді на помилки курсу. | +| Параметр | Опис | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RWTO_TKOFF](../advanced_config/parameter_reference.md#RWTO_TKOFF) | Увімкніть зліт по взлітній смузі | +| [FW_W_EN](../advanced_config/parameter_reference.md#FW_W_EN) | Увімкнути контролер колеса | +| [RWTO_MAX_THR](../advanced_config/parameter_reference.md#RWTO_MAX_THR) | Максимальне розгін під час взліту зі злітної смуги | +| [RWTO_RAMP_TIME](../advanced_config/parameter_reference.md#RWTO_RAMP_TIME) | Час прискорення ручки газу | +| [RWTO_ROT_AIRSPD](../advanced_config/parameter_reference.md#RWTO_ROT_AIRSPD) | Поріг швидкості для початку підняття (нахилення вгору). Якщо не налаштовано оператором, встановлюється на 0,9\*FW_TKO_AIRSPD. | +| [RWTO_ROT_TIME](../advanced_config/parameter_reference.md#RWTO_ROT_TIME) | Це час, який необхідно лінійно нарощувати обмеження швидкості прийому під час обертання на зльоті. | +| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Задана швидкість під час розгону під час зльоту (після відкочування). Якщо не налаштовано оператором, встановлюється на FW_AIRSPD_MIN. | +| [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Увімкніть керування колесом під час руху по злітній смузі | +| [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | Розмах крила транспортного засобу. Використовується для запобігання ударів крилом. | +| [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | Висота крил над землею (дорожній просвіт). Використовується для запобігання ударів крилом. | ## Дивіться також diff --git a/docs/uk/flight_modes_rover/ackermann.md b/docs/uk/flight_modes_rover/ackermann.md index a964aff934..844b92b528 100644 --- a/docs/uk/flight_modes_rover/ackermann.md +++ b/docs/uk/flight_modes_rover/ackermann.md @@ -137,7 +137,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | Команда | Опис | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | diff --git a/docs/uk/flight_modes_rover/differential.md b/docs/uk/flight_modes_rover/differential.md index 4639ea9995..bb94546119 100644 --- a/docs/uk/flight_modes_rover/differential.md +++ b/docs/uk/flight_modes_rover/differential.md @@ -115,7 +115,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | Команда | Опис | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | diff --git a/docs/uk/flight_modes_rover/mecanum.md b/docs/uk/flight_modes_rover/mecanum.md index 1d0d89391a..67381327f5 100644 --- a/docs/uk/flight_modes_rover/mecanum.md +++ b/docs/uk/flight_modes_rover/mecanum.md @@ -140,7 +140,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | Команда | Опис | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | diff --git a/docs/uk/frames_plane/reptile_dragon_2.md b/docs/uk/frames_plane/reptile_dragon_2.md index c65111cda7..3f65bb3a4e 100644 --- a/docs/uk/frames_plane/reptile_dragon_2.md +++ b/docs/uk/frames_plane/reptile_dragon_2.md @@ -325,7 +325,7 @@ ELRS RX був прикріплений до бічної стінки корп ## Збірка прошивки -You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. +You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver_radio_control.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. Для їх використання потрібна деяка налаштування. diff --git a/docs/uk/frames_rover/ackermann.md b/docs/uk/frames_rover/ackermann.md index 80575a7ee9..3a8c1c191e 100644 --- a/docs/uk/frames_rover/ackermann.md +++ b/docs/uk/frames_rover/ackermann.md @@ -1,6 +1,6 @@ # Ackermann Rovers - + An _Ackermann rover_ controls its direction by pointing the front wheels in the direction of travel — the [Ackermann steering geometry](https://en.wikipedia.org/wiki/Ackermann_steering_geometry) compensates for the fact that wheels on the inside and outside of the turn move at different rates. This kind of steering is used on most commercial vehicles, including cars, trucks etc. diff --git a/docs/uk/frames_rover/differential.md b/docs/uk/frames_rover/differential.md index a74fbd1d50..95ffe04993 100644 --- a/docs/uk/frames_rover/differential.md +++ b/docs/uk/frames_rover/differential.md @@ -1,6 +1,6 @@ # Differential Rovers - + A differential rover's motion is controlled using a differential drive mechanism, where the left and right wheel speeds are adjusted independently to achieve the desired forward speed and yaw rate. Forward motion is achieved by driving both wheels at the same speed in the same direction. diff --git a/docs/uk/frames_rover/mecanum.md b/docs/uk/frames_rover/mecanum.md index 7d9a249156..548e7bcf4c 100644 --- a/docs/uk/frames_rover/mecanum.md +++ b/docs/uk/frames_rover/mecanum.md @@ -1,6 +1,6 @@ # Mecanum Rovers - + A Mecanum rover is a type of mobile robot that uses Mecanum wheels to achieve omnidirectional movement. These wheels are unique because they have rollers mounted at a 45-degree angle around their circumference, allowing the rover to move not only forward and backward but also side-to-side and diagonally without needing to rotate first. Each wheel is driven by its own motor, and by controlling the speed and direction of each motor, the rover can move in any direction or spin in place. diff --git a/docs/uk/mavlink/index.md b/docs/uk/mavlink/index.md new file mode 100644 index 0000000000..3da14afef9 --- /dev/null +++ b/docs/uk/mavlink/index.md @@ -0,0 +1,89 @@ +# Повідомлення MAVLink + +[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. + +PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. + +Ця тема надає короткий огляд основних концепцій MAVLink, таких як повідомлення, команди та мікросервіси. +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) +- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) +- [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Protocols/Microservices](../mavlink/protocols.md) + +:::info +We do not yet cover _command_ handling and sending, or how to implement your own microservices. +::: + +## Огляд MAVLink + +MAVLink - це легкий протокол, який був розроблений для ефективної відправки повідомлень по ненадійним радіоканалах з низькою пропускною здатністю. + +_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. +Вони навмисно легкі, мають обмежений розмір і не мають семантики для повторного надсилання та підтвердження. +Окремі повідомлення зазвичай використовуються для потокової передачі телеметрії або інформації про стан, а також для надсилання команд, які не потребують підтвердження - наприклад, команд уставки, що надсилаються з високою швидкістю. + +[Microservices](../mavlink/protocols.md) are "meta protocols" built on top of MAVLink messages. +They are used to communicate information that cannot be sent in a single message. + +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) is a service for sending commands that may need acknowledgement and retransmission (quality of service). +Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. +The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. +The command is automatically resent a number of times if no acknowledgment is received. +Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. + +Others services include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html), [Parameter Protocol](https://mavlink.io/en/services/parameter.html), and [Mission Protocol](https://mavlink.io/en/services/mission.html). +For more information on what PX4 supports see [Microservices](../mavlink/protocols.md). + +MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). +Інструментарій MAVLink включає в себе генератори коду, які створюють з цих визначень специфічні для мови програмування бібліотеки для надсилання та отримання повідомлень. +Зверніть увагу, що більшість згенерованих бібліотек не створюють код для реалізації мікросервісів. + +The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): + +- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. + The definitions move to `common.xml` if accepted following testing. +- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. + Вони підтримуються багатьма польотними стеками, наземними станціями та периферійними пристроями MAVLink. + Польотні стеки, які використовують ці визначення, з більшою ймовірністю будуть взаємодіяти. +- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. + Вони присутні на переважній більшості польотних стеків і реалізовані однаково. +- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. + +The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. + +Протокол покладається на те, що кожна сторона комунікації має спільне визначення того, які повідомлення надсилаються. +Це означає, що для того, щоб взаємодіяти, обидва кінці комунікації повинні використовувати бібліотеки, створені на основі одного і того ж визначення XML. + + + +## PX4 та MAVLink + +PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. +In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. + +:::info +To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). +During development you can use definitions in `development.xml`. +You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. +::: + +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/). + +Інструментарій збірки генерує заголовні файли 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`: + +- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). + You can change this to any other definition file, but the file must include `common.xml`. +- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). + +The files are generated into the build directory: `/build//mavlink/`. diff --git a/docs/uk/mavlink/protocols.md b/docs/uk/mavlink/protocols.md new file mode 100644 index 0000000000..d7808a61f1 --- /dev/null +++ b/docs/uk/mavlink/protocols.md @@ -0,0 +1,51 @@ +# MAVLink Microservices (Protocols) + +MAVLink "microservices" are a protocols that use multiple messages exchanged between components to communicate more complicated information. +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) provides an efficient mechanism for packaging a command in a (particular) message and receiving acknowledgement of the command in another message. + +MAVLink microservices are documented the [MAVLink Guide](https://mavlink.io/en/services/) (this is not exhaustive: not all messages are grouped into protocols and not all protocols are documented). + +This section lists the services known to be supported/not supported by PX4 in this version. + +## Supported Microservices + +These services are known to be supported in some form: + +- [Battery Protocol](https://mavlink.io/en/services/battery.html) + - [BATTERY_STATUS](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) and [BATTERY_INFO](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) are streamed. +- Camera Protocols + - [Camera Protocol v2](https://mavlink.io/en/services/camera.html) + - [Camera Definition](https://mavlink.io/en/services/camera_def.html) +- [Command Protocol](https://mavlink.io/en/services/command.html) +- [Component Metadata Protocol](https://mavlink.io/en/services/component_information.html) +- [Events Interface](https://mavlink.io/en/services/events.html) +- [File Transfer Protocol (FTP)](https://mavlink.io/en/services/ftp.html) +- Gimbal Protocols + - [Gimbal Protocol v2](https://mavlink.io/en/services/gimbal_v2.html) + - Can be enabled by [Gimbal Configuration](../advanced/gimbal_control.md#mavlink-gimbal-mnt-mode-out-mavlink) + - PX4 an act as a MAVLink Gimbal for one FC-connected Gimbal +- [Heartbeat/Connection Protocol](https://mavlink.io/en/services/heartbeat.html) +- [High Latency Protocol](https://mavlink.io/en/services/high_latency.html) — PX4 streams [HIGH_LATENCY2](https://mavlink.io/en/messages/common.html#HIGH_LATENCY2) +- [Image Transmission Protocol](https://mavlink.io/en/services/image_transmission.html) +- [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) +- [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)) +- [Parameter Protocol](https://mavlink.io/en/services/parameter.html) +- [Parameter Protocol Extended](https://mavlink.io/en/services/parameter_ext.html) — Allows setting string parameters. Used for setting string parameters set in camera definition files. +- [Payload Protocol](https://mavlink.io/en/services/payload.html) +- [Ping Protocol](https://mavlink.io/en/services/ping.html) +- [Standard Modes Protocol](../mavlink/standard_modes.md) +- [Terrain Protocol](https://mavlink.io/en/services/terrain.html) +- [Time Synchronization](https://mavlink.io/en/services/timesync.html) +- [Traffic Management (UTM/ADS-B)](https://mavlink.io/en/services/traffic_management.html) +- [Arm Authorization Protocol](https://mavlink.io/en/services/arm_authorization.html) + +## Непідтримувано + +These services are not supported/used by PX4: + +- [Illuminator Protocol](https://mavlink.io/en/services/illuminator.html) +- [Tunnel Protocol](https://mavlink.io/en/services/tunnel.html) diff --git a/docs/uk/middleware/mavlink.md b/docs/uk/middleware/mavlink.md index cf35f57ea4..c88fc7840e 100644 --- a/docs/uk/middleware/mavlink.md +++ b/docs/uk/middleware/mavlink.md @@ -1,87 +1 @@ -# Повідомлення MAVLink - -[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. - -PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. - -Ця тема надає короткий огляд основних концепцій MAVLink, таких як повідомлення, команди та мікросервіси. -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) -- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) -- [Custom MAVLink Messages](../mavlink/custom_messages.md) - -:::info -We do not yet cover _command_ handling and sending, or how to implement your own microservices. -::: - -## Огляд MAVLink - -MAVLink - це легкий протокол, який був розроблений для ефективної відправки повідомлень по ненадійним радіоканалах з низькою пропускною здатністю. - -_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. -Вони навмисно легкі, мають обмежений розмір і не мають семантики для повторного надсилання та підтвердження. -Окремі повідомлення зазвичай використовуються для потокової передачі телеметрії або інформації про стан, а також для надсилання команд, які не потребують підтвердження - наприклад, команд уставки, що надсилаються з високою швидкістю. - -The [Command Protocol](https://mavlink.io/en/services/command.html) is a higher level protocol for sending commands that may need acknowledgement. -Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. -The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. -Якщо команда не буде отримана, вона буде повторно надіслана автоматично. -Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. - -[Microservices](https://mavlink.io/en/services/) are other higher level protocols built on top of MAVLink messages. -Вони використовуються для передачі інформації, яку неможливо надіслати одним повідомленням, а також для забезпечення таких функцій, як надійний зв'язок. -Описаний вище командний протокол є одним з таких сервісів. -Others include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html) and [Mission Protocol](https://mavlink.io/en/services/mission.html). - -MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). -Інструментарій MAVLink включає в себе генератори коду, які створюють з цих визначень специфічні для мови програмування бібліотеки для надсилання та отримання повідомлень. -Зверніть увагу, що більшість згенерованих бібліотек не створюють код для реалізації мікросервісів. - -The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): - -- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. - The definitions move to `common.xml` if accepted following testing. -- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. - Вони підтримуються багатьма польотними стеками, наземними станціями та периферійними пристроями MAVLink. - Польотні стеки, які використовують ці визначення, з більшою ймовірністю будуть взаємодіяти. -- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. - Вони присутні на переважній більшості польотних стеків і реалізовані однаково. -- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. - -The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. - -Протокол покладається на те, що кожна сторона комунікації має спільне визначення того, які повідомлення надсилаються. -Це означає, що для того, щоб взаємодіяти, обидва кінці комунікації повинні використовувати бібліотеки, створені на основі одного і того ж визначення XML. - - - -## PX4 та MAVLink - -PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. -In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. - -:::info -To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). -During development you can use definitions in `development.xml`. -You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. -::: - -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/). - -Інструментарій збірки генерує заголовні файли 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`: - -- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). - You can change this to any other definition file, but the file must include `common.xml`. -- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). - -The files are generated into the build directory: `/build//mavlink/`. + diff --git a/docs/uk/middleware/uorb.md b/docs/uk/middleware/uorb.md index ae387e9ac0..764a2bb908 100644 --- a/docs/uk/middleware/uorb.md +++ b/docs/uk/middleware/uorb.md @@ -116,9 +116,9 @@ As there are external tools using uORB messages from log files, such as [Flight ## Message Versioning - + -Optional message versioning was introduced in the `main` branch (planned for PX4 v1.16+) to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. +Optional message versioning was introduced PX4 v1.16 to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. Versioned messages are designed to remain more stable over time compared to their non-versioned counterparts, as they are intended to be used across multiple releases of PX4 and external systems, ensuring greater compatibility over longer periods. Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, where `x` corresponds to the current version of the message. diff --git a/docs/uk/middleware/uxrce_dds.md b/docs/uk/middleware/uxrce_dds.md index 62eac42e83..472f3f502a 100644 --- a/docs/uk/middleware/uxrce_dds.md +++ b/docs/uk/middleware/uxrce_dds.md @@ -430,14 +430,17 @@ publications: - topic: /fmu/out/collision_constraints type: px4_msgs::msg::CollisionConstraints + rate_limit: 50. # Limit max publication rate to 50 Hz ... - topic: /fmu/out/vehicle_odometry type: px4_msgs::msg::VehicleOdometry + # Use default publication rate limit of 100 Hz - topic: /fmu/out/vehicle_status type: px4_msgs::msg::VehicleStatus + rate_limit: 5. - topic: /fmu/out/vehicle_trajectory_waypoint_desired type: px4_msgs::msg::VehicleTrajectoryWaypoint @@ -472,6 +475,8 @@ Each (`topic`,`type`) pairs defines: - `/fmu/out/` for topics that are _published_ by PX4. - `/fmu/in/` for topics that are _subscribed_ by PX4. 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. `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. 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. diff --git a/docs/uk/modules/modules_autotune.md b/docs/uk/modules/modules_autotune.md index 17b4b5fac2..b11ba1bc53 100644 --- a/docs/uk/modules/modules_autotune.md +++ b/docs/uk/modules/modules_autotune.md @@ -6,9 +6,7 @@ Source: [modules/fw_autotune_attitude_control](https://github.com/PX4/PX4-Autopi ### Опис - - -### Використання +### Usage {#fw_autotune_attitude_control_usage} ``` fw_autotune_attitude_control [arguments...] @@ -27,9 +25,7 @@ Source: [modules/mc_autotune_attitude_control](https://github.com/PX4/PX4-Autopi ### Опис - - -### Використання +### Usage {#mc_autotune_attitude_control_usage} ``` mc_autotune_attitude_control [arguments...] diff --git a/docs/uk/modules/modules_command.md b/docs/uk/modules/modules_command.md index 97b9c45610..f7e8f84f0b 100644 --- a/docs/uk/modules/modules_command.md +++ b/docs/uk/modules/modules_command.md @@ -8,9 +8,7 @@ Source: [systemcmds/actuator_test](https://github.com/PX4/PX4-Autopilot/tree/mai ПОПЕРЕДЖЕННЯ: перед використанням цієї команди приберіть усі пропелери. - - -### Використання +### Usage {#actuator_test_usage} ``` actuator_test [arguments...] @@ -34,9 +32,9 @@ actuator_test [arguments...] Source: [systemcmds/bl_update](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bl_update) -Utility to flash the bootloader from a file +Utility to flash the bootloader from a file -### Використання +### Usage {#bl_update_usage} ``` bl_update [arguments...] @@ -50,9 +48,9 @@ bl_update [arguments...] Source: [systemcmds/bsondump](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bsondump) -Utility to read BSON from a file and print or output document size. +Utility to read BSON from a file and print or output document size. -### Використання +### Usage {#bsondump_usage} ``` bsondump [arguments...] @@ -63,9 +61,9 @@ bsondump [arguments...] Source: [systemcmds/dumpfile](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dumpfile) -Утиліта для роботи з файлами дампу. Виводить розмір та вміст файлу у бінарному режимі (не замінюйте LF на CR LF) до stdout. +Dump file utility. Prints file size and contents in binary mode (don't replace LF with CR LF) to stdout. -### Використання +### Usage {#dumpfile_usage} ``` dumpfile [arguments...] @@ -78,17 +76,15 @@ Source: [systemcmds/dyn](https://github.com/PX4/PX4-Autopilot/tree/main/src/syst ### Опис -Завантажує та запускає динамічний модуль PX4, який не було скомпільовано у бінарний файл PX4. +Load and run a dynamic PX4 module, which was not compiled into the PX4 binary. -### Приклад +### Example ``` dyn ./hello.px4mod start ``` - - -### Використання +### Usage {#dyn_usage} ``` dyn [arguments...] @@ -102,21 +98,19 @@ Source: [systemcmds/failure](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### Опис -Впроваджує збої в систему. +Inject failures into system. ### Імплементація -Ця системна команда надсилає транспортному засобу команду через uORB, щоб спровокувати збій. +This system command sends a vehicle command over uORB to trigger failure. ### Приклади -Перевірити failsafe GPS, зупинивши GPS: +Test the GPS failsafe by stopping GPS: failure gps off - - -### Використання +### Usage {#failure_usage} ``` failure [arguments...] @@ -135,7 +129,7 @@ Source: [systemcmds/gpio](https://github.com/PX4/PX4-Autopilot/tree/main/src/sys ### Опис -Ця команда використовується для читання та запису GPIO +This command is used to read and write GPIOs ``` gpio read / [PULLDOWN|PULLUP] [--force] @@ -144,7 +138,7 @@ gpio write / [PUSHPULL|OPENDRAIN] [--force] ### Приклади -Зчитати значення на port H pin 4 налаштований як імпульс, і це високо +Read the value on port H pin 4 configured as pullup, and it is high ``` gpio read H4 PULLUP @@ -152,21 +146,19 @@ gpio read H4 PULLUP 1 OK -Встановіть вихідне значення на виводі порту E на високий рівень +Set the output value on Port E pin 7 to high ``` gpio write E7 1 --force ``` -Встановіть вихідне значення на пристрої /dev/gpio1 на високе значення +Set the output value on device /dev/gpio1 to high ``` gpio write /dev/gpio1 1 ``` - - -### Використання +### Usage {#gpio_usage} ``` gpio [arguments...] @@ -186,13 +178,11 @@ gpio [arguments...] Source: [systemcmds/hardfault_log](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log) -Утиліта апаратного збою +Hardfault utility -Використовується у сценаріях запуску для обробки апаратних збоїв +Used in startup scripts to handle hardfaults - - -### Використання +### Usage {#hardfault_log_usage} ``` hardfault_log [arguments...] @@ -219,9 +209,9 @@ hardfault_log [arguments...] Source: [systemcmds/hist](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hist) -Інструмент командного рядка для відображення історії повідомлень px4. Немає аргументів. +Command-line tool to show the px4 message history. There are no arguments. -### Використання +### Usage {#hist_usage} ``` hist [arguments...] @@ -231,9 +221,9 @@ hist [arguments...] Source: [systemcmds/i2cdetect](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/i2cdetect) -Utility to scan for I2C devices on a particular bus. +Utility to scan for I2C devices on a particular bus. -### Використання +### Usage {#i2cdetect_usage} ``` i2cdetect [arguments...] @@ -249,23 +239,21 @@ Source: [systemcmds/led_control](https://github.com/PX4/PX4-Autopilot/tree/main/ Command-line tool to control & test the (external) LED's. -Щоб скористатися ним, переконайтеся, що запущено драйвер, який обробляє тему led_control uorb. +To use it make sure there's a driver running, which handles the led_control uorb topic. -Існують різні пріоритети, наприклад, один модуль може встановити колір з низьким пріоритетом, а інший -модуль може блимати N разів з високим пріоритетом, і світлодіоди автоматично повертаються до стану з низьким пріоритетом -після блимання. The `reset` command can also be used to return to a lower priority. +There are different priorities, such that for example one module can set a color with low priority, and another +module can blink N times with high priority, and the LED's automatically return to the lower priority state +after the blinking. The `reset` command can also be used to return to a lower priority. ### Приклади -Блимання першого світлодіода 5 разів синім кольором: +Blink the first LED 5 times in blue: ``` led_control blink -c blue -l 0 -n 5 ``` - - -### Використання +### Usage {#led_control_usage} ``` led_control [arguments...] @@ -301,13 +289,11 @@ led_control [arguments...] Source: [systemcmds/topic_listener](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/topic_listener) -Утиліта для прослуховування тем uORB та виводу даних у консоль. +Utility to listen on uORB topics and print the data to the console. -Із прослуховування можна вийти в будь-який момент, натиснувши Ctrl+C, Esc або Q. +The listener can be exited any time by pressing Ctrl+C, Esc, or Q. - - -### Використання +### Usage {#listener_usage} ``` listener [arguments...] @@ -325,9 +311,9 @@ listener [arguments...] Source: [systemcmds/mft](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft) -Utility interact with the manifest +Utility interact with the manifest -### Використання +### Usage {#mfd_usage} ``` mfd [arguments...] @@ -339,9 +325,9 @@ mfd [arguments...] Source: [systemcmds/mft_cfg](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft_cfg) -Tool to set and get manifest configuration +Tool to set and get manifest configuration -### Використання +### Usage {#mft_cfg_usage} ``` mft_cfg [arguments...] @@ -360,9 +346,9 @@ mft_cfg [arguments...] Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) -Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) +Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) -### Використання +### Usage {#mtd_usage} ``` mtd [arguments...] @@ -388,14 +374,12 @@ mtd [arguments...] Source: [systemcmds/nshterm](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/nshterm) -Запуск оболонки NSH на заданому порту. +Start an NSH shell on a given port. -Раніше це використовувалося для запуску оболонки на послідовному порту USB. -Тепер там працює mavlink, і можна використовувати оболонку поверх mavlink. +This was previously used to start a shell on the USB serial port. +Now there runs mavlink, and it is possible to use a shell over mavlink. - - -### Використання +### Usage {#nshterm_usage} ``` nshterm [arguments...] @@ -408,23 +392,24 @@ Source: [systemcmds/param](https://github.com/PX4/PX4-Autopilot/tree/main/src/sy ### Опис -Команда для доступу до параметрів і маніпулювання ними через оболонку або скрипт. +Command to access and manipulate parameters via shell or script. -Це використовується, наприклад, у сценарії запуску для встановлення специфічних для планера параметрів. +This is used for example in the startup script to set airframe-specific parameters. -Parameters are automatically saved when changed, eg. with `param set`. Зазвичай вони зберігаються на FRAM -або на SD-карту. `param select` can be used to change the storage location for subsequent saves (this will +Parameters are automatically saved when changed, eg. with `param set`. They are typically stored to FRAM +or to the SD card. `param select` can be used to change the storage location for subsequent saves (this will need to be (re-)configured on every boot). If the FLASH-based backend is enabled (which is done at compile time, e.g. for the Intel Aero or Omnibus), `param select` has no effect and the default is always the FLASH backend. However `param save/load ` can still be used to write to/read from files. -Кожен параметр має прапорець «використано», який встановлюється при його зчитуванні під час завантаження. Він використовується для відображення лише релевантних параметрів на наземну станцію керування. +Each parameter has a 'used' flag, which is set when it's read during boot. It is used to only show relevant +parameters to a ground control station. ### Приклади -Змініть планер і переконайтеся, що завантажені параметри планера за замовчуванням: +Change the airframe and make sure the airframe's default parameters are loaded: ``` param set SYS_AUTOSTART 4001 @@ -432,9 +417,7 @@ param set SYS_AUTOCONFIG 1 reboot ``` - - -### Використання +### Usage {#param_usage} ``` param [arguments...] @@ -509,12 +492,10 @@ Source: [modules/payload_deliverer](https://github.com/PX4/PX4-Autopilot/tree/ma ### Опис -Керує доставкою вантажу за допомогою захвату або лебідки з відповідним налаштуванням тайм-ауту / датчиком зворотнього зв'язку, -та повертає результат доставки як підтвердження внутрішньо +Handles payload delivery with either Gripper or a Winch with an appropriate timeout / feedback sensor setting, +and communicates back the delivery result as an acknowledgement internally - - -### Використання +### Usage {#payload_deliverer_usage} ``` payload_deliverer [arguments...] @@ -536,9 +517,9 @@ payload_deliverer [arguments...] Source: [systemcmds/perf](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/perf) -Tool to print performance counters +Tool to print performance counters -### Використання +### Usage {#perf_usage} ``` perf [arguments...] @@ -553,9 +534,9 @@ perf [arguments...] Source: [systemcmds/reboot](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/reboot) -Reboot the system +Reboot the system -### Використання +### Usage {#reboot_usage} ``` reboot [arguments...] @@ -568,9 +549,9 @@ reboot [arguments...] Source: [systemcmds/sd_bench](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_bench) -Test the speed of an SD Card +Test the speed of an SD Card -### Використання +### Usage {#sd_bench_usage} ``` sd_bench [arguments...] @@ -591,9 +572,9 @@ sd_bench [arguments...] Source: [systemcmds/sd_stress](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_stress) -Test operations on an SD Card +Test operations on an SD Card -### Використання +### Usage {#sd_stress_usage} ``` sd_stress [arguments...] @@ -607,13 +588,11 @@ sd_stress [arguments...] Source: [systemcmds/serial_passthru](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/serial_passthru) -Передає дані з одного пристрою на інший. +Pass data from one device to another. -Це може бути використано для використання u-center, підключеного до USB з GPS через послідовний порт. +This can be used to use u-center connected to USB with a GPS on a serial port. - - -### Використання +### Usage {#serial_passthru_usage} ``` serial_passthru [arguments...] @@ -632,20 +611,18 @@ Source: [systemcmds/system_time](https://github.com/PX4/PX4-Autopilot/tree/main/ ### Опис -Інструмент командного рядка для встановлення та отримання системного часу. +Command-line tool to set and get system time. ### Приклади -Встановіть системний час і прочитайте його назад +Set the system time and read it back ``` system_time set 1600775044 system_time get ``` - - -### Використання +### Usage {#system_time_usage} ``` system_time [arguments...] @@ -659,9 +636,9 @@ system_time [arguments...] Source: [systemcmds/top](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/top) -Monitor running processes and their CPU, stack usage, priority and state +Monitor running processes and their CPU, stack usage, priority and state -### Використання +### Usage {#top_usage} ``` top [arguments...] @@ -672,10 +649,10 @@ top [arguments...] Source: [systemcmds/usb_connected](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/usb_connected) -Утиліта для перевірки підключення USB. Раніше використовувався в стартових скриптах. -Значення 0 означає, що USB підключено, 1 - ні. +Utility to check if USB is connected. Was previously used in startup scripts. +A return value of 0 means USB is connected, 1 otherwise. -### Використання +### Usage {#usb_connected_usage} ``` usb_connected [arguments...] @@ -685,9 +662,9 @@ usb_connected [arguments...] Source: [systemcmds/ver](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/ver) -Tool to print various version information +Tool to print various version information -### Використання +### Usage {#ver_usage} ``` ver [arguments...] diff --git a/docs/uk/modules/modules_communication.md b/docs/uk/modules/modules_communication.md index 50021d207d..e1d4fcebe4 100644 --- a/docs/uk/modules/modules_communication.md +++ b/docs/uk/modules/modules_communication.md @@ -4,9 +4,9 @@ Source: [drivers/telemetry/frsky_telemetry](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/frsky_telemetry) -Підтримка FrSky Telemetry. Автоматичне визначення протоколу D або S.PORT. +Підтримка FrSky Telemetry. Автоматичне визначення протоколу D або S.PORT. -### Використання +### Usage {#frsky_telemetry_usage} ``` frsky_telemetry [arguments...] @@ -64,9 +64,7 @@ mavlink start -u 14556 -r 1000000 mavlink stream -u 14556 -s HIGHRES_IMU -r 50 ``` - - -### Використання +### Usage {#mavlink_usage} ``` mavlink [arguments...] @@ -129,31 +127,29 @@ Source: [systemcmds/uorb](https://github.com/PX4/PX4-Autopilot/tree/main/src/sys ### Опис -uORB - це внутрішня система обміну повідомленнями pub-sub, яка використовується для комунікації між модулями. +uORB is the internal pub-sub messaging system, used for communication between modules. ### Імплементація -Реалізація є асинхронною та безблоковою, тобто видавець не чекає на підписника і навпаки. -Це досягається завдяки наявності окремого буфера між публікатором і підписником. +The implementation is asynchronous and lock-free, ie. a publisher does not wait for a subscriber and vice versa. +This is achieved by having a separate buffer between a publisher and a subscriber. -Код оптимізовано для мінімізації використання пам'яті та затримок при обміні повідомленнями. +The code is optimized to minimize the memory footprint and the latency to exchange messages. -Messages are defined in the `/msg` directory. Вони перетворюються в код C/C++ під час збірки. +Messages are defined in the `/msg` directory. They are converted into C/C++ code at build-time. -Якщо ви компілюєте з ORB_USE_PUBLISHER_RULES, файл з правилами публікації uORB можна використовувати для налаштування того, яким -модулям дозволено публікувати які теми. Це використовується для загальносистемного відтворення. +If compiled with ORB_USE_PUBLISHER_RULES, a file with uORB publication rules can be used to configure which +modules are allowed to publish which topics. This is used for system-wide replay. ### Приклади -Відстежуйте показники публікацій тем. Besides `top`, this is an important command for general system inspection: +Monitor topic publication rates. Besides `top`, this is an important command for general system inspection: ``` uorb top ``` - - -### Використання +### Usage {#uorb_usage} ``` uorb [arguments...] diff --git a/docs/uk/modules/modules_controller.md b/docs/uk/modules/modules_controller.md index cbfdbd4177..32a347a826 100644 --- a/docs/uk/modules/modules_controller.md +++ b/docs/uk/modules/modules_controller.md @@ -16,9 +16,7 @@ Currently it is feeding the `manual_control_setpoint` topic directly to the actu Щоб зменшити затримку керування, модуль безпосередньо опитує тему гіроскопа, опубліковану драйвером IMU. - - -### Використання +### Usage {#airship_att_control_usage} ``` airship_att_control [arguments...] @@ -36,12 +34,10 @@ Source: [modules/control_allocator](https://github.com/PX4/PX4-Autopilot/tree/ma ### Опис -Це реалізує розподіл управління. Він приймає задані значення крутного моменту та тяги -як вхідні та вихідні повідомлення про задані значення привода. +This implements control allocation. It takes torque and thrust setpoints +as inputs and outputs actuator setpoint messages. - - -### Використання +### Usage {#control_allocator_usage} ``` control_allocator [arguments...] @@ -59,12 +55,10 @@ Source: [modules/flight_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/ ### Опис -Це реалізує генерацію заданого значення для всіх режимів. Він приймає поточний стан режиму транспортного засобу як вхідні дані -і виводить задані значення для контролерів. +This implements the setpoint generation for all modes. It takes the current mode state of the vehicle as input +and outputs setpoints for controllers. - - -### Використання +### Usage {#flight_mode_manager_usage} ``` flight_mode_manager [arguments...] @@ -82,11 +76,9 @@ Source: [modules/fw_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### Опис -fw_att_control - регулятор положення фіксованого крила. +fw_att_control is the fixed wing attitude controller. - - -### Використання +### Usage {#fw_att_control_usage} ``` fw_att_control [arguments...] @@ -99,20 +91,18 @@ fw_att_control [arguments...] status print status info ``` -## fw_pos_control +## fw_lat_lon_control -Source: [modules/fw_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_pos_control) +Source: [modules/fw_lateral_longitudinal_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_lateral_longitudinal_control) ### Опис -fw_pos_control - контролер положення фіксованого крила. +fw_lat_lon_control computes attitude and throttle setpoints from lateral and longitudinal control setpoints. - - -### Використання +### Usage {#fw_lat_lon_control_usage} ``` -fw_pos_control [arguments...] +fw_lat_lon_control [arguments...] Commands: start [vtol] VTOL mode @@ -122,17 +112,37 @@ fw_pos_control [arguments...] status print status info ``` +## fw_mode_manager + +Source: [modules/fw_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_mode_manager) + +### Опис + +This implements the setpoint generation for all PX4-internal fixed-wing modes, height-rate control and higher. +It takes the current mode state of the vehicle as input and outputs setpoints consumed by the fixed-wing +lateral-longitudinal controller and and controllers below that (attitude, rate). + +### Usage {#fw_mode_manager_usage} + +``` +fw_mode_manager [arguments...] + Commands: + start + + stop + + status print status info +``` + ## fw_rate_control Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_rate_control) ### Опис -fw_rate_control - регулятор швидкості фіксованого крила. +fw_rate_control is the fixed-wing rate controller. - - -### Використання +### Usage {#fw_rate_control_usage} ``` fw_rate_control [arguments...] @@ -151,21 +161,19 @@ Source: [modules/mc_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### Опис -Це реалізує контролер положення мультикоптера. It takes attitude +This implements the multicopter attitude controller. It takes attitude setpoints (`vehicle_attitude_setpoint`) as inputs and outputs a rate setpoint. -Контролер має P цикл для кутової похибки +The controller has a P loop for angular error -Публікація, що документує реалізоване кватерніонне керування положенням: +Publication documenting the implemented Quaternion Attitude Control: Nonlinear Quadrocopter Attitude Control (2013) by Dario Brescianini, Markus Hehn and Raffaello D'Andrea Institute for Dynamic Systems and Control (IDSC), ETH Zurich https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/154099/eth-7387-01.pdf - - -### Використання +### Usage {#mc_att_control_usage} ``` mc_att_control [arguments...] @@ -184,16 +192,14 @@ Source: [modules/mc_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### Опис -Контролер має два контури: P цикл для помилки положення і PID цикл для помилки швидкості. -Виходом контролера швидкості є вектор тяги, який розділяється на напрямок тяги -(тобто матрицю обертання для орієнтації мультикоптера) та скаляр тяги (тобто саму тягу мультикоптера). +The controller has two loops: a P loop for position error and a PID loop for velocity error. +Output of the velocity controller is thrust vector that is split to thrust direction +(i.e. rotation matrix for multicopter orientation) and thrust scalar (i.e. multicopter thrust itself). -Контролер не використовує кути Ейлера для своєї роботи, вони генеруються лише для більш зручного керування та -логування. +The controller doesn't use Euler angles for its work, they are generated only for more human-friendly control and +logging. - - -### Використання +### Usage {#mc_pos_control_usage} ``` mc_pos_control [arguments...] @@ -212,14 +218,12 @@ Source: [modules/mc_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main ### Опис -Це реалізує мультикоптерний регулятор швидкості. It takes rate setpoints (in acro mode +This implements the multicopter rate controller. It takes rate setpoints (in acro mode via `manual_control_setpoint` topic) as inputs and outputs actuator control messages. -Контролер має PID-цикл для компенсації похибки кутової швидкості. +The controller has a PID loop for angular rate error. - - -### Використання +### Usage {#mc_rate_control_usage} ``` mc_rate_control [arguments...] @@ -238,9 +242,9 @@ Source: [modules/navigator](https://github.com/PX4/PX4-Autopilot/tree/main/src/m ### Опис -Модуль відповідає за автономні режими польоту. Це включає місії (читайте з dataman), -взліт та RTL. -Він також відповідає за перевірку порушень геозони. +Module that is responsible for autonomous flight modes. This includes missions (read from dataman), +takeoff and RTL. +It is also responsible for geofence violation checking. ### Імплементація @@ -250,9 +254,7 @@ The member `_navigation_mode` contains the current active mode. Navigator publishes position setpoint triplets (`position_setpoint_triplet_s`), which are then used by the position controller. - - -### Використання +### Usage {#navigator_usage} ``` navigator [arguments...] @@ -276,9 +278,7 @@ Source: [modules/rover_ackermann](https://github.com/PX4/PX4-Autopilot/tree/main Rover ackermann module. - - -### Використання +### Usage {#rover_ackermann_usage} ``` rover_ackermann [arguments...] @@ -298,9 +298,7 @@ Source: [modules/rover_differential](https://github.com/PX4/PX4-Autopilot/tree/m Rover differential module. - - -### Використання +### Usage {#rover_differential_usage} ``` rover_differential [arguments...] @@ -320,9 +318,7 @@ Source: [modules/rover_mecanum](https://github.com/PX4/PX4-Autopilot/tree/main/s Rover mecanum module. - - -### Використання +### Usage {#rover_mecanum_usage} ``` rover_mecanum [arguments...] @@ -340,21 +336,21 @@ Source: [modules/rover_pos_control](https://github.com/PX4/PX4-Autopilot/tree/ma ### Опис -Контролює положення ровера за допомогою L1 контролера. +Controls the position of a ground rover using an L1 controller. Publishes `vehicle_thrust_setpoint (only in x) and vehicle_torque_setpoint (only yaw)` messages at IMU_GYRO_RATEMAX. ### Імплементація -Наразі ця реалізація підтримує лише декілька режимів: +Currently, this implementation supports only a few modes: -- Повна ручна: Throttle та yaw контроль передається безпосередньо на актуатори -- Автоматична місія: Ровер виконує місії -- Loiter: Ровер буде рухатися в межах радіусу очікування, а потім вимкне двигуни +- Full manual: Throttle and yaw controls are passed directly through to the actuators +- Auto mission: The rover runs missions +- Loiter: The rover will navigate to within the loiter radius, then stop the motors ### Приклади -Приклад використання CLI: +CLI usage example: ``` rover_pos_control start @@ -362,9 +358,7 @@ rover_pos_control status rover_pos_control stop ``` - - -### Використання +### Usage {#rover_pos_control_usage} ``` rover_pos_control [arguments...] @@ -387,9 +381,7 @@ It takes torque and thrust setpoints as inputs and outputs actuator setpoint messages. ``` - - -### Використання +### Usage {#spacecraft_usage} ``` spacecraft [arguments...] @@ -407,20 +399,20 @@ Source: [modules/uuv_att_control](https://github.com/PX4/PX4-Autopilot/tree/main ### Опис -Контролює положення безпілотного підводного апарату (UUV). +Controls the attitude of an unmanned underwater vehicle (UUV). Publishes `vehicle_thrust_setpont` and `vehicle_torque_setpoint` messages at a constant 250Hz. ### Імплементація -Наразі ця реалізація підтримує лише декілька режимів: +Currently, this implementation supports only a few modes: -- Повна ручна: Roll, pitch, yaw, та throttle контроль передається безпосередньо до актуаторів -- Автоматична місія: UUV виконує місії +- Full manual: Roll, pitch, yaw, and throttle controls are passed directly through to the actuators +- Auto mission: The uuv runs missions ### Приклади -Приклад використання CLI: +CLI usage example: ``` uuv_att_control start @@ -428,9 +420,7 @@ uuv_att_control status uuv_att_control stop ``` - - -### Використання +### Usage {#uuv_att_control_usage} ``` uuv_att_control [arguments...] @@ -448,19 +438,19 @@ Source: [modules/uuv_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main ### Опис -Контролює положення безпілотного підводного апарату (UUV). +Controls the attitude of an unmanned underwater vehicle (UUV). Publishes `attitude_setpoint` messages. ### Імплементація -Наразі ця реалізація підтримує лише декілька режимів: +Currently, this implementation supports only a few modes: -- Повна ручна: Roll, pitch, yaw, та throttle контроль передається безпосередньо до актуаторів -- Автоматична місія: UUV виконує місії +- Full manual: Roll, pitch, yaw, and throttle controls are passed directly through to the actuators +- Auto mission: The uuv runs missions ### Приклади -Приклад використання CLI: +CLI usage example: ``` uuv_pos_control start @@ -468,9 +458,7 @@ uuv_pos_control status uuv_pos_control stop ``` - - -### Використання +### Usage {#uuv_pos_control_usage} ``` uuv_pos_control [arguments...] @@ -488,11 +476,9 @@ Source: [modules/vtol_att_control](https://github.com/PX4/PX4-Autopilot/tree/mai ### Опис -fw_att_control - регулятор положення фіксованого крила. +fw_att_control is the fixed wing attitude controller. - - -### Використання +### Usage {#vtol_att_control_usage} ``` vtol_att_control [arguments...] diff --git a/docs/uk/modules/modules_driver.md b/docs/uk/modules/modules_driver.md index 9542c16fc4..f5ad565475 100644 --- a/docs/uk/modules/modules_driver.md +++ b/docs/uk/modules/modules_driver.md @@ -3,23 +3,22 @@ Підкатегорії: - [Airspeed Sensor](modules_driver_airspeed_sensor.md) -- [Transponder](modules_driver_transponder.md) -- [Imu](modules_driver_imu.md) -- [Rpm Sensor](modules_driver_rpm_sensor.md) -- [Magnetometer](modules_driver_magnetometer.md) +- [Baro](modules_driver_baro.md) - [Camera](modules_driver_camera.md) - [Distance Sensor](modules_driver_distance_sensor.md) -- [Optical Flow](modules_driver_optical_flow.md) +- [Imu](modules_driver_imu.md) - [Ins](modules_driver_ins.md) -- [Baro](modules_driver_baro.md) +- [Magnetometer](modules_driver_magnetometer.md) +- [Optical Flow](modules_driver_optical_flow.md) +- [Radio Control](modules_driver_radio_control.md) +- [Rpm Sensor](modules_driver_rpm_sensor.md) +- [Transponder](modules_driver_transponder.md) ## MCP23009 Source: [drivers/gpio/mcp23009](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gpio/mcp23009) - - -### Використання +### Usage {#MCP23009_usage} ``` MCP23009 [arguments...] @@ -53,11 +52,9 @@ Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/s ### Опис -ADC драйвер. +ADC driver. - - -### Використання +### Usage {#adc_usage} ``` adc [arguments...] @@ -87,11 +84,9 @@ such as [PilotPi](../flight_controller/raspberry_pi_pilotpi.md) or [CUAV Nora](. It is enabled/disabled using the [ADC_ADS1115_EN](../advanced_config/parameter_reference.md#ADC_ADS1115_EN) parameter, and is disabled by default. -Якщо увімкнено, внутрішні ADC не використовуються. +If enabled, internal ADCs are not used. - - -### Використання +### Usage {#ads1115_usage} ``` ads1115 [arguments...] @@ -117,13 +112,11 @@ Source: [drivers/osd/atxxxx](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### Опис -Наприклад, OSD драйвер для мікросхеми ATXXXX, яка встановлена на платі OmnibusF4SD. +OSD driver for the ATXXXX chip that is mounted on the OmnibusF4SD board for example. -Його можна увімкнути за допомогою параметра OSD_ATXXXX_CFG. +It can be enabled with the OSD_ATXXXX_CFG parameter. - - -### Використання +### Usage {#atxxxx_usage} ``` atxxxx [arguments...] @@ -149,20 +142,18 @@ Source: [drivers/smart_battery/batmon](https://github.com/PX4/PX4-Autopilot/tree ### Опис -Драйвер для зв'язку SMBUS зі смарт-батареєю з підтримкою BatMon -Інформація про налаштування/використання: https://rotoye.com/batmon-tutorial/ +Driver for SMBUS Communication with BatMon enabled smart-battery +Setup/usage information: https://rotoye.com/batmon-tutorial/ ### Приклади -Почати з адреси 0x0B, на шині 4 +To start at address 0x0B, on bus 4 ``` batmon start -X -a 11 -b 4 ``` - - -### Використання +### Usage {#batmon_usage} ``` batmon [arguments...] @@ -194,19 +185,17 @@ Source: [drivers/batt_smbus](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### Опис -Розумний драйвер акумулятора для BQ40Z50 палива IC. +Smart battery driver for the BQ40Z50 fuel gauge IC. ### Приклади -Записати у прошивку для встановлення параметрів. address, number_of_bytes, byte0, ... , byteN +To write to flash to set parameters. address, number_of_bytes, byte0, ... , byteN ``` batt_smbus -X write_flash 19069 2 27 0 ``` - - -### Використання +### Usage {#batt_smbus_usage} ``` batt_smbus [arguments...] @@ -247,9 +236,7 @@ batt_smbus [arguments...] Source: [drivers/telemetry/bst](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/bst) - - -### Використання +### Usage {#bst_usage} ``` bst [arguments...] @@ -269,62 +256,36 @@ bst [arguments...] status print status info ``` -## crsf_rc - -Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) - -### Опис - -Цей модуль парсить uplink протокол CRSF RC і генерує дані CRSF downlink телеметрії - - - -### Використання - -``` -crsf_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## dshot Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/dshot) ### Опис -Це драйвер виводу DShot. Він схожий на драйвер fmu і може бути використаний як заміна -використовувати DShot як протокол зв'язку ESC замість PWM. +This is the DShot output driver. It is similar to the fmu driver, and can be used as drop-in replacement +to use DShot as ESC communication protocol instead of PWM. -Під час запуску модуль намагається зайняти всі доступні піни для виходу DShot. -Він пропускає всі піни, які вже використовуються (наприклад, модулем запуску камери). +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 -- телеметрія через окремий UART та публікація у вигляді повідомлення esc_status -- надсилання команд DShot через CLI +- telemetry via separate UART and publishing as esc_status message +- sending DShot commands via CLI ### Приклади -Постійно реверсує двигун 1: +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} ``` dshot [arguments...] @@ -332,7 +293,9 @@ dshot [arguments...] start telemetry Enable Telemetry on a UART - UART device + -d UART device + values: + [-x] Swap RX/TX pins reverse Reverse motor direction [-m ] Motor index (1-based, default=all) @@ -372,41 +335,13 @@ dshot [arguments...] status print status info ``` -## dsm_rc - -Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) - -### Опис - -This module does Spektrum DSM RC input parsing. - - - -### Використання - -``` -dsm_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` - ## fake_gps Source: [examples/fake_gps](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_gps) ### Опис - - -### Використання +### Usage {#fake_gps_usage} ``` fake_gps [arguments...] @@ -424,9 +359,7 @@ Source: [examples/fake_imu](https://github.com/PX4/PX4-Autopilot/tree/main/src/e ### Опис - - -### Використання +### Usage {#fake_imu_usage} ``` fake_imu [arguments...] @@ -445,11 +378,9 @@ Source: [examples/fake_magnetometer](https://github.com/PX4/PX4-Autopilot/tree/m ### Опис Publish the earth magnetic field as a fake magnetometer (sensor_mag). -Потребує vehicle_attitude та vehicle_gps_position. +Requires vehicle_attitude and vehicle_gps_position. - - -### Використання +### Usage {#fake_magnetometer_usage} ``` fake_magnetometer [arguments...] @@ -467,14 +398,14 @@ Source: [drivers/wind_sensor/ft_technologies](https://github.com/PX4/PX4-Autopil ### Опис -Драйвер послідовної шини для цифрового датчика вітру FT Technologies FT742. Цей драйвер потрібен для роботи разом з -з модулем передачі сигналу RS485 на UART. +Serial bus driver for the FT Technologies Digital Wind Sensor FT742. This driver is required to operate alongside +a RS485 to UART signal transfer module. -Більшість плат налаштовано на увімкнення/запуск драйвера на вказаному UART за допомогою параметра SENS_FTX_CFG. +Most boards are configured to enable/start the driver on a specified UART using the SENS_FTX_CFG parameter. ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` ft_technologies_serial start -d /dev/ttyS1 @@ -486,9 +417,7 @@ Stop driver ft_technologies_serial stop ``` - - -### Використання +### Usage {#ft_technologies_serial_usage} ``` ft_technologies_serial [arguments...] @@ -499,51 +428,26 @@ ft_technologies_serial [arguments...] stop Stop driver ``` -## ghst_rc - -Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) - -### Опис - -This module does Ghost (GHST) RC input parsing. - - - -### Використання - -``` -ghst_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## gimbal Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gimbal) ### Опис -Водій керування монтажем / гімбалю. Він відображає кілька різних методів введення (наприклад, RC або MAVLink) на налаштований вивід (наприклад, AUX канали або MAVLink). +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. ### Приклади -Перевірте вихідні дані, встановивши кути (всі пропущені вісі установлені на 0): +Test the output by setting a angles (all omitted axes are set to 0): ``` gimbal test pitch -45 yaw 30 ``` - - -### Використання +### Usage {#gimbal_usage} ``` gimbal [arguments...] @@ -572,35 +476,33 @@ Source: [drivers/gps](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers ### Опис -Модуль GPS-драйвера, який здійснює зв'язок з пристроєм і публікує позицію через uORB. -Він підтримує кілька протоколів (постачальників пристроїв) і за замовчуванням автоматично вибирає правильний. +GPS driver module that handles the communication with the device and publishes the position via uORB. +It supports multiple protocols (device vendors) and by default automatically selects the correct one. -The module supports a secondary GPS device, specified via `-e` parameter. Позиція буде опублікована -на другому екземплярі теми uORB, але наразі вона не використовується рештою системи (однак -дані будуть зареєстровані, щоб їх можна було використовувати для порівняння). +The module supports a secondary GPS device, specified via `-e` parameter. The position will be published +on the second uORB topic instance, but it's currently not used by the rest of the system (however the +data will be logged, so that it can be used for comparisons). ### Імплементація -Для кожного пристрою існує потік, який опитує дані. Класи протоколу GPS реалізовано з функцією зворотного виклику -щоб їх можна було використовувати і в інших проектах (наприклад, QGroundControl також використовує їх). +There is a thread for each device polling for data. The GPS protocol classes are implemented with callbacks +so that they can be used in other projects as well (eg. QGroundControl uses them too). ### Приклади -Запуск 2 GPS-пристроїв (основний GPS на /dev/ttyS3 і додатковий на /dev/ttyS4): +Starting 2 GPS devices (the main GPS on /dev/ttyS3 and the secondary on /dev/ttyS4): ``` gps start -d /dev/ttyS3 -e /dev/ttyS4 ``` -Ініціюйте гарячий перезапуск GPS-пристрою +Initiate warm restart of GPS device ``` gps reset warm ``` - - -### Використання +### Usage {#gps_usage} ``` gps [arguments...] @@ -635,9 +537,7 @@ Source: [modules/simulation/gz_bridge](https://github.com/PX4/PX4-Autopilot/tree ### Опис - - -### Використання +### Usage {#gz_bridge_usage} ``` gz_bridge [arguments...] @@ -657,19 +557,18 @@ Source: [drivers/power_monitor/ina220](https://github.com/PX4/PX4-Autopilot/tree ### Опис -Драйвер для монітора живлення INA220. +Driver for the INA220 power monitor. -Кілька екземплярів цього драйвера можуть працювати одночасно, якщо кожен екземпляр має окрему адресу шини АБО I2C. +Multiple instances of this driver can run simultaneously, if each instance has a separate bus OR I2C address. -Наприклад, один екземпляр може працювати на шині 2, адреса 0x41, а інший - на шині 2, адреса 0x43. +For example, one instance can run on Bus 2, address 0x41, and one can run on Bus 2, address 0x43. -Якщо модуль INA220 не має живлення, то за замовчуванням ініціалізація драйвера не відбудеться. Щоб змінити це, використовуйте -прапор -f. Якщо цей прапорець встановлено, то у разі невдалої ініціалізації драйвер буде повторювати спроби ініціалізації -кожні 0.5 секунди. Якщо цей прапорець встановлено, ви можете підключити батарею після запуску драйвера, і він буде працювати. Якщо цей прапорець не встановлено, перед запуском драйвера необхідно підключити батарею. +If the INA220 module is not powered, then by default, initialization of the driver will fail. To change this, use +the -f flag. If this flag is set, then if initialization fails, the driver will keep trying to initialize again +every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without +this flag set, the battery must be plugged in before starting the driver. - - -### Використання +### Usage {#ina220_usage} ``` ina220 [arguments...] @@ -700,19 +599,18 @@ Source: [drivers/power_monitor/ina226](https://github.com/PX4/PX4-Autopilot/tree ### Опис -Драйвер для монітора живлення INA226. +Driver for the INA226 power monitor. -Кілька екземплярів цього драйвера можуть працювати одночасно, якщо кожен екземпляр має окрему адресу шини АБО I2C. +Multiple instances of this driver can run simultaneously, if each instance has a separate bus OR I2C address. -Наприклад, один екземпляр може працювати на шині 2, адреса 0x41, а інший - на шині 2, адреса 0x43. +For example, one instance can run on Bus 2, address 0x41, and one can run on Bus 2, address 0x43. -Якщо модуль INA226 не живиться, то за замовчуванням ініціалізація драйвера не відбудеться. Щоб змінити це, використовуйте -прапор -f. Якщо цей прапорець встановлено, то у разі невдалої ініціалізації драйвер буде повторювати спроби ініціалізації -кожні 0.5 секунди. Якщо цей прапорець встановлено, ви можете підключити батарею після запуску драйвера, і він буде працювати. Якщо цей прапорець не встановлено, перед запуском драйвера необхідно підключити батарею. +If the INA226 module is not powered, then by default, initialization of the driver will fail. To change this, use +the -f flag. If this flag is set, then if initialization fails, the driver will keep trying to initialize again +every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without +this flag set, the battery must be plugged in before starting the driver. - - -### Використання +### Usage {#ina226_usage} ``` ina226 [arguments...] @@ -741,19 +639,18 @@ Source: [drivers/power_monitor/ina228](https://github.com/PX4/PX4-Autopilot/tree ### Опис -Драйвер для монітора живлення INA228. +Driver for the INA228 power monitor. -Кілька екземплярів цього драйвера можуть працювати одночасно, якщо кожен екземпляр має окрему адресу шини АБО I2C. +Multiple instances of this driver can run simultaneously, if each instance has a separate bus OR I2C address. -Наприклад, один екземпляр може працювати на шині 2, адреса 0x41, а інший - на шині 2, адреса 0x43. +For example, one instance can run on Bus 2, address 0x45, and one can run on Bus 2, address 0x45. -Якщо модуль INA228 не має живлення, то за замовчуванням ініціалізація драйвера не відбудеться. Щоб змінити це, використовуйте -прапор -f. Якщо цей прапорець встановлено, то у разі невдалої ініціалізації драйвер буде повторювати спроби ініціалізації -кожні 0.5 секунди. Якщо цей прапорець встановлено, ви можете підключити батарею після запуску драйвера, і він буде працювати. Якщо цей прапорець не встановлено, перед запуском драйвера необхідно підключити батарею. +If the INA228 module is not powered, then by default, initialization of the driver will fail. To change this, use +the -f flag. If this flag is set, then if initialization fails, the driver will keep trying to initialize again +every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without +this flag set, the battery must be plugged in before starting the driver. - - -### Використання +### Usage {#ina228_usage} ``` ina228 [arguments...] @@ -782,19 +679,18 @@ Source: [drivers/power_monitor/ina238](https://github.com/PX4/PX4-Autopilot/tree ### Опис -Драйвер для монітора потужності INA238. +Driver for the INA238 power monitor. -Кілька екземплярів цього драйвера можуть працювати одночасно, якщо кожен екземпляр має окрему адресу шини АБО I2C. +Multiple instances of this driver can run simultaneously, if each instance has a separate bus OR I2C address. -Наприклад, один екземпляр може працювати на шині 2, адреса 0x41, а інший - на шині 2, адреса 0x43. +For example, one instance can run on Bus 2, address 0x45, and one can run on Bus 2, address 0x45. -Якщо модуль INA238 не заснується, то за замовчуванням ініціалізація драйвера не вдасться. Щоб змінити це, використовуйте -прапор -f. Якщо цей прапорець встановлено, то у разі невдалої ініціалізації драйвер буде повторювати спроби ініціалізації -кожні 0.5 секунди. Якщо цей прапорець встановлено, ви можете підключити батарею після запуску драйвера, і він буде працювати. Якщо цей прапорець не встановлено, перед запуском драйвера необхідно підключити батарею. +If the INA238 module is not powered, then by default, initialization of the driver will fail. To change this, use +the -f flag. If this flag is set, then if initialization fails, the driver will keep trying to initialize again +every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without +this flag set, the battery must be plugged in before starting the driver. - - -### Використання +### Usage {#ina238_usage} ``` ina238 [arguments...] @@ -823,13 +719,11 @@ Source: [drivers/telemetry/iridiumsbd](https://github.com/PX4/PX4-Autopilot/tree ### Опис -Драйвер IridiumSBD. +IridiumSBD driver. -Створює віртуальний послідовний порт, який інший модуль може використовувати для зв'язку (наприклад, mavlink). +Creates a virtual serial port that another module can use for communication (e.g. mavlink). - - -### Використання +### Usage {#iridiumsbd_usage} ``` iridiumsbd [arguments...] @@ -851,9 +745,7 @@ iridiumsbd [arguments...] Source: [drivers/irlock](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/irlock) - - -### Використання +### Usage {#irlock_usage} ``` irlock [arguments...] @@ -879,11 +771,9 @@ Source: [drivers/linux_pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/s ### Опис -Драйвер виведення Linux PWM з реалізацією бекенду специфічного для плати. +Linux PWM output driver with board-specific backend implementation. - - -### Використання +### Usage {#linux_pwm_out_usage} ``` linux_pwm_out [arguments...] @@ -899,9 +789,7 @@ linux_pwm_out [arguments...] Source: [drivers/magnetometer/lsm303agr](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm303agr) - - -### Використання +### Usage {#lsm303agr_usage} ``` lsm303agr [arguments...] @@ -929,23 +817,21 @@ Source: [drivers/osd/msp_osd](https://github.com/PX4/PX4-Autopilot/tree/main/src ### Опис -Потік телеметрії MSP +MSP telemetry streamer ### Імплементація -Перетворює повідомлення uORB на пакети телеметрії MSP +Converts uORB messages to MSP telemetry packets ### Приклади -Приклад використання CLI: +CLI usage example: ``` msp_osd ``` - - -### Використання +### Usage {#msp_osd_usage} ``` msp_osd [arguments...] @@ -961,21 +847,19 @@ Source: [drivers/lights/neopixel](https://github.com/PX4/PX4-Autopilot/tree/main ### Опис -Цей модуль відповідає за взаємодію з Neopixel Serial LED +This module is responsible for driving interfasing to the Neopixel Serial LED ### Приклади -Зазвичай починається з: +It is typically started with: ``` neopixel -n 8 ``` -Привести всі доступні світлодіоди в дію. +To drive all available leds. - - -### Використання +### Usage {#newpixel_usage} ``` newpixel [arguments...] @@ -989,9 +873,7 @@ newpixel [arguments...] Source: [drivers/optical_flow/paa3905](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paa3905) - - -### Використання +### Usage {#paa3905_usage} ``` paa3905 [arguments...] @@ -1017,9 +899,7 @@ paa3905 [arguments...] Source: [drivers/optical_flow/paw3902](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paw3902) - - -### Використання +### Usage {#paw3902_usage} ``` paw3902 [arguments...] @@ -1047,25 +927,23 @@ Source: [drivers/pca9685_pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main ### Опис -Це пристрій виводу керування PWM PCA9685. +This is a PCA9685 PWM output driver. -Він працює на робочій черзі I2C, яка є асинхронною з контрольною петлею FC, -витягує останній результат змішування та записує їх в PCA9685 у відповідних мітках планування. +It runs on I2C workqueue which is asynchronous with FC control loop, +fetching the latest mixing result and write them to PCA9685 at its scheduling ticks. -Воно може виконувати повний вихід 12 біт у режимі циклу керування, а також може виводити цінний ширину імпульсу -що може бути прийнято більшістю ESCs та серводвигунами. +It can do full 12bits output as duty-cycle mode, while also able to output precious pulse width +that can be accepted by most ESCs and servos. ### Приклади -Зазвичай починається з: +It is typically started with: ``` pca9685_pwm_out start -a 0x40 -b 1 ``` - - -### Використання +### Usage {#pca9685_pwm_out_usage} ``` pca9685_pwm_out [arguments...] @@ -1087,11 +965,9 @@ Source: [drivers/power_monitor/pm_selector_auterion](https://github.com/PX4/PX4- ### Опис -Драйвер для запуску та автоматичного виявлення різних датчиків потужності. +Driver for starting and auto-detecting different power monitors. - - -### Використання +### Usage {#pm_selector_auterion_usage} ``` pm_selector_auterion [arguments...] @@ -1107,9 +983,7 @@ pm_selector_auterion [arguments...] Source: [drivers/optical_flow/pmw3901](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/pmw3901) - - -### Використання +### Usage {#pmw3901_usage} ``` pmw3901 [arguments...] @@ -1137,11 +1011,9 @@ Source: [drivers/pps_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src ### Опис -Це реалізує захоплення інформації PPS з модуля GNSS та розраховує відхилення між PPS та годинником реального часу. +This implements capturing PPS information from the GNSS module and calculates the drift between PPS and Real-time clock. - - -### Використання +### Usage {#pps_capture_usage} ``` pps_capture [arguments...] @@ -1159,13 +1031,11 @@ Source: [drivers/pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/src/dri ### Опис -Цей модуль відповідає за виведення пінів. Для плат без окремого IO-чіпа -(наприклад, Pixracer), використовуються головні канали. На платах з IO-чіпом (наприклад, Pixhawk) використовуються AUX-канали, а -для основних використовується драйвер px4io. +This module is responsible for driving the output pins. For boards without a separate IO chip +(eg. Pixracer), it uses the main channels. On boards with an IO chip (eg. Pixhawk), it uses the AUX channels, and the +px4io driver is used for main ones. - - -### Використання +### Usage {#pwm_out_usage} ``` pwm_out [arguments...] @@ -1183,17 +1053,15 @@ Source: [modules/simulation/pwm_out_sim](https://github.com/PX4/PX4-Autopilot/tr ### Опис -Драйвер для імітованих вихідних сигналів ШІМ. +Driver for simulated PWM outputs. Its only function is to take `actuator_control` uORB messages, mix them with any loaded mixer and output the result to the `actuator_output` uORB topic. -Воно використовується в SITL та HITL. +It is used in SITL and HITL. - - -### Використання +### Usage {#pwm_out_sim_usage} ``` pwm_out_sim [arguments...] @@ -1211,9 +1079,7 @@ pwm_out_sim [arguments...] Source: [drivers/optical_flow/px4flow](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/px4flow) - - -### Використання +### Usage {#px4flow_usage} ``` px4flow [arguments...] @@ -1239,11 +1105,9 @@ Source: [drivers/px4io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive ### Опис -Драйвер виводу, що зв'язується з вводовим ко-процесором. +Output driver communicating with the IO co-processor. - - -### Використання +### Usage {#px4io_usage} ``` px4io [arguments...] @@ -1277,46 +1141,11 @@ px4io [arguments...] status print status info ``` -## rc_input - -Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) - -### Опис - -Цей модуль робить аналіз введення RC та автоматичний вибір методу. Підтримувані методи: - -- PPM -- SBUS -- DSM -- SUMD -- ST24 -- TBS Crossfire (CRSF) - - - -### Використання - -``` -rc_input [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` - ## rgbled Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) - - -### Використання +### Usage {#rgbled_usage} ``` rgbled [arguments...] @@ -1342,9 +1171,7 @@ rgbled [arguments...] Source: [drivers/lights/rgbled_is31fl3195](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_is31fl3195) - - -### Використання +### Usage {#rgbled_is31fl3195_usage} ``` rgbled_is31fl3195 [arguments...] @@ -1378,11 +1205,9 @@ Driver for [LP5562](https://www.ti.com/product/LP5562) LED driver connected via This used in some GPS modules by Holybro for [PX4 status notification](../getting_started/led_meanings.md) -Водій включений за замовчуванням у вбудованому програмному забезпеченні (ключ KConfig DRIVERS_LIGHTS_RGBLED_LP5562) і завжди увімкнено. +The driver is included by default in firmware (KConfig key DRIVERS_LIGHTS_RGBLED_LP5562) and is always enabled. - - -### Використання +### Usage {#rgbled_lp5562_usage} ``` rgbled_lp5562 [arguments...] @@ -1411,21 +1236,19 @@ Source: [drivers/roboclaw](https://github.com/PX4/PX4-Autopilot/tree/main/src/dr ### Опис This driver communicates over UART with the [Roboclaw motor driver](https://www.basicmicro.com/motor-controller). -Вона виконує дві задачі: +It performs two tasks: -- Контролюйте двигуни на основі інтерфейсу виведення. +- Control the motors based on the OutputModuleInterface. - Read the wheel encoders and publish the raw data in the `wheel_encoders` uORB topic -Для використання цього драйвера Roboclaw повинен бути переведений у режим Packet Serial (див. документацію за посиланням), а -UART-порт вашого контролера польоту повинен бути підключений до Roboclaw, як показано в документації. +In order to use this driver, the Roboclaw should be put into Packet Serial mode (see the linked documentation), and +your flight controller's UART port should be connected to the Roboclaw as shown in the documentation. The driver needs to be enabled using the parameter `RBCLW_SER_CFG`, the baudrate needs to be set correctly and the address `RBCLW_ADDRESS` needs to match the ESC configuration. The command to start this driver is: `$ roboclaw start ` - - -### Використання +### Usage {#roboclaw_usage} ``` roboclaw [arguments...] @@ -1441,9 +1264,7 @@ roboclaw [arguments...] Source: [drivers/rpm_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm_capture) - - -### Використання +### Usage {#rpm_capture_usage} ``` rpm_capture [arguments...] @@ -1461,12 +1282,10 @@ Source: [drivers/safety_button](https://github.com/PX4/PX4-Autopilot/tree/main/s ### Опис -Цей модуль відповідає за кнопку безпеки. -Натискання кнопки безпеки 3 рази швидко спричинить запит на синхронізацію GCS. +This module is responsible for the safety button. +Pressing the safety button 3 times quickly will trigger a GCS pairing request. - - -### Використання +### Usage {#safety_button_usage} ``` safety_button [arguments...] @@ -1478,30 +1297,6 @@ safety_button [arguments...] status print status info ``` -## sbus_rc - -Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) - -### Опис - -This module does SBUS RC input parsing. - - - -### Використання - -``` -sbus_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## septentrio Source: [drivers/gnss/septentrio](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gnss/septentrio) @@ -1535,9 +1330,7 @@ Perform warm reset of the receivers: gps reset warm ``` - - -### Використання +### Usage {#septentrio_usage} ``` septentrio [arguments...] @@ -1566,39 +1359,37 @@ Source: [drivers/hygrometer/sht3x](https://github.com/PX4/PX4-Autopilot/tree/mai ### Опис -Драйвер датчика температури і вологості SHT3x від Senserion. +SHT3x Temperature and Humidity Sensor Driver by Senserion. ### Приклади -Приклад використання CLI: +CLI usage example: ``` sht3x start -X ``` -Запустіть драйвер датчика на зовнішньому шині +Start the sensor driver on the external bus ``` sht3x status ``` -Статус драйвера друку +Print driver status ``` sht3x values ``` -Друкувати останні виміряні значення +Print last measured values ``` sht3x reset ``` -Ініціалізувати датчик, скинути прапорці +Reinitialize senzor, reset flags - - -### Використання +### Usage {#sht3x_usage} ``` sht3x [arguments...] @@ -1629,23 +1420,23 @@ Source: [drivers/tap_esc](https://github.com/PX4/PX4-Autopilot/tree/main/src/dri ### Опис -Цей модуль керує апаратним забезпеченням TAP_ESC через UART. Він слухає теми управління дією, робить змішування та записує вихідні ШІМ сигнали. +This module controls the TAP_ESC hardware via UART. It listens on the +actuator_controls topics, does the mixing and writes the PWM outputs. ### Імплементація -На даний момент модуль реалізований лише у вигляді версії з потоками, що означає, що він працює у власному потоці, а не в черзі завдань. +Currently the module is implemented as a threaded version only, meaning that it +runs in its own thread instead of on the work queue. -### Приклад +### Example -Модуль зазвичай починається з: +The module is typically started with: ``` tap_esc start -d /dev/ttyS2 -n <1-8> ``` - - -### Використання +### Usage {#tap_esc_usage} ``` tap_esc [arguments...] @@ -1663,11 +1454,9 @@ Source: [drivers/tone_alarm](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### Опис -Цей модуль відповідає за сигнал тривоги. +This module is responsible for the tone alarm. - - -### Використання +### Usage {#tone_alarm_usage} ``` tone_alarm [arguments...] @@ -1685,20 +1474,18 @@ Source: [drivers/uwb/uwb_sr150](https://github.com/PX4/PX4-Autopilot/tree/main/s ### Опис -Драйвер для системи позиціонування NXP UWB_SR150 UWB. This driver publishes a `uwb_distance` message +Driver for NXP UWB_SR150 UWB positioning system. This driver publishes a `uwb_distance` message whenever the UWB_SR150 has a position measurement available. -### Приклад +### Example -Запустіть драйвер з вказаним пристроєм: +Start the driver with a given device: ``` uwb start -d /dev/ttyS2 ``` - - -### Використання +### Usage {#uwb_usage} ``` uwb [arguments...] @@ -1718,9 +1505,7 @@ uwb [arguments...] Source: [drivers/actuators/vertiq_io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/actuators/vertiq_io) - - -### Використання +### Usage {#vertiq_io_usage} ``` vertiq_io [arguments...] @@ -1739,13 +1524,11 @@ Source: [drivers/voxl2_io](https://github.com/PX4/PX4-Autopilot/tree/main/src/dr ### Опис -Цей модуль відповідає за виведення пінів. Для плат без окремого IO-чіпа -(наприклад, Pixracer), використовуються головні канали. На платах з IO-чіпом (наприклад, Pixhawk) використовуються AUX-канали, а -для основних використовується драйвер px4io. +This module is responsible for driving the output pins. For boards without a separate IO chip +(eg. Pixracer), it uses the main channels. On boards with an IO chip (eg. Pixhawk), it uses the AUX channels, and the +px4io driver is used for main ones. - - -### Використання +### Usage {#voxl2_io_usage} ``` voxl2_io [arguments...] @@ -1771,23 +1554,21 @@ Source: [drivers/actuators/voxl_esc](https://github.com/PX4/PX4-Autopilot/tree/m ### Опис -Цей модуль відповідає за кнопку безпеки... +This module is responsible for... ### Імплементація -За замовчуванням модуль працює в черзі роботи з зворотнім викликом за темою управління актуаторами uORB. +By default the module runs on a work queue with a callback on the uORB actuator_controls topic. ### Приклади -Зазвичай починається з: +It is typically started with: ``` todo ``` - - -### Використання +### Usage {#voxl_esc_usage} ``` voxl_esc [arguments...] @@ -1834,9 +1615,7 @@ voxl_esc [arguments...] Source: [drivers/power_monitor/voxlpm](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/voxlpm) - - -### Використання +### Usage {#voxlpm_usage} ``` voxlpm [arguments...] @@ -1866,9 +1645,7 @@ Source: [modules/zenoh](https://github.com/PX4/PX4-Autopilot/tree/main/src/modul Zenoh demo bridge - - -### Використання +### Usage {#zenoh_usage} ``` zenoh [arguments...] diff --git a/docs/uk/modules/modules_driver_airspeed_sensor.md b/docs/uk/modules/modules_driver_airspeed_sensor.md index b79118e323..b8a1c7a92d 100644 --- a/docs/uk/modules/modules_driver_airspeed_sensor.md +++ b/docs/uk/modules/modules_driver_airspeed_sensor.md @@ -13,9 +13,7 @@ TE підключається через I2C. or in default.px4board with adding the line: "CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033=y" It can be enabled with the "SENS_EN_ASP5033" parameter set to 1. - - -### Використання +### Usage {#asp5033_usage} ``` asp5033 [arguments...] @@ -39,9 +37,7 @@ asp5033 [arguments...] Source: [drivers/differential_pressure/auav](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/auav) - - -### Використання +### Usage {#auav_usage} ``` auav [arguments...] @@ -67,9 +63,7 @@ auav [arguments...] Source: [drivers/differential_pressure/ets](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ets) - - -### Використання +### Usage {#ets_airspeed_usage} ``` ets_airspeed [arguments...] @@ -93,9 +87,7 @@ ets_airspeed [arguments...] Source: [drivers/differential_pressure/ms4515](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4515) - - -### Використання +### Usage {#ms4515_usage} ``` ms4515 [arguments...] @@ -119,9 +111,7 @@ ms4515 [arguments...] Source: [drivers/differential_pressure/ms4525do](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4525do) - - -### Використання +### Usage {#ms4525do_usage} ``` ms4525do [arguments...] @@ -145,9 +135,7 @@ ms4525do [arguments...] Source: [drivers/differential_pressure/ms5525dso](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms5525dso) - - -### Використання +### Usage {#ms5525dso_usage} ``` ms5525dso [arguments...] @@ -171,9 +159,7 @@ ms5525dso [arguments...] Source: [drivers/differential_pressure/sdp3x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/sdp3x) - - -### Використання +### Usage {#sdp3x_usage} ``` sdp3x [arguments...] diff --git a/docs/uk/modules/modules_driver_baro.md b/docs/uk/modules/modules_driver_baro.md index ebb42a90ee..8d2a83f4f3 100644 --- a/docs/uk/modules/modules_driver_baro.md +++ b/docs/uk/modules/modules_driver_baro.md @@ -4,9 +4,7 @@ Source: [drivers/barometer/bmp280](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp280) - - -### Використання +### Usage {#bmp280_usage} ``` bmp280 [arguments...] @@ -42,9 +40,7 @@ bmp280 [arguments...] Source: [drivers/barometer/bmp388](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp388) - - -### Використання +### Usage {#bmp388_usage} ``` bmp388 [arguments...] @@ -72,9 +68,7 @@ bmp388 [arguments...] Source: [drivers/barometer/bmp581](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp581) - - -### Використання +### Usage {#bmp581_usage} ``` bmp581 [arguments...] @@ -102,9 +96,7 @@ bmp581 [arguments...] Source: [drivers/barometer/dps310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/dps310) - - -### Використання +### Usage {#dps310_usage} ``` dps310 [arguments...] @@ -140,9 +132,7 @@ dps310 [arguments...] Source: [drivers/barometer/invensense/icp101xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp101xx) - - -### Використання +### Usage {#icp101xx_usage} ``` icp101xx [arguments...] @@ -166,9 +156,7 @@ icp101xx [arguments...] Source: [drivers/barometer/invensense/icp201xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp201xx) - - -### Використання +### Usage {#icp201xx_usage} ``` icp201xx [arguments...] @@ -192,9 +180,7 @@ icp201xx [arguments...] Source: [drivers/barometer/lps22hb](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps22hb) - - -### Використання +### Usage {#lps22hb_usage} ``` lps22hb [arguments...] @@ -220,9 +206,7 @@ lps22hb [arguments...] Source: [drivers/barometer/lps25h](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps25h) - - -### Використання +### Usage {#lps25h_usage} ``` lps25h [arguments...] @@ -248,9 +232,7 @@ lps25h [arguments...] Source: [drivers/barometer/lps33hw](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps33hw) - - -### Використання +### Usage {#lps33hw_usage} ``` lps33hw [arguments...] @@ -279,9 +261,7 @@ lps33hw [arguments...] Source: [drivers/barometer/maiertek/mpc2520](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/maiertek/mpc2520) - - -### Використання +### Usage {#mpc2520_usage} ``` mpc2520 [arguments...] @@ -305,9 +285,7 @@ mpc2520 [arguments...] Source: [drivers/barometer/mpl3115a2](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/mpl3115a2) - - -### Використання +### Usage {#mpl3115a2_usage} ``` mpl3115a2 [arguments...] @@ -331,9 +309,7 @@ mpl3115a2 [arguments...] Source: [drivers/barometer/ms5611](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5611) - - -### Використання +### Usage {#ms5611_usage} ``` ms5611 [arguments...] @@ -369,9 +345,7 @@ ms5611 [arguments...] Source: [drivers/barometer/ms5837](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5837) - - -### Використання +### Usage {#ms5837_usage} ``` ms5837 [arguments...] @@ -393,9 +367,7 @@ ms5837 [arguments...] Source: [drivers/barometer/goertek/spa06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spa06) - - -### Використання +### Usage {#spa06_usage} ``` spa06 [arguments...] @@ -431,9 +403,7 @@ spa06 [arguments...] Source: [drivers/barometer/goertek/spl06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spl06) - - -### Використання +### Usage {#spl06_usage} ``` spl06 [arguments...] diff --git a/docs/uk/modules/modules_driver_camera.md b/docs/uk/modules/modules_driver_camera.md index bc558b51a6..b7afb329ba 100644 --- a/docs/uk/modules/modules_driver_camera.md +++ b/docs/uk/modules/modules_driver_camera.md @@ -34,9 +34,7 @@ The driver is configured using [Camera Trigger parameters](../advanced_config/pa [Setup/usage information](../camera/index.md). - - -### Використання +### Usage {#camera_trigger_usage} ``` camera_trigger [arguments...] diff --git a/docs/uk/modules/modules_driver_distance_sensor.md b/docs/uk/modules/modules_driver_distance_sensor.md index 830d0bd8c1..2901b4afc1 100644 --- a/docs/uk/modules/modules_driver_distance_sensor.md +++ b/docs/uk/modules/modules_driver_distance_sensor.md @@ -10,7 +10,7 @@ Source: [drivers/distance_sensor/broadcom/afbrs50](https://github.com/PX4/PX4-Au ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` afbrs50 start @@ -22,9 +22,7 @@ Stop driver afbrs50 stop ``` - - -### Використання +### Usage {#afbrs50_usage} ``` afbrs50 [arguments...] @@ -43,9 +41,7 @@ afbrs50 [arguments...] Source: [drivers/distance_sensor/gy_us42](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/gy_us42) - - -### Використання +### Usage {#gy_us42_usage} ``` gy_us42 [arguments...] @@ -71,15 +67,15 @@ Source: [drivers/distance_sensor/leddar_one](https://github.com/PX4/PX4-Autopilo ### Опис -Драйвер послідовної шини для LiDAR LeddarOne. +Serial bus driver for the LeddarOne LiDAR. -Більшість плат налаштовано на ввімкнення/запуск драйвера на вказаному UART за допомогою параметра SENS_LEDDAR1_CFG. +Most boards are configured to enable/start the driver on a specified UART using the SENS_LEDDAR1_CFG parameter. -Інформація про налаштування/використання: https://docs.px4.io/main/en/sensor/leddar_one.html +Setup/usage information: https://docs.px4.io/main/en/sensor/leddar_one.html ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` leddar_one start -d /dev/ttyS1 @@ -91,9 +87,7 @@ Stop driver leddar_one stop ``` - - -### Використання +### Usage {#leddar_one_usage} ``` leddar_one [arguments...] @@ -112,13 +106,11 @@ Source: [drivers/distance_sensor/lightware_laser_i2c](https://github.com/PX4/PX4 ### Опис -Драйвер шини I2C для LIDAR-далекомірів Lightware серії SFxx: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20. +I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20. -Інформація про налаштування/використання: https://docs.px4.io/main/en/sensor/sfxx_lidar.html +Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html - - -### Використання +### Usage {#lightware_laser_i2c_usage} ``` lightware_laser_i2c [arguments...] @@ -146,15 +138,15 @@ Source: [drivers/distance_sensor/lightware_laser_serial](https://github.com/PX4/ ### Опис -Драйвер послідовної шини для лазерних далекомірів LightWare SF02/F, SF10/a, SF10/b, SF10/c, SF11/c. +Serial bus driver for the LightWare SF02/F, SF10/a, SF10/b, SF10/c, SF11/c Laser rangefinders. -Більшість плат налаштовано на увімкнення/запуск драйвера на вказаному UART за допомогою параметра SENS_SF0X_CFG. +Most boards are configured to enable/start the driver on a specified UART using the SENS_SF0X_CFG parameter. -Інформація про налаштування/використання: https://docs.px4.io/main/en/sensor/sfxx_lidar.html +Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` lightware_laser_serial start -d /dev/ttyS1 @@ -166,9 +158,7 @@ Stop driver lightware_laser_serial stop ``` - - -### Використання +### Usage {#lightware_laser_serial_usage} ``` lightware_laser_serial [arguments...] @@ -187,11 +177,11 @@ Source: [drivers/distance_sensor/lightware_sf45_serial](https://github.com/PX4/P ### Опис -Драйвер послідовної шини для лазерного далекоміра Lightware SF45/b. +Serial bus driver for the Lightware SF45/b Laser rangefinder. ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` lightware_sf45_serial start -d /dev/ttyS1 @@ -203,9 +193,7 @@ Stop driver lightware_sf45_serial stop ``` - - -### Використання +### Usage {#lightware_sf45_serial_usage} ``` lightware_sf45_serial [arguments...] @@ -224,13 +212,11 @@ Source: [drivers/distance_sensor/ll40ls_pwm](https://github.com/PX4/PX4-Autopilo PWM driver for LidarLite rangefinders. -Датчик/драйвер має бути увімкнений за допомогою параметра SENS_EN_LL40LS. +The sensor/driver must be enabled using the parameter SENS_EN_LL40LS. -Інформація про налаштування/використання: https://docs.px4.io/main/en/sensor/lidar_lite.html +Setup/usage information: https://docs.px4.io/main/en/sensor/lidar_lite.html - - -### Використання +### Usage {#ll40ls_usage} ``` ll40ls [arguments...] @@ -248,9 +234,7 @@ ll40ls [arguments...] Source: [drivers/distance_sensor/mappydot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mappydot) - - -### Використання +### Usage {#mappydot_usage} ``` mappydot [arguments...] @@ -272,9 +256,7 @@ mappydot [arguments...] Source: [drivers/distance_sensor/mb12xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mb12xx) - - -### Використання +### Usage {#mb12xx_usage} ``` mb12xx [arguments...] @@ -302,19 +284,17 @@ Source: [drivers/distance_sensor/pga460](https://github.com/PX4/PX4-Autopilot/tr ### Опис -Драйвер ультразвукового далекоміра, який здійснює зв'язок з пристроєм і публікує відстань через uORB. +Ultrasonic range finder driver that handles the communication with the device and publishes the distance via uORB. ### Імплементація -Цей драйвер реалізовано як завдання NuttX. Ця реалізація була обрана через необхідність опитування на повідомлення -через UART, що не підтримується у work_queue. Цей драйвер безперервно вимірює дальність коли він -працює. На рівні драйверів реалізовано простий алгоритм виявлення хибних показань, що має на меті покращити -якість даних, що публікуються. Драйвер взагалі не публікуватиме дані, якщо вважатиме, що дані датчика -недійсними або нестабільними. +This driver is implemented as a NuttX task. This Implementation was chosen due to the need for polling on a message +via UART, which is not supported in the work_queue. This driver continuously takes range measurements while it is +running. A simple algorithm to detect false readings is implemented at the driver levelin an attemptto improve +the quality of data that is being published. The driver will not publish data at all if it deems the sensor data +to be invalid or unstable. - - -### Використання +### Usage {#pga460_usage} ``` pga460 [arguments...] @@ -333,9 +313,7 @@ pga460 [arguments...] Source: [drivers/distance_sensor/srf02](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/srf02) - - -### Використання +### Usage {#srf02_usage} ``` srf02 [arguments...] @@ -363,13 +341,11 @@ Source: [drivers/distance_sensor/srf05](https://github.com/PX4/PX4-Autopilot/tre ### Опис -Драйвер для далекомірів HY-SRF05 / HC-SR05 та HC-SR04. +Driver for HY-SRF05 / HC-SR05 and HC-SR04 rangefinders. -Датчик/драйвер потрібно увімкнути за допомогою параметра SENS_EN_HXSRX0X. +The sensor/driver must be enabled using the parameter SENS_EN_HXSRX0X. - - -### Використання +### Usage {#srf05_usage} ``` srf05 [arguments...] @@ -393,15 +369,13 @@ Source: [drivers/distance_sensor/teraranger](https://github.com/PX4/PX4-Autopilo ### Опис -Драйвер шини I2C для далекомірів TeraRanger. +I2C bus driver for TeraRanger rangefinders. -Датчик/драйвер має бути увімкнений за допомогою параметра SENS_EN_TRANGER. +The sensor/driver must be enabled using the parameter SENS_EN_TRANGER. -Інформація про налаштування/використання: https://docs.px4.io/main/en/sensor/rangefinders.html#teraranger-rangefinders +Setup/usage information: https://docs.px4.io/main/en/sensor/rangefinders.html#teraranger-rangefinders - - -### Використання +### Usage {#teraranger_usage} ``` teraranger [arguments...] @@ -427,9 +401,7 @@ teraranger [arguments...] Source: [drivers/distance_sensor/tf02pro](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/tf02pro) - - -### Використання +### Usage {#tf02pro_usage} ``` tf02pro [arguments...] @@ -457,15 +429,15 @@ Source: [drivers/distance_sensor/tfmini](https://github.com/PX4/PX4-Autopilot/tr ### Опис -Серійний драйвер шини для Benewake TFmini LiDAR. +Serial bus driver for the Benewake TFmini LiDAR. -Більшість плат налаштовано на ввімкнення/вимкнення драйвера на вказаному UART за допомогою параметра SENS_TFMINI_CFG. +Most boards are configured to enable/start the driver on a specified UART using the SENS_TFMINI_CFG parameter. -Інформація про налаштування/використання: https://docs.px4.io/main/en/sensor/tfmini.html +Setup/usage information: https://docs.px4.io/main/en/sensor/tfmini.html ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` tfmini start -d /dev/ttyS1 @@ -477,9 +449,7 @@ Stop driver tfmini stop ``` - - -### Використання +### Usage {#tfmini_usage} ``` tfmini [arguments...] @@ -502,13 +472,13 @@ Source: [drivers/distance_sensor/ulanding_radar](https://github.com/PX4/PX4-Auto ### Опис -Серійний драйвер шини для радара Aerotenna uLanding. +Serial bus driver for the Aerotenna uLanding radar. Setup/usage information: https://docs.px4.io/main/en/sensor/ulanding_radar.html ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` ulanding_radar start -d /dev/ttyS1 @@ -520,9 +490,7 @@ Stop driver ulanding_radar stop ``` - - -### Використання +### Usage {#ulanding_radar_usage} ``` ulanding_radar [arguments...] @@ -540,9 +508,7 @@ ulanding_radar [arguments...] Source: [drivers/distance_sensor/vl53l0x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l0x) - - -### Використання +### Usage {#vl53l0x_usage} ``` vl53l0x [arguments...] @@ -568,9 +534,7 @@ vl53l0x [arguments...] Source: [drivers/distance_sensor/vl53l1x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l1x) - - -### Використання +### Usage {#vl53l1x_usage} ``` vl53l1x [arguments...] diff --git a/docs/uk/modules/modules_driver_imu.md b/docs/uk/modules/modules_driver_imu.md index e3a738693a..ed5da8d8ea 100644 --- a/docs/uk/modules/modules_driver_imu.md +++ b/docs/uk/modules/modules_driver_imu.md @@ -4,9 +4,7 @@ Source: [drivers/imu/analog_devices/adis16448](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16448) - - -### Використання +### Usage {#adis16448_usage} ``` adis16448 [arguments...] @@ -32,9 +30,7 @@ adis16448 [arguments...] Source: [drivers/imu/analog_devices/adis16470](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16470) - - -### Використання +### Usage {#adis16470_usage} ``` adis16470 [arguments...] @@ -60,9 +56,7 @@ adis16470 [arguments...] Source: [drivers/imu/analog_devices/adis16477](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16477) - - -### Використання +### Usage {#adis16477_usage} ``` adis16477 [arguments...] @@ -88,9 +82,7 @@ adis16477 [arguments...] Source: [drivers/imu/analog_devices/adis16497](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16497) - - -### Використання +### Usage {#adis16497_usage} ``` adis16497 [arguments...] @@ -116,9 +108,7 @@ adis16497 [arguments...] Source: [drivers/imu/analog_devices/adis16507](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16507) - - -### Використання +### Usage {#adis16507_usage} ``` adis16507 [arguments...] @@ -144,9 +134,7 @@ adis16507 [arguments...] Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) - - -### Використання +### Usage {#bmi055_usage} ``` bmi055 [arguments...] @@ -174,9 +162,7 @@ bmi055 [arguments...] Source: [drivers/imu/bosch/bmi085](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi085) - - -### Використання +### Usage {#bmi085_usage} ``` bmi085 [arguments...] @@ -204,9 +190,7 @@ bmi085 [arguments...] Source: [drivers/imu/bosch/bmi088](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088) - - -### Використання +### Usage {#bmi088_usage} ``` bmi088 [arguments...] @@ -234,9 +218,7 @@ bmi088 [arguments...] Source: [drivers/imu/bosch/bmi088_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088_i2c) - - -### Використання +### Usage {#bmi088_i2c_usage} ``` bmi088_i2c [arguments...] @@ -264,9 +246,7 @@ bmi088_i2c [arguments...] Source: [drivers/imu/bosch/bmi270](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi270) - - -### Використання +### Usage {#bmi270_usage} ``` bmi270 [arguments...] @@ -292,9 +272,7 @@ bmi270 [arguments...] Source: [drivers/imu/nxp/fxas21002c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxas21002c) - - -### Використання +### Usage {#fxas21002c_usage} ``` fxas21002c [arguments...] @@ -328,9 +306,7 @@ fxas21002c [arguments...] Source: [drivers/imu/nxp/fxos8701cq](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxos8701cq) - - -### Використання +### Usage {#fxos8701cq_usage} ``` fxos8701cq [arguments...] @@ -364,9 +340,7 @@ fxos8701cq [arguments...] Source: [drivers/imu/invensense/iam20680hp](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iam20680hp) - - -### Використання +### Usage {#iam20680hp_usage} ``` iam20680hp [arguments...] @@ -392,9 +366,7 @@ iam20680hp [arguments...] Source: [drivers/imu/invensense/icm20602](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20602) - - -### Використання +### Usage {#icm20602_usage} ``` icm20602 [arguments...] @@ -420,9 +392,7 @@ icm20602 [arguments...] Source: [drivers/imu/invensense/icm20608g](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20608g) - - -### Використання +### Usage {#icm20608g_usage} ``` icm20608g [arguments...] @@ -448,9 +418,7 @@ icm20608g [arguments...] Source: [drivers/imu/invensense/icm20649](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20649) - - -### Використання +### Usage {#icm20649_usage} ``` icm20649 [arguments...] @@ -476,9 +444,7 @@ icm20649 [arguments...] Source: [drivers/imu/invensense/icm20689](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20689) - - -### Використання +### Usage {#icm20689_usage} ``` icm20689 [arguments...] @@ -504,9 +470,7 @@ icm20689 [arguments...] Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - - -### Використання +### Usage {#icm20948_usage} ``` icm20948 [arguments...] @@ -533,9 +497,7 @@ icm20948 [arguments...] Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - - -### Використання +### Usage {#icm20948_i2c_passthrough_usage} ``` icm20948_i2c_passthrough [arguments...] @@ -559,9 +521,7 @@ icm20948_i2c_passthrough [arguments...] Source: [drivers/imu/invensense/icm40609d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm40609d) - - -### Використання +### Usage {#icm40609d_usage} ``` icm40609d [arguments...] @@ -587,9 +547,7 @@ icm40609d [arguments...] Source: [drivers/imu/invensense/icm42605](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42605) - - -### Використання +### Usage {#icm42605_usage} ``` icm42605 [arguments...] @@ -615,9 +573,7 @@ icm42605 [arguments...] Source: [drivers/imu/invensense/icm42670p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42670p) - - -### Використання +### Usage {#icm42670p_usage} ``` icm42670p [arguments...] @@ -643,9 +599,7 @@ icm42670p [arguments...] Source: [drivers/imu/invensense/icm42688p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42688p) - - -### Використання +### Usage {#icm42688p_usage} ``` icm42688p [arguments...] @@ -674,9 +628,7 @@ icm42688p [arguments...] Source: [drivers/imu/invensense/icm45686](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm45686) - - -### Використання +### Usage {#icm45686_usage} ``` icm45686 [arguments...] @@ -704,9 +656,7 @@ icm45686 [arguments...] Source: [drivers/imu/invensense/iim42652](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42652) - - -### Використання +### Usage {#iim42652_usage} ``` iim42652 [arguments...] @@ -734,9 +684,7 @@ iim42652 [arguments...] Source: [drivers/imu/invensense/iim42653](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42653) - - -### Використання +### Usage {#iim42653_usage} ``` iim42653 [arguments...] @@ -764,9 +712,7 @@ iim42653 [arguments...] Source: [drivers/imu/st/l3gd20](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/l3gd20) - - -### Використання +### Usage {#l3gd20_usage} ``` l3gd20 [arguments...] @@ -796,9 +742,7 @@ l3gd20 [arguments...] Source: [drivers/imu/st/lsm303d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm303d) - - -### Використання +### Usage {#lsm303d_usage} ``` lsm303d [arguments...] @@ -824,9 +768,7 @@ lsm303d [arguments...] Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) - - -### Використання +### Usage {#lsm9ds1_usage} ``` lsm9ds1 [arguments...] @@ -852,9 +794,7 @@ lsm9ds1 [arguments...] Source: [drivers/imu/invensense/mpu6000](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6000) - - -### Використання +### Usage {#mpu6000_usage} ``` mpu6000 [arguments...] @@ -880,9 +820,7 @@ mpu6000 [arguments...] Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - - -### Використання +### Usage {#mpu9250_usage} ``` mpu9250 [arguments...] @@ -909,9 +847,7 @@ mpu9250 [arguments...] Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - - -### Використання +### Usage {#mpu9250_i2c_usage} ``` mpu9250_i2c [arguments...] @@ -937,9 +873,7 @@ mpu9250_i2c [arguments...] Source: [drivers/imu/invensense/mpu6500](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6500) - - -### Використання +### Usage {#mpu9520_usage} ``` mpu9520 [arguments...] @@ -965,9 +899,7 @@ mpu9520 [arguments...] Source: [drivers/imu/murata/sch16t](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/murata/sch16t) - - -### Використання +### Usage {#sch16t_usage} ``` sch16t [arguments...] diff --git a/docs/uk/modules/modules_driver_ins.md b/docs/uk/modules/modules_driver_ins.md index 2ad7c55bb9..0ada484050 100644 --- a/docs/uk/modules/modules_driver_ins.md +++ b/docs/uk/modules/modules_driver_ins.md @@ -14,7 +14,7 @@ Source: [drivers/ins/vectornav](https://github.com/PX4/PX4-Autopilot/tree/main/s ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` vectornav start -d /dev/ttyS1 @@ -26,9 +26,7 @@ Stop driver vectornav stop ``` - - -### Використання +### Usage {#vectornav_usage} ``` vectornav [arguments...] diff --git a/docs/uk/modules/modules_driver_magnetometer.md b/docs/uk/modules/modules_driver_magnetometer.md index cb3b36031e..8d527cfa4e 100644 --- a/docs/uk/modules/modules_driver_magnetometer.md +++ b/docs/uk/modules/modules_driver_magnetometer.md @@ -4,9 +4,7 @@ Source: [drivers/magnetometer/akm/ak09916](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak09916) - - -### Використання +### Usage {#ak09916_usage} ``` ak09916 [arguments...] @@ -32,9 +30,7 @@ ak09916 [arguments...] Source: [drivers/magnetometer/akm/ak8963](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak8963) - - -### Використання +### Usage {#ak8963_usage} ``` ak8963 [arguments...] @@ -60,9 +56,7 @@ ak8963 [arguments...] Source: [drivers/magnetometer/bosch/bmm150](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm150) - - -### Використання +### Usage {#bmm150_usage} ``` bmm150 [arguments...] @@ -88,9 +82,7 @@ bmm150 [arguments...] Source: [drivers/magnetometer/bosch/bmm350](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm350) - - -### Використання +### Usage {#bmm350_usage} ``` bmm350 [arguments...] @@ -116,9 +108,7 @@ bmm350 [arguments...] Source: [drivers/magnetometer/hmc5883](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/hmc5883) - - -### Використання +### Usage {#hmc5883_usage} ``` hmc5883 [arguments...] @@ -147,9 +137,7 @@ hmc5883 [arguments...] Source: [drivers/magnetometer/st/iis2mdc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/st/iis2mdc) - - -### Використання +### Usage {#iis2mdc_usage} ``` iis2mdc [arguments...] @@ -173,9 +161,7 @@ iis2mdc [arguments...] Source: [drivers/magnetometer/isentek/ist8308](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8308) - - -### Використання +### Usage {#ist8308_usage} ``` ist8308 [arguments...] @@ -201,9 +187,7 @@ ist8308 [arguments...] Source: [drivers/magnetometer/isentek/ist8310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8310) - - -### Використання +### Usage {#ist8310_usage} ``` ist8310 [arguments...] @@ -229,9 +213,7 @@ ist8310 [arguments...] Source: [drivers/magnetometer/lis3mdl](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lis3mdl) - - -### Використання +### Usage {#lis3mdl_usage} ``` lis3mdl [arguments...] @@ -263,9 +245,7 @@ lis3mdl [arguments...] Source: [drivers/magnetometer/lsm9ds1_mag](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm9ds1_mag) - - -### Використання +### Usage {#lsm9ds1_mag_usage} ``` lsm9ds1_mag [arguments...] @@ -291,9 +271,7 @@ lsm9ds1_mag [arguments...] Source: [drivers/magnetometer/memsic/mmc5983ma](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/memsic/mmc5983ma) - - -### Використання +### Usage {#mmc5983ma_usage} ``` mmc5983ma [arguments...] @@ -325,9 +303,7 @@ mmc5983ma [arguments...] Source: [drivers/magnetometer/qmc5883l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/qmc5883l) - - -### Використання +### Usage {#qmc5883l_usage} ``` qmc5883l [arguments...] @@ -353,9 +329,7 @@ qmc5883l [arguments...] Source: [drivers/magnetometer/rm3100](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/rm3100) - - -### Використання +### Usage {#rm3100_usage} ``` rm3100 [arguments...] @@ -383,9 +357,7 @@ rm3100 [arguments...] Source: [drivers/magnetometer/vtrantech/vcm1193l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/vtrantech/vcm1193l) - - -### Використання +### Usage {#vcm1193l_usage} ``` vcm1193l [arguments...] diff --git a/docs/uk/modules/modules_driver_optical_flow.md b/docs/uk/modules/modules_driver_optical_flow.md index 65eee76928..70a182d3d1 100644 --- a/docs/uk/modules/modules_driver_optical_flow.md +++ b/docs/uk/modules/modules_driver_optical_flow.md @@ -14,7 +14,7 @@ Source: [drivers/optical_flow/thoneflow](https://github.com/PX4/PX4-Autopilot/tr ### Приклади -Спроба запустити драйвер на вказаному послідовному пристрої. +Attempt to start driver on a specified serial device. ``` thoneflow start -d /dev/ttyS1 @@ -26,9 +26,7 @@ Stop driver thoneflow stop ``` - - -### Використання +### Usage {#thoneflow_usage} ``` thoneflow [arguments...] diff --git a/docs/uk/modules/modules_driver_radio_control.md b/docs/uk/modules/modules_driver_radio_control.md new file mode 100644 index 0000000000..473c70c11f --- /dev/null +++ b/docs/uk/modules/modules_driver_radio_control.md @@ -0,0 +1,122 @@ +# Modules Reference: Radio Control (Driver) + +## crsf_rc + +Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) + +### Опис + +This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data + +### Usage {#crsf_rc_usage} + +``` +crsf_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## dsm_rc + +Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) + +### Опис + +This module does Spektrum DSM RC input parsing. + +### Usage {#dsm_rc_usage} + +``` +dsm_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## ghst_rc + +Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) + +### Опис + +This module does Ghost (GHST) RC input parsing. + +### Usage {#ghst_rc_usage} + +``` +ghst_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## rc_input + +Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) + +### Опис + +This module does the RC input parsing and auto-selecting the method. Supported methods are: + +- PPM +- SBUS +- DSM +- SUMD +- ST24 +- TBS Crossfire (CRSF) + +### Usage {#rc_input_usage} + +``` +rc_input [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## sbus_rc + +Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) + +### Опис + +This module does SBUS RC input parsing. + +### Usage {#sbus_rc_usage} + +``` +sbus_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` diff --git a/docs/uk/modules/modules_driver_rpm_sensor.md b/docs/uk/modules/modules_driver_rpm_sensor.md index f014eb0c20..b4d7b95243 100644 --- a/docs/uk/modules/modules_driver_rpm_sensor.md +++ b/docs/uk/modules/modules_driver_rpm_sensor.md @@ -4,9 +4,7 @@ Source: [drivers/rpm/pcf8583](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm/pcf8583) - - -### Використання +### Usage {#pcf8583_usage} ``` pcf8583 [arguments...] diff --git a/docs/uk/modules/modules_driver_transponder.md b/docs/uk/modules/modules_driver_transponder.md index 931cd83cf6..783fb4dfd3 100644 --- a/docs/uk/modules/modules_driver_transponder.md +++ b/docs/uk/modules/modules_driver_transponder.md @@ -24,9 +24,7 @@ Set the Squawk Code $ sagetech_mxs squawk 1200 ``` - - -### Використання +### Usage {#sagetech_mxs_usage} ``` sagetech_mxs [arguments...] diff --git a/docs/uk/modules/modules_estimator.md b/docs/uk/modules/modules_estimator.md index 555d96202b..af7d898ee6 100644 --- a/docs/uk/modules/modules_estimator.md +++ b/docs/uk/modules/modules_estimator.md @@ -8,9 +8,7 @@ Source: [modules/attitude_estimator_q](https://github.com/PX4/PX4-Autopilot/tree Оцінювач висоти q. - - -### Використання +### Usage {#AttitudeEstimatorQ_usage} ``` AttitudeEstimatorQ [arguments...] @@ -34,9 +32,7 @@ Source: [modules/airspeed_selector](https://github.com/PX4/PX4-Autopilot/tree/ma оцінки масштабного коефіцієнта від IAS до CAS, вона запускає кілька оцінювачів вітру а також публікує їх. - - -### Використання +### Usage {#airspeed_estimator_usage} ``` airspeed_estimator [arguments...] @@ -61,9 +57,7 @@ The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.p 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. - - -### Використання +### Usage {#ekf2_usage} ``` ekf2 [arguments...] @@ -88,9 +82,7 @@ Source: [modules/local_position_estimator](https://github.com/PX4/PX4-Autopilot/ Оцінювач відношення та позиції за допомогою розширеного фільтра Калмана. - - -### Використання +### Usage {#local_position_estimator_usage} ``` local_position_estimator [arguments...] @@ -108,9 +100,7 @@ Source: [modules/mc_hover_thrust_estimator](https://github.com/PX4/PX4-Autopilot ### Опис - - -### Використання +### Usage {#mc_hover_thrust_estimator_usage} ``` mc_hover_thrust_estimator [arguments...] diff --git a/docs/uk/modules/modules_simulation.md b/docs/uk/modules/modules_simulation.md index 39a108a70a..990145fcb6 100644 --- a/docs/uk/modules/modules_simulation.md +++ b/docs/uk/modules/modules_simulation.md @@ -16,9 +16,7 @@ Source: [modules/simulation/simulator_sih](https://github.com/PX4/PX4-Autopilot/ Симулятор реалізує рівняння руху за допомогою матричної алгебри.Використовується кватерніонне представлення для орієнтації.Для інтегрування використовується пряма схема Ейлера.Більшість змінних оголошуються глобальними в файлі .hpp, щоб уникнути переповнення стеку. - - -### Використання +### Usage {#simulator_sih_usage} ``` simulator_sih [arguments...] diff --git a/docs/uk/modules/modules_system.md b/docs/uk/modules/modules_system.md index 723a9a246c..43c883ed66 100644 --- a/docs/uk/modules/modules_system.md +++ b/docs/uk/modules/modules_system.md @@ -6,9 +6,7 @@ Source: [modules/simulation/battery_simulator](https://github.com/PX4/PX4-Autopi ### Опис - - -### Використання +### Usage {#battery_simulator_usage} ``` battery_simulator [arguments...] @@ -26,17 +24,15 @@ Source: [modules/battery_status](https://github.com/PX4/PX4-Autopilot/tree/main/ ### Опис -Надана функціональність включає в себе: +The provided functionality includes: - Read the output from the ADC driver (via ioctl interface) and publish `battery_status`. ### Імплементація -Він запускається у власній темі і проводить опитування на поточну обрану тему гіроскопа. +It runs in its own thread and polls on the currently selected gyro topic. - - -### Використання +### Usage {#battery_status_usage} ``` battery_status [arguments...] @@ -74,9 +70,7 @@ It discards topics from the `camera_trigger` module if camera capture is enabled For the topics that are not discarded it creates a `CameraCapture` topic with the timestamp information from the `CameraTrigger` and position information from the vehicle. - - -### Використання +### Usage {#camera_feedback_usage} ``` camera_feedback [arguments...] @@ -94,14 +88,12 @@ Source: [drivers/cdcacm_autostart](https://github.com/PX4/PX4-Autopilot/tree/mai ### Опис -Цей модуль прослуховує USB і автоматично налаштовує протокол в залежності від отриманих байтів. -Підтримувані протоколи: MAVLink, nsh та ublox послідовний прохід. Якщо параметр SYS_USB_AUTO=2 -модуль буде намагатися запустити mavlink лише тоді, коли буде виявлено USB VBUS. В іншому випадку він буде обертатися -і продовжувати перевіряти VBUS та запускати mavlink, як тільки він виявиться. +This module listens on USB and auto-configures the protocol depending on the bytes received. +The supported protocols are: MAVLink, nsh, and ublox serial passthrough. If the parameter SYS_USB_AUTO=2 +the module will only try to start mavlink as long as the USB VBUS is detected. Otherwise it will spin +and continue to check for VBUS and start mavlink once it is detected. - - -### Використання +### Usage {#cdcacm_autostart_usage} ``` cdcacm_autostart [arguments...] @@ -119,11 +111,9 @@ Source: [modules/commander](https://github.com/PX4/PX4-Autopilot/tree/main/src/m ### Опис -Модуль командира містить машину станів для перемикання режимів та аварійної поведінки. +The commander module contains the state machine for mode switching and failsafe behavior. - - -### Використання +### Usage {#commander_usage} ``` commander [arguments...] @@ -177,22 +167,20 @@ Source: [modules/dataman](https://github.com/PX4/PX4-Autopilot/tree/main/src/mod ### Опис -Модуль для забезпечення постійного сховища для решти системи у вигляді простої бази даних через C API. +Module to provide persistent storage for the rest of the system in form of a simple database through a C API. Multiple backends are supported depending on the board: -- файл (наприклад, на SD-карті) -- Оперативна пам'ять (очевидно, що вона не є постійною) +- a file (eg. on the SD card) +- RAM (this is obviously not persistent) -Використовується для зберігання структурованих даних різних типів: маршрутні точки місії, стан місії та полігони геозони. -Кожен тип має певний тип і фіксовану максимальну кількість елементів зберігання, щоб забезпечити швидкий випадковий доступ. +It is used to store structured data of different types: mission waypoints, mission state and geofence polygons. +Each type has a specific type and a fixed maximum amount of storage items, so that fast random access is possible. ### Імплементація -Читання і запис одного елемента завжди атомарні. +Reading and writing a single item is always atomic. - - -### Використання +### Usage {#dataman_usage} ``` dataman [arguments...] @@ -216,20 +204,18 @@ Source: [systemcmds/dmesg](https://github.com/PX4/PX4-Autopilot/tree/main/src/sy ### Опис -Інструмент командного рядка для показу повідомлень консолі завантаження. -Зауважте, що вивід з робочих черг NuttX та syslog не перехоплюється. +Command-line tool to show bootup console messages. +Note that output from NuttX's work queues and syslog are not captured. ### Приклади -Продовжує друкувати всі повідомлення у фоновому режимі: +Keep printing all messages in the background: ``` dmesg -f & ``` - - -### Використання +### Usage {#dmesg_usage} ``` dmesg [arguments...] @@ -243,11 +229,9 @@ Source: [modules/esc_battery](https://github.com/PX4/PX4-Autopilot/tree/main/src ### Опис -Це реалізує використання інформації зі статусу ESC і публікує її як стан батареї. +This implements using information from the ESC status and publish it as battery status. - - -### Використання +### Usage {#esc_battery_usage} ``` esc_battery [arguments...] @@ -265,11 +249,9 @@ Source: [modules/gyro_calibration](https://github.com/PX4/PX4-Autopilot/tree/mai ### Опис -Просте онлайн-калібрування гіроскопа. +Simple online gyroscope calibration. - - -### Використання +### Usage {#gyro_calibration_usage} ``` gyro_calibration [arguments...] @@ -287,9 +269,7 @@ Source: [modules/gyro_fft](https://github.com/PX4/PX4-Autopilot/tree/main/src/mo ### Опис - - -### Використання +### Usage {#gyro_fft_usage} ``` gyro_fft [arguments...] @@ -307,13 +287,11 @@ Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/driv ### Опис -Фоновий процес, що періодично запускається в робочій черзі LP для регулювання температури IMU на заданому рівні. +Background process running periodically on the LP work queue to regulate IMU temperature at a setpoint. -Це завдання можна запустити під час завантаження зі скриптів запуску, встановивши SENS_EN_THERMAL, або через CLI. +This task can be started at boot from the startup scripts by setting SENS_EN_THERMAL or via CLI. - - -### Використання +### Usage {#heater_usage} ``` heater [arguments...] @@ -331,17 +309,16 @@ Source: [systemcmds/i2c_launcher](https://github.com/PX4/PX4-Autopilot/tree/main ### Опис -Демон, який запускає драйвери на основі виявлених пристроїв I2C. +Daemon that starts drivers based on found I2C devices. - - -### Використання +### Usage {#i2c_launcher_usage} ``` i2c_launcher [arguments...] Commands: start -b Bus number + -t battery index for calibration values (1 or 3) stop @@ -401,9 +378,7 @@ The architecture is as shown below: - - -### Використання +### Usage {#internal_combustion_engine_control_usage} ``` internal_combustion_engine_control [arguments...] @@ -427,26 +402,25 @@ states, such as commanded thrust, arming state and vehicle motion. ### Імплементація -Кожен тип реалізовано у власному класі зі спільним базовим класом. Базовий клас підтримує стан (landed, -maybe_landed, ground_contact). Кожен можливий стан реалізується в похідних класах. Гістерезис та фіксований -пріоритет кожного внутрішнього стану визначає фактичний стан land_detector. +Every type is implemented in its own class with a common base class. The base class maintains a state (landed, +maybe_landed, ground_contact). Each possible state is implemented in the derived classes. A hysteresis and a fixed +priority of each internal state determines the actual land_detector state. -#### Мультикоптер Land Detector +#### Multicopter Land Detector **ground_contact**: thrust setpoint and velocity in z-direction must be below a defined threshold for time -GROUND_CONTACT_TRIGGER_TIME_US. При виявленні контакту з землею регулятор положення вимикає задане значення тяги -у тілі x та y. +GROUND_CONTACT_TRIGGER_TIME_US. When ground_contact is detected, the position controller turns off the thrust setpoint +in body x and y. **maybe_landed**: it requires ground_contact together with a tighter thrust setpoint threshold and no velocity in the -horizontal direction. Час спрацьовування визначається параметром MAYBE_LAND_TRIGGER_TIME. Коли виявляється maybe_landed, контролер положення встановлює задане значення тяги на нуль. +horizontal direction. The trigger time is defined by MAYBE_LAND_TRIGGER_TIME. When maybe_landed is detected, the +position controller sets the thrust setpoint to zero. **landed**: it requires maybe_landed to be true for time LAND_DETECTOR_TRIGGER_TIME_US. -Модуль періодично запускається у черзі робіт HP. +The module runs periodically on the HP work queue. - - -### Використання +### Usage {#land_detector_usage} ``` land_detector [arguments...] @@ -468,12 +442,10 @@ Source: [modules/load_mon](https://github.com/PX4/PX4-Autopilot/tree/main/src/mo Background process running periodically on the low priority work queue to calculate the CPU load and RAM usage and publish the `cpuload` topic. -У NuttX він також перевіряє використання стеку кожним процесом, і якщо воно падає нижче 300 байт, виводиться попередження, -яке також буде показано у файлі логу. +On NuttX it also checks the stack usage of each process and if it falls below 300 bytes, a warning is output, +which will also appear in the log file. - - -### Використання +### Usage {#load_mon_usage} ``` load_mon [arguments...] @@ -492,46 +464,47 @@ Source: [modules/logger](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu ### Опис System logger which logs a configurable set of uORB topics and system printf messages -(`PX4_WARN` and `PX4_ERR`) to ULog files. Вони можуть бути використані для оцінки продуктивності системи та польоту, -налаштування, відтворення та аналізу збоїв. +(`PX4_WARN` and `PX4_ERR`) to ULog files. These can be used for system and flight performance evaluation, +tuning, replay and crash analysis. -Він підтримує 2 бекенди: +It supports 2 backends: -- Файли: запис файлів ULog до файлової системи (SD-карта) -- MAVLink: передача даних ULog через MAVLink клієнту (клієнт повинен це підтримувати) +- Files: write ULog files to the file system (SD card) +- MAVLink: stream ULog data via MAVLink to a client (the client must support this) -Обидва бекенди можуть бути активовані та використовуватися одночасно. +Both backends can be enabled and used at the same time. -Файловий бекенд підтримує 2 типи логів: повний (звичайний лог) і журнал місій. Журнал місії - це скорочений файл ulog, який можна використовувати, наприклад, для географічних міток або управління транспортним засобом. Його можна увімкнути та налаштувати за допомогою параметра SDLOG_MISSION. -Звичайний журнал завжди є підмножиною журналу місій. +The file backend supports 2 types of log files: full (the normal log) and a mission +log. The mission log is a reduced ulog file and can be used for example for geotagging or +vehicle management. It can be enabled and configured via SDLOG_MISSION parameter. +The normal log is always a superset of the mission log. ### Імплементація -Реалізація використовує два потоки: +The implementation uses two threads: - The main thread, running at a fixed rate (or polling on a topic if started with -p) and checking for data updates -- Потік запису, що записує дані у файл +- The writer thread, writing data to the file -Між ними знаходиться буфер запису з конфігурованим розміром (і ще один буфер фіксованого розміру для журналу місій). Він повинен бути великим, щоб уникнути втрати даних. +In between there is a write buffer with configurable size (and another fixed-size buffer for +the mission log). It should be large to avoid dropouts. ### Приклади -Типове використання для початку ведення журналу негайно: +Typical usage to start logging immediately: ``` logger start -e -t ``` -Або якщо вже працює: +Or if already running: ``` logger on ``` - - -### Використання +### Usage {#logger_usage} ``` logger [arguments...] @@ -572,11 +545,9 @@ Source: [modules/mag_bias_estimator](https://github.com/PX4/PX4-Autopilot/tree/m ### Опис -Онлайн-оцінювач похибки магнітометра. +Online magnetometer bias estimator. - - -### Використання +### Usage {#mag_bias_estimator_usage} ``` mag_bias_estimator [arguments...] @@ -594,11 +565,9 @@ Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/ ### Опис -Модуль споживає вхідні дані вручним керуванням, публікуючи одну установку керування вручну. +Module consuming manual_control_inputs publishing one manual_control_setpoint. - - -### Використання +### Usage {#manual_control_usage} ``` manual_control [arguments...] @@ -617,9 +586,9 @@ Source: [systemcmds/netman](https://github.com/PX4/PX4-Autopilot/tree/main/src/s ### Опис Network configuration manager saves the network settings in non-volatile -memory. On boot the `update` option will be run. Якщо конфігурація мережі -не існує. Значення за замовчуванням буде збережено в неплавучій пам'яті та -система перезавантажена. +memory. On boot the `update` option will be run. If a network configuration +does not exist. The default setting will be saved in non-volatile and the +system rebooted. #### update @@ -631,8 +600,8 @@ deletes the file and reboots the system. #### save The `save` option will save settings from non-volatile memory to a file named -`net.cfg` on the SD Card filesystem for editing. Використовуйте це, щоб відредагувати налаштування. -Збереження не негайно застосовує мережеві налаштування; користувач повинен перезавантажити стек польоту. +`net.cfg` on the SD Card filesystem for editing. Use this to edit the settings. +Save does not immediately apply the network settings; the user must reboot the flight stack. By contrast, the `update` command is run by the start-up script, commits the settings to non-volatile memory, and reboots the flight controller (which will then use the new settings). @@ -643,12 +612,10 @@ The `show` option will display the network settings in `net.cfg` to the console. ### Приклади $ netman save # Save the parameters to the SD card. -$ netman show # відображення поточних налаштувань. -$ netman update -i eth0 # зробити оновлення +$ netman show # display current settings. +$ netman update -i eth0 # do an update - - -### Використання +### Usage {#netman_usage} ``` netman [arguments...] @@ -669,11 +636,9 @@ Source: [drivers/pwm_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/d ### Опис -Вимірює вхід PWM на AUX5 (або MAIN5) через таймер захоплення ISR та публікує через повідомлення uORB 'pwm_input'. +Measures the PWM input on AUX5 (or MAIN5) via a timer capture ISR and publishes via the uORB 'pwm_input\` message. - - -### Використання +### Usage {#pwm_input_usage} ``` pwm_input [arguments...] @@ -697,11 +662,9 @@ and then publish as `rc_channels` and `manual_control_input`. ### Імплементація -Щоб зменшити затримку управління, модуль запланований на опублікування введення_управління. +To reduce control latency, the module is scheduled on input_rc publications. - - -### Використання +### Usage {#rc_update_usage} ``` rc_update [arguments...] @@ -719,7 +682,7 @@ Source: [modules/replay](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu ### Опис -Цей модуль використовується для відтворення файлів ULog. +This module is used to replay ULog files. There are 2 environment variables used for configuration: `replay`, which must be set to an ULog file name - it's the log file to be replayed. The second is the mode, specified via `replay_mode`: @@ -729,16 +692,14 @@ the log file to be replayed. The second is the mode, specified via `replay_mode` - Generic otherwise: this can be used to replay any module(s), but the replay will be done with the same speed as the log was recorded. -Модуль зазвичай використовується разом з правилами видавця uORB, щоб вказати, які повідомлення потрібно відтворити. -Модуль відтворення просто опублікує всі повідомлення, які знаходяться в журналі. Це також застосовує параметри з -журналу. +The module is typically used together with uORB publisher rules, to specify which messages should be replayed. +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) page. - - -### Використання +### Usage {#replay_usage} ``` replay [arguments...] @@ -760,14 +721,12 @@ Source: [modules/events](https://github.com/PX4/PX4-Autopilot/tree/main/src/modu ### Опис -Фоновий процес, що періодично виконується в черзі завдань LP для виконання рутинних завдань. -Зараз він відповідає лише за сигнал тривоги на втрату RC. +Background process running periodically on the LP work queue to perform housekeeping tasks. +It is currently only responsible for tone alarm on RC Loss. -Завдання можна почати через CLI або теми uORB (vehicle_command з MAVLink тощо). +The tasks can be started via CLI or uORB topics (vehicle_command from MAVLink, etc.). - - -### Використання +### Usage {#send_event_usage} ``` send_event [arguments...] @@ -787,9 +746,7 @@ Source: [modules/simulation/sensor_agp_sim](https://github.com/PX4/PX4-Autopilot Module to simulate auxiliary global position measurements with optional failure modes for SIH simulation. - - -### Використання +### Usage {#sensor_agp_sim_usage} ``` sensor_agp_sim [arguments...] @@ -807,9 +764,7 @@ Source: [modules/simulation/sensor_airspeed_sim](https://github.com/PX4/PX4-Auto ### Опис - - -### Використання +### Usage {#sensor_arispeed_sim_usage} ``` sensor_arispeed_sim [arguments...] @@ -827,9 +782,7 @@ Source: [modules/simulation/sensor_baro_sim](https://github.com/PX4/PX4-Autopilo ### Опис - - -### Використання +### Usage {#sensor_baro_sim_usage} ``` sensor_baro_sim [arguments...] @@ -847,9 +800,7 @@ Source: [modules/simulation/sensor_gps_sim](https://github.com/PX4/PX4-Autopilot ### Опис - - -### Використання +### Usage {#sensor_gps_sim_usage} ``` sensor_gps_sim [arguments...] @@ -867,9 +818,7 @@ Source: [modules/simulation/sensor_mag_sim](https://github.com/PX4/PX4-Autopilot ### Опис - - -### Використання +### Usage {#sensor_mag_sim_usage} ``` sensor_mag_sim [arguments...] @@ -887,26 +836,25 @@ Source: [modules/sensors](https://github.com/PX4/PX4-Autopilot/tree/main/src/mod ### Опис -Модуль сенсорів є центральним у всій системі. Він отримує вихід низького рівня від драйверів, перетворює його в більш придатну форму і публікує його для решти системи. +The sensors module is central to the whole system. It takes low-level output from drivers, turns +it into a more usable form, and publishes it for the rest of the system. -Надана функціональність включає в себе: +The provided functionality includes: - Read the output from the sensor drivers (`SensorGyro`, etc.). - Якщо існують кілька екземплярів того самого типу, виконуйте голосування та обробку аварійної ситуації. - Потім застосуйте обертання дошки та калібрування температури (якщо ввімкнено). And finally publish the data; one of the + If there are multiple of the same type, do voting and failover handling. + Then apply the board rotation and temperature calibration (if enabled). And finally publish the data; one of the topics is `SensorCombined`, used by many parts of the system. - Make sure the sensor drivers get the updated calibration parameters (scale & offset) when the parameters change or - on startup. Драйвери сенсора використовують інтерфейс ioctl для оновлення параметрів. For this to work properly, the + on startup. The sensor drivers use the ioctl interface for parameter updates. For this to work properly, the sensor drivers must already be running when `sensors` is started. - Do sensor consistency checks and publish the `SensorsStatusImu` topic. ### Імплементація -Він запускається у власній темі і проводить опитування на поточну обрану тему гіроскопа. +It runs in its own thread and polls on the currently selected gyro topic. - - -### Використання +### Usage {#sensors_usage} ``` sensors [arguments...] @@ -925,9 +873,7 @@ Source: [modules/simulation/system_power_simulator](https://github.com/PX4/PX4-A ### Опис - - -### Використання +### Usage {#system_power_simulation_usage} ``` system_power_simulation [arguments...] @@ -945,11 +891,9 @@ Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/d ### Опис -Драйвер для зчитування даних з розумної батареї Tattu 12S 16000mAh. +Driver for reading data from the Tattu 12S 16000mAh smart battery. - - -### Використання +### Usage {#tattu_can_usage} ``` tattu_can [arguments...] @@ -967,14 +911,13 @@ Source: [modules/temperature_compensation](https://github.com/PX4/PX4-Autopilot/ ### Опис -Модуль компенсації температури дозволяє всім гіроскопам, акселерометрам та барометрам у системі бути температурно компенсованими. Модуль відстежує дані, які надходять від датчиків та оновлює пов'язану тему sensor_correction -кожного разу, коли виявляється зміна температури. Модуль також може бути налаштований для виконання обчислення коефіцієнта -наступного завантаження, що дозволяє обчислити калібрувальні коефіцієнти теплової калібрації під час -циклу температури автомобіля. +The temperature compensation module allows all of the gyro(s), accel(s), and baro(s) in the system to be temperature +compensated. The module monitors the data coming from the sensors and updates the associated sensor_correction topic +whenever a change in temperature is detected. The module can also be configured to perform the coeffecient calculation +routine at next boot, which allows the thermal calibration coeffecients to be calculated while the vehicle undergoes +a temperature cycle. - - -### Використання +### Usage {#temperature_compensation_usage} ``` temperature_compensation [arguments...] @@ -1004,9 +947,7 @@ Writes the RTC time cyclically to a file and reloads this value on startup. This allows monotonic time on systems that only have a software RTC (that is not battery powered). Explicitly setting the time backwards (e.g. via system_time) is still possible. - - -### Використання +### Usage {#time_persistor_usage} ``` time_persistor [arguments...] @@ -1026,23 +967,21 @@ Source: [systemcmds/tune_control](https://github.com/PX4/PX4-Autopilot/tree/main Command-line tool to control & test the (external) tunes. -Мелодії використовуються для надання слухових сповіщень та попереджень (наприклад, коли система озброєна, отримує позицію блокування тощо). -Інструмент вимагає, щоб був запущений драйвер, який може керувати темою управління tune_control uorb. +Tunes are used to provide audible notification and warnings (e.g. when the system arms, gets position lock, etc.). +The tool requires that a driver is running that can handle the tune_control uorb topic. -Інформацію про формат мелодії та попередньо визначені системні мелодії можна знайти тут: +Information about the tune format and predefined system tunes can be found here: https://github.com/PX4/PX4-Autopilot/blob/main/src/lib/tunes/tune_definition.desc ### Приклади -Грайте системний мелодію #2: +Play system tune #2: ``` tune_control play -t 2 ``` - - -### Використання +### Usage {#tune_control_usage} ``` tune_control [arguments...] @@ -1069,7 +1008,7 @@ Source: [modules/uxrce_dds_client](https://github.com/PX4/PX4-Autopilot/tree/mai ### Опис -Клієнт UXRCE-DDS використовується для спілкування з агентом за допомогою тем uORB через послідовний або UDP. +UXRCE-DDS Client used to communicate uORB topics with an Agent over serial or UDP. ### Приклади @@ -1078,9 +1017,7 @@ uxrce_dds_client start -t serial -d /dev/ttyS3 -b 921600 uxrce_dds_client start -t udp -h 127.0.0.1 -p 15555 ``` - - -### Використання +### Usage {#uxrce_dds_client_usage} ``` uxrce_dds_client [arguments...] @@ -1109,11 +1046,9 @@ Source: [systemcmds/work_queue](https://github.com/PX4/PX4-Autopilot/tree/main/s ### Опис -Інструмент командного рядка для відображення статусу черги роботи. +Command-line tool to show work queue status. - - -### Використання +### Usage {#work_queue_usage} ``` work_queue [arguments...] diff --git a/docs/uk/modules/modules_template.md b/docs/uk/modules/modules_template.md index da38f46e12..a02a7276ee 100644 --- a/docs/uk/modules/modules_template.md +++ b/docs/uk/modules/modules_template.md @@ -16,15 +16,13 @@ Source: [templates/template_module](https://github.com/PX4/PX4-Autopilot/tree/ma ### Приклади -Приклад використання CLI: +CLI usage example: ``` module start -f -p 42 ``` - - -### Використання +### Usage {#module_usage} ``` module [arguments...] @@ -47,9 +45,7 @@ Source: [examples/work_item](https://github.com/PX4/PX4-Autopilot/tree/main/src/ Приклад простого модуля, який виконується з черги завдань. - - -### Використання +### Usage {#work_item_example_usage} ``` work_item_example [arguments...] diff --git a/docs/uk/msg_docs/AirspeedValidated.md b/docs/uk/msg_docs/AirspeedValidated.md index 0de1450e5b..41bfe31f09 100644 --- a/docs/uk/msg_docs/AirspeedValidated.md +++ b/docs/uk/msg_docs/AirspeedValidated.md @@ -1,21 +1,27 @@ # AirspeedValidated (повідомлення UORB) -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedValidated.msg) +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AirspeedValidated.msg) ```c +uint32 MESSAGE_VERSION = 1 + uint64 timestamp # time since system start (microseconds) -float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid -float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid -float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid +float32 indicated_airspeed_m_s # [m/s] Indicated airspeed (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # [m/s] Calibrated airspeed (CAS), set to NAN if invalid +float32 true_airspeed_m_s # [m/s] True airspeed (TAS), set to NAN if invalid +int8 airspeed_source # Source of currently published airspeed values +int8 DISABLED = -1 +int8 GROUND_MINUS_WIND = 0 +int8 SENSOR_1 = 1 +int8 SENSOR_2 = 2 +int8 SENSOR_3 = 3 +int8 SYNTHETIC = 4 + +# debug states float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid -float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid - -bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. - -int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid - +float32 calibraded_airspeed_synth_m_s # synthetic airspeed in m/s, set to NAN if invalid float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] float32 throttle_filtered # filtered fixed-wing throttle [-] float32 pitch_filtered # filtered pitch [rad] diff --git a/docs/uk/msg_docs/AirspeedValidatedV0.md b/docs/uk/msg_docs/AirspeedValidatedV0.md new file mode 100644 index 0000000000..8bca98a224 --- /dev/null +++ b/docs/uk/msg_docs/AirspeedValidatedV0.md @@ -0,0 +1,25 @@ +# AirspeedValidatedV0 (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/AirspeedValidatedV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid +float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid + +float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid +float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid + +bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. + +int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid + +float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] +float32 throttle_filtered # filtered fixed-wing throttle [-] +float32 pitch_filtered # filtered pitch [rad] + +``` diff --git a/docs/uk/msg_docs/CellularStatus.md b/docs/uk/msg_docs/CellularStatus.md index bb98146320..603600fa8d 100644 --- a/docs/uk/msg_docs/CellularStatus.md +++ b/docs/uk/msg_docs/CellularStatus.md @@ -1,35 +1,49 @@ # CellularStatus (повідомлення UORB) +Cellular status + +This is currently used only for logging cell status from MAVLink. + [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/CellularStatus.msg) ```c -uint64 timestamp # time since system start (microseconds) +# Cellular status +# +# This is currently used only for logging cell status from MAVLink. -uint8 CELLULAR_STATUS_FLAG_UNKNOWN=0 # State unknown or not reportable -uint8 CELLULAR_STATUS_FLAG_FAILED=1 # velocity setpoint -uint8 CELLULAR_STATUS_FLAG_INITIALIZING=2 # Modem is being initialized -uint8 CELLULAR_STATUS_FLAG_LOCKED=3 # Modem is locked -uint8 CELLULAR_STATUS_FLAG_DISABLED=4 # Modem is not enabled and is powered down -uint8 CELLULAR_STATUS_FLAG_DISABLING=5 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_DISABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLING=6 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_ENABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLED=7 # Modem is enabled and powered on but not registered with a network provider and not available for data connections -uint8 CELLULAR_STATUS_FLAG_SEARCHING=8 # Modem is searching for a network provider to register -uint8 CELLULAR_STATUS_FLAG_REGISTERED=9 # Modem is registered with a network provider, and data connections and messaging may be available for use -uint8 CELLULAR_STATUS_FLAG_DISCONNECTING=10 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTING=11 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTED=12 # One or more packet data bearers is active and connected +uint64 timestamp # [us] Time since system start. -uint8 CELLULAR_NETWORK_FAILED_REASON_NONE=0 # No error -uint8 CELLULAR_NETWORK_FAILED_REASON_UNKNOWN=1 # Error state is unknown -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_MISSING=2 # SIM is required for the modem but missing -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_ERROR=3 # SIM is available, but not usable for connection +uint16 status # [@enum STATUS_FLAG] Status bitmap. +uint16 STATUS_FLAG_UNKNOWN = 1 # State unknown or not reportable. +uint16 STATUS_FLAG_FAILED = 2 # Modem is unusable. +uint16 STATUS_FLAG_INITIALIZING = 4 # Modem is being initialized. +uint16 STATUS_FLAG_LOCKED = 8 # Modem is locked. +uint16 STATUS_FLAG_DISABLED = 16 # Modem is not enabled and is powered down. +uint16 STATUS_FLAG_DISABLING = 32 # Modem is currently transitioning to the STATUS_FLAG_DISABLED state. +uint16 STATUS_FLAG_ENABLING = 64 # Modem is currently transitioning to the STATUS_FLAG_ENABLED state. +uint16 STATUS_FLAG_ENABLED = 128 # Modem is enabled and powered on but not registered with a network provider and not available for data connections. +uint16 STATUS_FLAG_SEARCHING = 256 # Modem is searching for a network provider to register. +uint16 STATUS_FLAG_REGISTERED = 512 # Modem is registered with a network provider, and data connections and messaging may be available for use. +uint16 STATUS_FLAG_DISCONNECTING = 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. +uint16 STATUS_FLAG_CONNECTING = 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. +uint16 STATUS_FLAG_CONNECTED = 4096 # One or more packet data bearers is active and connected. -uint16 status # Status bitmap 1: Roaming is active -uint8 failure_reason #Failure reason when status in in CELLUAR_STATUS_FAILED -uint8 type # Cellular network radio type 0: none 1: gsm 2: cdma 3: wcdma 4: lte -uint8 quality # Cellular network RSSI/RSRP in dBm, absolute value -uint16 mcc # Mobile country code. If unknown, set to: UINT16_MAX -uint16 mnc # Mobile network code. If unknown, set to: UINT16_MAX -uint16 lac # Location area code. If unknown, set to: 0 +uint8 failure_reason # [@enum FAILURE_REASON] Failure reason. +uint8 FAILURE_REASON_NONE = 0 # No error. +uint8 FAILURE_REASON_UNKNOWN = 1 # Error state is unknown. +uint8 FAILURE_REASON_SIM_MISSING = 2 # SIM is required for the modem but missing. +uint8 FAILURE_REASON_SIM_ERROR = 3 # SIM is available, but not usable for connection. + +uint8 type # [@enum CELLULAR_NETWORK_RADIO_TYPE] Cellular network radio type. +uint8 CELLULAR_NETWORK_RADIO_TYPE_NONE = 0 # None +uint8 CELLULAR_NETWORK_RADIO_TYPE_GSM = 1 # GSM +uint8 CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2 # CDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3 # WCDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_LTE = 4 # LTE + +uint8 quality # [dBm] Cellular network RSSI/RSRP, absolute value. +uint16 mcc # [@invalid UINT16_MAX] Mobile country code. +uint16 mnc # [@invalid UINT16_MAX] Mobile network code. +uint16 lac # [@invalid 0] Location area code. ``` diff --git a/docs/uk/msg_docs/FailsafeFlags.md b/docs/uk/msg_docs/FailsafeFlags.md index 844ea20226..5877ada4d4 100644 --- a/docs/uk/msg_docs/FailsafeFlags.md +++ b/docs/uk/msg_docs/FailsafeFlags.md @@ -58,7 +58,7 @@ bool mission_failure # Mission failure bool vtol_fixed_wing_system_failure # vehicle in fixed-wing system failure failsafe mode (after quad-chute) bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded -bool local_position_accuracy_low # Local position estimate has dropped below threshold, but is currently still declared valid +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 diff --git a/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md new file mode 100644 index 0000000000..02dc50b410 --- /dev/null +++ b/docs/uk/msg_docs/FixedWingLateralGuidanceStatus.md @@ -0,0 +1,23 @@ +# FixedWingLateralGuidanceStatus (UORB message) + +Fixed Wing Lateral Guidance Status message +Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralGuidanceStatus.msg) + +```c +# Fixed Wing Lateral Guidance Status message +# Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +uint64 timestamp # time since system start (microseconds) + +float32 course_setpoint # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. Set by guidance law +float32 lateral_acceleration_ff # [m/s^2] [FRD] lateral acceleration demand only for maintaining curvature +float32 bearing_feas # [@range 0,1] bearing feasibility +float32 bearing_feas_on_track # [@range 0,1] on-track bearing feasibility +float32 signed_track_error # [m] signed track error +float32 track_error_bound # [m] track error bound +float32 adapted_period # [s] adapted period (if auto-tuning enabled) +uint8 wind_est_valid # [boolean] true = wind estimate is valid and/or being used by controller (also indicates if wind estimate usage is disabled despite being valid) + +``` diff --git a/docs/uk/msg_docs/FixedWingLateralSetpoint.md b/docs/uk/msg_docs/FixedWingLateralSetpoint.md new file mode 100644 index 0000000000..153167bb62 --- /dev/null +++ b/docs/uk/msg_docs/FixedWingLateralSetpoint.md @@ -0,0 +1,22 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLateralSetpoint.msg) + +```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) + +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. + +``` diff --git a/docs/uk/msg_docs/FixedWingLateralStatus.md b/docs/uk/msg_docs/FixedWingLateralStatus.md new file mode 100644 index 0000000000..9214d1e9e0 --- /dev/null +++ b/docs/uk/msg_docs/FixedWingLateralStatus.md @@ -0,0 +1,17 @@ +# FixedWingLateralStatus (UORB message) + +Fixed Wing Lateral Status message +Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralStatus.msg) + +```c +# Fixed Wing Lateral Status message +# Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +uint64 timestamp # time since system start (microseconds) + +float32 lateral_acceleration_setpoint # [m/s^2] [FRD] resultant lateral acceleration setpoint +float32 can_run_factor # [norm] [@range 0, 1] estimate of certainty of the correct functionality of the npfg roll setpoint + +``` diff --git a/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md new file mode 100644 index 0000000000..6b8fb29e5b --- /dev/null +++ b/docs/uk/msg_docs/FixedWingLongitudinalSetpoint.md @@ -0,0 +1,26 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLongitudinalSetpoint.msg) + +```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) + +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 + +``` diff --git a/docs/uk/msg_docs/FixedWingRunwayControl.md b/docs/uk/msg_docs/FixedWingRunwayControl.md new file mode 100644 index 0000000000..9e9f5ff428 --- /dev/null +++ b/docs/uk/msg_docs/FixedWingRunwayControl.md @@ -0,0 +1,19 @@ +# FixedWingRunwayControl (UORB message) + +Auxiliary control fields for fixed-wing runway takeoff/landing + +Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingRunwayControl.msg) + +```c +# Auxiliary control fields for fixed-wing runway takeoff/landing + +# Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +uint64 timestamp # [us] time since system start + +bool wheel_steering_enabled # Flag that enables the wheel steering. +float32 wheel_steering_nudging_rate # [norm] [@range -1, 1] [FRD] Manual wheel nudging, added to controller output. NAN is interpreted as 0. + +``` diff --git a/docs/uk/msg_docs/LateralControlConfiguration.md b/docs/uk/msg_docs/LateralControlConfiguration.md new file mode 100644 index 0000000000..b0a03a6378 --- /dev/null +++ b/docs/uk/msg_docs/LateralControlConfiguration.md @@ -0,0 +1,18 @@ +# LateralControlConfiguration (UORB message) + +Fixed Wing Lateral Control Configuration message +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LateralControlConfiguration.msg) + +```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) + +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/LongitudinalControlConfiguration.md b/docs/uk/msg_docs/LongitudinalControlConfiguration.md new file mode 100644 index 0000000000..901d5c23bc --- /dev/null +++ b/docs/uk/msg_docs/LongitudinalControlConfiguration.md @@ -0,0 +1,28 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LongitudinalControlConfiguration.msg) + +```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) + +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 + +``` diff --git a/docs/uk/msg_docs/PurePursuitStatus.md b/docs/uk/msg_docs/PurePursuitStatus.md index 76ae5524f0..1685af32d1 100644 --- a/docs/uk/msg_docs/PurePursuitStatus.md +++ b/docs/uk/msg_docs/PurePursuitStatus.md @@ -11,6 +11,4 @@ float32 crosstrack_error # [m] Shortest distance from the vehicle to the pat float32 distance_to_waypoint # [m] Distance from the vehicle to the current waypoint float32 bearing_to_waypoint # [rad] Bearing towards current waypoint -# TOPICS pure_pursuit_status - ``` diff --git a/docs/uk/msg_docs/RateCtrlStatus.md b/docs/uk/msg_docs/RateCtrlStatus.md index c6a4323ae9..90eaa1208f 100644 --- a/docs/uk/msg_docs/RateCtrlStatus.md +++ b/docs/uk/msg_docs/RateCtrlStatus.md @@ -9,6 +9,5 @@ uint64 timestamp # time since system start (microseconds) float32 rollspeed_integ float32 pitchspeed_integ float32 yawspeed_integ -float32 wheel_rate_integ # FW only and optional ``` diff --git a/docs/uk/msg_docs/RoverAttitudeSetpoint.md b/docs/uk/msg_docs/RoverAttitudeSetpoint.md index fc2bc4d639..778d4407a9 100644 --- a/docs/uk/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/uk/msg_docs/RoverAttitudeSetpoint.md @@ -7,6 +7,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_setpoint # [rad] Expressed in NED frame -# TOPICS rover_attitude_setpoint - ``` diff --git a/docs/uk/msg_docs/RoverAttitudeStatus.md b/docs/uk/msg_docs/RoverAttitudeStatus.md index 28d9ef6d96..24dc3cf12f 100644 --- a/docs/uk/msg_docs/RoverAttitudeStatus.md +++ b/docs/uk/msg_docs/RoverAttitudeStatus.md @@ -8,6 +8,4 @@ uint64 timestamp # time since system start (microseconds) float32 measured_yaw # [rad/s] Measured yaw rate float32 adjusted_yaw_setpoint # [rad/s] Yaw setpoint that is being tracked (Applied slew rates) -# TOPICS rover_attitude_status - ``` diff --git a/docs/uk/msg_docs/RoverPositionSetpoint.md b/docs/uk/msg_docs/RoverPositionSetpoint.md new file mode 100644 index 0000000000..8450bf8486 --- /dev/null +++ b/docs/uk/msg_docs/RoverPositionSetpoint.md @@ -0,0 +1,15 @@ +# RoverPositionSetpoint (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverPositionSetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32[2] position_ned # 2-dimensional position setpoint in NED frame [m] +float32[2] start_ned # (Optional) 2-dimensional start position in NED frame used to define the line that the rover will track to position_ned [m] (Defaults to vehicle position) +float32 cruising_speed # (Optional) Specify rover speed [m/s] (Defaults to maximum speed) +float32 arrival_speed # (Optional) Specify arrival speed [m/s] (Defaults to zero) + +float32 yaw # [rad] [-pi,pi] from North. Optional, NAN if not set. Mecanum only. (Defaults to vehicle yaw) + +``` diff --git a/docs/uk/msg_docs/RoverRateSetpoint.md b/docs/uk/msg_docs/RoverRateSetpoint.md index 71755a38f3..12fe8cb88c 100644 --- a/docs/uk/msg_docs/RoverRateSetpoint.md +++ b/docs/uk/msg_docs/RoverRateSetpoint.md @@ -7,6 +7,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_rate_setpoint # [rad/s] Expressed in NED frame -# TOPICS rover_rate_setpoint - ``` diff --git a/docs/uk/msg_docs/RoverRateStatus.md b/docs/uk/msg_docs/RoverRateStatus.md index 1f54694ee0..a3aa1d1164 100644 --- a/docs/uk/msg_docs/RoverRateStatus.md +++ b/docs/uk/msg_docs/RoverRateStatus.md @@ -9,6 +9,4 @@ float32 measured_yaw_rate # [rad/s] Measured yaw rate float32 adjusted_yaw_rate_setpoint # [rad/s] Yaw rate setpoint that is being tracked (Applied slew rates) float32 pid_yaw_rate_integral # Integral of the PID for the closed loop yaw rate controller -# TOPICS rover_rate_status - ``` diff --git a/docs/uk/msg_docs/RoverSteeringSetpoint.md b/docs/uk/msg_docs/RoverSteeringSetpoint.md index 1a6f3203dd..48353ea957 100644 --- a/docs/uk/msg_docs/RoverSteeringSetpoint.md +++ b/docs/uk/msg_docs/RoverSteeringSetpoint.md @@ -5,9 +5,8 @@ ```c uint64 timestamp # time since system start (microseconds) -float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Only for Ackermann-steered rovers) -float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Only for Differential/Mecanum rovers) +float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Ackermann only, Positiv: Steer right, Negativ: Steer left) -# TOPICS rover_steering_setpoint +float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Differential/Mecanum only, Positiv = Turn right, Negativ: Turn left) ``` diff --git a/docs/uk/msg_docs/RoverThrottleSetpoint.md b/docs/uk/msg_docs/RoverThrottleSetpoint.md index 9533126dd0..ccdf76902d 100644 --- a/docs/uk/msg_docs/RoverThrottleSetpoint.md +++ b/docs/uk/msg_docs/RoverThrottleSetpoint.md @@ -6,9 +6,7 @@ uint64 timestamp # time since system start (microseconds) -float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] -float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] - -# TOPICS rover_throttle_setpoint +float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] (Positiv = forwards, Negativ = backwards) +float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] (Mecanum only, Positiv = right, Negativ = left) ``` diff --git a/docs/uk/msg_docs/RoverVelocitySetpoint.md b/docs/uk/msg_docs/RoverVelocitySetpoint.md new file mode 100644 index 0000000000..2e2d322b47 --- /dev/null +++ b/docs/uk/msg_docs/RoverVelocitySetpoint.md @@ -0,0 +1,12 @@ +# RoverVelocitySetpoint (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverVelocitySetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32 speed # [m/s] [-inf, inf] Speed setpoint (Backwards driving if negative) +float32 bearing # [rad] [-pi,pi] from North. [invalid: NAN, speed is defined in body x direction] +float32 yaw # [rad] [-pi, pi] (Mecanum only, Optional, defaults to current vehicle yaw) Vehicle yaw setpoint in NED frame + +``` diff --git a/docs/uk/msg_docs/RoverVelocityStatus.md b/docs/uk/msg_docs/RoverVelocityStatus.md index 02b2c3b527..c908ffac90 100644 --- a/docs/uk/msg_docs/RoverVelocityStatus.md +++ b/docs/uk/msg_docs/RoverVelocityStatus.md @@ -6,14 +6,10 @@ uint64 timestamp # time since system start (microseconds) float32 measured_speed_body_x # [m/s] Measured speed in body x direction. Positiv: forwards, Negativ: backwards -float32 speed_body_x_setpoint # [m/s] Speed setpoint in body x direction. Positiv: forwards, Negativ: backwards float32 adjusted_speed_body_x_setpoint # [m/s] Post slew rate speed setpoint in body x direction. Positiv: forwards, Negativ: backwards -float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left -float32 speed_body_y_setpoint # [m/s] Speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) -float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) float32 pid_throttle_body_x_integral # Integral of the PID for the closed loop controller of the speed in body x direction -float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction - -# TOPICS rover_velocity_status +float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction (Mecanum only) ``` diff --git a/docs/uk/msg_docs/TrajectorySetpoint6dof.md b/docs/uk/msg_docs/TrajectorySetpoint6dof.md new file mode 100644 index 0000000000..f2629e19c4 --- /dev/null +++ b/docs/uk/msg_docs/TrajectorySetpoint6dof.md @@ -0,0 +1,23 @@ +# TrajectorySetpoint6dof (UORB message) + +Trajectory setpoint in NED frame +Input to position controller. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/TrajectorySetpoint6dof.msg) + +```c +# Trajectory setpoint in NED frame +# Input to position controller. + +uint64 timestamp # time since system start (microseconds) + +# NED local world frame +float32[3] position # in meters +float32[3] velocity # in meters/second +float32[3] acceleration # in meters/second^2 +float32[3] jerk # in meters/second^3 (for logging only) + +float32[4] quaternion # unit quaternion +float32[3] angular_velocity # angular velocity in radians/second + +``` diff --git a/docs/uk/msg_docs/VehicleAttitudeSetpoint.md b/docs/uk/msg_docs/VehicleAttitudeSetpoint.md index 1be6e9f39b..9b6be02c9b 100644 --- a/docs/uk/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/uk/msg_docs/VehicleAttitudeSetpoint.md @@ -3,7 +3,7 @@ [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) ```c -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # time since system start (microseconds) @@ -16,10 +16,6 @@ float32[4] q_d # Desired quaternion for quaternion control # For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] -bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) - -bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) - # TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint ``` diff --git a/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md b/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md new file mode 100644 index 0000000000..6eb03e797c --- /dev/null +++ b/docs/uk/msg_docs/VehicleAttitudeSetpointV0.md @@ -0,0 +1,25 @@ +# VehicleAttitudeSetpointV0 (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 yaw_sp_move_rate # rad/s (commanded by user) + +# For quaternion-based attitude control +float32[4] q_d # Desired quaternion for quaternion control + +# For clarification: For multicopters thrust_body[0] and thrust[1] are usually 0 and thrust[2] is the negative throttle demand. +# For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. +float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] + +bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) + +bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) + +# TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint + +``` diff --git a/docs/uk/msg_docs/VehicleCommand.md b/docs/uk/msg_docs/VehicleCommand.md index dc85991022..00848d8e4b 100644 --- a/docs/uk/msg_docs/VehicleCommand.md +++ b/docs/uk/msg_docs/VehicleCommand.md @@ -11,127 +11,127 @@ Vehicle Command uORB повідомлення. Використовується uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start. -uint16 VEHICLE_CMD_CUSTOM_0 = 0 # test command -uint16 VEHICLE_CMD_CUSTOM_1 = 1 # test command -uint16 VEHICLE_CMD_CUSTOM_2 = 2 # test command -uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing -uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |Radius [m] |Velocity [m/s] |Yaw behaviour |Empty |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |Major Radius [m] |Minor Radius [m] |Velocity [m/s] |Orientation |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| -uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| -uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time |Delay in seconds (decimal, -1 to enable time-of-day fields)| hour (24h format, UTC, -1 to ignore)| minute (24h format, UTC, -1 to ignore)| second (24h format, UTC)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| -uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold |2D coord mode: 0: Orthogonal to planned route | Altitude mode: 0: Ignore altitude| Empty| Empty| Lat| Lon| Alt| -uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately |Flight termination activated if > 0.5| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value |Altitude| Frame of new altitude | Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1| Actuator 2| Actuator 3| Actuator 4| Actuator 5| Actuator 6| Index| -uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Empty| Empty| Empty| Empty| Latitude| Longitude| Empty| -uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |Altitude (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |Ground speed [m/s] |Bitmask |Loiter radius [m] for planes |Yaw [deg] |Latitude |Longitude |Altitude | +uint16 VEHICLE_CMD_CUSTOM_0 = 0 # Test command. +uint16 VEHICLE_CMD_CUSTOM_1 = 1 # Test command. +uint16 VEHICLE_CMD_CUSTOM_2 = 2 # Test command. +uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |[s] (decimal) Hold time. (ignored by fixed wing, time to stay at MISSION for rotary wing)|[m] Acceptance radius (if the sphere with this radius is hit, the MISSION counts as reached)|0 to pass through the WP, if > 0 radius [m] to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.|Desired yaw angle at MISSION (rotary wing)|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time. |Unused|Unused|[m] Radius around MISSION. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns. |Turns|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for time. |[s] Seconds (decimal)|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand. |Unused (FW pitch from FW_TKO_PITCH_MIN)|Unused|Unused|[deg] [@range 0,360] Yaw angle in NED if yaw source available, ignored otherwise|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude AMSL| +uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing. +uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |[m] Radius|[m/s] Velocity|[@enum ORBIT_YAW_BEHAVIOUR] Yaw behaviour|Unused|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |[m] Major radius|[m] Minor radius|[m/s] Velocity|Orientation|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| +uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning|0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid|Unused|[deg] [@range 0, 360] Yaw angle at goal, in compass degrees|Latitude/X of goal|Longitude/Y of goal|Altitude/Z of goal| +uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Unused|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min AMSL - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time. |[s] Delay (decimal, -1 to enable time-of-day fields)|[h] hour (24h format, UTC, -1 to ignore)|minute (24h format, UTC, -1 to ignore)|second (24h format, UTC)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration.|Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |[s] Delay (decimal seconds)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached.|Descent / Ascend rate (m/s)|Unused|Unused|Unused|Unused|Unused|Finish Altitude| +uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance [m]|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |[deg] [@range 0,360] Target angle. 0 is north|[deg/s] Speed during yaw change|[@range -1,1] Direction: negative: counter clockwise, positive: clockwise |[ 1,0] Relative offset or absolute angle|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold. |2D coord mode: 0: Orthogonal to planned route|Altitude mode: 0: Ignore altitude|Unused|Unused|Lat|Lon|Alt| +uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times. |Sequence number|Repeat count|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |[@enum SPEED_TYPE] Speed type (0=Airspeed, 1=Ground Speed)|Speed (m/s, -1 indicates no change)|[%] Throttle ( Percent, -1 indicates no change)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number|Parameter value|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number|Setting (1=on, 0=off, others possible depending on system hardware)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number|Cycle count|[s] Cycle time (decimal seconds)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number|[us] PWM rate (1000 to 2000 typical)|Cycle count|[s] Cycle time|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately. |Flight termination activated if > 0.5|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value. |Altitude|Frame of new altitude|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1|Actuator 2|Actuator 3|Actuator 4|Actuator 5|Actuator 6|Index| +uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Unused|Unused|Unused|Unused|Latitude|Longitude|Unused| +uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |[m] Altitude|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |[m/s] Ground speed|Bitmask|[m] Loiter radius for planes|[deg] Yaw|Latitude|Longitude|Altitude| uint16 VEHICLE_CMD_DO_PAUSE_CONTINUE = 193 -uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| pitch offset from next waypoint| roll offset from next waypoint| yaw offset from next waypoint| -uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| +uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Pitch offset from next waypoint|Roll offset from next waypoint|Yaw offset from next waypoint| +uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)|Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw|Transmission mode: 0: video stream, >0: single images every n seconds (decimal seconds)|Recording: 0: disabled, 1: enabled compressed, 2: enabled raw|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| uint16 VEHICLE_CMD_DO_DIGICAM_CONTROL=203 -uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount |pitch or lat in degrees, depending on mount mode.| roll or lon in degrees depending on mount mode| yaw or alt (in meters) depending on mount mode| reserved| reserved| reserved| MAV_MOUNT_MODE enum value| -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence |enable? (0=disable, 1=enable)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute |action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # motor test command |Instance (1, ...)| throttle type| throttle| timeout [s]| Motor count | Test order| Empty| -uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight |inverted (0=normal, 1=inverted)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)| q2 - quaternion param #2, x (0 in null-rotation)| q3 - quaternion param #3, y (0 in null-rotation)| q4 - quaternion param #4, z (0 in null-rotation)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See mavlink spec MAV_CMD_PREFLIGHT_CALIBRATION -uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration -uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| -uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started -uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight|Camera trigger distance (meters)| Shutter integration time (ms)| Camera minimum trigger interval| Number of positions| Roll| Pitch| Empty| -uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode |MAV_STANDARD_MODE| -uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal +uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount. |[@enum MAV_MOUNT_MODE] Mount operation mode|Stabilize roll? (1 = yes, 0 = no)|Stabilize pitch? (1 = yes, 0 = no)|stabilize yaw? (1 = yes, 0 = no)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount. |[deg] Pitch or lat, depending on mount mode.|[deg] Roll or lon depending on mount mode|[deg]/[m] Yaw or alt depending on mount mode|Unused|Unused|Unused|[@enum MAV_MOUNT_MODE]| +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence. |enable? (0=disable, 1=enable)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute. |action [@enum PARACHUTE_ACTION] (0=disable, 1=enable, 2=release, for some systems see [@enum PARACHUTE_ACTION], not in general message set.)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # Motor test command. |Instance (@range 1, )|throttle type|throttle|timeout [s]|Motor count|Test order|Unused| +uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight. |inverted (0=normal, 1=inverted)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper. +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight. |[m] Camera trigger distance|Shutter integration time (ms)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)|q2 - quaternion param #2, x (0 in null-rotation)|q3 - quaternion param #3, y (0 in null-rotation)|q4 - quaternion param #4, z (0 in null-rotation)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min(AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See MAVLink spec MAV_CMD_PREFLIGHT_CALIBRATION. +uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. +uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow|X axis offset (or generic dimension 1), in the sensor's raw units|Y axis offset (or generic dimension 2), in the sensor's raw units|Z axis offset (or generic dimension 3), in the sensor's raw units|Generic dimension 4, in the sensor's raw units|Generic dimension 5, in the sensor's raw units|Generic dimension 6, in the sensor's raw units| +uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started. +uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.|0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Camera minimum trigger interval|Number of positions|Roll|Pitch|Unused| +uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode. |MAV_STANDARD_MODE| +uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal. -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|value [-1,1]|timeout [s]|Empty|Empty|output function| -uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command|configuration|Empty|Empty|Empty|output function| -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 -uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing |0:Spektrum| 0:Spektrum DSM2, 1:Spektrum DSMX| -uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message -uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities| Reserved (all remaining params)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| -uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.) -uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom +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_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. +uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing. |0:Spektrum|0:Spektrum DSM2, 1:Spektrum DSMX| +uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message. +uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities|Reserved (all remaining params)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)| +uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.). +uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom. uint16 VEHICLE_CMD_SET_CAMERA_FOCUS = 532 -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control -uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. -uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system -uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. -uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. -uint16 VEHICLE_CMD_LOGGING_START = 2510 # start streaming ULog data -uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # stop streaming ULog data -uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # control starting/stopping transmitting data over the high latency link -uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition -uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization -uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan -uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment -uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. -uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control. +uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. +uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. +uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. +uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. +uint16 VEHICLE_CMD_LOGGING_START = 2510 # Start streaming ULog data. +uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # Stop streaming ULog data. +uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # Control starting/stopping transmitting data over the high latency link. +uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition. +uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization. +uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan. +uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment. +uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. +uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. -uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # external reset of estimator global position when deadreckoning +uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning. uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004 -# PX4 vehicle commands (beyond 16 bit mavlink commands) -uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # start of PX4 internal only vehicle commands (> UINT16_MAX) -uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Empty|Empty|Empty|Empty|Latitude|Longitude|Altitude| -uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Empty|Empty|Empty|Empty|Empty|Empty| +# PX4 vehicle commands (beyond 16 bit MAVLink commands). +uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX). +uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Unused|Unused|Unused|Unused|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude (AMSL from GNSS, positive above ground)| +uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Unused|Unused|Unused|Unused|Unused|Unused| -uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization | -uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt | -uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # +uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. +uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. +uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt. +uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # -uint8 VEHICLE_ROI_NONE = 0 # No region of interest | -uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION | -uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION | -uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location | -uint8 VEHICLE_ROI_TARGET = 4 # Point toward target +uint8 VEHICLE_ROI_NONE = 0 # No region of interest. +uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION. +uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION. +uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. +uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 uint8 PARACHUTE_ACTION_DISABLE = 0 @@ -163,13 +163,13 @@ uint8 FAILURE_TYPE_SLOW = 5 uint8 FAILURE_TYPE_DELAYED = 6 uint8 FAILURE_TYPE_INTERMITTENT = 7 -# used as param1 in DO_CHANGE_SPEED command +# Used as param1 in DO_CHANGE_SPEED command. uint8 SPEED_TYPE_AIRSPEED = 0 uint8 SPEED_TYPE_GROUNDSPEED = 1 uint8 SPEED_TYPE_CLIMB_SPEED = 2 uint8 SPEED_TYPE_DESCEND_SPEED = 3 -# used as param3 in CMD_DO_ORBIT +# Used as param3 in CMD_DO_ORBIT. uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 @@ -177,29 +177,29 @@ uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 -# used as param1 in ARM_DISARM command +# Used as param1 in ARM_DISARM command. int8 ARMING_ACTION_DISARM = 0 int8 ARMING_ACTION_ARM = 1 -# param2 in VEHICLE_CMD_DO_GRIPPER +# param2 in VEHICLE_CMD_DO_GRIPPER. uint8 GRIPPER_ACTION_RELEASE = 0 uint8 GRIPPER_ACTION_GRAB = 1 uint8 ORB_QUEUE_LENGTH = 8 -float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. -uint32 command # Command ID -uint8 target_system # System which should execute the command -uint8 target_component # Component which should execute the command, 0 for all components -uint8 source_system # System sending the command -uint16 source_component # Component / mode executor sending the command -uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) +float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. +uint32 command # Command ID. +uint8 target_system # System which should execute the command. +uint8 target_component # Component which should execute the command, 0 for all components. +uint8 source_system # System sending the command. +uint16 source_component # Component / mode executor sending the command. +uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command). bool from_external uint16 COMPONENT_MODE_EXECUTOR_START = 1000 diff --git a/docs/uk/msg_docs/index.md b/docs/uk/msg_docs/index.md index 722c5f9322..c55bf33e24 100644 --- a/docs/uk/msg_docs/index.md +++ b/docs/uk/msg_docs/index.md @@ -15,10 +15,18 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [ActuatorMotors](ActuatorMotors.md) — Motor control message - [ActuatorServos](ActuatorServos.md) — Servo control message +- [AirspeedValidated](AirspeedValidated.md) - [ArmingCheckReply](ArmingCheckReply.md) - [ArmingCheckRequest](ArmingCheckRequest.md) - [BatteryStatus](BatteryStatus.md) - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors +- [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 @@ -26,6 +34,11 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m Unset optional setpoints are not controlled Unset optional constraints default to vehicle specifications - [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. - [ManualControlSetpoint](ManualControlSetpoint.md) - [ModeCompleted](ModeCompleted.md) — Mode completion result, published by an active mode. Можливі значення nav_state визначені в повідомленні VehicleStatus. @@ -76,8 +89,6 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [Airspeed](Airspeed.md) -- [AirspeedValidated](AirspeedValidated.md) - - [AirspeedWind](AirspeedWind.md) - [AutotuneAttitudeControlStatus](AutotuneAttitudeControlStatus.md) @@ -92,7 +103,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [CanInterfaceStatus](CanInterfaceStatus.md) -- [CellularStatus](CellularStatus.md) +- [CellularStatus](CellularStatus.md) — Cellular status - [CollisionConstraints](CollisionConstraints.md) — Local setpoint constraints in NED frame setting something to NaN means that no limit is provided @@ -161,6 +172,14 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [FigureEightStatus](FigureEightStatus.md) +- [FixedWingLateralGuidanceStatus](FixedWingLateralGuidanceStatus.md) — Fixed Wing Lateral Guidance Status message + Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +- [FixedWingLateralStatus](FixedWingLateralStatus.md) — Fixed Wing Lateral Status message + Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +- [FixedWingRunwayControl](FixedWingRunwayControl.md) — Auxiliary control fields for fixed-wing runway takeoff/landing + - [FlightPhaseEstimation](FlightPhaseEstimation.md) - [FollowTarget](FollowTarget.md) @@ -267,8 +286,6 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [NormalizedUnsignedSetpoint](NormalizedUnsignedSetpoint.md) -- [NpfgStatus](NpfgStatus.md) - - [ObstacleDistance](ObstacleDistance.md) — Obstacle distances in front of the sensor. - [OffboardControlMode](OffboardControlMode.md) — Off-board control mode @@ -340,6 +357,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [RoverAttitudeStatus](RoverAttitudeStatus.md) +- [RoverPositionSetpoint](RoverPositionSetpoint.md) + - [RoverRateSetpoint](RoverRateSetpoint.md) - [RoverRateStatus](RoverRateStatus.md) @@ -348,6 +367,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [RoverThrottleSetpoint](RoverThrottleSetpoint.md) +- [RoverVelocitySetpoint](RoverVelocitySetpoint.md) + - [RoverVelocityStatus](RoverVelocityStatus.md) - [Rpm](Rpm.md) @@ -415,6 +436,9 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [TimesyncStatus](TimesyncStatus.md) +- [TrajectorySetpoint6dof](TrajectorySetpoint6dof.md) — Trajectory setpoint in NED frame + Input to position controller. + - [TransponderReport](TransponderReport.md) - [TuneControl](TuneControl.md) — This message is used to control the tunes, when the tune_id is set to CUSTOM @@ -467,4 +491,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [YawEstimatorStatus](YawEstimatorStatus.md) +- [AirspeedValidatedV0](AirspeedValidatedV0.md) + +- [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) + - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander \ No newline at end of file diff --git a/docs/uk/releases/1.16.md b/docs/uk/releases/1.16.md new file mode 100644 index 0000000000..fdccee7900 --- /dev/null +++ b/docs/uk/releases/1.16.md @@ -0,0 +1,221 @@ +# PX4-Autopilot v1.16.0 Release Notes + + + + + +
+
+

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

+
+
+ +This document covers all changes in PX4 v1.16.0 since the previous stable release ([PX4 v1.15.0](../releases/1.15.md)). + +:::info +These notes include only changes merged in 2023 and later — commits before 2023 are not listed. +::: + +## Прочитайте перед оновленням + +Please continue reading for [upgrade instructions](#upgrade-guide). + +## Основні зміни + +- **Rover support rework** + - New dedicated firmware build for rovers (airframe IDs 50000–52000) + - Separate modules for Ackermann, differential and mecanum rovers, each with manual, acro, stabilized, position and auto modes + - Shared pure-pursuit guidance library for all rover modules + - Legacy rover position control module deprecated in favor of the new modules + +## Інструкції для оновлення + +- [PX4-Autopilot#24648](https://github.com/PX4/PX4-Autopilot/pull/24648): Added setting default for EKF2_EV_CTRL to 15 for VOXL 2 boards +- [PX4-Autopilot#22517](https://github.com/PX4/PX4-Autopilot/pull/22517): Change default ethernet IP +- [PX4-Autopilot#24602](https://github.com/PX4/PX4-Autopilot/pull/24602): remove serial port default from sf45 module + +## Інші зміни + +### Підтримка обладнання + +- **[New Hardware]** [PX4-Autopilot#23830](https://github.com/PX4/PX4-Autopilot/pull/23830): Boards: ARK FPV FC +- **[New Hardware]** [PX4-Autopilot#23414](https://github.com/PX4/PX4-Autopilot/pull/23414): board: add cuav 7-nano +- **[New Hardware]** [PX4-Autopilot#24769](https://github.com/PX4/PX4-Autopilot/pull/24769): add new board corvon743v1 +- **[New Hardware]** [PX4-Autopilot#24018](https://github.com/PX4/PX4-Autopilot/pull/24018): boards: bluerobotics: navigator: Add initial support +- **[New Hardware]** [PX4-Autopilot#24147](https://github.com/PX4/PX4-Autopilot/pull/24147): boards: add new board micoair743-v2 +- **[New Hardware]** [PX4-Autopilot#23218](https://github.com/PX4/PX4-Autopilot/pull/23218): boards: add new board micoair h743 +- **[New Hardware]** [PX4-Autopilot#24512](https://github.com/PX4/PX4-Autopilot/pull/24512): boards: Add FMUv6s target +- **[New Hardware]** [PX4-Autopilot#23927](https://github.com/PX4/PX4-Autopilot/pull/23927): manifest: Add Skynode S baseboard +- **[New Hardware]** [PX4-Autopilot#23257](https://github.com/PX4/PX4-Autopilot/pull/23257): Add Tropic VMU board support (Baseboard for Teensy 4.1) +- **[New Hardware]** [PX4-Autopilot#23697](https://github.com/PX4/PX4-Autopilot/pull/23697): boards: add new board X-MAV AP-H743v2 +- **[New Hardware]** [PX4-Autopilot#23551](https://github.com/PX4/PX4-Autopilot/pull/23551): 3DR boards: Support for 3DR Control Zero H7 OEM Rev G +- **[New Hardware]** [PX4-Autopilot#23623](https://github.com/PX4/PX4-Autopilot/pull/23623): new board support ZeroOne x6 + +### Загальні + +- [Optical flow scaling factor - SENS_FLOW_SCALE](../sensor/optical_flow.md#scale-factor). ([PX4-Autopilot#23936](https://github.com/PX4/PX4-Autopilot/pull/23936)). + +- [PX4-Autopilot#22813](https://github.com/PX4/PX4-Autopilot/pull/22813): Reintroduce optional parameter versioning mechanism for airframe maintainers + +- [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 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. + ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). + +- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. + Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. + This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. + ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). + +- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) + +- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. + This typically reduces false warnings due to magnetometer inconsistencies. + ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). + +### Управління + +- [PX4-Autopilot#23863](https://github.com/PX4/PX4-Autopilot/pull/23863): [Sponsored by ARK] Bidirectional DShot + +- [PX4-Autopilot#24196](https://github.com/PX4/PX4-Autopilot/pull/24196): Make control allocation and actuator effectiveness a non-module-specific library + +- [PX4-Autopilot#24221](https://github.com/PX4/PX4-Autopilot/pull/24221): Spacecraft Build and Bare Control Allocator + +- Configurable multicopter orbit-mode yaw via `MC_ORBIT_YAW_MOD` ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) + +- Collision prevention now works in manual (acceleration-based) flight mode (`MPC_POS_MODE`) ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507)) + +### Оцінки + +- [PX4-Autopilot#23854](https://github.com/PX4/PX4-Autopilot/pull/23854): EKF2: ellipsoidal earth navigation + +- [PX4-Autopilot#23263](https://github.com/PX4/PX4-Autopilot/pull/23263): EKF2: Terrain state + +- [PX4-Autopilot#23185](https://github.com/PX4/PX4-Autopilot/pull/23185): ekf2: add mag type init + +- [PX4-Autopilot#23436](https://github.com/PX4/PX4-Autopilot/pull/23436): ekf2: Optical flow enabled by default + +- Position-loss failsafe delay removed; triggers 1 s after loss (see Common) + +### Датчики + +- [PX4-Autopilot#23656](https://github.com/PX4/PX4-Autopilot/pull/23656): Implemented AUAV absolute/differential pressure sensor support + +- [PX4-Autopilot#23639](https://github.com/PX4/PX4-Autopilot/pull/23639): Implemented temperature sensor support for INA228 / INA238 + +- [PX4-Autopilot#22744](https://github.com/PX4/PX4-Autopilot/pull/22744): Add Ublox ZED-F9P-15B + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Mag cal: automatically disable internal mags if external ones are available + +- [PX4-Autopilot#23064](https://github.com/PX4/PX4-Autopilot/pull/23064): BMP581: Add Bosch BMP581 barometer + +- [PX4-Autopilot#22914](https://github.com/PX4/PX4-Autopilot/pull/22914): Murata SCH16T IMU driver + +- [PX4-Autopilot#23023](https://github.com/PX4/PX4-Autopilot/pull/23023): ST IIS2MDC Magnetometer driver + +- [PX4-Autopilot#24121](https://github.com/PX4/PX4-Autopilot/pull/24121): Include distance sensor in dds topics + +- [PX4-Autopilot#23925](https://github.com/PX4/PX4-Autopilot/pull/23925): drivers: magnetometer: mmc5983ma: Add SPI support + +- [PX4-Autopilot#23909](https://github.com/PX4/PX4-Autopilot/pull/23909): drivers/magnetometer/ak09916: Add support to AK09915 + +- [PX4-Autopilot#23362](https://github.com/PX4/PX4-Autopilot/pull/23362): Add Bosch BMM350 magnetometer + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Compass calibration now disables internal compass when external unit present, reducing false warnings + +### Симуляція + +- **SIH**: + - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. + ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). + - SIH now supports the standard VTOL airframe + ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). +- **Gazebo**: + - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. + The default installer scripts (used for CI) and documentation have been updated. + This is required because Garden end-of-life is Nov 2024. + ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) + - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). + - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). + - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). + - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). + - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). + - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). + - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) + - [PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471): Gazebo: Moving platform + +### uXRCE-DDS / ROS2 + +- **[Feature]** [PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113): [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically +- [PX4-Autopilot#24582](https://github.com/PX4/PX4-Autopilot/pull/24582): dds_topics: add vtol_vehicle_status +- [PX4-Autopilot#24583](https://github.com/PX4/PX4-Autopilot/pull/24583): dds_topics: add home_position + +### MAVLink + +- Уточнюється + +### Мульти-Ротор + +- [PX4-Autopilot#24173](https://github.com/PX4/PX4-Autopilot/pull/24173): [Multirotor] add yaw torque low pass filter + +- [PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943): Add gz model for quadtailsitter + +- [PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358): Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) + +- [PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507): Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). + +### VTOL + +- Уточнюється + +### Літак з фіксованим крилом + +- [PX4-Autopilot#24167](https://github.com/PX4/PX4-Autopilot/pull/24167): Fixedwing: fix wheel controller + +- [PX4-Autopilot#23520](https://github.com/PX4/PX4-Autopilot/pull/23520): FixedWing: allow position control without valid global position + +- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) + +### Ровер + +This release contains a major rework for the rover support in PX4: + +- Complete restructure of the [rover related documentation](../frames_rover/index.md). +- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). +- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): + - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). +- New module dedicated to [differential rovers](../frames_rover/differential.md): + - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). +- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): + - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). +- Added rover-specific firmware build (`50000–52000`) for Ackermann, differential and mecanum rovers +- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). + This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): + - Generic Differential Rover `50000`. + - Generic Ackermann Rover `51000`. + - Axial SCX10 2 Trail Honcho `51001`. + - Generic Mecanum Rover `52000`. +- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. +- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). +- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. + +### Infrastructure + +- [PX4-Autopilot#24011](https://github.com/PX4/PX4-Autopilot/pull/24011): standard_modes: add vehicle-type specific standard modes +- [PX4-Autopilot#24020](https://github.com/PX4/PX4-Autopilot/pull/24020): ci: build all upload to releases +- [PX4-Autopilot#24002](https://github.com/PX4/PX4-Autopilot/pull/24002): ci: px4-dev container +- [PX4-Autopilot#23937](https://github.com/PX4/PX4-Autopilot/pull/23937): ci: workflow for ubuntu 24 +- [PX4-Autopilot#23869](https://github.com/PX4/PX4-Autopilot/pull/23869): ci: add test for Ubuntu 22.04 +- [PX4-Autopilot#23574](https://github.com/PX4/PX4-Autopilot/pull/23574): ci: try runs-on Dronecode Infra +- [PX4-Autopilot#23550](https://github.com/PX4/PX4-Autopilot/pull/23550): ci: replace build workflows diff --git a/docs/uk/releases/index.md b/docs/uk/releases/index.md index f08b5351cc..32ee1a8d77 100644 --- a/docs/uk/releases/index.md +++ b/docs/uk/releases/index.md @@ -2,7 +2,8 @@ Перелік PX4 реліз, вони містять список змін, що відбулися в кожному релізі, пояснення включених функцій, виправлень, застарілих та оновлень. -- [main](../releases/main.md) (changes since v1.15) +- [main](../releases/main.md) (changes since v1.16) +- [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) - [v1.13](../releases/1.13.md) diff --git a/docs/uk/releases/main.md b/docs/uk/releases/main.md index 9003f6a93d..b51219ded8 100644 --- a/docs/uk/releases/main.md +++ b/docs/uk/releases/main.md @@ -9,15 +9,15 @@ const { site } = useData();
-

This page is on a release bramch, 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 `main` branch since the last major release ([PX v1.15](../releases/1.15.md)). +This contains changes to PX4 `main` branch since the last major release ([PX v1.16](../releases/1.16.md)). :::warning -The PX4 v1.15 release is in beta testing, pending release. -Update these notes with features that are going to be in `main` but not the PX4 v1.15 release. +PX4 v1.16 is in candidate-release testing, pending release. +Update these notes with features that are going to be in `main` but not the PX4 v1.16 release. ::: ## Прочитайте перед оновленням @@ -40,22 +40,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 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. - ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). -- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. - Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. - This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. - ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). -- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) -- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. - This typically reduces false warnings due to magnetometer inconsistencies. - ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). +- Уточнюється ### Управління @@ -71,26 +56,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Симуляція -- [SIH]: - - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. - ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). - - SIH now supports the standard VTOL airframe - ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). -- [Gazebo]: - - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. - The default installer scripts (used for CI) and documentation have been updated. - This is required because Garden end-of-life is Nov 2024. - ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) - - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). - - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). - - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). - - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). - - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). - - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). - - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) - - [Moving platform simulation](../sim_gazebo_gz/worlds#moving-platform) ([PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471)) +- Уточнюється ### Ethernet @@ -98,7 +64,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### uXRCE-DDS / ROS2 -- **[Feature]** [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically ([PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113)) +- [PX4 ROS 2 Interface Library](../ros2/px4_ros2_control_interface.md) support for [Fixed Wing lateral/longitudinal setpoint](../ros2/px4_ros2_control_interface.md#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype) (`FwLateralLongitudinalSetpointType`) and [VTOL transitions](../ros2/px4_ros2_control_interface.md#controlling-a-vtol). ([PX4-Autopilot#24056](https://github.com/PX4/PX4-Autopilot/pull/24056)). ### MAVLink @@ -106,8 +72,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Мульти-Ротор -- Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) -- Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507) +- Уточнюється ### VTOL @@ -115,29 +80,11 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Літак з фіксованим крилом -- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) +- Уточнюється ### Ровер -This release contains a major rework for the rover support in PX4: - -- Complete restructure of the [rover related documentation](../frames_rover/index.md). -- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). -- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): - - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). -- New module dedicated to [differential rovers](../frames_rover/differential.md): - - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). -- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): - - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). -- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). - This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): - - Generic Differential Rover `50000`. - - Generic Ackermann Rover `51000`. - - Axial SCX10 2 Trail Honcho `51001`. - - Generic Mecanum Rover `52000`. -- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. -- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). -- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. +- Уточнюється ### ROS 2 diff --git a/docs/uk/ros2/px4_ros2_control_interface.md b/docs/uk/ros2/px4_ros2_control_interface.md index 9c64317303..8c3fb9e5f6 100644 --- a/docs/uk/ros2/px4_ros2_control_interface.md +++ b/docs/uk/ros2/px4_ros2_control_interface.md @@ -346,6 +346,7 @@ private: Наступні розділи надають список підтримуваних типів установок: - GotoSetpointType: Плавне позиціонування та (за бажанням) керування курсом +- [FwLateralLongitudinalSetpointType](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype): Direct control of lateral and longitudinal fixed wing dynamics - DirectActuatorsSetpointType: Пряме керування моторами та установками сервоприводів польотних поверхонь :::tip @@ -360,7 +361,7 @@ The other setpoint types are currently experimental, and can be found in: [px4_r Цей тип установки наразі підтримується лише для багтрикоптерів. ::: -Плавне керування позицією та (за бажанням) керуванням установками курсу за допомогою типу установки px4_ros2::GotoSetpointType. +Smoothly control position and (optionally) heading setpoints with the [`px4_ros2::GotoSetpointType`](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. Тип установки транслюється до плавних позиційних та курсових вирівнювачів на основі FMU, сформульованих з оптимальним за часом, максимальною швидкістю зміни прискорення, з обмеженнями швидкості та прискорення. Найбільш тривіальне використання полягає в простому введенні 3D-позиції в метод оновлення: @@ -405,6 +406,137 @@ _goto_setpoint->update( max_heading_rate_rad_s); ``` +#### Fixed-Wing Lateral and Longitudinal Setpoint (FwLateralLongitudinalSetpointType) + + + +:::info +This setpoint type is supported for fixed-wing vehicles and for VTOLs in fixed-wing mode. +::: + +Use the [`px4_ros2::FwLateralLongitudinalSetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1FwLateralLongitudinalSetpointType.html) to directly control the lateral and longitudinal dynamics of a fixed-wing vehicle — that is, side-to-side motion (turning/banking) and forward/vertical motion (speeding up and climbing/descending), respectively. +This setpoint is streamed to the PX4 [_FwLateralLongitudinalControl_ module](../modules/modules_controller.md#fw-lat-lon-control), which decouples lateral and longitudinal inputs while ensuring that vehicle limits are respected. + +To control the vehicle, at least one lateral **and** one longitudinal setpoint must be provided: + +1. Of the longitudinal inputs: either `altitude` or `height_rate` must be finite to control vertical motion. + If both are set to `NAN`, the vehicle will maintain its current altitude. +2. Of the lateral inputs: at least one of `course`, `airspeed_direction`, or `lateral_acceleration` must be finite. + +For a detailed description of the controllable parameters, please refer to message definitions ([FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) and [FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md)). + +##### Основне використання + +This type has a number of update methods, each allowing you to specify an increasing number of setpoints. + +The simplest method is `updateWithAltitude()`, which allows you to specify a `course` and `altitude` target setpoint: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, course); +``` + +PX4 uses the setpoints to compute the _roll angle_, _pitch angle_ and _throttle_ setpoints that are sent to lower level controllers. +Note that the commanded flight is expected to be relatively gentle/unaggressive when using this method. +This is done as follows: + +- Lateral control output: + + course setpoint (set by user) → airspeed direction (heading) setpoint → lateral acceleration setpoint → roll angle setpoint. + +- Longitudinal control output: + + altitude setpoint (set by user) → height rate setpoint → pitch angle setpoint and throttle settings. + +The `updateWithHeightRate()` method allows you to set a target `course` and `height_rate` (this is useful if the speed of ascent or descent matters, or needs to be dynamically controlled): + +```cpp +const float height_rate = 2.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithHeightRate(height_rate, course); +``` + +The `updateWithAltitude()` and `updateWithHeightRate()` methods allow you to additionally control the equivalent airspeed or lateral acceleration by specifying them as the third and fourth arguments, respectively: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +const float equivalent_aspd = 15.F; // m/s +const float lateral_acceleration = 2.F; // FRD, used as feedforward + +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, + course, + equivalent_aspd, + lateral_acceleration); +``` + +The equivalent airspeed and lateral acceleration arguments are defined as `std::optional`, so you can omit any of them by passing `std::nullopt`. + +:::tip +If both lateral acceleration and course setpoints are provided, the lateral acceleration setpoint will be used as feedforward. +::: + +##### Full Control Using the Setpoint Struct + +For full flexibility, you can create and pass a [`FwLateralLongitudinalSetpoint`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwLateralLongitudinalSetpoint.html) struct. +Each field is templated with `std::optional`. + +:::tip +If both course and airspeed direction are set: airspeed direction takes precedence, course is not controlled. +Lateral acceleration is treated as feedforward if either course or airspeed direction are also finite. +If both altitude and height rate are set: height rate takes precedence, altitude is not controlled. +::: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withCourse(0.F); +// setpoint_s.withAirspeedDirection(0.2F); // uncontrolled +setpoint_s.withLateralAcceleration(2.F); // feedforward +//setpoint_s.withAltitude(500.F); // uncontrolled +setpoint_s.withHeightRate(2.F); +setpoint_s.withEquivalentAirspeed(15.F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s); +``` + +The diagram below illustrates the interaction between the `FwLateralLongitudinalSetpointType` and PX4 when all inputs are set. + +![FW ROS Interaction](../../assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg) + +##### Advanced Configuration (Optional) + +You can also pass a [`FwControlConfiguration`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwControlConfiguration.html) struct along with the setpoint to override default controller settings and constraints such as pitch limits, throttle limits, and target sink/climb rates. +This is intended for advanced users: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withAirspeedDirection(0.F); +setpoint_s.withLateralAcceleration(2.F); // feedforward +setpoint_s.withAltitude(500.F); +setpoint_s.withEquivalentAirspeed(15.F); + +px4_ros2::FwControlConfiguration config_s; + +config_s.withTargetClimbRate(3.F); +config_s.withMaxAcceleration(5.F); +config_s.withThrottleLimits(0.4F, 0.6F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s, config_s); +``` + +All configuration fields are defined as `std::optional`. +Unset values will default to the PX4 configuration. +See [LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) and [FixedWingLongitudinalConfiguration](../msg_docs/LongitudinalControlConfiguration.md) for more information on configuration options. + +:::info +For safety, PX4 automatically limits configuration values to stay within the vehicle’s constraints. +For example, throttle overrides are clamped to remain between [`FW_THR_MIN`](../advanced_config/parameter_reference.md#FW_THR_MIN) +and [`FW_THR_MAX`](../advanced_config/parameter_reference.md#FW_THR_MAX). +::: + #### Безпосереднє значення параметра Control (DirectActuatorsSetpointType) Клапани можна безпосередньо керувати, використовуючи тип встановлення px4_ros2::DirectActuatorsSetpointType. @@ -416,11 +548,55 @@ _goto_setpoint->update( Якщо ви хочете керувати клапаном, який не контролює рух транспортного засобу, але, наприклад, сервопривід навантаження, подивіться нижче. ::: +### Controlling a VTOL + + + +To control a VTOL in an external flight mode, ensure you're returning the correct setpoint type based on the current flight configuration: + +- Multicopter mode: use a setpoint type that is compatible with multicopter control. For example: either the [`GotoSetpointType`](#go-to-setpoint-gotosetpointtype) or the [`TrajectorySetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1TrajectorySetpointType.html). +- Fixed-wing mode: Use the [`FwLateralLongitudinalSetpointType`](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype). + +As long as the VTOL remains in either multicopter or fixed-wing mode throughout the external mode, no additional handling is required. + +If you would like to command a VTOL transition in your external mode, you need to use the [VTOL API](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1VTOL.html). The VTOL API provides the functionality to command a transition and query the current state of the vehicle. + +Use this API with caution! +Commanding transitions externally makes the user partially responsible for ensuring smooth and safe behavior, unlike onboard transitions (e.g. via RC switch) where PX4 handles the full process: + +1. Ensure that both the `TrajectorySetpointType` and the `FwLateralLongitudinalSetpointType` are available to your mode. +2. Create an instance of `px4_ros2::VTOL` in the constructor of your mode. +3. To command a transition, you can use the `toMulticopter()` or `toFixedwing()` methods on your VTOL object to set the desired state. +4. During transition, send the following combination of setpoints: + + ```cpp + // Assuming the instance of the px4_ros2::VTOL object is called vtol + + // Send TrajectorySetpointType as follows: + Eigen::Vector3f acceleration_sp = vtol.computeAccelerationSetpointDuringTransition(); + Eigen::Vector3f velocity_sp{NAN, NAN, 0.f}; + + _trajectory_setpoint->update(velocity_sp, acceleration_sp); + + // Send FwLateralLongitudinalSetpointType with lateral input to realign vehicle as desired + + float course_sp = 0.F; // North + + _fw_lateral_longitudinal_setpoint->updateWithAltitude(NAN, course_sp) + ``` + + This will ensure that the transition is handled properly within PX4. + You can optionally pass a deceleration setpoint to `computeAccelerationSetpointDuringTransition()` to be used during back-transitions. + +To check the current state of the vehicle, use the `getCurrentState()` method on your `px4_ros2::VTOL` object. + +See [this external flight mode implementation](https://github.com/Auterion/px4-ros2-interface-lib/tree/main/examples/cpp/modes/vtol) for a practical example on how to use this API. + ### Керування незалежним клапаном/сервоприводом Якщо ви хочете керувати незалежним клапаном (сервоприводом), дотримуйтесь цих кроків: -1. Налаштуйте вивід +1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink). 2. Створіть екземпляр px4_ros2::PeripheralActuatorControls у конструкторі вашого режиму. 3. Викличте метод set(), щоб керувати клапаном(-ами). Це може бути зроблено незалежно від будь-яких активних встановлень. @@ -432,6 +608,7 @@ _goto_setpoint->update( - [OdometryGlobalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryGlobalPosition.html): Global position - [OdometryLocalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryLocalPosition.html): Local position, velocity, acceleration, and heading - [OdometryAttitude](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAttitude.html): Vehicle attitude +- [OdometryAirspeed](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAirspeed.html): Airspeed Наприклад, ви можете надати запит на поточну позицію автомобіля наступним чином: diff --git a/docs/uk/ros2/px4_ros2_msg_translation_node.md b/docs/uk/ros2/px4_ros2_msg_translation_node.md index da893b4ec6..7ad1c15295 100644 --- a/docs/uk/ros2/px4_ros2_msg_translation_node.md +++ b/docs/uk/ros2/px4_ros2_msg_translation_node.md @@ -1,6 +1,6 @@ # PX4 ROS 2 Message Translation Node - + The message translation node allows ROS 2 applications that were compiled against different versions of the PX4 messages to interwork with newer versions of PX4, and vice versa, without having to change either the application or the PX4 side. @@ -207,7 +207,7 @@ Message translations can be either _direct_ or _generic_. ### File Structure -Starting from PX4 v1.16 (main), the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: +Starting from PX4 v1.16, the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: ``` PX4-Autopilot diff --git a/docs/uk/ros2/user_guide.md b/docs/uk/ros2/user_guide.md index dd8d249474..ffbf192a6f 100644 --- a/docs/uk/ros2/user_guide.md +++ b/docs/uk/ros2/user_guide.md @@ -34,7 +34,7 @@ The generator uses the uORB message definitions in the source tree: [PX4-Autopil ROS 2 applications need to be built in a workspace that has the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware. You can include these by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your ROS 2 workspace (branches in the repo correspond to the messages for different PX4 releases). -Starting from PX4 v1.16 (main) in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. +Starting from PX4 v1.16, in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. This requires the [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to be running to ensure that messages can be converted and exchanged correctly. Note that the micro XRCE-DDS _agent_ itself has no dependency on client-side code. @@ -378,7 +378,7 @@ accelerometer_integral_dt: 4739 #### (Optional) Starting the Translation Node - + This example is built with PX4 and ROS2 versions that use the same message definitions. If you were to use incompatible [message versions](../middleware/uorb.md#message-versioning) you would need to install and run the [Message Translation Node](./px4_ros2_msg_translation_node.md) as well, before running the example: diff --git a/docs/uk/sim_gazebo_gz/index.md b/docs/uk/sim_gazebo_gz/index.md index 74cf4c66c4..8b9c17d00f 100644 --- a/docs/uk/sim_gazebo_gz/index.md +++ b/docs/uk/sim_gazebo_gz/index.md @@ -396,6 +396,11 @@ As long as the world file and the model file are in the Gazebo search path (`GZ_ However, `make px4_sitl gz__` won't work with them. ::: +## Extending Gazebo with Plugins + +World, vehicle (model), and sensor behaviour can be customised using plugins. +For more information see [Gazebo Plugins](../sim_gazebo_gz/plugins.md). + ## Симуляція кількох рухомих засобів Симуляція кількох засобів підтримується на комп'ютерах з Linux. diff --git a/docs/uk/sim_gazebo_gz/plugins.md b/docs/uk/sim_gazebo_gz/plugins.md new file mode 100644 index 0000000000..9723f44177 --- /dev/null +++ b/docs/uk/sim_gazebo_gz/plugins.md @@ -0,0 +1,92 @@ +# Gazebo Plugins + +Gazebo plugins extend the simulator with custom functionality not provided by default. They can be attached to different entity types and allow you to add new sensors, modify world physics, or interact with the simulation environment. + +## Plugin Types + +Plugins can be attached to these entity types: + +- **World** - Global simulation behavior +- **Model** - Specific model functionality +- **Sensor** - Custom sensor implementations +- **Actor** - Dynamic entity behavior + +## Supported Plugins + +PX4 currently supports these plugins: + +- [OpticalFlowSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/optical_flow): Provides optical flow sensor simulation using OpenCV-based flow calculation. +- [GstCameraSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/gstreamer): Streams camera feeds via UDP (RTP/H.264) or RTMP with optional NVIDIA CUDA hardware acceleration. +- [MovingPlatformController](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/moving_platform_controller): Controls moving platforms (ships, trucks, etc.) for takeoff and landing scenarios. + Includes configurable velocity, heading, and random fluctuations. + +## Plugin Registration + +Plugins must be registered in the [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) file to be available in your world: + +```xml + + + + + + + + + + +``` + +## Creating Custom Plugins + +When developing new plugins: + +1. **Follow the plugin architecture** - Implement desired interfaces. + + You can start by copying the [Template plugin](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/template_plugin) which is a simple example that only implements `ISystemPreUpdate` and `ISystemPostUpdate`. + The interfaces are specified in the official [Gazebo documentation](https://gazebosim.org/api/sim/9/createsystemplugins.html). + +2. **Register your plugin** - Add it to [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) for discovery. + +3. **Use the custom namespace** - Follow the pattern `custom::YourPluginName`. + +### Example Plugin Structure + +```cpp +class YourCustomSystem : + public gz::sim::System, + public gz::sim::ISystemPreUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + void PreUpdate(const gz::sim::UpdateInfo &_info, + gz::sim::EntityComponentManager &_ecm) final; + void PostUpdate(const gz::sim::UpdateInfo &_info, + const gz::sim::EntityComponentManager &_ecm) final; +}; + +// Plugin registration +GZ_ADD_PLUGIN(YourCustomSystem, gz::sim::System, + YourCustomSystem::ISystemPreUpdate, + YourCustomSystem::ISystemPostUpdate) +GZ_ADD_PLUGIN_ALIAS(YourCustomSystem, "custom::YourCustomSystem") +``` + +## Enabling a Plugin + +For world plugins all you need to do is [register the plugin](#plugin-registration) (add it to the `server.config`). +It will then be available to all worlds and vehicles. + +The process for adding vehicle model/sensor plugins is not documented. +This can tracked through [PX4-Autopilot#2493](https://github.com/PX4/PX4-Autopilot/issues/24939). + +## Resources + +- **PX4 Plugins**: [Repository source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins) +- **Official Gazebo Documentation**: [System Plugins Guide](https://gazebosim.org/api/sim/9/createsystemplugins.html) +- **Server Configuration**: [Configuration Reference](https://gazebosim.org/api/sim/9/server_config.html) +- **PX4 Gazebo-classic Plugins**: [PX4 Gazebo Classic Plugins](https://github.com/PX4/PX4-SITL_gazebo-classic/tree/main/src) + +:::info +Plugins for modern Gazebo are still evolving. The plugin system differs from Gazebo Classic. +::: diff --git a/docs/uk/sim_gazebo_gz/worlds.md b/docs/uk/sim_gazebo_gz/worlds.md index ea3042666d..bb79e6faaa 100644 --- a/docs/uk/sim_gazebo_gz/worlds.md +++ b/docs/uk/sim_gazebo_gz/worlds.md @@ -75,7 +75,7 @@ World with walls that is designed for testing [collision prevention](../computer ## Moving Platform - + [Empty world](#default) with the addition of a flat moving platform, to simulate drone operations from moving vehicles like ships or trucks. The platform is controlled by a plugin which is included in the world. The platform is at a height of 2m, so place the vehicle on it with: diff --git a/docs/uk/sim_sih/index.md b/docs/uk/sim_sih/index.md index bb3b9ceac7..c6e4f60611 100644 --- a/docs/uk/sim_sih/index.md +++ b/docs/uk/sim_sih/index.md @@ -58,6 +58,7 @@ To set up/start SIH: 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) @@ -116,25 +117,31 @@ In this case you don't need the flight controller hardware. 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: + - XVert VTOL tailsitter ```sh make px4_sitl sihsim_xvert ``` - - Standard VTOL: + - Standard VTOL ```sh make px4_sitl sihsim_standard_vtol @@ -235,9 +242,10 @@ For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init. Динамічні моделі для різних транспортних засобів: -- Quadrotor: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/assets/simulation/SIH_dynamic_model.pdf). -- Fixed-wing: Inspired by the PhD thesis: "Dynamics modeling of agile fixed-wing unmanned aerial vehicles." Khan, Waqas, під керівництвом Nahon, Meyer, Університет Макгілла, докторська дисертація, 2016. -- Tailsitter: Inspired by the master's thesis: "Modeling and control of a flying wing tailsitter unmanned aerial vehicle." Chiappinelli, Romain, під керівництвом Nahon, Meyer, Університет Макгілла, магістерська робота, 2018. +- Quadcopter: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/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. ## Відео diff --git a/docs/uk/simulation/community_supported_simulators.md b/docs/uk/simulation/community_supported_simulators.md index 08509b5c96..8f6035c53a 100644 --- a/docs/uk/simulation/community_supported_simulators.md +++ b/docs/uk/simulation/community_supported_simulators.md @@ -12,10 +12,10 @@ These simulators are not maintained, tested, or supported, by the core developme Інструменти мають різний рівень підтримки своїми спільнотами (деякі добре підтримують, інші - ні). Питання про ці інструменти повинні порушуватися на [форумах для обговорення](../contribute/support.md#forums-and-chat) -| Симулятор | Опис | -| ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [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) |

Міжплатформовий симулятор який надає фізично та візуально реалістичні симуляції. Цей симулятор ресурсомісткий та потребує значно потужніший комп'ютер ніж інші описані тут симулятори.

Рухомі засоби, що підтримуються: Iris (модель мультиротора та налаштування для PX4 квадрокоптера в конфігурації "X").

| -| [Simulation-In-Hardware](../sim_sih/README.md) (SIH) |

Альтернатива симуляції HITL, яка пропонує важку симуляцію в реальному часі безпосередньо на обладнанні автопілота. Цей симулятор реалізований на C++ у вигляді модуля PX4 безпосередньо в [коді](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulator_sih) прошивки.

Supported Vehicles: Plane, Quad, Tailsitter, Standard VTOL

| +| Симулятор | Опис | +| ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [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

| +| [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) |

Міжплатформовий симулятор який надає фізично та візуально реалістичні симуляції. Цей симулятор ресурсомісткий та потребує значно потужніший комп'ютер ніж інші описані тут симулятори.

Рухомі засоби, що підтримуються: Iris (модель мультиротора та налаштування для PX4 квадрокоптера в конфігурації "X").

| diff --git a/docs/uk/telemetry/crsf_telemetry.md b/docs/uk/telemetry/crsf_telemetry.md index 6ca4bf6150..740a621a35 100644 --- a/docs/uk/telemetry/crsf_telemetry.md +++ b/docs/uk/telemetry/crsf_telemetry.md @@ -71,7 +71,7 @@ For ExpressLRS receivers wire to the flight controller UART as shown below (wiri ### Конфігурація прошивки/збірка Підтримка телеметрії CRSF не включена в жодне ПЗ PX4 за замовчуванням. -To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver.md#crsf-rc) and removes [rc_input](../modules/modules_driver.md#rc-input). +To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver_radio_control.md#crsf-rc) and removes [rc_input](../modules/modules_driver_radio_control.md#rc-input). Кроки наступні: diff --git a/docs/uk/telemetry/jfi_telemetry.md b/docs/uk/telemetry/jfi_telemetry.md index f1a5b1951c..decce61a0d 100644 --- a/docs/uk/telemetry/jfi_telemetry.md +++ b/docs/uk/telemetry/jfi_telemetry.md @@ -20,7 +20,7 @@ Operating in the 2.4GHz frequency band, it allows unrestricted global use withou - **Frequency Band:** 2.4GHz - **Speed:** Up to 11 Mbps (adjustable) -- **Range:** Up to 500 meters (varies upon environments) +- **Range:** Up to 1000 meters (varies upon environments) - **Payload Capacity:** Up to 1024 bytes ### Network Schemes diff --git a/docs/uk/tutorials/linux_sbus.md b/docs/uk/tutorials/linux_sbus.md index d6152de51b..42bf4db62a 100644 --- a/docs/uk/tutorials/linux_sbus.md +++ b/docs/uk/tutorials/linux_sbus.md @@ -10,9 +10,7 @@ For an S.Bus receiver (or encoder - e.g. from Futaba, RadioLink, etc.) you will Then [Start the PX4 RC Driver](#start_driver) on the device, as shown below. - - -## Запуск драйвера +## Starting the Driver {#start_driver} To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): @@ -20,11 +18,9 @@ To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): rc_input start -d /dev/ttyS2 ``` -For other driver usage information see: [rc_input](../modules/modules_driver.md#rc-input). +For other driver usage information see: [rc_input](../modules/modules_driver_radio_control.md#rc-input). - - -## Схема інвертування сигналу (лише для S.Bus) +## Signal Inverter Circuit (S.Bus only) {#signal_inverter_circuit} S.Bus is an _inverted_ UART communication signal. diff --git a/docs/zh/SUMMARY.md b/docs/zh/SUMMARY.md index 12fc678e53..445e68f7e4 100644 --- a/docs/zh/SUMMARY.md +++ b/docs/zh/SUMMARY.md @@ -459,6 +459,7 @@ - [Vehicles](sim_gazebo_gz/vehicles.md) - [Advanced Lift Drag Tool](sim_gazebo_gz/tools_avl_automation.md) - [Worlds](sim_gazebo_gz/worlds.md) + - [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) - [Gazebo Classic Simulation](sim_gazebo_classic/index.md) @@ -491,12 +492,17 @@ - [Versioned](msg_docs/versioned_messages.md) - [ActuatorMotors](msg_docs/ActuatorMotors.md) - [ActuatorServos](msg_docs/ActuatorServos.md) + - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [ArmingCheckReply](msg_docs/ArmingCheckReply.md) - [ArmingCheckRequest](msg_docs/ArmingCheckRequest.md) - [BatteryStatus](msg_docs/BatteryStatus.md) - [ConfigOverrides](msg_docs/ConfigOverrides.md) + - [FixedWingLateralSetpoint](msg_docs/FixedWingLateralSetpoint.md) + - [FixedWingLongitudinalSetpoint](msg_docs/FixedWingLongitudinalSetpoint.md) - [GotoSetpoint](msg_docs/GotoSetpoint.md) - [HomePosition](msg_docs/HomePosition.md) + - [LateralControlConfiguration](msg_docs/LateralControlConfiguration.md) + - [LongitudinalControlConfiguration](msg_docs/LongitudinalControlConfiguration.md) - [ManualControlSetpoint](msg_docs/ManualControlSetpoint.md) - [ModeCompleted](msg_docs/ModeCompleted.md) - [RegisterExtComponentReply](msg_docs/RegisterExtComponentReply.md) @@ -525,10 +531,8 @@ - [ActuatorTest](msg_docs/ActuatorTest.md) - [AdcReport](msg_docs/AdcReport.md) - [Airspeed](msg_docs/Airspeed.md) - - [AirspeedValidated](msg_docs/AirspeedValidated.md) - [AirspeedWind](msg_docs/AirspeedWind.md) - [AutotuneAttitudeControlStatus](msg_docs/AutotuneAttitudeControlStatus.md) - - [Buffer128](msg_docs/Buffer128.md) - [ButtonEvent](msg_docs/ButtonEvent.md) - [CameraCapture](msg_docs/CameraCapture.md) - [CameraStatus](msg_docs/CameraStatus.md) @@ -567,6 +571,9 @@ - [FailsafeFlags](msg_docs/FailsafeFlags.md) - [FailureDetectorStatus](msg_docs/FailureDetectorStatus.md) - [FigureEightStatus](msg_docs/FigureEightStatus.md) + - [FixedWingLateralGuidanceStatus](msg_docs/FixedWingLateralGuidanceStatus.md) + - [FixedWingLateralStatus](msg_docs/FixedWingLateralStatus.md) + - [FixedWingRunwayControl](msg_docs/FixedWingRunwayControl.md) - [FlightPhaseEstimation](msg_docs/FlightPhaseEstimation.md) - [FollowTarget](msg_docs/FollowTarget.md) - [FollowTargetEstimator](msg_docs/FollowTargetEstimator.md) @@ -619,7 +626,6 @@ - [NavigatorMissionItem](msg_docs/NavigatorMissionItem.md) - [NavigatorStatus](msg_docs/NavigatorStatus.md) - [NormalizedUnsignedSetpoint](msg_docs/NormalizedUnsignedSetpoint.md) - - [NpfgStatus](msg_docs/NpfgStatus.md) - [ObstacleDistance](msg_docs/ObstacleDistance.md) - [OffboardControlMode](msg_docs/OffboardControlMode.md) - [OnboardComputerStatus](msg_docs/OnboardComputerStatus.md) @@ -655,13 +661,12 @@ - [RcParameterMap](msg_docs/RcParameterMap.md) - [RoverAttitudeSetpoint](msg_docs/RoverAttitudeSetpoint.md) - [RoverAttitudeStatus](msg_docs/RoverAttitudeStatus.md) - - [RoverMecanumGuidanceStatus](msg_docs/RoverMecanumGuidanceStatus.md) - - [RoverMecanumSetpoint](msg_docs/RoverMecanumSetpoint.md) - - [RoverMecanumStatus](msg_docs/RoverMecanumStatus.md) + - [RoverPositionSetpoint](msg_docs/RoverPositionSetpoint.md) - [RoverRateSetpoint](msg_docs/RoverRateSetpoint.md) - [RoverRateStatus](msg_docs/RoverRateStatus.md) - [RoverSteeringSetpoint](msg_docs/RoverSteeringSetpoint.md) - [RoverThrottleSetpoint](msg_docs/RoverThrottleSetpoint.md) + - [RoverVelocitySetpoint](msg_docs/RoverVelocitySetpoint.md) - [RoverVelocityStatus](msg_docs/RoverVelocityStatus.md) - [Rpm](msg_docs/Rpm.md) - [RtlStatus](msg_docs/RtlStatus.md) @@ -693,6 +698,7 @@ - [TelemetryStatus](msg_docs/TelemetryStatus.md) - [TiltrotorExtraControls](msg_docs/TiltrotorExtraControls.md) - [TimesyncStatus](msg_docs/TimesyncStatus.md) + - [TrajectorySetpoint6dof](msg_docs/TrajectorySetpoint6dof.md) - [TransponderReport](msg_docs/TransponderReport.md) - [TuneControl](msg_docs/TuneControl.md) - [UavcanParameterRequest](msg_docs/UavcanParameterRequest.md) @@ -716,13 +722,16 @@ - [WheelEncoders](msg_docs/WheelEncoders.md) - [Wind](msg_docs/Wind.md) - [YawEstimatorStatus](msg_docs/YawEstimatorStatus.md) + - [AirspeedValidatedV0](msg_docs/AirspeedValidatedV0.md) + - [VehicleAttitudeSetpointV0](msg_docs/VehicleAttitudeSetpointV0.md) - [VehicleStatusV0](msg_docs/VehicleStatusV0.md) - - [MAVLink通讯](middleware/mavlink.md) + - [MAVLink Messaging](mavlink/index.md) - [Adding Messages](mavlink/adding_messages.md) - [Streaming Messages](mavlink/streaming_messages.md) - [Receiving Messages](mavlink/receiving_messages.md) - [Custom MAVLink Messages](mavlink/custom_messages.md) - - [Standard Modes Protocol](mavlink/standard_modes.md) + - [Protocols/Microservices](mavlink/protocols.md) + - [Standard Modes Protocol](mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) - [模块 & 命令](modules/modules_main.md) - [自动调参](modules/modules_autotune.md) @@ -739,6 +748,7 @@ - [磁罗盘](modules/modules_driver_magnetometer.md) - [光流](modules/modules_driver_optical_flow.md) - [Rpm Sensor](modules/modules_driver_rpm_sensor.md) + - [Radio Control](modules/modules_driver_radio_control.md) - [Transponder](modules/modules_driver_transponder.md) - [估计器](modules/modules_estimator.md) - [仿真](modules/modules_simulation.md) @@ -851,6 +861,7 @@ - [版本发布](releases/index.md) - [main (alpha)](releases/main.md) + - [1.16 (release candidate)](releases/1.16.md) - [1.15 (stable)](releases/1.15.md) - [1.14](releases/1.14.md) - [1.13](releases/1.13.md) diff --git a/docs/zh/_sidebar.md b/docs/zh/_sidebar.md index 97c92918d6..fbb93d9a0a 100644 --- a/docs/zh/_sidebar.md +++ b/docs/zh/_sidebar.md @@ -42,8 +42,9 @@ - [MindRacer BNF & RTF](/complete_vehicles_mc/mindracer_BNF_RTF.md) - [MindRacer 210](/complete_vehicles_mc/mindracer210.md) - [NanoMind 110](/complete_vehicles_mc/nanomind110.md) - - [Holybro Kopis 2](/complete_vehicles_mc/holybro_kopis2.md) - [Bitcraze Crazyflie 2.1](/complete_vehicles_mc/crazyflie21.md) + - [Holybro Kopis 2](/complete_vehicles_mc/holybro_kopis2.md) + - [Amov F410 Drone](/complete_vehicles_mc/amov_F410_drone.md) - [套装](/frames_multicopter/kits.md) - [X500 v2 (Pixhawk 6C)](/frames_multicopter/holybro_x500v2_pixhawk6c.md) - [X500 v2 (Pixhawk 5X)](/frames_multicopter/holybro_x500V2_pixhawk5x.md) @@ -182,6 +183,7 @@ - [Holybro Kakute H7v2](/flight_controller/kakuteh7v2.md) - [Holybro Kakute H7mini](/flight_controller/kakuteh7mini.md) - [Holybro Kakute H7](/flight_controller/kakuteh7.md) + - [Holybro Kakute H7 Wing](/flight_controller/kakuteh7-wing.md) - [Holybro Durandal](/flight_controller/durandal.md) - [Wiring Quickstart](/assembly/quick_start_durandal.md) - [Holybro Pix32 v5](/flight_controller/holybro_pix32_v5.md) @@ -253,6 +255,7 @@ - [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 SAM GPS](/gps_compass/ark_sam_gps.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) @@ -314,6 +317,7 @@ - [Joysticks](/config/joystick.md) - [Data Links](/data_links/index.md) - [MAVLink 回传(OSD/GCS)](/peripherals/mavlink_peripherals.md) + - [数传电台](/telemetry/index.md) - [SiK 电台](/telemetry/sik_radio.md) - [RFD900 (SiK) 数传电台](/telemetry/rfd900_telemetry.md) @@ -326,9 +330,13 @@ - [ARK Electron Microhard Serial Telemetry Radio](/telemetry/ark_microhard_serial.md) - [Holybro Microhard P900 Telemetry Radio](/telemetry/holybro_microhard_p900_radio.md) - [CUAV P8 Telemetry Radio](/telemetry/cuav_p8_radio.md) + - [J.Fi Wireless Telemetry Module](/telemetry/jfi_telemetry.md) - [HolyBro XBP9X - Discontinued](/telemetry/holybro_xbp9x_radio.md) + - [睿思凯数传](/peripherals/frsky_telemetry.md) + - [TBS Crossfire (CRSF) Telemetry](/telemetry/crsf_telemetry.md) + - [Satellite Comms (Iridium/RockBlock)](/advanced_features/satcom_roadblock.md) - [Power Systems](/power_systems/index.md) - [Battery Estimation Tuning](/config/battery.md) @@ -637,6 +645,7 @@ - [PowerButtonState](/msg_docs/PowerButtonState.md) - [PowerMonitor](/msg_docs/PowerMonitor.md) - [PpsCapture](/msg_docs/PpsCapture.md) + - [PurePursuitStatus](/msg_docs/PurePursuitStatus.md) - [PwmInput](/msg_docs/PwmInput.md) - [Px4ioStatus](/msg_docs/Px4ioStatus.md) - [QshellReq](/msg_docs/QshellReq.md) @@ -710,6 +719,10 @@ - [YawEstimatorStatus](/msg_docs/YawEstimatorStatus.md) - [VehicleStatusV0](/msg_docs/VehicleStatusV0.md) - [MAVLink通讯](/middleware/mavlink.md) + - [Adding Messages](/mavlink/adding_messages.md) + - [Streaming Messages](/mavlink/streaming_messages.md) + - [Receiving Messages](/mavlink/receiving_messages.md) + - [Custom MAVLink Messages](/mavlink/custom_messages.md) - [Standard Modes Protocol](/mavlink/standard_modes.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](/middleware/uxrce_dds.md) - [模块 & 命令](/modules/modules_main.md) @@ -798,8 +811,10 @@ - [测试 MC_05-室内飞行(手动模式)](/test_cards/mc_05_indoor_flight_manual_modes.md) - [单元测试](/test_and_ci/unit_tests.md) - [持续集成](/test_and_ci/continous_integration.md) - - [MAVSDK集成测试](/test_and_ci/integration_testing_mavsdk.md) - - [ROS集成测试](/test_and_ci/integration_testing.md) + - [Integration Testing](/test_and_ci/integration_testing.md) + - [MAVSDK集成测试](/test_and_ci/integration_testing_mavsdk.md) + - [PX4 ROS2 Interface Library Integration Testing](/test_and_ci/integration_testing_px4_ros2_interface.md) + - [ROS 1 Integration Testing](/test_and_ci/integration_testing_ros1_mavros.md) - [Docker 容器](/test_and_ci/docker.md) - [维护](/test_and_ci/maintenance.md) @@ -840,4 +855,4 @@ - [1.15 (stable)](/releases/1.15.md) - [1.14](/releases/1.14.md) - [1.13](/releases/1.13.md) - - [1.12](/releases/1.12.md) \ No newline at end of file + - [1.12](/releases/1.12.md) diff --git a/docs/zh/config/safety.md b/docs/zh/config/safety.md index d1c813c15a..b4d1fffa52 100644 --- a/docs/zh/config/safety.md +++ b/docs/zh/config/safety.md @@ -187,7 +187,24 @@ The following settings also apply, but are not displayed in the QGC UI. ## Position (GNSS) Loss Failsafe -The _Position Loss Failsafe_ is triggered if the quality of the PX4 global position estimate falls below acceptable levels (this might be caused by GPS loss) while in a mode that requires an acceptable position estimate. +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: + +- 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). + +The relevant parameters shown below. + +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| [EKF2_NOAID_TOUT](../advanced_config/parameter_reference.md#EKF2_NOAID_TOUT) | Maximum inertial dead-reckoning time, so the time after the last data sample was received of any sensor that constrains the velocity drift [microseconds]. | +| [COM_POS_FS_EPH](../advanced_config/parameter_reference.md#COM_POS_FS_EPH) | Horizontal position error threshold for hovering vehicles (Multicopters and VTOLs in hover). Fixed-wing vehicles have this value set to infinity. | + +### Position Loss Failsafe Action The failure action is controlled by [COM_POSCTL_NAVL](../advanced_config/parameter_reference.md#COM_POSCTL_NAVL), based on whether RC control is assumed to be available (and altitude information): diff --git a/docs/zh/contribute/docs.md b/docs/zh/contribute/docs.md index 1bf93036f2..bf401d8858 100644 --- a/docs/zh/contribute/docs.md +++ b/docs/zh/contribute/docs.md @@ -181,11 +181,19 @@ Within the repository you created above: 5. 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, on Windows command line you can enable VSCode as your default editor by entering: + For example, you can enable VSCode as your default editor by entering: - ```sh - set EDITOR=code - ``` + - Windows: + + ```sh + set EDITOR=code + ``` + + - Linux: + + ```sh + export EDITOR=code + ``` 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). diff --git a/docs/zh/dev_log/log_encryption.md b/docs/zh/dev_log/log_encryption.md index c8c4258e9b..f8783e32ef 100644 --- a/docs/zh/dev_log/log_encryption.md +++ b/docs/zh/dev_log/log_encryption.md @@ -12,7 +12,7 @@ To use it you will need to build firmware with this feature enabled and then upl ::: :::tip -Log encryption was has been improved in PX4 main (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). +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). diff --git a/docs/zh/flight_controller/kakuteh7-wing.md b/docs/zh/flight_controller/kakuteh7-wing.md index 396320b787..e426a8aabe 100644 --- a/docs/zh/flight_controller/kakuteh7-wing.md +++ b/docs/zh/flight_controller/kakuteh7-wing.md @@ -1,4 +1,6 @@ -# Holybro Kakute H7 V2 +# Holybro Kakute H743-Wing + + :::warning PX4 does not manufacture this (or any) autopilot. @@ -31,9 +33,7 @@ The board can be bought from one of the following shops (for example): | Buz-, Buz+ | Piezo buzzer | | | M1 to M14 | Motor signal outputs | | - - -## PX4 Bootloader Update +## PX4 Bootloader Update {#bootloader} The board comes pre-installed with [Betaflight](https://github.com/betaflight/betaflight/wiki). Before the PX4 firmware can be installed, the _PX4 bootloader_ must be flashed. @@ -50,7 +50,7 @@ make holybro_kakuteh7-wing_default ## Installing PX4 Firmware :::info -KakuteH7-wing is supported with PX4 master & PX4 v1.16 or newer.. +KakuteH7-wing is supported in PX4 v1.16 or newer. Prior to that release you will need to manually build and install the firmware. ::: diff --git a/docs/zh/flight_modes_fw/land.md b/docs/zh/flight_modes_fw/land.md index d16b68b25b..0a4220437d 100644 --- a/docs/zh/flight_modes_fw/land.md +++ b/docs/zh/flight_modes_fw/land.md @@ -41,11 +41,12 @@ The vehicle will flare if configured to do so (see [Flaring](../flight_modes_fw/ Land mode behaviour can be configured using the parameters below. -| 参数 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | The loiter radius that the controller tracks for the whole landing sequence. | -| [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | The flight path angle setpoint. | -| [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | The airspeed setpoint. | +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [NAV_LOITER_RAD](../advanced_config/parameter_reference.md#NAV_LOITER_RAD) | The loiter radius that the controller tracks for the whole landing sequence. | +| [FW_LND_ANG](../advanced_config/parameter_reference.md#FW_LND_ANG) | The flight path angle setpoint. | +| [FW_LND_AIRSPD](../advanced_config/parameter_reference.md#FW_LND_AIRSPD) | The airspeed setpoint. | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_LND_AIRSPD is below FW_AIRSPD_MIN. | ## See Also diff --git a/docs/zh/flight_modes_fw/takeoff.md b/docs/zh/flight_modes_fw/takeoff.md index 900377d4c4..76f3f5efa9 100644 --- a/docs/zh/flight_modes_fw/takeoff.md +++ b/docs/zh/flight_modes_fw/takeoff.md @@ -43,13 +43,14 @@ Reaching the clearance altitude causes the vehicle to enter [Hold mode](../fligh Parameters that affect both catapult/hand-launch and runway takeoffs: -| 参数 | 描述 | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [MIS_TAKEOFF_ALT](../advanced_config/parameter_reference.md#MIS_TAKEOFF_ALT) | Minimum altitude setpoint above Home that the vehicle will climb to during takeoff. | -| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Takeoff airspeed (is set to [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) if not defined by operator) | -| [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | This is the minimum pitch angle setpoint during the climbout phase | -| [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Maximum climb rate. | -| [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Flaps setpoint during takeoff | +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [MIS_TAKEOFF_ALT](../advanced_config/parameter_reference.md#MIS_TAKEOFF_ALT) | Minimum altitude setpoint above Home that the vehicle will climb to during takeoff. | +| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Takeoff airspeed (is set to [FW_AIRSPD_MIN](../advanced_config/parameter_reference.md#FW_AIRSPD_MIN) if not defined by operator) | +| [FW_TKO_PITCH_MIN](../advanced_config/parameter_reference.md#FW_TKO_PITCH_MIN) | This is the minimum pitch angle setpoint during the climbout phase | +| [FW_T_CLMB_MAX](../advanced_config/parameter_reference.md#FW_T_CLMB_MAX) | Maximum climb rate. | +| [FW_FLAPS_TO_SCL](../advanced_config/parameter_reference.md#FW_FLAPS_TO_SCL) | Flaps setpoint during takeoff | +| [FW_AIRSPD_FLP_SC](../advanced_config/parameter_reference.md#FW_AIRSPD_FLP_SC) | Factor applied to the minimum airspeed when flaps are fully deployed. Necessary if FW_TKO_AIRSPD is below FW_AIRSPD_MIN. | :::info The vehicle always respects normal FW max/min throttle settings during takeoff ([FW_THR_MIN](../advanced_config/parameter_reference.md#FW_THR_MIN), [FW_THR_MAX](../advanced_config/parameter_reference.md#FW_THR_MAX)). @@ -101,26 +102,25 @@ The _runway takeoff mode_ has the following phases: :::info For a smooth takeoff, the runway wheel controller possibly needs to be tuned. -It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)) and an outer loop that calculates heading setpoints from course errors and can be tuned via [RWTO_NPFG_PERIOD](#RWTO_NPFG_PERIOD). +It consists of a rate controller (P-I-FF-controller with the parameters [FW_WR_P](../advanced_config/parameter_reference.md#FW_WR_P), [FW_WR_I](../advanced_config/parameter_reference.md#FW_WR_I), [FW_WR_FF](../advanced_config/parameter_reference.md#FW_WR_FF)). ::: ### Parameters (Runway Takeoff) Runway takeoff is affected by the following parameters: -| 参数 | 描述 | -| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [RWTO_TKOFF](../advanced_config/parameter_reference.md#RWTO_TKOFF) | Enable runway takeoff | -| [FW_W_EN](../advanced_config/parameter_reference.md#FW_W_EN) | Enable wheel controller | -| [RWTO_MAX_THR](../advanced_config/parameter_reference.md#RWTO_MAX_THR) | Max throttle during runway takeoff | -| [RWTO_RAMP_TIME](../advanced_config/parameter_reference.md#RWTO_RAMP_TIME) | Throttle ramp up time | -| [RWTO_ROT_AIRSPD](../advanced_config/parameter_reference.md#RWTO_ROT_AIRSPD) | Airspeed threshold to start rotation (pitching up). If not configured by operator is set to 0.9\*FW_TKO_AIRSPD. | -| [RWTO_ROT_TIME](../advanced_config/parameter_reference.md#RWTO_ROT_TIME) | This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation. | -| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Airspeed setpoint during the takeoff climbout phase (after rotation). If not configured by operator is set to FW_AIRSPD_MIN. | -| [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Enable wheel controller nudging while on the runway | -| [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | The wingspan of the vehicle. Used to prevent wingstrikes. | -| [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | The height of the wings above ground (ground clearance). Used to prevent wingstrikes. | -| [RWTO_NPFG_PERIOD](../advanced_config/parameter_reference.md#RWTO_NPFG_PERIOD) | L1 period while steering on runway. Increase for less aggressive response to course errors. | +| 参数 | 描述 | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [RWTO_TKOFF](../advanced_config/parameter_reference.md#RWTO_TKOFF) | Enable runway takeoff | +| [FW_W_EN](../advanced_config/parameter_reference.md#FW_W_EN) | Enable wheel controller | +| [RWTO_MAX_THR](../advanced_config/parameter_reference.md#RWTO_MAX_THR) | Max throttle during runway takeoff | +| [RWTO_RAMP_TIME](../advanced_config/parameter_reference.md#RWTO_RAMP_TIME) | Throttle ramp up time | +| [RWTO_ROT_AIRSPD](../advanced_config/parameter_reference.md#RWTO_ROT_AIRSPD) | Airspeed threshold to start rotation (pitching up). If not configured by operator is set to 0.9\*FW_TKO_AIRSPD. | +| [RWTO_ROT_TIME](../advanced_config/parameter_reference.md#RWTO_ROT_TIME) | This is the time desired to linearly ramp in takeoff pitch constraints during the takeoff rotation. | +| [FW_TKO_AIRSPD](../advanced_config/parameter_reference.md#FW_TKO_AIRSPD) | Airspeed setpoint during the takeoff climbout phase (after rotation). If not configured by operator is set to FW_AIRSPD_MIN. | +| [RWTO_NUDGE](../advanced_config/parameter_reference.md#RWTO_NUDGE) | Enable wheel controller nudging while on the runway | +| [FW_WING_SPAN](../advanced_config/parameter_reference.md#FW_WING_SPAN) | The wingspan of the vehicle. Used to prevent wingstrikes. | +| [FW_WING_HEIGHT](../advanced_config/parameter_reference.md#FW_WING_HEIGHT) | The height of the wings above ground (ground clearance). Used to prevent wingstrikes. | ## See Also diff --git a/docs/zh/flight_modes_rover/ackermann.md b/docs/zh/flight_modes_rover/ackermann.md index b28ed4531b..a46e229df9 100644 --- a/docs/zh/flight_modes_rover/ackermann.md +++ b/docs/zh/flight_modes_rover/ackermann.md @@ -137,7 +137,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | 通信 | 描述 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | diff --git a/docs/zh/flight_modes_rover/differential.md b/docs/zh/flight_modes_rover/differential.md index 365f2cd851..f28a239af0 100644 --- a/docs/zh/flight_modes_rover/differential.md +++ b/docs/zh/flight_modes_rover/differential.md @@ -115,7 +115,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | 通信 | 描述 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | diff --git a/docs/zh/flight_modes_rover/mecanum.md b/docs/zh/flight_modes_rover/mecanum.md index 44f1073ab4..924dd7b55b 100644 --- a/docs/zh/flight_modes_rover/mecanum.md +++ b/docs/zh/flight_modes_rover/mecanum.md @@ -140,7 +140,7 @@ The mission is typically created and uploaded with a Ground Control Station (GCS #### Mission commands -The following commands can be used in missions at time of writing (`main`/planned for `PX4 v1.16+`): +The following commands can be used in missions at time of writing (PX4 v1.16): | QGC mission item | 通信 | 描述 | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | diff --git a/docs/zh/frames_plane/reptile_dragon_2.md b/docs/zh/frames_plane/reptile_dragon_2.md index 971a70f43e..11e4bc7ba7 100644 --- a/docs/zh/frames_plane/reptile_dragon_2.md +++ b/docs/zh/frames_plane/reptile_dragon_2.md @@ -325,7 +325,7 @@ Access to this cable can be accomplished by simply removing the rear hatch and u ## Firmware Build -You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. +You can't use prebuilt PX4 release (or main) firmware for this vehicle, as it depends on PX4 modules [crsf_rc](../modules/modules_driver_radio_control.md#crsf-rc) and [msp_osd](../modules/modules_driver.md#msp-osd) that are not included by default. These require some custom configuration to enable. diff --git a/docs/zh/frames_rover/ackermann.md b/docs/zh/frames_rover/ackermann.md index 80575a7ee9..3a8c1c191e 100644 --- a/docs/zh/frames_rover/ackermann.md +++ b/docs/zh/frames_rover/ackermann.md @@ -1,6 +1,6 @@ # Ackermann Rovers - + An _Ackermann rover_ controls its direction by pointing the front wheels in the direction of travel — the [Ackermann steering geometry](https://en.wikipedia.org/wiki/Ackermann_steering_geometry) compensates for the fact that wheels on the inside and outside of the turn move at different rates. This kind of steering is used on most commercial vehicles, including cars, trucks etc. diff --git a/docs/zh/frames_rover/differential.md b/docs/zh/frames_rover/differential.md index a74fbd1d50..95ffe04993 100644 --- a/docs/zh/frames_rover/differential.md +++ b/docs/zh/frames_rover/differential.md @@ -1,6 +1,6 @@ # Differential Rovers - + A differential rover's motion is controlled using a differential drive mechanism, where the left and right wheel speeds are adjusted independently to achieve the desired forward speed and yaw rate. Forward motion is achieved by driving both wheels at the same speed in the same direction. diff --git a/docs/zh/frames_rover/mecanum.md b/docs/zh/frames_rover/mecanum.md index 7d9a249156..548e7bcf4c 100644 --- a/docs/zh/frames_rover/mecanum.md +++ b/docs/zh/frames_rover/mecanum.md @@ -1,6 +1,6 @@ # Mecanum Rovers - + A Mecanum rover is a type of mobile robot that uses Mecanum wheels to achieve omnidirectional movement. These wheels are unique because they have rollers mounted at a 45-degree angle around their circumference, allowing the rover to move not only forward and backward but also side-to-side and diagonally without needing to rotate first. Each wheel is driven by its own motor, and by controlling the speed and direction of each motor, the rover can move in any direction or spin in place. diff --git a/docs/zh/mavlink/index.md b/docs/zh/mavlink/index.md new file mode 100644 index 0000000000..f63038018f --- /dev/null +++ b/docs/zh/mavlink/index.md @@ -0,0 +1,89 @@ +# MAVLink通讯 + +[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. + +PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. + +This topic provides a brief overview of fundamental MAVLink concepts, such as messages, commands, and microservices. +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) +- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) +- [Custom MAVLink Messages](../mavlink/custom_messages.md) +- [Protocols/Microservices](../mavlink/protocols.md) + +:::info +We do not yet cover _command_ handling and sending, or how to implement your own microservices. +::: + +## MAVLink Overview + +MAVLink is a lightweight protocol that was designed for efficiently sending messages over unreliable low-bandwidth radio links. + +_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. +They are deliberately lightweight, with a constrained size, and no semantics for resending and acknowledgement. +Stand-alone messages are commonly used for streaming telemetry or status information, and for sending commands where no acknowledgement is required - such as setpoint commands sent at high rate. + +[Microservices](../mavlink/protocols.md) are "meta protocols" built on top of MAVLink messages. +They are used to communicate information that cannot be sent in a single message. + +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) is a service for sending commands that may need acknowledgement and retransmission (quality of service). +Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. +The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. +The command is automatically resent a number of times if no acknowledgment is received. +Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. + +Others services include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html), [Parameter Protocol](https://mavlink.io/en/services/parameter.html), and [Mission Protocol](https://mavlink.io/en/services/mission.html). +For more information on what PX4 supports see [Microservices](../mavlink/protocols.md). + +MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). +The MAVLink toolchain includes code generators that create programming-language-specific libraries from these definitions for sending and receiving messages. +Note that most generated libraries do not create code to implement microservices. + +The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): + +- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. + The definitions move to `common.xml` if accepted following testing. +- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. + These are supported by many flight stacks, ground stations, and MAVLink peripherals. + Flight stacks that use these definitions are more likely to interoperate. +- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. + They are present on the vast majority of flight stacks and implemented in the same way. +- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. + +The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. + +The protocol relies on each end of the communication having a shared definition of what messages are being sent. +What this means is that in order to communicate both ends of the communication must use libraries generated from the same XML definition. + + + +## PX4 and MAVLink + +PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. +In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. + +:::info +To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). +During development you can use definitions in `development.xml`. +You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. +::: + +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/). + +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`: + +- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). + You can change this to any other definition file, but the file must include `common.xml`. +- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). + +The files are generated into the build directory: `/build//mavlink/`. diff --git a/docs/zh/mavlink/protocols.md b/docs/zh/mavlink/protocols.md new file mode 100644 index 0000000000..9dac078fb9 --- /dev/null +++ b/docs/zh/mavlink/protocols.md @@ -0,0 +1,51 @@ +# MAVLink Microservices (Protocols) + +MAVLink "microservices" are a protocols that use multiple messages exchanged between components to communicate more complicated information. +For example, the [Command Protocol](https://mavlink.io/en/services/command.html) provides an efficient mechanism for packaging a command in a (particular) message and receiving acknowledgement of the command in another message. + +MAVLink microservices are documented the [MAVLink Guide](https://mavlink.io/en/services/) (this is not exhaustive: not all messages are grouped into protocols and not all protocols are documented). + +This section lists the services known to be supported/not supported by PX4 in this version. + +## Supported Microservices + +These services are known to be supported in some form: + +- [Battery Protocol](https://mavlink.io/en/services/battery.html) + - [BATTERY_STATUS](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) and [BATTERY_INFO](https://mavlink.io/en/messages/common.html#BATTERY_STATUS) are streamed. +- Camera Protocols + - [Camera Protocol v2](https://mavlink.io/en/services/camera.html) + - [Camera Definition](https://mavlink.io/en/services/camera_def.html) +- [Command Protocol](https://mavlink.io/en/services/command.html) +- [Component Metadata Protocol](https://mavlink.io/en/services/component_information.html) +- [Events Interface](https://mavlink.io/en/services/events.html) +- [File Transfer Protocol (FTP)](https://mavlink.io/en/services/ftp.html) +- Gimbal Protocols + - [Gimbal Protocol v2](https://mavlink.io/en/services/gimbal_v2.html) + - Can be enabled by [Gimbal Configuration](../advanced/gimbal_control.md#mavlink-gimbal-mnt-mode-out-mavlink) + - PX4 an act as a MAVLink Gimbal for one FC-connected Gimbal +- [Heartbeat/Connection Protocol](https://mavlink.io/en/services/heartbeat.html) +- [High Latency Protocol](https://mavlink.io/en/services/high_latency.html) — PX4 streams [HIGH_LATENCY2](https://mavlink.io/en/messages/common.html#HIGH_LATENCY2) +- [Image Transmission Protocol](https://mavlink.io/en/services/image_transmission.html) +- [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) +- [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)) +- [Parameter Protocol](https://mavlink.io/en/services/parameter.html) +- [Parameter Protocol Extended](https://mavlink.io/en/services/parameter_ext.html) — Allows setting string parameters. Used for setting string parameters set in camera definition files. +- [Payload Protocol](https://mavlink.io/en/services/payload.html) +- [Ping Protocol](https://mavlink.io/en/services/ping.html) +- [Standard Modes Protocol](../mavlink/standard_modes.md) +- [Terrain Protocol](https://mavlink.io/en/services/terrain.html) +- [Time Synchronization](https://mavlink.io/en/services/timesync.html) +- [Traffic Management (UTM/ADS-B)](https://mavlink.io/en/services/traffic_management.html) +- [Arm Authorization Protocol](https://mavlink.io/en/services/arm_authorization.html) + +## Unsupported + +These services are not supported/used by PX4: + +- [Illuminator Protocol](https://mavlink.io/en/services/illuminator.html) +- [Tunnel Protocol](https://mavlink.io/en/services/tunnel.html) diff --git a/docs/zh/middleware/mavlink.md b/docs/zh/middleware/mavlink.md index 9555828822..c88fc7840e 100644 --- a/docs/zh/middleware/mavlink.md +++ b/docs/zh/middleware/mavlink.md @@ -1,87 +1 @@ -# MAVLink通讯 - -[MAVLink](https://mavlink.io/en/) is a very lightweight messaging protocol that has been designed for the drone ecosystem. - -PX4 uses _MAVLink_ to communicate with ground stations and MAVLink SDKs, such as _QGroundControl_ and [MAVSDK](https://mavsdk.mavlink.io/), and as the integration mechanism for connecting to drone components outside of the flight controller: companion computers, MAVLink enabled cameras, and so on. - -This topic provides a brief overview of fundamental MAVLink concepts, such as messages, commands, and microservices. -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) -- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md) -- [Custom MAVLink Messages](../mavlink/custom_messages.md) - -:::info -We do not yet cover _command_ handling and sending, or how to implement your own microservices. -::: - -## MAVLink Overview - -MAVLink is a lightweight protocol that was designed for efficiently sending messages over unreliable low-bandwidth radio links. - -_Messages_ are simplest and most "fundamental" definition in MAVLink, consisting of a name (e.g. [ATTITUDE](https://mavlink.io/en/messages/common.html#ATTITUDE)), id, and fields containing relevant data. -They are deliberately lightweight, with a constrained size, and no semantics for resending and acknowledgement. -Stand-alone messages are commonly used for streaming telemetry or status information, and for sending commands where no acknowledgement is required - such as setpoint commands sent at high rate. - -The [Command Protocol](https://mavlink.io/en/services/command.html) is a higher level protocol for sending commands that may need acknowledgement. -Specific commands are defined as values of the [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) enumeration, such as the takeoff command [MAV_CMD_NAV_TAKEOFF](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_TAKEOFF), and include up to 7 numeric "param" values. -The protocol sends a command by packaging the parameter values in a `COMMAND_INT` or `COMMAND_LONG` message, and waits for an acknowledgement with a result in a `COMMAND_ACK`. -The command is resent automatically if no acknowledgment is received. -Note that [MAV_CMD](https://mavlink.io/en/messages/common.html#mav_commands) definitions are also used to define mission actions, and that not all definitions are supported for use in commands/missions on PX4. - -[Microservices](https://mavlink.io/en/services/) are other higher level protocols built on top of MAVLink messages. -They are used to communicate information that cannot be sent in a single message, and to deliver features such as reliable communication. -The command protocol described above is one such service. -Others include the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html), [Camera Protocol](https://mavlink.io/en/services/camera.html) and [Mission Protocol](https://mavlink.io/en/services/mission.html). - -MAVLink messages, commands and enumerations are defined in [XML definition files](https://mavlink.io/en/guide/define_xml_element.html). -The MAVLink toolchain includes code generators that create programming-language-specific libraries from these definitions for sending and receiving messages. -Note that most generated libraries do not create code to implement microservices. - -The MAVLink project standardizes a number of messages, commands, enumerations, and microservices, for exchanging data using the following definition files (note that higher level files _include_ the definitions of the files below them): - -- [development.xml](https://mavlink.io/en/messages/development.html) — Definitions that are proposed to be part of the standard. - The definitions move to `common.xml` if accepted following testing. -- [common.xml](https://mavlink.io/en/messages/common.html) — A "library" of definitions meeting many common UAV use cases. - These are supported by many flight stacks, ground stations, and MAVLink peripherals. - Flight stacks that use these definitions are more likely to interoperate. -- [standard.xml](https://mavlink.io/en/messages/standard.html) — Definitions that are actually standard. - They are present on the vast majority of flight stacks and implemented in the same way. -- [minimal.xml](https://mavlink.io/en/messages/minimal.html) — Definitions required by a minimal MAVLink implementation. - -The project also hosts [dialect XML definitions](https://mavlink.io/en/messages/#dialects), which contain MAVLink definitions that are specific to a flight stack or other stakeholder. - -The protocol relies on each end of the communication having a shared definition of what messages are being sent. -What this means is that in order to communicate both ends of the communication must use libraries generated from the same XML definition. - - - -## PX4 and MAVLink - -PX4 releases build `common.xml` MAVLink definitions by default, for the greatest compatibility with MAVLink ground stations, libraries, and external components such as MAVLink cameras. -In the `main` branch, these are included from `development.xml` on SITL, and `common.xml` for other boards. - -:::info -To be part of a PX4 release, any MAVLink definitions that you use must be in `common.xml` (or included files such as `standard.xml` and `minimal.xml`). -During development you can use definitions in `development.xml`. -You will need to work with the [MAVLink team](https://mavlink.io/en/contributing/contributing.html) to define and contribute these definitions. -::: - -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/). - -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`: - -- For SITL `CONFIG_MAVLINK_DIALECT` is set to `development` in [boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board#L36). - You can change this to any other definition file, but the file must include `common.xml`. -- For other boards `CONFIG_MAVLINK_DIALECT` is not set by default, and PX4 builds the definitions in `common.xml` (these are build into the [mavlink module](../modules/modules_communication.md#mavlink) by default — search for `menuconfig MAVLINK_DIALECT` in [src/modules/mavlink/Kconfig](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/Kconfig#L10)). - -The files are generated into the build directory: `/build//mavlink/`. + diff --git a/docs/zh/middleware/uorb.md b/docs/zh/middleware/uorb.md index 45a8ccf0b9..6cc75e15ff 100644 --- a/docs/zh/middleware/uorb.md +++ b/docs/zh/middleware/uorb.md @@ -116,9 +116,9 @@ As there are external tools using uORB messages from log files, such as [Flight ## Message Versioning - + -Optional message versioning was introduced in the `main` branch (planned for PX4 v1.16+) to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. +Optional message versioning was introduced PX4 v1.16 to make it easier to maintain compatibility between PX4 and ROS 2 versions compiled against different message definitions. Versioned messages are designed to remain more stable over time compared to their non-versioned counterparts, as they are intended to be used across multiple releases of PX4 and external systems, ensuring greater compatibility over longer periods. Versioned messages include an additional field `uint32 MESSAGE_VERSION = x`, where `x` corresponds to the current version of the message. diff --git a/docs/zh/middleware/uxrce_dds.md b/docs/zh/middleware/uxrce_dds.md index b05430ddcb..552f603cd1 100644 --- a/docs/zh/middleware/uxrce_dds.md +++ b/docs/zh/middleware/uxrce_dds.md @@ -430,14 +430,17 @@ publications: - topic: /fmu/out/collision_constraints type: px4_msgs::msg::CollisionConstraints + rate_limit: 50. # Limit max publication rate to 50 Hz ... - topic: /fmu/out/vehicle_odometry type: px4_msgs::msg::VehicleOdometry + # Use default publication rate limit of 100 Hz - topic: /fmu/out/vehicle_status type: px4_msgs::msg::VehicleStatus + rate_limit: 5. - topic: /fmu/out/vehicle_trajectory_waypoint_desired type: px4_msgs::msg::VehicleTrajectoryWaypoint @@ -472,6 +475,8 @@ Each (`topic`,`type`) pairs defines: - `/fmu/out/` for topics that are _published_ by PX4. - `/fmu/in/` for topics that are _subscribed_ by PX4. 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. `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. 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. diff --git a/docs/zh/modules/modules_autotune.md b/docs/zh/modules/modules_autotune.md index cd4f484c68..da9b2bf6e7 100644 --- a/docs/zh/modules/modules_autotune.md +++ b/docs/zh/modules/modules_autotune.md @@ -6,9 +6,7 @@ Source: [modules/fw_autotune_attitude_control](https://github.com/PX4/PX4-Autopi ### 描述 - - -### 用法 +### Usage {#fw_autotune_attitude_control_usage} ``` fw_autotune_attitude_control [arguments...] @@ -27,9 +25,7 @@ Source: [modules/mc_autotune_attitude_control](https://github.com/PX4/PX4-Autopi ### 描述 - - -### 用法 +### Usage {#mc_autotune_attitude_control_usage} ``` mc_autotune_attitude_control [arguments...] diff --git a/docs/zh/modules/modules_command.md b/docs/zh/modules/modules_command.md index adeda2a371..8cb347995d 100644 --- a/docs/zh/modules/modules_command.md +++ b/docs/zh/modules/modules_command.md @@ -8,9 +8,7 @@ Source: [systemcmds/actuator_test](https://github.com/PX4/PX4-Autopilot/tree/mai 警告:在使用此命令之前移除所有螺旋桨。 - - -### 用法 +### Usage {#actuator_test_usage} ``` actuator_test [arguments...] @@ -34,9 +32,9 @@ actuator_test [arguments...] Source: [systemcmds/bl_update](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bl_update) -Utility to flash the bootloader from a file +Utility to flash the bootloader from a file -### 用法 +### Usage {#bl_update_usage} ``` bl_update [arguments...] @@ -50,9 +48,9 @@ bl_update [arguments...] Source: [systemcmds/bsondump](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/bsondump) -Utility to read BSON from a file and print or output document size. +Utility to read BSON from a file and print or output document size. -### 用法 +### Usage {#bsondump_usage} ``` bsondump [arguments...] @@ -63,9 +61,9 @@ bsondump [arguments...] Source: [systemcmds/dumpfile](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/dumpfile) -转储文件实用程序。 以二进制模式(不要用 CR LF 替换 LF)将文件大小和内容打印到标准输出。 +Dump file utility. Prints file size and contents in binary mode (don't replace LF with CR LF) to stdout. -### 用法 +### Usage {#dumpfile_usage} ``` dumpfile [arguments...] @@ -78,7 +76,7 @@ Source: [systemcmds/dyn](https://github.com/PX4/PX4-Autopilot/tree/main/src/syst ### 描述 -加载并运行一个没有被编译进 PX4 的二进制文件的动态 PX4 模块 +Load and run a dynamic PX4 module, which was not compiled into the PX4 binary. ### Example @@ -86,9 +84,7 @@ Source: [systemcmds/dyn](https://github.com/PX4/PX4-Autopilot/tree/main/src/syst dyn ./hello.px4mod start ``` - - -### 用法 +### Usage {#dyn_usage} ``` dyn [arguments...] @@ -102,21 +98,19 @@ Source: [systemcmds/failure](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### 描述 -向系统中注入故障。 +Inject failures into system. ### 实现 -此系统命令通过 uORB 发送一个机体命令来出发故障。 +This system command sends a vehicle command over uORB to trigger failure. ### 示例 -通过停止GPS来测试GPS故障保护: +Test the GPS failsafe by stopping GPS: failure gps off - - -### 用法 +### Usage {#failure_usage} ``` failure [arguments...] @@ -135,7 +129,7 @@ Source: [systemcmds/gpio](https://github.com/PX4/PX4-Autopilot/tree/main/src/sys ### 描述 -此命令用于读写GPIO +This command is used to read and write GPIOs ``` gpio read / [PULLDOWN|PULLUP] [--force] @@ -144,7 +138,7 @@ gpio write / [PUSHPULL|OPENDRAIN] [--force] ### 示例 -读取配置为上拉的 PH4 引脚,它的值为高 +Read the value on port H pin 4 configured as pullup, and it is high ``` gpio read H4 PULLUP @@ -152,7 +146,7 @@ gpio read H4 PULLUP 1 OK -设置 PE7 的输出值为高 +Set the output value on Port E pin 7 to high ``` gpio write E7 1 --force @@ -164,9 +158,7 @@ Set the output value on device /dev/gpio1 to high gpio write /dev/gpio1 1 ``` - - -### 用法 +### Usage {#gpio_usage} ``` gpio [arguments...] @@ -186,13 +178,11 @@ gpio [arguments...] Source: [systemcmds/hardfault_log](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hardfault_log) -Hardfault 实用程序 +Hardfault utility -在启动脚本中用于处理 hardfaults。 +Used in startup scripts to handle hardfaults - - -### 用法 +### Usage {#hardfault_log_usage} ``` hardfault_log [arguments...] @@ -219,9 +209,9 @@ hardfault_log [arguments...] Source: [systemcmds/hist](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/hist) -Command-line tool to show the px4 message history. There are no arguments. +Command-line tool to show the px4 message history. There are no arguments. -### 用法 +### Usage {#hist_usage} ``` hist [arguments...] @@ -231,9 +221,9 @@ hist [arguments...] Source: [systemcmds/i2cdetect](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/i2cdetect) -Utility to scan for I2C devices on a particular bus. +Utility to scan for I2C devices on a particular bus. -### 用法 +### Usage {#i2cdetect_usage} ``` i2cdetect [arguments...] @@ -249,21 +239,21 @@ Source: [systemcmds/led_control](https://github.com/PX4/PX4-Autopilot/tree/main/ Command-line tool to control & test the (external) LED's. -要使用它,请确保有一个处理 led_control 的 uorb 主题的设备正在运行。 +To use it make sure there's a driver running, which handles the led_control uorb topic. -有不同的优先级,例如一个模块可以设置低优先级的颜色,另一个模块可以高优先级闪烁 N 次,闪烁后 LED 自动返回低优先级状态。 The `reset` command can also be used to return to a lower priority. +There are different priorities, such that for example one module can set a color with low priority, and another +module can blink N times with high priority, and the LED's automatically return to the lower priority state +after the blinking. The `reset` command can also be used to return to a lower priority. ### 示例 -第一个 LED 闪烁蓝光 5 次: +Blink the first LED 5 times in blue: ``` led_control blink -c blue -l 0 -n 5 ``` - - -### 用法 +### Usage {#led_control_usage} ``` led_control [arguments...] @@ -299,13 +289,11 @@ led_control [arguments...] Source: [systemcmds/topic_listener](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/topic_listener) -监听 uORB 主题并将数据打印到控制台的实用程序。 +Utility to listen on uORB topics and print the data to the console. -可以通过按 Ctrl+C、Esc 或 Q 随时退出侦听器。 +The listener can be exited any time by pressing Ctrl+C, Esc, or Q. - - -### 用法 +### Usage {#listener_usage} ``` listener [arguments...] @@ -323,9 +311,9 @@ listener [arguments...] Source: [systemcmds/mft](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft) -Utility interact with the manifest +Utility interact with the manifest -### 用法 +### Usage {#mfd_usage} ``` mfd [arguments...] @@ -337,9 +325,9 @@ mfd [arguments...] Source: [systemcmds/mft_cfg](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mft_cfg) -Tool to set and get manifest configuration +Tool to set and get manifest configuration -### 用法 +### Usage {#mft_cfg_usage} ``` mft_cfg [arguments...] @@ -358,9 +346,9 @@ mft_cfg [arguments...] Source: [systemcmds/mtd](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/mtd) -Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) +Utility to mount and test partitions (based on FRAM/EEPROM storage as defined by the board) -### 用法 +### Usage {#mtd_usage} ``` mtd [arguments...] @@ -386,14 +374,12 @@ mtd [arguments...] Source: [systemcmds/nshterm](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/nshterm) -在指定端口启动一个 NSH shell。 +Start an NSH shell on a given port. -该命令此前被用于在 USB 串口端口开启一个 shell。 -现在运行mavlink,并且可以在mavlink 上使用shell。 +This was previously used to start a shell on the USB serial port. +Now there runs mavlink, and it is possible to use a shell over mavlink. - - -### 用法 +### Usage {#nshterm_usage} ``` nshterm [arguments...] @@ -406,22 +392,24 @@ Source: [systemcmds/param](https://github.com/PX4/PX4-Autopilot/tree/main/src/sy ### 描述 -通过 shell 或脚本访问和操作参数的命令。 +Command to access and manipulate parameters via shell or script. -例如,这在启动脚本中用于设置特定于机身的参数。 +This is used for example in the startup script to set airframe-specific parameters. -Parameters are automatically saved when changed, eg. with `param set`. 它们通常存储在 FRAM 或 SD 卡中。 `param select` can be used to change the storage location for subsequent saves (this will +Parameters are automatically saved when changed, eg. with `param set`. They are typically stored to FRAM +or to the SD card. `param select` can be used to change the storage location for subsequent saves (this will need to be (re-)configured on every boot). If the FLASH-based backend is enabled (which is done at compile time, e.g. for the Intel Aero or Omnibus), `param select` has no effect and the default is always the FLASH backend. However `param save/load ` can still be used to write to/read from files. -每个参数有一个“已使用”的标志,此标志在启动过程参数被读取后被置位。 它只是用于向地面控制站显示相关参数。 +Each parameter has a 'used' flag, which is set when it's read during boot. It is used to only show relevant +parameters to a ground control station. ### 示例 -更改机身并确保已加载机身的默认参数: +Change the airframe and make sure the airframe's default parameters are loaded: ``` param set SYS_AUTOSTART 4001 @@ -429,9 +417,7 @@ param set SYS_AUTOCONFIG 1 reboot ``` - - -### 用法 +### Usage {#param_usage} ``` param [arguments...] @@ -509,9 +495,7 @@ Source: [modules/payload_deliverer](https://github.com/PX4/PX4-Autopilot/tree/ma Handles payload delivery with either Gripper or a Winch with an appropriate timeout / feedback sensor setting, and communicates back the delivery result as an acknowledgement internally - - -### 用法 +### Usage {#payload_deliverer_usage} ``` payload_deliverer [arguments...] @@ -533,9 +517,9 @@ payload_deliverer [arguments...] Source: [systemcmds/perf](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/perf) -Tool to print performance counters +Tool to print performance counters -### 用法 +### Usage {#perf_usage} ``` perf [arguments...] @@ -550,9 +534,9 @@ perf [arguments...] Source: [systemcmds/reboot](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/reboot) -Reboot the system +Reboot the system -### 用法 +### Usage {#reboot_usage} ``` reboot [arguments...] @@ -565,9 +549,9 @@ reboot [arguments...] Source: [systemcmds/sd_bench](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_bench) -Test the speed of an SD Card +Test the speed of an SD Card -### 用法 +### Usage {#sd_bench_usage} ``` sd_bench [arguments...] @@ -588,9 +572,9 @@ sd_bench [arguments...] Source: [systemcmds/sd_stress](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/sd_stress) -Test operations on an SD Card +Test operations on an SD Card -### 用法 +### Usage {#sd_stress_usage} ``` sd_stress [arguments...] @@ -604,13 +588,11 @@ sd_stress [arguments...] Source: [systemcmds/serial_passthru](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/serial_passthru) -把数据从一个设备传输到另一个设备。 +Pass data from one device to another. This can be used to use u-center connected to USB with a GPS on a serial port. - - -### 用法 +### Usage {#serial_passthru_usage} ``` serial_passthru [arguments...] @@ -623,7 +605,7 @@ serial_passthru [arguments...] [-t] Track the External devices baudrate on internal device ``` -## 系统时间 +## system_time Source: [systemcmds/system_time](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/system_time) @@ -640,9 +622,7 @@ system_time set 1600775044 system_time get ``` - - -### 用法 +### Usage {#system_time_usage} ``` system_time [arguments...] @@ -656,9 +636,9 @@ system_time [arguments...] Source: [systemcmds/top](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/top) -Monitor running processes and their CPU, stack usage, priority and state +Monitor running processes and their CPU, stack usage, priority and state -### 用法 +### Usage {#top_usage} ``` top [arguments...] @@ -670,9 +650,9 @@ top [arguments...] Source: [systemcmds/usb_connected](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/usb_connected) Utility to check if USB is connected. Was previously used in startup scripts. -A return value of 0 means USB is connected, 1 otherwise. +A return value of 0 means USB is connected, 1 otherwise. -### 用法 +### Usage {#usb_connected_usage} ``` usb_connected [arguments...] @@ -682,9 +662,9 @@ usb_connected [arguments...] Source: [systemcmds/ver](https://github.com/PX4/PX4-Autopilot/tree/main/src/systemcmds/ver) -Tool to print various version information +Tool to print various version information -### 用法 +### Usage {#ver_usage} ``` ver [arguments...] diff --git a/docs/zh/modules/modules_communication.md b/docs/zh/modules/modules_communication.md index 995d0f9d31..d5f172e79a 100644 --- a/docs/zh/modules/modules_communication.md +++ b/docs/zh/modules/modules_communication.md @@ -4,9 +4,9 @@ Source: [drivers/telemetry/frsky_telemetry](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/frsky_telemetry) -FrSky 数传支持, FrSky Telemetry support. Auto-detects D or S.PORT protocol. +FrSky 数传支持, FrSky Telemetry support. Auto-detects D or S.PORT protocol. -### 用法 +### Usage {#frsky_telemetry_usage} ``` frsky_telemetry [arguments...] @@ -64,9 +64,7 @@ mavlink start -u 14556 -r 1000000 mavlink stream -u 14556 -s HIGHRES_IMU -r 50 ``` - - -### 用法 +### Usage {#mavlink_usage} ``` mavlink [arguments...] @@ -129,7 +127,7 @@ Source: [systemcmds/uorb](https://github.com/PX4/PX4-Autopilot/tree/main/src/sys ### 描述 -uORB 是各模块之间进行通讯的基于 发布-订阅 机制的内部消息传递系统。 +uORB is the internal pub-sub messaging system, used for communication between modules. ### 实现 @@ -140,19 +138,18 @@ The code is optimized to minimize the memory footprint and the latency to exchan Messages are defined in the `/msg` directory. They are converted into C/C++ code at build-time. -该接口基于文件描述符(file descriptor)实现:它在内部使用 readwriteioctl。 The interface is based on file descriptors: internally it uses read, write and ioctl. Except for the publications, which use orb_advert_t handles, so that they can be used from interrupts as well (on NuttX). +If compiled with ORB_USE_PUBLISHER_RULES, a file with uORB publication rules can be used to configure which +modules are allowed to publish which topics. This is used for system-wide replay. ### 示例 -Messages are defined in the /msg directory. They are converted into C/C++ code at build-time. Besides `top`, this is an important command for general system inspection: +Monitor topic publication rates. Besides `top`, this is an important command for general system inspection: ``` uorb top ``` - - -### 用法 +### Usage {#uorb_usage} ``` uorb [arguments...] diff --git a/docs/zh/modules/modules_controller.md b/docs/zh/modules/modules_controller.md index a3bf296295..6a949f7dd7 100644 --- a/docs/zh/modules/modules_controller.md +++ b/docs/zh/modules/modules_controller.md @@ -16,9 +16,7 @@ Currently it is feeding the `manual_control_setpoint` topic directly to the actu To reduce control latency, the module directly polls on the gyro topic published by the IMU driver. - - -### 用法 +### Usage {#airship_att_control_usage} ``` airship_att_control [arguments...] @@ -39,9 +37,7 @@ Source: [modules/control_allocator](https://github.com/PX4/PX4-Autopilot/tree/ma This implements control allocation. It takes torque and thrust setpoints as inputs and outputs actuator setpoint messages. - - -### 用法 +### Usage {#control_allocator_usage} ``` control_allocator [arguments...] @@ -53,7 +49,7 @@ control_allocator [arguments...] status print status info ``` -## fw_pos_control_l1 +## flight_mode_manager Source: [modules/flight_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/flight_mode_manager) @@ -62,9 +58,7 @@ Source: [modules/flight_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/ This implements the setpoint generation for all modes. It takes the current mode state of the vehicle as input and outputs setpoints for controllers. - - -### 用法 +### Usage {#flight_mode_manager_usage} ``` flight_mode_manager [arguments...] @@ -76,7 +70,7 @@ flight_mode_manager [arguments...] status print status info ``` -## mc_att_control +## fw_att_control Source: [modules/fw_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_att_control) @@ -84,9 +78,7 @@ Source: [modules/fw_att_control](https://github.com/PX4/PX4-Autopilot/tree/main/ fw_att_control is the fixed wing attitude controller. - - -### 用法 +### Usage {#fw_att_control_usage} ``` fw_att_control [arguments...] @@ -99,20 +91,18 @@ fw_att_control [arguments...] status print status info ``` -## fw_pos_control +## fw_lat_lon_control -Source: [modules/fw_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_pos_control) +Source: [modules/fw_lateral_longitudinal_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_lateral_longitudinal_control) ### 描述 -fw_pos_control is the fixed-wing position controller. +fw_lat_lon_control computes attitude and throttle setpoints from lateral and longitudinal control setpoints. - - -### 用法 +### Usage {#fw_lat_lon_control_usage} ``` -fw_pos_control [arguments...] +fw_lat_lon_control [arguments...] Commands: start [vtol] VTOL mode @@ -122,6 +112,28 @@ fw_pos_control [arguments...] status print status info ``` +## fw_mode_manager + +Source: [modules/fw_mode_manager](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_mode_manager) + +### 描述 + +This implements the setpoint generation for all PX4-internal fixed-wing modes, height-rate control and higher. +It takes the current mode state of the vehicle as input and outputs setpoints consumed by the fixed-wing +lateral-longitudinal controller and and controllers below that (attitude, rate). + +### Usage {#fw_mode_manager_usage} + +``` +fw_mode_manager [arguments...] + Commands: + start + + stop + + status print status info +``` + ## fw_rate_control Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/fw_rate_control) @@ -130,9 +142,7 @@ Source: [modules/fw_rate_control](https://github.com/PX4/PX4-Autopilot/tree/main fw_rate_control is the fixed-wing rate controller. - - -### 用法 +### Usage {#fw_rate_control_usage} ``` fw_rate_control [arguments...] @@ -156,13 +166,14 @@ setpoints (`vehicle_attitude_setpoint`) as inputs and outputs a rate setpoint. The controller has a P loop for angular error -The different internal modes are implemented as separate classes that inherit from a common base class NavigatorMode. The member _navigation_mode contains the current active mode. +Publication documenting the implemented Quaternion Attitude Control: +Nonlinear Quadrocopter Attitude Control (2013) +by Dario Brescianini, Markus Hehn and Raffaello D'Andrea +Institute for Dynamic Systems and Control (IDSC), ETH Zurich https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/154099/eth-7387-01.pdf - - -### 用法 +### Usage {#mc_att_control_usage} ``` mc_att_control [arguments...] @@ -175,7 +186,7 @@ mc_att_control [arguments...] status print status info ``` -## navigator +## mc_pos_control Source: [modules/mc_pos_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/mc_pos_control) @@ -188,9 +199,7 @@ Output of the velocity controller is thrust vector that is split to thrust direc The controller doesn't use Euler angles for its work, they are generated only for more human-friendly control and logging. - - -### 用法 +### Usage {#mc_pos_control_usage} ``` mc_pos_control [arguments...] @@ -214,9 +223,7 @@ via `manual_control_setpoint` topic) as inputs and outputs actuator control mess The controller has a PID loop for angular rate error. - - -### 用法 +### Usage {#mc_rate_control_usage} ``` mc_rate_control [arguments...] @@ -247,9 +254,7 @@ The member `_navigation_mode` contains the current active mode. Navigator publishes position setpoint triplets (`position_setpoint_triplet_s`), which are then used by the position controller. - - -### 用法 +### Usage {#navigator_usage} ``` navigator [arguments...] @@ -273,9 +278,7 @@ Source: [modules/rover_ackermann](https://github.com/PX4/PX4-Autopilot/tree/main Rover ackermann module. - - -### 用法 +### Usage {#rover_ackermann_usage} ``` rover_ackermann [arguments...] @@ -295,9 +298,7 @@ Source: [modules/rover_differential](https://github.com/PX4/PX4-Autopilot/tree/m Rover differential module. - - -### 用法 +### Usage {#rover_differential_usage} ``` rover_differential [arguments...] @@ -317,9 +318,7 @@ Source: [modules/rover_mecanum](https://github.com/PX4/PX4-Autopilot/tree/main/s Rover mecanum module. - - -### 用法 +### Usage {#rover_mecanum_usage} ``` rover_mecanum [arguments...] @@ -359,9 +358,7 @@ rover_pos_control status rover_pos_control stop ``` - - -### 用法 +### Usage {#rover_pos_control_usage} ``` rover_pos_control [arguments...] @@ -384,9 +381,7 @@ It takes torque and thrust setpoints as inputs and outputs actuator setpoint messages. ``` - - -### 用法 +### Usage {#spacecraft_usage} ``` spacecraft [arguments...] @@ -425,9 +420,7 @@ uuv_att_control status uuv_att_control stop ``` - - -### 用法 +### Usage {#uuv_att_control_usage} ``` uuv_att_control [arguments...] @@ -465,9 +458,7 @@ uuv_pos_control status uuv_pos_control stop ``` - - -### 用法 +### Usage {#uuv_pos_control_usage} ``` uuv_pos_control [arguments...] @@ -487,9 +478,7 @@ Source: [modules/vtol_att_control](https://github.com/PX4/PX4-Autopilot/tree/mai fw_att_control is the fixed wing attitude controller. - - -### 用法 +### Usage {#vtol_att_control_usage} ``` vtol_att_control [arguments...] diff --git a/docs/zh/modules/modules_driver.md b/docs/zh/modules/modules_driver.md index 1c4620794d..9ce039cab3 100644 --- a/docs/zh/modules/modules_driver.md +++ b/docs/zh/modules/modules_driver.md @@ -3,23 +3,22 @@ 子分类 - [Airspeed Sensor](modules_driver_airspeed_sensor.md) -- [Transponder](modules_driver_transponder.md) -- [Imu](modules_driver_imu.md) -- [Rpm Sensor](modules_driver_rpm_sensor.md) -- [Magnetometer](modules_driver_magnetometer.md) +- [Baro](modules_driver_baro.md) - [Camera](modules_driver_camera.md) - [Distance Sensor](modules_driver_distance_sensor.md) -- [Optical Flow](modules_driver_optical_flow.md) +- [Imu](modules_driver_imu.md) - [Ins](modules_driver_ins.md) -- [Baro](modules_driver_baro.md) +- [Magnetometer](modules_driver_magnetometer.md) +- [Optical Flow](modules_driver_optical_flow.md) +- [Radio Control](modules_driver_radio_control.md) +- [Rpm Sensor](modules_driver_rpm_sensor.md) +- [Transponder](modules_driver_transponder.md) ## MCP23009 Source: [drivers/gpio/mcp23009](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gpio/mcp23009) - - -### 用法 +### Usage {#MCP23009_usage} ``` MCP23009 [arguments...] @@ -53,11 +52,9 @@ Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/s ### 描述 -ADC 驱动。 +ADC driver. - - -### 用法 +### Usage {#adc_usage} ``` adc [arguments...] @@ -89,9 +86,7 @@ It is enabled/disabled using the parameter, and is disabled by default. If enabled, internal ADCs are not used. - - -### 用法 +### Usage {#ads1115_usage} ``` ads1115 [arguments...] @@ -117,13 +112,11 @@ Source: [drivers/osd/atxxxx](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### 描述 -例如挂载在OmnibusF4SD板上的针对 ATXXXX 芯片的OSD驱动。 +OSD driver for the ATXXXX chip that is mounted on the OmnibusF4SD board for example. -可以通过 OSD_ATXXXX_CFG 参数使能. +It can be enabled with the OSD_ATXXXX_CFG parameter. - - -### 用法 +### Usage {#atxxxx_usage} ``` atxxxx [arguments...] @@ -149,19 +142,18 @@ Source: [drivers/smart_battery/batmon](https://github.com/PX4/PX4-Autopilot/tree ### 描述 -用于智能电池的BQ40Z50电量统计芯片 +Driver for SMBUS Communication with BatMon enabled smart-battery +Setup/usage information: https://rotoye.com/batmon-tutorial/ ### 示例 To start at address 0x0B, on bus 4 ``` -batt_smbus -X write_flash 19069 2 27 0 +batmon start -X -a 11 -b 4 ``` - - -### 用法 +### Usage {#batmon_usage} ``` batmon [arguments...] @@ -193,7 +185,7 @@ Source: [drivers/batt_smbus](https://github.com/PX4/PX4-Autopilot/tree/main/src/ ### 描述 -This will enable capturing on the 4th pin. Then do: +Smart battery driver for the BQ40Z50 fuel gauge IC. ### 示例 @@ -203,9 +195,7 @@ To write to flash to set parameters. address, number_of_bytes, byte0, ... , byte batt_smbus -X write_flash 19069 2 27 0 ``` - - -### 用法 +### Usage {#batt_smbus_usage} ``` batt_smbus [arguments...] @@ -246,9 +236,7 @@ batt_smbus [arguments...] Source: [drivers/telemetry/bst](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/telemetry/bst) - - -### 用法 +### Usage {#bst_usage} ``` bst [arguments...] @@ -268,31 +256,7 @@ bst [arguments...] status print status info ``` -## crsf_rc - -Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) - -### 描述 - -This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data - - - -### 用法 - -``` -crsf_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - -## sf1xx +## dshot Source: [drivers/dshot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/dshot) @@ -307,8 +271,8 @@ It skips all pins already in use (e.g. by a camera trigger module). It supports: - DShot150, DShot300, DShot600 -- 通过独立的串口遥控,并且发布esc_status消息 -- 通过命令行接口发送 DShot 命令 +- telemetry via separate UART and publishing as esc_status message +- sending DShot commands via CLI ### 示例 @@ -321,9 +285,7 @@ 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} ``` dshot [arguments...] @@ -331,7 +293,9 @@ dshot [arguments...] start telemetry Enable Telemetry on a UART - UART device + -d UART device + values: + [-x] Swap RX/TX pins reverse Reverse motor direction [-m ] Motor index (1-based, default=all) @@ -371,41 +335,13 @@ dshot [arguments...] status print status info ``` -## dsm_rc - -Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) - -### 描述 - -This module does Spektrum DSM RC input parsing. - - - -### 用法 - -``` -dsm_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` - -## fmu mode_pwm +## fake_gps Source: [examples/fake_gps](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_gps) ### 描述 - - -### 用法 +### Usage {#fake_gps_usage} ``` fake_gps [arguments...] @@ -423,9 +359,7 @@ Source: [examples/fake_imu](https://github.com/PX4/PX4-Autopilot/tree/main/src/e ### 描述 - - -### 用法 +### Usage {#fake_imu_usage} ``` fake_imu [arguments...] @@ -437,7 +371,7 @@ fake_imu [arguments...] status print status info ``` -## gps +## fake_magnetometer Source: [examples/fake_magnetometer](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/fake_magnetometer) @@ -446,9 +380,7 @@ Source: [examples/fake_magnetometer](https://github.com/PX4/PX4-Autopilot/tree/m Publish the earth magnetic field as a fake magnetometer (sensor_mag). Requires vehicle_attitude and vehicle_gps_position. - - -### 用法 +### Usage {#fake_magnetometer_usage} ``` fake_magnetometer [arguments...] @@ -479,15 +411,13 @@ Attempt to start driver on a specified serial device. ft_technologies_serial start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` ft_technologies_serial stop ``` - - -### 用法 +### Usage {#ft_technologies_serial_usage} ``` ft_technologies_serial [arguments...] @@ -498,30 +428,6 @@ ft_technologies_serial [arguments...] stop Stop driver ``` -## ghst_rc - -Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) - -### 描述 - -This module does Ghost (GHST) RC input parsing. - - - -### 用法 - -``` -ghst_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## gimbal Source: [modules/gimbal](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gimbal) @@ -541,9 +447,7 @@ Test the output by setting a angles (all omitted axes are set to 0): gimbal test pitch -45 yaw 30 ``` - - -### 用法 +### Usage {#gimbal_usage} ``` gimbal [arguments...] @@ -598,9 +502,7 @@ Initiate warm restart of GPS device gps reset warm ``` - - -### 用法 +### Usage {#gps_usage} ``` gps [arguments...] @@ -635,9 +537,7 @@ Source: [modules/simulation/gz_bridge](https://github.com/PX4/PX4-Autopilot/tree ### 描述 - - -### 用法 +### Usage {#gz_bridge_usage} ``` gz_bridge [arguments...] @@ -668,9 +568,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 用法 +### Usage {#ina220_usage} ``` ina220 [arguments...] @@ -712,9 +610,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 用法 +### Usage {#ina226_usage} ``` ina226 [arguments...] @@ -754,9 +650,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 用法 +### Usage {#ina228_usage} ``` ina228 [arguments...] @@ -796,9 +690,7 @@ the -f flag. If this flag is set, then if initialization fails, the driver will every 0.5 seconds. With this flag set, you can plug in a battery after the driver starts, and it will work. Without this flag set, the battery must be plugged in before starting the driver. - - -### 用法 +### Usage {#ina238_usage} ``` ina238 [arguments...] @@ -831,9 +723,7 @@ IridiumSBD driver. Creates a virtual serial port that another module can use for communication (e.g. mavlink). - - -### 用法 +### Usage {#iridiumsbd_usage} ``` iridiumsbd [arguments...] @@ -855,9 +745,7 @@ iridiumsbd [arguments...] Source: [drivers/irlock](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/irlock) - - -### 用法 +### Usage {#irlock_usage} ``` irlock [arguments...] @@ -885,9 +773,7 @@ Source: [drivers/linux_pwm_out](https://github.com/PX4/PX4-Autopilot/tree/main/s Linux PWM output driver with board-specific backend implementation. - - -### 用法 +### Usage {#linux_pwm_out_usage} ``` linux_pwm_out [arguments...] @@ -903,9 +789,7 @@ linux_pwm_out [arguments...] Source: [drivers/magnetometer/lsm303agr](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm303agr) - - -### 用法 +### Usage {#lsm303agr_usage} ``` lsm303agr [arguments...] @@ -947,9 +831,7 @@ CLI usage example: msp_osd ``` - - -### 用法 +### Usage {#msp_osd_usage} ``` msp_osd [arguments...] @@ -977,9 +859,7 @@ neopixel -n 8 To drive all available leds. - - -### 用法 +### Usage {#newpixel_usage} ``` newpixel [arguments...] @@ -993,9 +873,7 @@ newpixel [arguments...] Source: [drivers/optical_flow/paa3905](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paa3905) - - -### 用法 +### Usage {#paa3905_usage} ``` paa3905 [arguments...] @@ -1021,9 +899,7 @@ paa3905 [arguments...] Source: [drivers/optical_flow/paw3902](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/paw3902) - - -### 用法 +### Usage {#paw3902_usage} ``` paw3902 [arguments...] @@ -1067,9 +943,7 @@ It is typically started with: pca9685_pwm_out start -a 0x40 -b 1 ``` - - -### 用法 +### Usage {#pca9685_pwm_out_usage} ``` pca9685_pwm_out [arguments...] @@ -1093,9 +967,7 @@ Source: [drivers/power_monitor/pm_selector_auterion](https://github.com/PX4/PX4- Driver for starting and auto-detecting different power monitors. - - -### 用法 +### Usage {#pm_selector_auterion_usage} ``` pm_selector_auterion [arguments...] @@ -1111,9 +983,7 @@ pm_selector_auterion [arguments...] Source: [drivers/optical_flow/pmw3901](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/pmw3901) - - -### 用法 +### Usage {#pmw3901_usage} ``` pmw3901 [arguments...] @@ -1143,9 +1013,7 @@ Source: [drivers/pps_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src This implements capturing PPS information from the GNSS module and calculates the drift between PPS and Real-time clock. - - -### 用法 +### Usage {#pps_capture_usage} ``` pps_capture [arguments...] @@ -1167,9 +1035,7 @@ This module is responsible for driving the output pins. For boards without a sep (eg. Pixracer), it uses the main channels. On boards with an IO chip (eg. Pixhawk), it uses the AUX channels, and the px4io driver is used for main ones. - - -### 用法 +### Usage {#pwm_out_usage} ``` pwm_out [arguments...] @@ -1195,9 +1061,7 @@ mix them with any loaded mixer and output the result to the It is used in SITL and HITL. - - -### 用法 +### Usage {#pwm_out_sim_usage} ``` pwm_out_sim [arguments...] @@ -1215,9 +1079,7 @@ pwm_out_sim [arguments...] Source: [drivers/optical_flow/px4flow](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/optical_flow/px4flow) - - -### 用法 +### Usage {#px4flow_usage} ``` px4flow [arguments...] @@ -1245,9 +1107,7 @@ Source: [drivers/px4io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drive Output driver communicating with the IO co-processor. - - -### 用法 +### Usage {#px4io_usage} ``` px4io [arguments...] @@ -1281,46 +1141,11 @@ px4io [arguments...] status print status info ``` -## rc_input - -Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) - -### 描述 - -This module does the RC input parsing and auto-selecting the method. Supported methods are: - -- PPM -- SBUS -- DSM -- SUMD -- ST24 -- TBS Crossfire (CRSF) - - - -### 用法 - -``` -rc_input [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - bind Send a DSM bind command (module must be running) - - stop - - status print status info -``` - ## rgbled Source: [drivers/lights/rgbled_ncp5623c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_ncp5623c) - - -### 用法 +### Usage {#rgbled_usage} ``` rgbled [arguments...] @@ -1346,9 +1171,7 @@ rgbled [arguments...] Source: [drivers/lights/rgbled_is31fl3195](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/lights/rgbled_is31fl3195) - - -### 用法 +### Usage {#rgbled_is31fl3195_usage} ``` rgbled_is31fl3195 [arguments...] @@ -1384,9 +1207,7 @@ This used in some GPS modules by Holybro for [PX4 status notification](../gettin The driver is included by default in firmware (KConfig key DRIVERS_LIGHTS_RGBLED_LP5562) and is always enabled. - - -### 用法 +### Usage {#rgbled_lp5562_usage} ``` rgbled_lp5562 [arguments...] @@ -1427,9 +1248,7 @@ the address `RBCLW_ADDRESS` needs to match the ESC configuration. The command to start this driver is: `$ roboclaw start ` - - -### 用法 +### Usage {#roboclaw_usage} ``` roboclaw [arguments...] @@ -1445,9 +1264,7 @@ roboclaw [arguments...] Source: [drivers/rpm_capture](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm_capture) - - -### 用法 +### Usage {#rpm_capture_usage} ``` rpm_capture [arguments...] @@ -1468,9 +1285,7 @@ Source: [drivers/safety_button](https://github.com/PX4/PX4-Autopilot/tree/main/s This module is responsible for the safety button. Pressing the safety button 3 times quickly will trigger a GCS pairing request. - - -### 用法 +### Usage {#safety_button_usage} ``` safety_button [arguments...] @@ -1482,30 +1297,6 @@ safety_button [arguments...] status print status info ``` -## sbus_rc - -Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) - -### 描述 - -This module does SBUS RC input parsing. - - - -### 用法 - -``` -sbus_rc [arguments...] - Commands: - start - [-d ] RC device - values: , default: /dev/ttyS3 - - stop - - status print status info -``` - ## septentrio Source: [drivers/gnss/septentrio](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/gnss/septentrio) @@ -1539,9 +1330,7 @@ Perform warm reset of the receivers: gps reset warm ``` - - -### 用法 +### Usage {#septentrio_usage} ``` septentrio [arguments...] @@ -1600,9 +1389,7 @@ sht3x reset Reinitialize senzor, reset flags - - -### 用法 +### Usage {#sht3x_usage} ``` sht3x [arguments...] @@ -1649,9 +1436,7 @@ The module is typically started with: tap_esc start -d /dev/ttyS2 -n <1-8> ``` - - -### 用法 +### Usage {#tap_esc_usage} ``` tap_esc [arguments...] @@ -1671,9 +1456,7 @@ Source: [drivers/tone_alarm](https://github.com/PX4/PX4-Autopilot/tree/main/src/ This module is responsible for the tone alarm. - - -### 用法 +### Usage {#tone_alarm_usage} ``` tone_alarm [arguments...] @@ -1702,9 +1485,7 @@ Start the driver with a given device: uwb start -d /dev/ttyS2 ``` - - -### 用法 +### Usage {#uwb_usage} ``` uwb [arguments...] @@ -1724,9 +1505,7 @@ uwb [arguments...] Source: [drivers/actuators/vertiq_io](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/actuators/vertiq_io) - - -### 用法 +### Usage {#vertiq_io_usage} ``` vertiq_io [arguments...] @@ -1749,9 +1528,7 @@ This module is responsible for driving the output pins. For boards without a sep (eg. Pixracer), it uses the main channels. On boards with an IO chip (eg. Pixhawk), it uses the AUX channels, and the px4io driver is used for main ones. - - -### 用法 +### Usage {#voxl2_io_usage} ``` voxl2_io [arguments...] @@ -1791,9 +1568,7 @@ It is typically started with: todo ``` - - -### 用法 +### Usage {#voxl_esc_usage} ``` voxl_esc [arguments...] @@ -1840,9 +1615,7 @@ voxl_esc [arguments...] Source: [drivers/power_monitor/voxlpm](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/power_monitor/voxlpm) - - -### 用法 +### Usage {#voxlpm_usage} ``` voxlpm [arguments...] @@ -1872,9 +1645,7 @@ Source: [modules/zenoh](https://github.com/PX4/PX4-Autopilot/tree/main/src/modul Zenoh demo bridge - - -### 用法 +### Usage {#zenoh_usage} ``` zenoh [arguments...] diff --git a/docs/zh/modules/modules_driver_airspeed_sensor.md b/docs/zh/modules/modules_driver_airspeed_sensor.md index 2f58f9b086..09a55cec1a 100644 --- a/docs/zh/modules/modules_driver_airspeed_sensor.md +++ b/docs/zh/modules/modules_driver_airspeed_sensor.md @@ -13,9 +13,7 @@ This is not included by default in firmware. It can be included with terminal co or in default.px4board with adding the line: "CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033=y" It can be enabled with the "SENS_EN_ASP5033" parameter set to 1. - - -### 用法 +### Usage {#asp5033_usage} ``` asp5033 [arguments...] @@ -39,9 +37,7 @@ asp5033 [arguments...] Source: [drivers/differential_pressure/auav](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/auav) - - -### 用法 +### Usage {#auav_usage} ``` auav [arguments...] @@ -67,9 +63,7 @@ auav [arguments...] Source: [drivers/differential_pressure/ets](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ets) - - -### 用法 +### Usage {#ets_airspeed_usage} ``` ets_airspeed [arguments...] @@ -93,9 +87,7 @@ ets_airspeed [arguments...] Source: [drivers/differential_pressure/ms4515](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4515) - - -### 用法 +### Usage {#ms4515_usage} ``` ms4515 [arguments...] @@ -119,9 +111,7 @@ ms4515 [arguments...] Source: [drivers/differential_pressure/ms4525do](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms4525do) - - -### 用法 +### Usage {#ms4525do_usage} ``` ms4525do [arguments...] @@ -145,9 +135,7 @@ ms4525do [arguments...] Source: [drivers/differential_pressure/ms5525dso](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/ms5525dso) - - -### 用法 +### Usage {#ms5525dso_usage} ``` ms5525dso [arguments...] @@ -171,9 +159,7 @@ ms5525dso [arguments...] Source: [drivers/differential_pressure/sdp3x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/differential_pressure/sdp3x) - - -### 用法 +### Usage {#sdp3x_usage} ``` sdp3x [arguments...] diff --git a/docs/zh/modules/modules_driver_baro.md b/docs/zh/modules/modules_driver_baro.md index 0b6676f98f..be32c800ed 100644 --- a/docs/zh/modules/modules_driver_baro.md +++ b/docs/zh/modules/modules_driver_baro.md @@ -4,9 +4,7 @@ Source: [drivers/barometer/bmp280](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp280) - - -### 用法 +### Usage {#bmp280_usage} ``` bmp280 [arguments...] @@ -42,9 +40,7 @@ bmp280 [arguments...] Source: [drivers/barometer/bmp388](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp388) - - -### 用法 +### Usage {#bmp388_usage} ``` bmp388 [arguments...] @@ -72,9 +68,7 @@ bmp388 [arguments...] Source: [drivers/barometer/bmp581](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/bmp581) - - -### 用法 +### Usage {#bmp581_usage} ``` bmp581 [arguments...] @@ -102,9 +96,7 @@ bmp581 [arguments...] Source: [drivers/barometer/dps310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/dps310) - - -### 用法 +### Usage {#dps310_usage} ``` dps310 [arguments...] @@ -140,9 +132,7 @@ dps310 [arguments...] Source: [drivers/barometer/invensense/icp101xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp101xx) - - -### 用法 +### Usage {#icp101xx_usage} ``` icp101xx [arguments...] @@ -166,9 +156,7 @@ icp101xx [arguments...] Source: [drivers/barometer/invensense/icp201xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/invensense/icp201xx) - - -### 用法 +### Usage {#icp201xx_usage} ``` icp201xx [arguments...] @@ -192,9 +180,7 @@ icp201xx [arguments...] Source: [drivers/barometer/lps22hb](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps22hb) - - -### 用法 +### Usage {#lps22hb_usage} ``` lps22hb [arguments...] @@ -220,9 +206,7 @@ lps22hb [arguments...] Source: [drivers/barometer/lps25h](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps25h) - - -### 用法 +### Usage {#lps25h_usage} ``` lps25h [arguments...] @@ -248,9 +232,7 @@ lps25h [arguments...] Source: [drivers/barometer/lps33hw](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/lps33hw) - - -### 用法 +### Usage {#lps33hw_usage} ``` lps33hw [arguments...] @@ -279,9 +261,7 @@ lps33hw [arguments...] Source: [drivers/barometer/maiertek/mpc2520](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/maiertek/mpc2520) - - -### 用法 +### Usage {#mpc2520_usage} ``` mpc2520 [arguments...] @@ -305,9 +285,7 @@ mpc2520 [arguments...] Source: [drivers/barometer/mpl3115a2](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/mpl3115a2) - - -### 用法 +### Usage {#mpl3115a2_usage} ``` mpl3115a2 [arguments...] @@ -331,9 +309,7 @@ mpl3115a2 [arguments...] Source: [drivers/barometer/ms5611](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5611) - - -### 用法 +### Usage {#ms5611_usage} ``` ms5611 [arguments...] @@ -369,9 +345,7 @@ ms5611 [arguments...] Source: [drivers/barometer/ms5837](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/ms5837) - - -### 用法 +### Usage {#ms5837_usage} ``` ms5837 [arguments...] @@ -393,9 +367,7 @@ ms5837 [arguments...] Source: [drivers/barometer/goertek/spa06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spa06) - - -### 用法 +### Usage {#spa06_usage} ``` spa06 [arguments...] @@ -431,9 +403,7 @@ spa06 [arguments...] Source: [drivers/barometer/goertek/spl06](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer/goertek/spl06) - - -### 用法 +### Usage {#spl06_usage} ``` spl06 [arguments...] diff --git a/docs/zh/modules/modules_driver_camera.md b/docs/zh/modules/modules_driver_camera.md index 55e355dc0c..60881d33e0 100644 --- a/docs/zh/modules/modules_driver_camera.md +++ b/docs/zh/modules/modules_driver_camera.md @@ -34,9 +34,7 @@ In particular: [Setup/usage information](../camera/index.md). - - -### 用法 +### Usage {#camera_trigger_usage} ``` camera_trigger [arguments...] diff --git a/docs/zh/modules/modules_driver_distance_sensor.md b/docs/zh/modules/modules_driver_distance_sensor.md index 76d7ac38a1..649c1ca6b7 100644 --- a/docs/zh/modules/modules_driver_distance_sensor.md +++ b/docs/zh/modules/modules_driver_distance_sensor.md @@ -16,15 +16,13 @@ Attempt to start driver on a specified serial device. afbrs50 start ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` afbrs50 stop ``` - - -### 用法 +### Usage {#afbrs50_usage} ``` afbrs50 [arguments...] @@ -43,9 +41,7 @@ afbrs50 [arguments...] Source: [drivers/distance_sensor/gy_us42](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/gy_us42) - - -### 用法 +### Usage {#gy_us42_usage} ``` gy_us42 [arguments...] @@ -73,7 +69,7 @@ Source: [drivers/distance_sensor/leddar_one](https://github.com/PX4/PX4-Autopilo Serial bus driver for the LeddarOne LiDAR. -针对 Lightware SFxx 系列 LIDAR 测距仪的 I2C 总线驱动: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20。 +Most boards are configured to enable/start the driver on a specified UART using the SENS_LEDDAR1_CFG parameter. Setup/usage information: https://docs.px4.io/main/en/sensor/leddar_one.html @@ -85,15 +81,13 @@ Attempt to start driver on a specified serial device. leddar_one start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` leddar_one stop ``` - - -### 用法 +### Usage {#leddar_one_usage} ``` leddar_one [arguments...] @@ -112,13 +106,11 @@ Source: [drivers/distance_sensor/lightware_laser_i2c](https://github.com/PX4/PX4 ### 描述 -设置/使用 信息: https://docs.px4.io/master/en/sensor/sfxx_lidar.html +I2C bus driver for Lightware SFxx series LIDAR rangefinders: SF10/a, SF10/b, SF10/c, SF11/c, SF/LW20. Setup/usage information: https://docs.px4.io/main/en/sensor/sfxx_lidar.html - - -### 用法 +### Usage {#lightware_laser_i2c_usage} ``` lightware_laser_i2c [arguments...] @@ -160,15 +152,13 @@ Attempt to start driver on a specified serial device. lightware_laser_serial start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` lightware_laser_serial stop ``` - - -### 用法 +### Usage {#lightware_laser_serial_usage} ``` lightware_laser_serial [arguments...] @@ -197,15 +187,13 @@ Attempt to start driver on a specified serial device. lightware_sf45_serial start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` lightware_sf45_serial stop ``` - - -### 用法 +### Usage {#lightware_sf45_serial_usage} ``` lightware_sf45_serial [arguments...] @@ -224,13 +212,11 @@ Source: [drivers/distance_sensor/ll40ls_pwm](https://github.com/PX4/PX4-Autopilo PWM driver for LidarLite rangefinders. -超声笔测距仪驱动,负责处理与设备的用心并通过 uORB 将距离信息发布出去。 +The sensor/driver must be enabled using the parameter SENS_EN_LL40LS. Setup/usage information: https://docs.px4.io/main/en/sensor/lidar_lite.html - - -### 用法 +### Usage {#ll40ls_usage} ``` ll40ls [arguments...] @@ -244,13 +230,11 @@ ll40ls [arguments...] stop Stop driver ``` -## pga460 +## mappydot Source: [drivers/distance_sensor/mappydot](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mappydot) - - -### 用法 +### Usage {#mappydot_usage} ``` mappydot [arguments...] @@ -272,9 +256,7 @@ mappydot [arguments...] Source: [drivers/distance_sensor/mb12xx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/mb12xx) - - -### 用法 +### Usage {#mb12xx_usage} ``` mb12xx [arguments...] @@ -312,9 +294,7 @@ running. A simple algorithm to detect false readings is implemented at the drive the quality of data that is being published. The driver will not publish data at all if it deems the sensor data to be invalid or unstable. - - -### 用法 +### Usage {#pga460_usage} ``` pga460 [arguments...] @@ -333,9 +313,7 @@ pga460 [arguments...] Source: [drivers/distance_sensor/srf02](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/srf02) - - -### 用法 +### Usage {#srf02_usage} ``` srf02 [arguments...] @@ -367,9 +345,7 @@ Driver for HY-SRF05 / HC-SR05 and HC-SR04 rangefinders. The sensor/driver must be enabled using the parameter SENS_EN_HXSRX0X. - - -### 用法 +### Usage {#srf05_usage} ``` srf05 [arguments...] @@ -399,9 +375,7 @@ The sensor/driver must be enabled using the parameter SENS_EN_TRANGER. Setup/usage information: https://docs.px4.io/main/en/sensor/rangefinders.html#teraranger-rangefinders - - -### 用法 +### Usage {#teraranger_usage} ``` teraranger [arguments...] @@ -427,9 +401,7 @@ teraranger [arguments...] Source: [drivers/distance_sensor/tf02pro](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/tf02pro) - - -### 用法 +### Usage {#tf02pro_usage} ``` tf02pro [arguments...] @@ -471,15 +443,13 @@ Attempt to start driver on a specified serial device. tfmini start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` tfmini stop ``` - - -### 用法 +### Usage {#tfmini_usage} ``` tfmini [arguments...] @@ -514,15 +484,13 @@ Attempt to start driver on a specified serial device. ulanding_radar start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` ulanding_radar stop ``` - - -### 用法 +### Usage {#ulanding_radar_usage} ``` ulanding_radar [arguments...] @@ -540,9 +508,7 @@ ulanding_radar [arguments...] Source: [drivers/distance_sensor/vl53l0x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l0x) - - -### 用法 +### Usage {#vl53l0x_usage} ``` vl53l0x [arguments...] @@ -568,9 +534,7 @@ vl53l0x [arguments...] Source: [drivers/distance_sensor/vl53l1x](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/distance_sensor/vl53l1x) - - -### 用法 +### Usage {#vl53l1x_usage} ``` vl53l1x [arguments...] diff --git a/docs/zh/modules/modules_driver_imu.md b/docs/zh/modules/modules_driver_imu.md index 98f8f7c98d..67f9a2713b 100644 --- a/docs/zh/modules/modules_driver_imu.md +++ b/docs/zh/modules/modules_driver_imu.md @@ -4,9 +4,7 @@ Source: [drivers/imu/analog_devices/adis16448](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16448) - - -### 用法 +### Usage {#adis16448_usage} ``` adis16448 [arguments...] @@ -32,9 +30,7 @@ adis16448 [arguments...] Source: [drivers/imu/analog_devices/adis16470](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16470) - - -### 用法 +### Usage {#adis16470_usage} ``` adis16470 [arguments...] @@ -60,9 +56,7 @@ adis16470 [arguments...] Source: [drivers/imu/analog_devices/adis16477](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16477) - - -### 用法 +### Usage {#adis16477_usage} ``` adis16477 [arguments...] @@ -88,9 +82,7 @@ adis16477 [arguments...] Source: [drivers/imu/analog_devices/adis16497](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16497) - - -### 用法 +### Usage {#adis16497_usage} ``` adis16497 [arguments...] @@ -116,9 +108,7 @@ adis16497 [arguments...] Source: [drivers/imu/analog_devices/adis16507](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16507) - - -### 用法 +### Usage {#adis16507_usage} ``` adis16507 [arguments...] @@ -144,9 +134,7 @@ adis16507 [arguments...] Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055) - - -### 用法 +### Usage {#bmi055_usage} ``` bmi055 [arguments...] @@ -174,9 +162,7 @@ bmi055 [arguments...] Source: [drivers/imu/bosch/bmi085](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi085) - - -### 用法 +### Usage {#bmi085_usage} ``` bmi085 [arguments...] @@ -204,9 +190,7 @@ bmi085 [arguments...] Source: [drivers/imu/bosch/bmi088](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088) - - -### 用法 +### Usage {#bmi088_usage} ``` bmi088 [arguments...] @@ -234,9 +218,7 @@ bmi088 [arguments...] Source: [drivers/imu/bosch/bmi088_i2c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi088_i2c) - - -### 用法 +### Usage {#bmi088_i2c_usage} ``` bmi088_i2c [arguments...] @@ -264,9 +246,7 @@ bmi088_i2c [arguments...] Source: [drivers/imu/bosch/bmi270](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi270) - - -### 用法 +### Usage {#bmi270_usage} ``` bmi270 [arguments...] @@ -292,9 +272,7 @@ bmi270 [arguments...] Source: [drivers/imu/nxp/fxas21002c](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxas21002c) - - -### 用法 +### Usage {#fxas21002c_usage} ``` fxas21002c [arguments...] @@ -328,9 +306,7 @@ fxas21002c [arguments...] Source: [drivers/imu/nxp/fxos8701cq](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/nxp/fxos8701cq) - - -### 用法 +### Usage {#fxos8701cq_usage} ``` fxos8701cq [arguments...] @@ -364,9 +340,7 @@ fxos8701cq [arguments...] Source: [drivers/imu/invensense/iam20680hp](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iam20680hp) - - -### 用法 +### Usage {#iam20680hp_usage} ``` iam20680hp [arguments...] @@ -392,9 +366,7 @@ iam20680hp [arguments...] Source: [drivers/imu/invensense/icm20602](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20602) - - -### 用法 +### Usage {#icm20602_usage} ``` icm20602 [arguments...] @@ -420,9 +392,7 @@ icm20602 [arguments...] Source: [drivers/imu/invensense/icm20608g](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20608g) - - -### 用法 +### Usage {#icm20608g_usage} ``` icm20608g [arguments...] @@ -448,9 +418,7 @@ icm20608g [arguments...] Source: [drivers/imu/invensense/icm20649](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20649) - - -### 用法 +### Usage {#icm20649_usage} ``` icm20649 [arguments...] @@ -476,9 +444,7 @@ icm20649 [arguments...] Source: [drivers/imu/invensense/icm20689](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20689) - - -### 用法 +### Usage {#icm20689_usage} ``` icm20689 [arguments...] @@ -504,9 +470,7 @@ icm20689 [arguments...] Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - - -### 用法 +### Usage {#icm20948_usage} ``` icm20948 [arguments...] @@ -533,9 +497,7 @@ icm20948 [arguments...] Source: [drivers/imu/invensense/icm20948](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm20948) - - -### 用法 +### Usage {#icm20948_i2c_passthrough_usage} ``` icm20948_i2c_passthrough [arguments...] @@ -559,9 +521,7 @@ icm20948_i2c_passthrough [arguments...] Source: [drivers/imu/invensense/icm40609d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm40609d) - - -### 用法 +### Usage {#icm40609d_usage} ``` icm40609d [arguments...] @@ -587,9 +547,7 @@ icm40609d [arguments...] Source: [drivers/imu/invensense/icm42605](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42605) - - -### 用法 +### Usage {#icm42605_usage} ``` icm42605 [arguments...] @@ -615,9 +573,7 @@ icm42605 [arguments...] Source: [drivers/imu/invensense/icm42670p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42670p) - - -### 用法 +### Usage {#icm42670p_usage} ``` icm42670p [arguments...] @@ -643,9 +599,7 @@ icm42670p [arguments...] Source: [drivers/imu/invensense/icm42688p](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm42688p) - - -### 用法 +### Usage {#icm42688p_usage} ``` icm42688p [arguments...] @@ -674,9 +628,7 @@ icm42688p [arguments...] Source: [drivers/imu/invensense/icm45686](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/icm45686) - - -### 用法 +### Usage {#icm45686_usage} ``` icm45686 [arguments...] @@ -704,9 +656,7 @@ icm45686 [arguments...] Source: [drivers/imu/invensense/iim42652](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42652) - - -### 用法 +### Usage {#iim42652_usage} ``` iim42652 [arguments...] @@ -734,9 +684,7 @@ iim42652 [arguments...] Source: [drivers/imu/invensense/iim42653](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/iim42653) - - -### 用法 +### Usage {#iim42653_usage} ``` iim42653 [arguments...] @@ -764,9 +712,7 @@ iim42653 [arguments...] Source: [drivers/imu/st/l3gd20](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/l3gd20) - - -### 用法 +### Usage {#l3gd20_usage} ``` l3gd20 [arguments...] @@ -796,9 +742,7 @@ l3gd20 [arguments...] Source: [drivers/imu/st/lsm303d](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm303d) - - -### 用法 +### Usage {#lsm303d_usage} ``` lsm303d [arguments...] @@ -824,9 +768,7 @@ lsm303d [arguments...] Source: [drivers/imu/st/lsm9ds1](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/st/lsm9ds1) - - -### 用法 +### Usage {#lsm9ds1_usage} ``` lsm9ds1 [arguments...] @@ -852,9 +794,7 @@ lsm9ds1 [arguments...] Source: [drivers/imu/invensense/mpu6000](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6000) - - -### 用法 +### Usage {#mpu6000_usage} ``` mpu6000 [arguments...] @@ -880,9 +820,7 @@ mpu6000 [arguments...] Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - - -### 用法 +### Usage {#mpu9250_usage} ``` mpu9250 [arguments...] @@ -909,9 +847,7 @@ mpu9250 [arguments...] Source: [drivers/imu/invensense/mpu9250](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu9250) - - -### 用法 +### Usage {#mpu9250_i2c_usage} ``` mpu9250_i2c [arguments...] @@ -937,9 +873,7 @@ mpu9250_i2c [arguments...] Source: [drivers/imu/invensense/mpu6500](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/invensense/mpu6500) - - -### 用法 +### Usage {#mpu9520_usage} ``` mpu9520 [arguments...] @@ -965,9 +899,7 @@ mpu9520 [arguments...] Source: [drivers/imu/murata/sch16t](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/murata/sch16t) - - -### 用法 +### Usage {#sch16t_usage} ``` sch16t [arguments...] diff --git a/docs/zh/modules/modules_driver_ins.md b/docs/zh/modules/modules_driver_ins.md index b1b7e13526..e469f2bfbc 100644 --- a/docs/zh/modules/modules_driver_ins.md +++ b/docs/zh/modules/modules_driver_ins.md @@ -20,15 +20,13 @@ Attempt to start driver on a specified serial device. vectornav start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` vectornav stop ``` - - -### 用法 +### Usage {#vectornav_usage} ``` vectornav [arguments...] diff --git a/docs/zh/modules/modules_driver_magnetometer.md b/docs/zh/modules/modules_driver_magnetometer.md index b009ed86ee..8d527cfa4e 100644 --- a/docs/zh/modules/modules_driver_magnetometer.md +++ b/docs/zh/modules/modules_driver_magnetometer.md @@ -4,9 +4,7 @@ Source: [drivers/magnetometer/akm/ak09916](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak09916) - - -### 用法 +### Usage {#ak09916_usage} ``` ak09916 [arguments...] @@ -32,9 +30,7 @@ ak09916 [arguments...] Source: [drivers/magnetometer/akm/ak8963](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/akm/ak8963) - - -### 用法 +### Usage {#ak8963_usage} ``` ak8963 [arguments...] @@ -60,9 +56,7 @@ ak8963 [arguments...] Source: [drivers/magnetometer/bosch/bmm150](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm150) - - -### 用法 +### Usage {#bmm150_usage} ``` bmm150 [arguments...] @@ -88,9 +82,7 @@ bmm150 [arguments...] Source: [drivers/magnetometer/bosch/bmm350](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/bosch/bmm350) - - -### 用法 +### Usage {#bmm350_usage} ``` bmm350 [arguments...] @@ -116,9 +108,7 @@ bmm350 [arguments...] Source: [drivers/magnetometer/hmc5883](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/hmc5883) - - -### 用法 +### Usage {#hmc5883_usage} ``` hmc5883 [arguments...] @@ -147,9 +137,7 @@ hmc5883 [arguments...] Source: [drivers/magnetometer/st/iis2mdc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/st/iis2mdc) - - -### 用法 +### Usage {#iis2mdc_usage} ``` iis2mdc [arguments...] @@ -173,9 +161,7 @@ iis2mdc [arguments...] Source: [drivers/magnetometer/isentek/ist8308](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8308) - - -### 用法 +### Usage {#ist8308_usage} ``` ist8308 [arguments...] @@ -201,9 +187,7 @@ ist8308 [arguments...] Source: [drivers/magnetometer/isentek/ist8310](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/isentek/ist8310) - - -### 用法 +### Usage {#ist8310_usage} ``` ist8310 [arguments...] @@ -229,9 +213,7 @@ ist8310 [arguments...] Source: [drivers/magnetometer/lis3mdl](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lis3mdl) - - -### 用法 +### Usage {#lis3mdl_usage} ``` lis3mdl [arguments...] @@ -263,9 +245,7 @@ lis3mdl [arguments...] Source: [drivers/magnetometer/lsm9ds1_mag](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/lsm9ds1_mag) - - -### 用法 +### Usage {#lsm9ds1_mag_usage} ``` lsm9ds1_mag [arguments...] @@ -291,9 +271,7 @@ lsm9ds1_mag [arguments...] Source: [drivers/magnetometer/memsic/mmc5983ma](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/memsic/mmc5983ma) - - -### 用法 +### Usage {#mmc5983ma_usage} ``` mmc5983ma [arguments...] @@ -325,9 +303,7 @@ mmc5983ma [arguments...] Source: [drivers/magnetometer/qmc5883l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/qmc5883l) - - -### 用法 +### Usage {#qmc5883l_usage} ``` qmc5883l [arguments...] @@ -353,9 +329,7 @@ qmc5883l [arguments...] Source: [drivers/magnetometer/rm3100](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/rm3100) - - -### 用法 +### Usage {#rm3100_usage} ``` rm3100 [arguments...] @@ -383,9 +357,7 @@ rm3100 [arguments...] Source: [drivers/magnetometer/vtrantech/vcm1193l](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer/vtrantech/vcm1193l) - - -### 用法 +### Usage {#vcm1193l_usage} ``` vcm1193l [arguments...] diff --git a/docs/zh/modules/modules_driver_optical_flow.md b/docs/zh/modules/modules_driver_optical_flow.md index f646f49540..097660a8e3 100644 --- a/docs/zh/modules/modules_driver_optical_flow.md +++ b/docs/zh/modules/modules_driver_optical_flow.md @@ -20,15 +20,13 @@ Attempt to start driver on a specified serial device. thoneflow start -d /dev/ttyS1 ``` -设置/使用 信息: https://docs.px4.io/master/en/sensor/leddar_one.html +Stop driver ``` thoneflow stop ``` - - -### 用法 +### Usage {#thoneflow_usage} ``` thoneflow [arguments...] diff --git a/docs/zh/modules/modules_driver_radio_control.md b/docs/zh/modules/modules_driver_radio_control.md new file mode 100644 index 0000000000..e49199d3ec --- /dev/null +++ b/docs/zh/modules/modules_driver_radio_control.md @@ -0,0 +1,122 @@ +# Modules Reference: Radio Control (Driver) + +## crsf_rc + +Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc) + +### 描述 + +This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data + +### Usage {#crsf_rc_usage} + +``` +crsf_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## dsm_rc + +Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc) + +### 描述 + +This module does Spektrum DSM RC input parsing. + +### Usage {#dsm_rc_usage} + +``` +dsm_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## ghst_rc + +Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc) + +### 描述 + +This module does Ghost (GHST) RC input parsing. + +### Usage {#ghst_rc_usage} + +``` +ghst_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` + +## rc_input + +Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input) + +### 描述 + +This module does the RC input parsing and auto-selecting the method. Supported methods are: + +- PPM +- SBUS +- DSM +- SUMD +- ST24 +- TBS Crossfire (CRSF) + +### Usage {#rc_input_usage} + +``` +rc_input [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + bind Send a DSM bind command (module must be running) + + stop + + status print status info +``` + +## sbus_rc + +Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc) + +### 描述 + +This module does SBUS RC input parsing. + +### Usage {#sbus_rc_usage} + +``` +sbus_rc [arguments...] + Commands: + start + [-d ] RC device + values: , default: /dev/ttyS3 + + stop + + status print status info +``` diff --git a/docs/zh/modules/modules_driver_rpm_sensor.md b/docs/zh/modules/modules_driver_rpm_sensor.md index fd96c85ef0..b4d7b95243 100644 --- a/docs/zh/modules/modules_driver_rpm_sensor.md +++ b/docs/zh/modules/modules_driver_rpm_sensor.md @@ -4,9 +4,7 @@ Source: [drivers/rpm/pcf8583](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rpm/pcf8583) - - -### 用法 +### Usage {#pcf8583_usage} ``` pcf8583 [arguments...] diff --git a/docs/zh/modules/modules_driver_transponder.md b/docs/zh/modules/modules_driver_transponder.md index 9076c6def2..cd9e77ee03 100644 --- a/docs/zh/modules/modules_driver_transponder.md +++ b/docs/zh/modules/modules_driver_transponder.md @@ -24,9 +24,7 @@ Set the Squawk Code $ sagetech_mxs squawk 1200 ``` - - -### 用法 +### Usage {#sagetech_mxs_usage} ``` sagetech_mxs [arguments...] diff --git a/docs/zh/modules/modules_estimator.md b/docs/zh/modules/modules_estimator.md index f7b2f45db0..10f1bbac29 100644 --- a/docs/zh/modules/modules_estimator.md +++ b/docs/zh/modules/modules_estimator.md @@ -8,9 +8,7 @@ Source: [modules/attitude_estimator_q](https://github.com/PX4/PX4-Autopilot/tree Attitude and position estimator using an Extended Kalman Filter. It is used for Multirotors and Fixed-Wing. - - -### 用法 +### Usage {#AttitudeEstimatorQ_usage} ``` AttitudeEstimatorQ [arguments...] @@ -36,9 +34,7 @@ to a valid sensor in case of failure detection. For failure detection as well as the estimation of a scale factor from IAS to CAS, it runs several wind estimators and also publishes those. - - -### 用法 +### Usage {#airspeed_estimator_usage} ``` airspeed_estimator [arguments...] @@ -63,9 +59,7 @@ The documentation can be found on the [ECL/EKF Overview & Tuning](https://docs.p 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. - - -### 用法 +### Usage {#ekf2_usage} ``` ekf2 [arguments...] @@ -90,9 +84,7 @@ Source: [modules/local_position_estimator](https://github.com/PX4/PX4-Autopilot/ 基于扩展卡尔曼滤波器的姿态和位置估计器。 - - -### 用法 +### Usage {#local_position_estimator_usage} ``` local_position_estimator [arguments...] @@ -110,9 +102,7 @@ Source: [modules/mc_hover_thrust_estimator](https://github.com/PX4/PX4-Autopilot ### 描述 - - -### 用法 +### Usage {#mc_hover_thrust_estimator_usage} ``` mc_hover_thrust_estimator [arguments...] diff --git a/docs/zh/modules/modules_simulation.md b/docs/zh/modules/modules_simulation.md index 775a46c055..6051db28c3 100644 --- a/docs/zh/modules/modules_simulation.md +++ b/docs/zh/modules/modules_simulation.md @@ -21,9 +21,7 @@ signals given by the control allocation module. 积分计算采用前向欧拉法。 为避免堆栈溢出,大部分变量在 .hpp 文件中声明为全局变量。 - - -### 用法 +### Usage {#simulator_sih_usage} ``` simulator_sih [arguments...] diff --git a/docs/zh/modules/modules_system.md b/docs/zh/modules/modules_system.md index ef8b780bfc..e27bab2a1e 100644 --- a/docs/zh/modules/modules_system.md +++ b/docs/zh/modules/modules_system.md @@ -6,9 +6,7 @@ Source: [modules/simulation/battery_simulator](https://github.com/PX4/PX4-Autopi ### 描述 - - -### 用法 +### Usage {#battery_simulator_usage} ``` battery_simulator [arguments...] @@ -26,17 +24,15 @@ Source: [modules/battery_status](https://github.com/PX4/PX4-Autopilot/tree/main/ ### 描述 -模块提供的功能包括: +The provided functionality includes: - Read the output from the ADC driver (via ioctl interface) and publish `battery_status`. ### 实现 -模块运行在它自己的线程中,并轮询当前选定的陀螺仪主题。 +It runs in its own thread and polls on the currently selected gyro topic. - - -### 用法 +### Usage {#battery_status_usage} ``` battery_status [arguments...] @@ -74,9 +70,7 @@ It discards topics from the `camera_trigger` module if camera capture is enabled For the topics that are not discarded it creates a `CameraCapture` topic with the timestamp information from the `CameraTrigger` and position information from the vehicle. - - -### 用法 +### Usage {#camera_feedback_usage} ``` camera_feedback [arguments...] @@ -99,9 +93,7 @@ The supported protocols are: MAVLink, nsh, and ublox serial passthrough. If the the module will only try to start mavlink as long as the USB VBUS is detected. Otherwise it will spin and continue to check for VBUS and start mavlink once it is detected. - - -### 用法 +### Usage {#cdcacm_autostart_usage} ``` cdcacm_autostart [arguments...] @@ -119,11 +111,9 @@ Source: [modules/commander](https://github.com/PX4/PX4-Autopilot/tree/main/src/m ### 描述 -该模块包含飞行模式切换和失效保护状态机。 +The commander module contains the state machine for mode switching and failsafe behavior. - - -### 用法 +### Usage {#commander_usage} ``` commander [arguments...] @@ -177,22 +167,20 @@ Source: [modules/dataman](https://github.com/PX4/PX4-Autopilot/tree/main/src/mod ### 描述 -该模块通过基于C语言的API以简单数据库的形式为系统的其他部分提供持续性存储功能。 +Module to provide persistent storage for the rest of the system in form of a simple database through a C API. Multiple backends are supported depending on the board: - a file (eg. on the SD card) -- FLASH(需要飞控板支持) +- RAM (this is obviously not persistent) -It is used to store structured data of different types: mission waypoints, mission state and geofence polygons. Each type has a specific type and a fixed maximum amount of storage items, so that fast random access is possible. -每种类型的数据都有一个特定的类型和一个固定的最大存储条目的数量,因此可以实现对数据的快速随机访问。 +It is used to store structured data of different types: mission waypoints, mission state and geofence polygons. +Each type has a specific type and a fixed maximum amount of storage items, so that fast random access is possible. ### 实现 -单个数据的读取和写入是原子操作。 +Reading and writing a single item is always atomic. - - -### 用法 +### Usage {#dataman_usage} ``` dataman [arguments...] @@ -216,20 +204,18 @@ Source: [systemcmds/dmesg](https://github.com/PX4/PX4-Autopilot/tree/main/src/sy ### 描述 -用于显示启动控制台消息的命令行工具 -需要注意的是,NuttX系统的工作队列和系统日志输出都未被捕捉到。 +Command-line tool to show bootup console messages. +Note that output from NuttX's work queues and syslog are not captured. ### 示例 -持续在后台打印所有消息。 +Keep printing all messages in the background: ``` dmesg -f & ``` - - -### 用法 +### Usage {#dmesg_usage} ``` dmesg [arguments...] @@ -243,11 +229,9 @@ Source: [modules/esc_battery](https://github.com/PX4/PX4-Autopilot/tree/main/src ### 描述 -Background process running periodically with 1 Hz on the LP work queue to calculate the CPU load and RAM usage and publish the cpuload topic. +This implements using information from the ESC status and publish it as battery status. - - -### 用法 +### Usage {#esc_battery_usage} ``` esc_battery [arguments...] @@ -265,11 +249,9 @@ Source: [modules/gyro_calibration](https://github.com/PX4/PX4-Autopilot/tree/mai ### 描述 -源码:drivers/heater +Simple online gyroscope calibration. - - -### 用法 +### Usage {#gyro_calibration_usage} ``` gyro_calibration [arguments...] @@ -281,15 +263,13 @@ gyro_calibration [arguments...] status print status info ``` -## heater +## gyro_fft Source: [modules/gyro_fft](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/gyro_fft) ### 描述 - - -### 用法 +### Usage {#gyro_fft_usage} ``` gyro_fft [arguments...] @@ -301,19 +281,17 @@ gyro_fft [arguments...] status print status info ``` -## land_detector +## heater Source: [drivers/heater](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/heater) ### 描述 -源码:modules/land_detector +Background process running periodically on the LP work 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. - - -### 用法 +### Usage {#heater_usage} ``` heater [arguments...] @@ -333,15 +311,14 @@ Source: [systemcmds/i2c_launcher](https://github.com/PX4/PX4-Autopilot/tree/main Daemon that starts drivers based on found I2C devices. - - -### 用法 +### Usage {#i2c_launcher_usage} ``` i2c_launcher [arguments...] Commands: start -b Bus number + -t battery index for calibration values (1 or 3) stop @@ -401,9 +378,7 @@ The architecture is as shown below: - - -### 用法 +### Usage {#internal_combustion_engine_control_usage} ``` internal_combustion_engine_control [arguments...] @@ -415,7 +390,7 @@ internal_combustion_engine_control [arguments...] status print status info ``` -## load_mon +## land_detector Source: [modules/land_detector](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/land_detector) @@ -427,10 +402,11 @@ states, such as commanded thrust, arming state and vehicle motion. ### 实现 -Every type is implemented in its own class with a common base class. 触发时间由变量 MAYBE_LAND_TRIGGER_TIME 定义。 当检测到 maybe_landed 状态时,位置控制器会将推理设定值设置为零。 A hysteresis and a fixed +Every type is implemented in its own class with a common base class. The base class maintains a state (landed, +maybe_landed, ground_contact). Each possible state is implemented in the derived classes. A hysteresis and a fixed priority of each internal state determines the actual land_detector state. -#### 多旋翼的 Land Detector +#### Multicopter Land Detector **ground_contact**: thrust setpoint and velocity in z-direction must be below a defined threshold for time GROUND_CONTACT_TRIGGER_TIME_US. When ground_contact is detected, the position controller turns off the thrust setpoint @@ -442,11 +418,9 @@ position controller sets the thrust setpoint to zero. **landed**: it requires maybe_landed to be true for time LAND_DETECTOR_TRIGGER_TIME_US. -There are 2 environment variables used for configuration: replay, which must be set to an ULog file name - it's the log file to be replayed. The second is the mode, specified via replay_mode: +The module runs periodically on the HP work queue. - - -### 用法 +### Usage {#land_detector_usage} ``` land_detector [arguments...] @@ -459,7 +433,7 @@ land_detector [arguments...] status print status info ``` -## logger +## load_mon Source: [modules/load_mon](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/load_mon) @@ -471,9 +445,7 @@ usage and publish the `cpuload` topic. On NuttX it also checks the stack usage of each process and if it falls below 300 bytes, a warning is output, which will also appear in the log file. - - -### 用法 +### Usage {#load_mon_usage} ``` load_mon [arguments...] @@ -497,21 +469,23 @@ tuning, replay and crash analysis. It supports 2 backends: -- 文件:写入 ULog 文件到文件系统中(SD 卡) -- MAVLink: 通过 MAVLink 将 ULog 数据流传输到客户端上(需要客户端支持此方式) +- Files: write ULog files to the file system (SD card) +- MAVLink: stream ULog data via MAVLink to a client (the client must support this) -模块的实现使用了两个线程: +Both backends can be enabled and used at the same time. -In between there is a write buffer with configurable size (and another fixed-size buffer for the mission log). It should be large to avoid dropouts. 缓冲区应大到可以避免出现数据溢出。 It can be enabled and configured via SDLOG_MISSION parameter. +The file backend supports 2 types of log files: full (the normal log) and a mission +log. The mission log is a reduced ulog file and can be used for example for geotagging or +vehicle management. It can be enabled and configured via SDLOG_MISSION parameter. The normal log is always a superset of the mission log. ### 实现 -立刻开始记录日志的典型用法: +The implementation uses two threads: - The main thread, running at a fixed rate (or polling on a topic if started with -p) and checking for data updates -- 写入线程,将数据写入文件中、 +- The writer thread, writing data to the file In between there is a write buffer with configurable size (and another fixed-size buffer for the mission log). It should be large to avoid dropouts. @@ -521,7 +495,7 @@ the mission log). It should be large to avoid dropouts. Typical usage to start logging immediately: ``` -logger on +logger start -e -t ``` Or if already running: @@ -530,9 +504,7 @@ Or if already running: logger on ``` - - -### 用法 +### Usage {#logger_usage} ``` logger [arguments...] @@ -575,9 +547,7 @@ Source: [modules/mag_bias_estimator](https://github.com/PX4/PX4-Autopilot/tree/m Online magnetometer bias estimator. - - -### 用法 +### Usage {#mag_bias_estimator_usage} ``` mag_bias_estimator [arguments...] @@ -589,7 +559,7 @@ mag_bias_estimator [arguments...] status print status info ``` -## replay +## manual_control Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/manual_control) @@ -597,9 +567,7 @@ Source: [modules/manual_control](https://github.com/PX4/PX4-Autopilot/tree/main/ Module consuming manual_control_inputs publishing one manual_control_setpoint. - - -### 用法 +### Usage {#manual_control_usage} ``` manual_control [arguments...] @@ -647,9 +615,7 @@ $ netman save # Save the parameters to the SD card. $ netman show # display current settings. $ netman update -i eth0 # do an update - - -### 用法 +### Usage {#netman_usage} ``` netman [arguments...] @@ -672,9 +638,7 @@ Source: [drivers/pwm_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/d Measures the PWM input on AUX5 (or MAIN5) via a timer capture ISR and publishes via the uORB 'pwm_input\` message. - - -### 用法 +### Usage {#pwm_input_usage} ``` pwm_input [arguments...] @@ -700,9 +664,7 @@ and then publish as `rc_channels` and `manual_control_input`. To reduce control latency, the module is scheduled on input_rc publications. - - -### 用法 +### Usage {#rc_update_usage} ``` rc_update [arguments...] @@ -737,9 +699,7 @@ the log. The replay procedure is documented on the [System-wide Replay](https://docs.px4.io/main/en/debug/system_wide_replay.html) page. - - -### 用法 +### Usage {#replay_usage} ``` replay [arguments...] @@ -766,9 +726,7 @@ It is currently only responsible for tone alarm on RC Loss. The tasks can be started via CLI or uORB topics (vehicle_command from MAVLink, etc.). - - -### 用法 +### Usage {#send_event_usage} ``` send_event [arguments...] @@ -788,9 +746,7 @@ Source: [modules/simulation/sensor_agp_sim](https://github.com/PX4/PX4-Autopilot Module to simulate auxiliary global position measurements with optional failure modes for SIH simulation. - - -### 用法 +### Usage {#sensor_agp_sim_usage} ``` sensor_agp_sim [arguments...] @@ -808,9 +764,7 @@ Source: [modules/simulation/sensor_airspeed_sim](https://github.com/PX4/PX4-Auto ### 描述 - - -### 用法 +### Usage {#sensor_arispeed_sim_usage} ``` sensor_arispeed_sim [arguments...] @@ -828,9 +782,7 @@ Source: [modules/simulation/sensor_baro_sim](https://github.com/PX4/PX4-Autopilo ### 描述 - - -### 用法 +### Usage {#sensor_baro_sim_usage} ``` sensor_baro_sim [arguments...] @@ -848,9 +800,7 @@ Source: [modules/simulation/sensor_gps_sim](https://github.com/PX4/PX4-Autopilot ### 描述 - - -### 用法 +### Usage {#sensor_gps_sim_usage} ``` sensor_gps_sim [arguments...] @@ -868,9 +818,7 @@ Source: [modules/simulation/sensor_mag_sim](https://github.com/PX4/PX4-Autopilot ### 描述 - - -### 用法 +### Usage {#sensor_mag_sim_usage} ``` sensor_mag_sim [arguments...] @@ -891,24 +839,22 @@ Source: [modules/sensors](https://github.com/PX4/PX4-Autopilot/tree/main/src/mod The sensors module is central to the whole system. It takes low-level output from drivers, turns it into a more usable form, and publishes it for the rest of the system. -模块提供的功能包括: +The provided functionality includes: - Read the output from the sensor drivers (`SensorGyro`, etc.). - 如果存在多个同类型传感器,那个模块将进行投票和容错处理。 - 然后应用飞控板的旋转和温度校正(如果被启用)。 And finally publish the data; one of the + If there are multiple of the same type, do voting and failover handling. + Then apply the board rotation and temperature calibration (if enabled). And finally publish the data; one of the topics is `SensorCombined`, used by many parts of the system. - Make sure the sensor drivers get the updated calibration parameters (scale & offset) when the parameters change or - on startup. 传感器驱动使用 ioctl 接口获取参数更新。 For this to work properly, the + on startup. The sensor drivers use the ioctl interface for parameter updates. For this to work properly, the sensor drivers must already be running when `sensors` is started. - Do sensor consistency checks and publish the `SensorsStatusImu` topic. ### 实现 -模块运行在它自己的线程中,并轮询当前选定的陀螺仪主题。 +It runs in its own thread and polls on the currently selected gyro topic. - - -### 用法 +### Usage {#sensors_usage} ``` sensors [arguments...] @@ -927,9 +873,7 @@ Source: [modules/simulation/system_power_simulator](https://github.com/PX4/PX4-A ### 描述 - - -### 用法 +### Usage {#system_power_simulation_usage} ``` system_power_simulation [arguments...] @@ -949,9 +893,7 @@ Source: [drivers/tattu_can](https://github.com/PX4/PX4-Autopilot/tree/main/src/d Driver for reading data from the Tattu 12S 16000mAh smart battery. - - -### 用法 +### Usage {#tattu_can_usage} ``` tattu_can [arguments...] @@ -975,9 +917,7 @@ whenever a change in temperature is detected. The module can also be configured routine at next boot, which allows the thermal calibration coeffecients to be calculated while the vehicle undergoes a temperature cycle. - - -### 用法 +### Usage {#temperature_compensation_usage} ``` temperature_compensation [arguments...] @@ -1007,9 +947,7 @@ Writes the RTC time cyclically to a file and reloads this value on startup. This allows monotonic time on systems that only have a software RTC (that is not battery powered). Explicitly setting the time backwards (e.g. via system_time) is still possible. - - -### 用法 +### Usage {#time_persistor_usage} ``` time_persistor [arguments...] @@ -1043,9 +981,7 @@ Play system tune #2: tune_control play -t 2 ``` - - -### 用法 +### Usage {#tune_control_usage} ``` tune_control [arguments...] @@ -1081,9 +1017,7 @@ uxrce_dds_client start -t serial -d /dev/ttyS3 -b 921600 uxrce_dds_client start -t udp -h 127.0.0.1 -p 15555 ``` - - -### 用法 +### Usage {#uxrce_dds_client_usage} ``` uxrce_dds_client [arguments...] @@ -1114,9 +1048,7 @@ Source: [systemcmds/work_queue](https://github.com/PX4/PX4-Autopilot/tree/main/s Command-line tool to show work queue status. - - -### 用法 +### Usage {#work_queue_usage} ``` work_queue [arguments...] diff --git a/docs/zh/modules/modules_template.md b/docs/zh/modules/modules_template.md index 702da90c94..77fdcf216c 100644 --- a/docs/zh/modules/modules_template.md +++ b/docs/zh/modules/modules_template.md @@ -22,9 +22,7 @@ CLI usage example: module start -f -p 42 ``` - - -### 用法 +### Usage {#module_usage} ``` module [arguments...] @@ -47,9 +45,7 @@ Source: [examples/work_item](https://github.com/PX4/PX4-Autopilot/tree/main/src/ Example of a simple module running out of a work queue. - - -### 用法 +### Usage {#work_item_example_usage} ``` work_item_example [arguments...] diff --git a/docs/zh/msg_docs/AirspeedValidated.md b/docs/zh/msg_docs/AirspeedValidated.md index eef1300688..9034960626 100644 --- a/docs/zh/msg_docs/AirspeedValidated.md +++ b/docs/zh/msg_docs/AirspeedValidated.md @@ -1,21 +1,27 @@ # AirspeedValidated (UORB message) -[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AirspeedValidated.msg) +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/AirspeedValidated.msg) ```c +uint32 MESSAGE_VERSION = 1 + uint64 timestamp # time since system start (microseconds) -float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid -float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid -float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid +float32 indicated_airspeed_m_s # [m/s] Indicated airspeed (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # [m/s] Calibrated airspeed (CAS), set to NAN if invalid +float32 true_airspeed_m_s # [m/s] True airspeed (TAS), set to NAN if invalid +int8 airspeed_source # Source of currently published airspeed values +int8 DISABLED = -1 +int8 GROUND_MINUS_WIND = 0 +int8 SENSOR_1 = 1 +int8 SENSOR_2 = 2 +int8 SENSOR_3 = 3 +int8 SYNTHETIC = 4 + +# debug states float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid -float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid - -bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. - -int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid - +float32 calibraded_airspeed_synth_m_s # synthetic airspeed in m/s, set to NAN if invalid float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] float32 throttle_filtered # filtered fixed-wing throttle [-] float32 pitch_filtered # filtered pitch [rad] diff --git a/docs/zh/msg_docs/AirspeedValidatedV0.md b/docs/zh/msg_docs/AirspeedValidatedV0.md new file mode 100644 index 0000000000..8bca98a224 --- /dev/null +++ b/docs/zh/msg_docs/AirspeedValidatedV0.md @@ -0,0 +1,25 @@ +# AirspeedValidatedV0 (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/AirspeedValidatedV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 indicated_airspeed_m_s # indicated airspeed in m/s (IAS), set to NAN if invalid +float32 calibrated_airspeed_m_s # calibrated airspeed in m/s (CAS, accounts for instrumentation errors), set to NAN if invalid +float32 true_airspeed_m_s # true filtered airspeed in m/s (TAS), set to NAN if invalid + +float32 calibrated_ground_minus_wind_m_s # CAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid +float32 true_ground_minus_wind_m_s # TAS calculated from groundspeed - windspeed, where windspeed is estimated based on a zero-sideslip assumption, set to NAN if invalid + +bool airspeed_sensor_measurement_valid # True if data from at least one airspeed sensor is declared valid. + +int8 selected_airspeed_index # 1-3: airspeed sensor index, 0: groundspeed-windspeed, -1: airspeed invalid + +float32 airspeed_derivative_filtered # filtered indicated airspeed derivative [m/s/s] +float32 throttle_filtered # filtered fixed-wing throttle [-] +float32 pitch_filtered # filtered pitch [rad] + +``` diff --git a/docs/zh/msg_docs/CellularStatus.md b/docs/zh/msg_docs/CellularStatus.md index 4984dc9a6b..466a1272fe 100644 --- a/docs/zh/msg_docs/CellularStatus.md +++ b/docs/zh/msg_docs/CellularStatus.md @@ -1,35 +1,49 @@ # CellularStatus (UORB message) +Cellular status + +This is currently used only for logging cell status from MAVLink. + [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/CellularStatus.msg) ```c -uint64 timestamp # time since system start (microseconds) +# Cellular status +# +# This is currently used only for logging cell status from MAVLink. -uint8 CELLULAR_STATUS_FLAG_UNKNOWN=0 # State unknown or not reportable -uint8 CELLULAR_STATUS_FLAG_FAILED=1 # velocity setpoint -uint8 CELLULAR_STATUS_FLAG_INITIALIZING=2 # Modem is being initialized -uint8 CELLULAR_STATUS_FLAG_LOCKED=3 # Modem is locked -uint8 CELLULAR_STATUS_FLAG_DISABLED=4 # Modem is not enabled and is powered down -uint8 CELLULAR_STATUS_FLAG_DISABLING=5 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_DISABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLING=6 # Modem is currently transitioning to the CELLULAR_STATUS_FLAG_ENABLED state -uint8 CELLULAR_STATUS_FLAG_ENABLED=7 # Modem is enabled and powered on but not registered with a network provider and not available for data connections -uint8 CELLULAR_STATUS_FLAG_SEARCHING=8 # Modem is searching for a network provider to register -uint8 CELLULAR_STATUS_FLAG_REGISTERED=9 # Modem is registered with a network provider, and data connections and messaging may be available for use -uint8 CELLULAR_STATUS_FLAG_DISCONNECTING=10 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTING=11 # 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 -uint8 CELLULAR_STATUS_FLAG_CONNECTED=12 # One or more packet data bearers is active and connected +uint64 timestamp # [us] Time since system start. -uint8 CELLULAR_NETWORK_FAILED_REASON_NONE=0 # No error -uint8 CELLULAR_NETWORK_FAILED_REASON_UNKNOWN=1 # Error state is unknown -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_MISSING=2 # SIM is required for the modem but missing -uint8 CELLULAR_NETWORK_FAILED_REASON_SIM_ERROR=3 # SIM is available, but not usable for connection +uint16 status # [@enum STATUS_FLAG] Status bitmap. +uint16 STATUS_FLAG_UNKNOWN = 1 # State unknown or not reportable. +uint16 STATUS_FLAG_FAILED = 2 # Modem is unusable. +uint16 STATUS_FLAG_INITIALIZING = 4 # Modem is being initialized. +uint16 STATUS_FLAG_LOCKED = 8 # Modem is locked. +uint16 STATUS_FLAG_DISABLED = 16 # Modem is not enabled and is powered down. +uint16 STATUS_FLAG_DISABLING = 32 # Modem is currently transitioning to the STATUS_FLAG_DISABLED state. +uint16 STATUS_FLAG_ENABLING = 64 # Modem is currently transitioning to the STATUS_FLAG_ENABLED state. +uint16 STATUS_FLAG_ENABLED = 128 # Modem is enabled and powered on but not registered with a network provider and not available for data connections. +uint16 STATUS_FLAG_SEARCHING = 256 # Modem is searching for a network provider to register. +uint16 STATUS_FLAG_REGISTERED = 512 # Modem is registered with a network provider, and data connections and messaging may be available for use. +uint16 STATUS_FLAG_DISCONNECTING = 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. +uint16 STATUS_FLAG_CONNECTING = 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. +uint16 STATUS_FLAG_CONNECTED = 4096 # One or more packet data bearers is active and connected. -uint16 status # Status bitmap 1: Roaming is active -uint8 failure_reason #Failure reason when status in in CELLUAR_STATUS_FAILED -uint8 type # Cellular network radio type 0: none 1: gsm 2: cdma 3: wcdma 4: lte -uint8 quality # Cellular network RSSI/RSRP in dBm, absolute value -uint16 mcc # Mobile country code. If unknown, set to: UINT16_MAX -uint16 mnc # Mobile network code. If unknown, set to: UINT16_MAX -uint16 lac # Location area code. If unknown, set to: 0 +uint8 failure_reason # [@enum FAILURE_REASON] Failure reason. +uint8 FAILURE_REASON_NONE = 0 # No error. +uint8 FAILURE_REASON_UNKNOWN = 1 # Error state is unknown. +uint8 FAILURE_REASON_SIM_MISSING = 2 # SIM is required for the modem but missing. +uint8 FAILURE_REASON_SIM_ERROR = 3 # SIM is available, but not usable for connection. + +uint8 type # [@enum CELLULAR_NETWORK_RADIO_TYPE] Cellular network radio type. +uint8 CELLULAR_NETWORK_RADIO_TYPE_NONE = 0 # None +uint8 CELLULAR_NETWORK_RADIO_TYPE_GSM = 1 # GSM +uint8 CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2 # CDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3 # WCDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_LTE = 4 # LTE + +uint8 quality # [dBm] Cellular network RSSI/RSRP, absolute value. +uint16 mcc # [@invalid UINT16_MAX] Mobile country code. +uint16 mnc # [@invalid UINT16_MAX] Mobile network code. +uint16 lac # [@invalid 0] Location area code. ``` diff --git a/docs/zh/msg_docs/FailsafeFlags.md b/docs/zh/msg_docs/FailsafeFlags.md index 164f8bb216..c0763f555c 100644 --- a/docs/zh/msg_docs/FailsafeFlags.md +++ b/docs/zh/msg_docs/FailsafeFlags.md @@ -58,7 +58,7 @@ bool mission_failure # Mission failure bool vtol_fixed_wing_system_failure # vehicle in fixed-wing system failure failsafe mode (after quad-chute) bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded -bool local_position_accuracy_low # Local position estimate has dropped below threshold, but is currently still declared valid +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 diff --git a/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md b/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md new file mode 100644 index 0000000000..02dc50b410 --- /dev/null +++ b/docs/zh/msg_docs/FixedWingLateralGuidanceStatus.md @@ -0,0 +1,23 @@ +# FixedWingLateralGuidanceStatus (UORB message) + +Fixed Wing Lateral Guidance Status message +Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralGuidanceStatus.msg) + +```c +# Fixed Wing Lateral Guidance Status message +# Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +uint64 timestamp # time since system start (microseconds) + +float32 course_setpoint # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. Set by guidance law +float32 lateral_acceleration_ff # [m/s^2] [FRD] lateral acceleration demand only for maintaining curvature +float32 bearing_feas # [@range 0,1] bearing feasibility +float32 bearing_feas_on_track # [@range 0,1] on-track bearing feasibility +float32 signed_track_error # [m] signed track error +float32 track_error_bound # [m] track error bound +float32 adapted_period # [s] adapted period (if auto-tuning enabled) +uint8 wind_est_valid # [boolean] true = wind estimate is valid and/or being used by controller (also indicates if wind estimate usage is disabled despite being valid) + +``` diff --git a/docs/zh/msg_docs/FixedWingLateralSetpoint.md b/docs/zh/msg_docs/FixedWingLateralSetpoint.md new file mode 100644 index 0000000000..153167bb62 --- /dev/null +++ b/docs/zh/msg_docs/FixedWingLateralSetpoint.md @@ -0,0 +1,22 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLateralSetpoint.msg) + +```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) + +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. + +``` diff --git a/docs/zh/msg_docs/FixedWingLateralStatus.md b/docs/zh/msg_docs/FixedWingLateralStatus.md new file mode 100644 index 0000000000..9214d1e9e0 --- /dev/null +++ b/docs/zh/msg_docs/FixedWingLateralStatus.md @@ -0,0 +1,17 @@ +# FixedWingLateralStatus (UORB message) + +Fixed Wing Lateral Status message +Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingLateralStatus.msg) + +```c +# Fixed Wing Lateral Status message +# Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +uint64 timestamp # time since system start (microseconds) + +float32 lateral_acceleration_setpoint # [m/s^2] [FRD] resultant lateral acceleration setpoint +float32 can_run_factor # [norm] [@range 0, 1] estimate of certainty of the correct functionality of the npfg roll setpoint + +``` diff --git a/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md b/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md new file mode 100644 index 0000000000..6b8fb29e5b --- /dev/null +++ b/docs/zh/msg_docs/FixedWingLongitudinalSetpoint.md @@ -0,0 +1,26 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/FixedWingLongitudinalSetpoint.msg) + +```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) + +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 + +``` diff --git a/docs/zh/msg_docs/FixedWingRunwayControl.md b/docs/zh/msg_docs/FixedWingRunwayControl.md new file mode 100644 index 0000000000..9e9f5ff428 --- /dev/null +++ b/docs/zh/msg_docs/FixedWingRunwayControl.md @@ -0,0 +1,19 @@ +# FixedWingRunwayControl (UORB message) + +Auxiliary control fields for fixed-wing runway takeoff/landing + +Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/FixedWingRunwayControl.msg) + +```c +# Auxiliary control fields for fixed-wing runway takeoff/landing + +# Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +uint64 timestamp # [us] time since system start + +bool wheel_steering_enabled # Flag that enables the wheel steering. +float32 wheel_steering_nudging_rate # [norm] [@range -1, 1] [FRD] Manual wheel nudging, added to controller output. NAN is interpreted as 0. + +``` diff --git a/docs/zh/msg_docs/LateralControlConfiguration.md b/docs/zh/msg_docs/LateralControlConfiguration.md new file mode 100644 index 0000000000..b0a03a6378 --- /dev/null +++ b/docs/zh/msg_docs/LateralControlConfiguration.md @@ -0,0 +1,18 @@ +# LateralControlConfiguration (UORB message) + +Fixed Wing Lateral Control Configuration message +Used by the fw_lateral_longitudinal_control module to constrain FixedWingLateralSetpoint messages. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LateralControlConfiguration.msg) + +```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) + +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/LongitudinalControlConfiguration.md b/docs/zh/msg_docs/LongitudinalControlConfiguration.md new file mode 100644 index 0000000000..901d5c23bc --- /dev/null +++ b/docs/zh/msg_docs/LongitudinalControlConfiguration.md @@ -0,0 +1,28 @@ +# 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. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/LongitudinalControlConfiguration.msg) + +```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) + +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 + +``` diff --git a/docs/zh/msg_docs/PurePursuitStatus.md b/docs/zh/msg_docs/PurePursuitStatus.md index 76ae5524f0..1685af32d1 100644 --- a/docs/zh/msg_docs/PurePursuitStatus.md +++ b/docs/zh/msg_docs/PurePursuitStatus.md @@ -11,6 +11,4 @@ float32 crosstrack_error # [m] Shortest distance from the vehicle to the pat float32 distance_to_waypoint # [m] Distance from the vehicle to the current waypoint float32 bearing_to_waypoint # [rad] Bearing towards current waypoint -# TOPICS pure_pursuit_status - ``` diff --git a/docs/zh/msg_docs/RateCtrlStatus.md b/docs/zh/msg_docs/RateCtrlStatus.md index c6a4323ae9..90eaa1208f 100644 --- a/docs/zh/msg_docs/RateCtrlStatus.md +++ b/docs/zh/msg_docs/RateCtrlStatus.md @@ -9,6 +9,5 @@ uint64 timestamp # time since system start (microseconds) float32 rollspeed_integ float32 pitchspeed_integ float32 yawspeed_integ -float32 wheel_rate_integ # FW only and optional ``` diff --git a/docs/zh/msg_docs/RoverAttitudeSetpoint.md b/docs/zh/msg_docs/RoverAttitudeSetpoint.md index fc2bc4d639..778d4407a9 100644 --- a/docs/zh/msg_docs/RoverAttitudeSetpoint.md +++ b/docs/zh/msg_docs/RoverAttitudeSetpoint.md @@ -7,6 +7,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_setpoint # [rad] Expressed in NED frame -# TOPICS rover_attitude_setpoint - ``` diff --git a/docs/zh/msg_docs/RoverAttitudeStatus.md b/docs/zh/msg_docs/RoverAttitudeStatus.md index 28d9ef6d96..24dc3cf12f 100644 --- a/docs/zh/msg_docs/RoverAttitudeStatus.md +++ b/docs/zh/msg_docs/RoverAttitudeStatus.md @@ -8,6 +8,4 @@ uint64 timestamp # time since system start (microseconds) float32 measured_yaw # [rad/s] Measured yaw rate float32 adjusted_yaw_setpoint # [rad/s] Yaw setpoint that is being tracked (Applied slew rates) -# TOPICS rover_attitude_status - ``` diff --git a/docs/zh/msg_docs/RoverPositionSetpoint.md b/docs/zh/msg_docs/RoverPositionSetpoint.md new file mode 100644 index 0000000000..8450bf8486 --- /dev/null +++ b/docs/zh/msg_docs/RoverPositionSetpoint.md @@ -0,0 +1,15 @@ +# RoverPositionSetpoint (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverPositionSetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32[2] position_ned # 2-dimensional position setpoint in NED frame [m] +float32[2] start_ned # (Optional) 2-dimensional start position in NED frame used to define the line that the rover will track to position_ned [m] (Defaults to vehicle position) +float32 cruising_speed # (Optional) Specify rover speed [m/s] (Defaults to maximum speed) +float32 arrival_speed # (Optional) Specify arrival speed [m/s] (Defaults to zero) + +float32 yaw # [rad] [-pi,pi] from North. Optional, NAN if not set. Mecanum only. (Defaults to vehicle yaw) + +``` diff --git a/docs/zh/msg_docs/RoverRateSetpoint.md b/docs/zh/msg_docs/RoverRateSetpoint.md index 71755a38f3..12fe8cb88c 100644 --- a/docs/zh/msg_docs/RoverRateSetpoint.md +++ b/docs/zh/msg_docs/RoverRateSetpoint.md @@ -7,6 +7,4 @@ uint64 timestamp # time since system start (microseconds) float32 yaw_rate_setpoint # [rad/s] Expressed in NED frame -# TOPICS rover_rate_setpoint - ``` diff --git a/docs/zh/msg_docs/RoverRateStatus.md b/docs/zh/msg_docs/RoverRateStatus.md index 1f54694ee0..a3aa1d1164 100644 --- a/docs/zh/msg_docs/RoverRateStatus.md +++ b/docs/zh/msg_docs/RoverRateStatus.md @@ -9,6 +9,4 @@ float32 measured_yaw_rate # [rad/s] Measured yaw rate float32 adjusted_yaw_rate_setpoint # [rad/s] Yaw rate setpoint that is being tracked (Applied slew rates) float32 pid_yaw_rate_integral # Integral of the PID for the closed loop yaw rate controller -# TOPICS rover_rate_status - ``` diff --git a/docs/zh/msg_docs/RoverSteeringSetpoint.md b/docs/zh/msg_docs/RoverSteeringSetpoint.md index 1a6f3203dd..48353ea957 100644 --- a/docs/zh/msg_docs/RoverSteeringSetpoint.md +++ b/docs/zh/msg_docs/RoverSteeringSetpoint.md @@ -5,9 +5,8 @@ ```c uint64 timestamp # time since system start (microseconds) -float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Only for Ackermann-steered rovers) -float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Only for Differential/Mecanum rovers) +float32 normalized_steering_angle # [-1, 1] Normalized steering angle (Ackermann only, Positiv: Steer right, Negativ: Steer left) -# TOPICS rover_steering_setpoint +float32 normalized_speed_diff # [-1, 1] Normalized speed difference between the left and right wheels of the rover (Differential/Mecanum only, Positiv = Turn right, Negativ: Turn left) ``` diff --git a/docs/zh/msg_docs/RoverThrottleSetpoint.md b/docs/zh/msg_docs/RoverThrottleSetpoint.md index 9533126dd0..ccdf76902d 100644 --- a/docs/zh/msg_docs/RoverThrottleSetpoint.md +++ b/docs/zh/msg_docs/RoverThrottleSetpoint.md @@ -6,9 +6,7 @@ uint64 timestamp # time since system start (microseconds) -float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] -float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] - -# TOPICS rover_throttle_setpoint +float32 throttle_body_x # throttle setpoint along body X axis [-1, 1] (Positiv = forwards, Negativ = backwards) +float32 throttle_body_y # throttle setpoint along body Y axis [-1, 1] (Mecanum only, Positiv = right, Negativ = left) ``` diff --git a/docs/zh/msg_docs/RoverVelocitySetpoint.md b/docs/zh/msg_docs/RoverVelocitySetpoint.md new file mode 100644 index 0000000000..2e2d322b47 --- /dev/null +++ b/docs/zh/msg_docs/RoverVelocitySetpoint.md @@ -0,0 +1,12 @@ +# RoverVelocitySetpoint (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverVelocitySetpoint.msg) + +```c +uint64 timestamp # time since system start (microseconds) + +float32 speed # [m/s] [-inf, inf] Speed setpoint (Backwards driving if negative) +float32 bearing # [rad] [-pi,pi] from North. [invalid: NAN, speed is defined in body x direction] +float32 yaw # [rad] [-pi, pi] (Mecanum only, Optional, defaults to current vehicle yaw) Vehicle yaw setpoint in NED frame + +``` diff --git a/docs/zh/msg_docs/RoverVelocityStatus.md b/docs/zh/msg_docs/RoverVelocityStatus.md index 02b2c3b527..c908ffac90 100644 --- a/docs/zh/msg_docs/RoverVelocityStatus.md +++ b/docs/zh/msg_docs/RoverVelocityStatus.md @@ -6,14 +6,10 @@ uint64 timestamp # time since system start (microseconds) float32 measured_speed_body_x # [m/s] Measured speed in body x direction. Positiv: forwards, Negativ: backwards -float32 speed_body_x_setpoint # [m/s] Speed setpoint in body x direction. Positiv: forwards, Negativ: backwards float32 adjusted_speed_body_x_setpoint # [m/s] Post slew rate speed setpoint in body x direction. Positiv: forwards, Negativ: backwards -float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left -float32 speed_body_y_setpoint # [m/s] Speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) -float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Only for mecanum rovers) float32 pid_throttle_body_x_integral # Integral of the PID for the closed loop controller of the speed in body x direction -float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction - -# TOPICS rover_velocity_status +float32 measured_speed_body_y # [m/s] Measured speed in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 adjusted_speed_body_y_setpoint # [m/s] Post slew rate speed setpoint in body y direction. Positiv: right, Negativ: left (Mecanum only) +float32 pid_throttle_body_y_integral # Integral of the PID for the closed loop controller of the speed in body y direction (Mecanum only) ``` diff --git a/docs/zh/msg_docs/TrajectorySetpoint6dof.md b/docs/zh/msg_docs/TrajectorySetpoint6dof.md new file mode 100644 index 0000000000..f2629e19c4 --- /dev/null +++ b/docs/zh/msg_docs/TrajectorySetpoint6dof.md @@ -0,0 +1,23 @@ +# TrajectorySetpoint6dof (UORB message) + +Trajectory setpoint in NED frame +Input to position controller. + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/TrajectorySetpoint6dof.msg) + +```c +# Trajectory setpoint in NED frame +# Input to position controller. + +uint64 timestamp # time since system start (microseconds) + +# NED local world frame +float32[3] position # in meters +float32[3] velocity # in meters/second +float32[3] acceleration # in meters/second^2 +float32[3] jerk # in meters/second^3 (for logging only) + +float32[4] quaternion # unit quaternion +float32[3] angular_velocity # angular velocity in radians/second + +``` diff --git a/docs/zh/msg_docs/VehicleAttitudeSetpoint.md b/docs/zh/msg_docs/VehicleAttitudeSetpoint.md index e8dc7ebaf9..9cd9ba092b 100644 --- a/docs/zh/msg_docs/VehicleAttitudeSetpoint.md +++ b/docs/zh/msg_docs/VehicleAttitudeSetpoint.md @@ -3,7 +3,7 @@ [source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg) ```c -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # time since system start (microseconds) @@ -16,10 +16,6 @@ float32[4] q_d # Desired quaternion for quaternion control # For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] -bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) - -bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) - # TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint ``` diff --git a/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md b/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md new file mode 100644 index 0000000000..6eb03e797c --- /dev/null +++ b/docs/zh/msg_docs/VehicleAttitudeSetpointV0.md @@ -0,0 +1,25 @@ +# VehicleAttitudeSetpointV0 (UORB message) + +[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg) + +```c +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 yaw_sp_move_rate # rad/s (commanded by user) + +# For quaternion-based attitude control +float32[4] q_d # Desired quaternion for quaternion control + +# For clarification: For multicopters thrust_body[0] and thrust[1] are usually 0 and thrust[2] is the negative throttle demand. +# For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. +float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] + +bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) + +bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) + +# TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint + +``` diff --git a/docs/zh/msg_docs/VehicleCommand.md b/docs/zh/msg_docs/VehicleCommand.md index c2cc25f241..19557cf496 100644 --- a/docs/zh/msg_docs/VehicleCommand.md +++ b/docs/zh/msg_docs/VehicleCommand.md @@ -11,127 +11,127 @@ Follows the MAVLink COMMAND_INT / COMMAND_LONG definition uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start. -uint16 VEHICLE_CMD_CUSTOM_0 = 0 # test command -uint16 VEHICLE_CMD_CUSTOM_1 = 1 # test command -uint16 VEHICLE_CMD_CUSTOM_2 = 2 # test command -uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing -uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |Radius [m] |Velocity [m/s] |Yaw behaviour |Empty |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |Major Radius [m] |Minor Radius [m] |Velocity [m/s] |Orientation |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| -uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| -uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time |Delay in seconds (decimal, -1 to enable time-of-day fields)| hour (24h format, UTC, -1 to ignore)| minute (24h format, UTC, -1 to ignore)| second (24h format, UTC)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| -uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold |2D coord mode: 0: Orthogonal to planned route | Altitude mode: 0: Ignore altitude| Empty| Empty| Lat| Lon| Alt| -uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately |Flight termination activated if > 0.5| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value |Altitude| Frame of new altitude | Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1| Actuator 2| Actuator 3| Actuator 4| Actuator 5| Actuator 6| Index| -uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Empty| Empty| Empty| Empty| Latitude| Longitude| Empty| -uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |Altitude (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |Ground speed [m/s] |Bitmask |Loiter radius [m] for planes |Yaw [deg] |Latitude |Longitude |Altitude | +uint16 VEHICLE_CMD_CUSTOM_0 = 0 # Test command. +uint16 VEHICLE_CMD_CUSTOM_1 = 1 # Test command. +uint16 VEHICLE_CMD_CUSTOM_2 = 2 # Test command. +uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |[s] (decimal) Hold time. (ignored by fixed wing, time to stay at MISSION for rotary wing)|[m] Acceptance radius (if the sphere with this radius is hit, the MISSION counts as reached)|0 to pass through the WP, if > 0 radius [m] to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.|Desired yaw angle at MISSION (rotary wing)|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time. |Unused|Unused|[m] Radius around MISSION. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns. |Turns|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for time. |[s] Seconds (decimal)|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand. |Unused (FW pitch from FW_TKO_PITCH_MIN)|Unused|Unused|[deg] [@range 0,360] Yaw angle in NED if yaw source available, ignored otherwise|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude AMSL| +uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing. +uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |[m] Radius|[m/s] Velocity|[@enum ORBIT_YAW_BEHAVIOUR] Yaw behaviour|Unused|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |[m] Major radius|[m] Minor radius|[m/s] Velocity|Orientation|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| +uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning|0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid|Unused|[deg] [@range 0, 360] Yaw angle at goal, in compass degrees|Latitude/X of goal|Longitude/Y of goal|Altitude/Z of goal| +uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Unused|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min AMSL - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time. |[s] Delay (decimal, -1 to enable time-of-day fields)|[h] hour (24h format, UTC, -1 to ignore)|minute (24h format, UTC, -1 to ignore)|second (24h format, UTC)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration.|Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |[s] Delay (decimal seconds)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached.|Descent / Ascend rate (m/s)|Unused|Unused|Unused|Unused|Unused|Finish Altitude| +uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance [m]|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |[deg] [@range 0,360] Target angle. 0 is north|[deg/s] Speed during yaw change|[@range -1,1] Direction: negative: counter clockwise, positive: clockwise |[ 1,0] Relative offset or absolute angle|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold. |2D coord mode: 0: Orthogonal to planned route|Altitude mode: 0: Ignore altitude|Unused|Unused|Lat|Lon|Alt| +uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times. |Sequence number|Repeat count|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |[@enum SPEED_TYPE] Speed type (0=Airspeed, 1=Ground Speed)|Speed (m/s, -1 indicates no change)|[%] Throttle ( Percent, -1 indicates no change)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number|Parameter value|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number|Setting (1=on, 0=off, others possible depending on system hardware)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number|Cycle count|[s] Cycle time (decimal seconds)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number|[us] PWM rate (1000 to 2000 typical)|Cycle count|[s] Cycle time|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately. |Flight termination activated if > 0.5|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value. |Altitude|Frame of new altitude|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1|Actuator 2|Actuator 3|Actuator 4|Actuator 5|Actuator 6|Index| +uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Unused|Unused|Unused|Unused|Latitude|Longitude|Unused| +uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |[m] Altitude|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |[m/s] Ground speed|Bitmask|[m] Loiter radius for planes|[deg] Yaw|Latitude|Longitude|Altitude| uint16 VEHICLE_CMD_DO_PAUSE_CONTINUE = 193 -uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| pitch offset from next waypoint| roll offset from next waypoint| yaw offset from next waypoint| -uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| +uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Pitch offset from next waypoint|Roll offset from next waypoint|Yaw offset from next waypoint| +uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)|Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw|Transmission mode: 0: video stream, >0: single images every n seconds (decimal seconds)|Recording: 0: disabled, 1: enabled compressed, 2: enabled raw|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| uint16 VEHICLE_CMD_DO_DIGICAM_CONTROL=203 -uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount |pitch or lat in degrees, depending on mount mode.| roll or lon in degrees depending on mount mode| yaw or alt (in meters) depending on mount mode| reserved| reserved| reserved| MAV_MOUNT_MODE enum value| -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence |enable? (0=disable, 1=enable)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute |action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # motor test command |Instance (1, ...)| throttle type| throttle| timeout [s]| Motor count | Test order| Empty| -uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight |inverted (0=normal, 1=inverted)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)| q2 - quaternion param #2, x (0 in null-rotation)| q3 - quaternion param #3, y (0 in null-rotation)| q4 - quaternion param #4, z (0 in null-rotation)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See mavlink spec MAV_CMD_PREFLIGHT_CALIBRATION -uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration -uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| -uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started -uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight|Camera trigger distance (meters)| Shutter integration time (ms)| Camera minimum trigger interval| Number of positions| Roll| Pitch| Empty| -uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode |MAV_STANDARD_MODE| -uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal +uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount. |[@enum MAV_MOUNT_MODE] Mount operation mode|Stabilize roll? (1 = yes, 0 = no)|Stabilize pitch? (1 = yes, 0 = no)|stabilize yaw? (1 = yes, 0 = no)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount. |[deg] Pitch or lat, depending on mount mode.|[deg] Roll or lon depending on mount mode|[deg]/[m] Yaw or alt depending on mount mode|Unused|Unused|Unused|[@enum MAV_MOUNT_MODE]| +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence. |enable? (0=disable, 1=enable)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute. |action [@enum PARACHUTE_ACTION] (0=disable, 1=enable, 2=release, for some systems see [@enum PARACHUTE_ACTION], not in general message set.)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # Motor test command. |Instance (@range 1, )|throttle type|throttle|timeout [s]|Motor count|Test order|Unused| +uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight. |inverted (0=normal, 1=inverted)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper. +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight. |[m] Camera trigger distance|Shutter integration time (ms)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)|q2 - quaternion param #2, x (0 in null-rotation)|q3 - quaternion param #3, y (0 in null-rotation)|q4 - quaternion param #4, z (0 in null-rotation)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min(AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See MAVLink spec MAV_CMD_PREFLIGHT_CALIBRATION. +uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. +uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow|X axis offset (or generic dimension 1), in the sensor's raw units|Y axis offset (or generic dimension 2), in the sensor's raw units|Z axis offset (or generic dimension 3), in the sensor's raw units|Generic dimension 4, in the sensor's raw units|Generic dimension 5, in the sensor's raw units|Generic dimension 6, in the sensor's raw units| +uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started. +uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.|0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Camera minimum trigger interval|Number of positions|Roll|Pitch|Unused| +uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode. |MAV_STANDARD_MODE| +uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal. -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|value [-1,1]|timeout [s]|Empty|Empty|output function| -uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command|configuration|Empty|Empty|Empty|output function| -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 -uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing |0:Spektrum| 0:Spektrum DSM2, 1:Spektrum DSMX| -uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message -uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities| Reserved (all remaining params)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| -uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.) -uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom +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_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. +uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing. |0:Spektrum|0:Spektrum DSM2, 1:Spektrum DSMX| +uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message. +uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities|Reserved (all remaining params)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)| +uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.). +uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom. uint16 VEHICLE_CMD_SET_CAMERA_FOCUS = 532 -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control -uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. -uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system -uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. -uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. -uint16 VEHICLE_CMD_LOGGING_START = 2510 # start streaming ULog data -uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # stop streaming ULog data -uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # control starting/stopping transmitting data over the high latency link -uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition -uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization -uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan -uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment -uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. -uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control. +uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. +uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. +uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. +uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. +uint16 VEHICLE_CMD_LOGGING_START = 2510 # Start streaming ULog data. +uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # Stop streaming ULog data. +uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # Control starting/stopping transmitting data over the high latency link. +uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition. +uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization. +uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan. +uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment. +uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. +uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. -uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # external reset of estimator global position when deadreckoning +uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning. uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004 -# PX4 vehicle commands (beyond 16 bit mavlink commands) -uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # start of PX4 internal only vehicle commands (> UINT16_MAX) -uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Empty|Empty|Empty|Empty|Latitude|Longitude|Altitude| -uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Empty|Empty|Empty|Empty|Empty|Empty| +# PX4 vehicle commands (beyond 16 bit MAVLink commands). +uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX). +uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Unused|Unused|Unused|Unused|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude (AMSL from GNSS, positive above ground)| +uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Unused|Unused|Unused|Unused|Unused|Unused| -uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization | -uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt | -uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # +uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. +uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. +uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt. +uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # -uint8 VEHICLE_ROI_NONE = 0 # No region of interest | -uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION | -uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION | -uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location | -uint8 VEHICLE_ROI_TARGET = 4 # Point toward target +uint8 VEHICLE_ROI_NONE = 0 # No region of interest. +uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION. +uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION. +uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. +uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 uint8 PARACHUTE_ACTION_DISABLE = 0 @@ -163,13 +163,13 @@ uint8 FAILURE_TYPE_SLOW = 5 uint8 FAILURE_TYPE_DELAYED = 6 uint8 FAILURE_TYPE_INTERMITTENT = 7 -# used as param1 in DO_CHANGE_SPEED command +# Used as param1 in DO_CHANGE_SPEED command. uint8 SPEED_TYPE_AIRSPEED = 0 uint8 SPEED_TYPE_GROUNDSPEED = 1 uint8 SPEED_TYPE_CLIMB_SPEED = 2 uint8 SPEED_TYPE_DESCEND_SPEED = 3 -# used as param3 in CMD_DO_ORBIT +# Used as param3 in CMD_DO_ORBIT. uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 @@ -177,29 +177,29 @@ uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 -# used as param1 in ARM_DISARM command +# Used as param1 in ARM_DISARM command. int8 ARMING_ACTION_DISARM = 0 int8 ARMING_ACTION_ARM = 1 -# param2 in VEHICLE_CMD_DO_GRIPPER +# param2 in VEHICLE_CMD_DO_GRIPPER. uint8 GRIPPER_ACTION_RELEASE = 0 uint8 GRIPPER_ACTION_GRAB = 1 uint8 ORB_QUEUE_LENGTH = 8 -float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. -uint32 command # Command ID -uint8 target_system # System which should execute the command -uint8 target_component # Component which should execute the command, 0 for all components -uint8 source_system # System sending the command -uint16 source_component # Component / mode executor sending the command -uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) +float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. +uint32 command # Command ID. +uint8 target_system # System which should execute the command. +uint8 target_component # Component which should execute the command, 0 for all components. +uint8 source_system # System sending the command. +uint16 source_component # Component / mode executor sending the command. +uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command). bool from_external uint16 COMPONENT_MODE_EXECUTOR_START = 1000 diff --git a/docs/zh/msg_docs/index.md b/docs/zh/msg_docs/index.md index 4e369d6afb..3ba767d12e 100644 --- a/docs/zh/msg_docs/index.md +++ b/docs/zh/msg_docs/index.md @@ -15,10 +15,18 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [ActuatorMotors](ActuatorMotors.md) — Motor control message - [ActuatorServos](ActuatorServos.md) — Servo control message +- [AirspeedValidated](AirspeedValidated.md) - [ArmingCheckReply](ArmingCheckReply.md) - [ArmingCheckRequest](ArmingCheckRequest.md) - [BatteryStatus](BatteryStatus.md) - [ConfigOverrides](ConfigOverrides.md) — Configurable overrides by (external) modes or mode executors +- [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 @@ -26,6 +34,11 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m Unset optional setpoints are not controlled Unset optional constraints default to vehicle specifications - [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. - [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. @@ -79,8 +92,6 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [Airspeed](Airspeed.md) -- [AirspeedValidated](AirspeedValidated.md) - - [AirspeedWind](AirspeedWind.md) - [AutotuneAttitudeControlStatus](AutotuneAttitudeControlStatus.md) @@ -95,7 +106,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [CanInterfaceStatus](CanInterfaceStatus.md) -- [CellularStatus](CellularStatus.md) +- [CellularStatus](CellularStatus.md) — Cellular status - [CollisionConstraints](CollisionConstraints.md) — Local setpoint constraints in NED frame setting something to NaN means that no limit is provided @@ -164,6 +175,14 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [FigureEightStatus](FigureEightStatus.md) +- [FixedWingLateralGuidanceStatus](FixedWingLateralGuidanceStatus.md) — Fixed Wing Lateral Guidance Status message + Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +- [FixedWingLateralStatus](FixedWingLateralStatus.md) — Fixed Wing Lateral Status message + Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +- [FixedWingRunwayControl](FixedWingRunwayControl.md) — Auxiliary control fields for fixed-wing runway takeoff/landing + - [FlightPhaseEstimation](FlightPhaseEstimation.md) - [FollowTarget](FollowTarget.md) @@ -270,8 +289,6 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [NormalizedUnsignedSetpoint](NormalizedUnsignedSetpoint.md) -- [NpfgStatus](NpfgStatus.md) - - [ObstacleDistance](ObstacleDistance.md) — Obstacle distances in front of the sensor. - [OffboardControlMode](OffboardControlMode.md) — Off-board control mode @@ -343,6 +360,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [RoverAttitudeStatus](RoverAttitudeStatus.md) +- [RoverPositionSetpoint](RoverPositionSetpoint.md) + - [RoverRateSetpoint](RoverRateSetpoint.md) - [RoverRateStatus](RoverRateStatus.md) @@ -351,6 +370,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [RoverThrottleSetpoint](RoverThrottleSetpoint.md) +- [RoverVelocitySetpoint](RoverVelocitySetpoint.md) + - [RoverVelocityStatus](RoverVelocityStatus.md) - [Rpm](Rpm.md) @@ -419,6 +440,9 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [TimesyncStatus](TimesyncStatus.md) +- [TrajectorySetpoint6dof](TrajectorySetpoint6dof.md) — Trajectory setpoint in NED frame + Input to position controller. + - [TransponderReport](TransponderReport.md) - [TuneControl](TuneControl.md) — This message is used to control the tunes, when the tune_id is set to CUSTOM @@ -471,4 +495,8 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m - [YawEstimatorStatus](YawEstimatorStatus.md) +- [AirspeedValidatedV0](AirspeedValidatedV0.md) + +- [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md) + - [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander \ No newline at end of file diff --git a/docs/zh/releases/1.16.md b/docs/zh/releases/1.16.md new file mode 100644 index 0000000000..a3025b7556 --- /dev/null +++ b/docs/zh/releases/1.16.md @@ -0,0 +1,221 @@ +# PX4-Autopilot v1.16.0 Release Notes + + + + + +
+
+

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

+
+
+ +This document covers all changes in PX4 v1.16.0 since the previous stable release ([PX4 v1.15.0](../releases/1.15.md)). + +:::info +These notes include only changes merged in 2023 and later — commits before 2023 are not listed. +::: + +## Read Before Upgrading + +Please continue reading for [upgrade instructions](#upgrade-guide). + +## Major Changes + +- **Rover support rework** + - New dedicated firmware build for rovers (airframe IDs 50000–52000) + - Separate modules for Ackermann, differential and mecanum rovers, each with manual, acro, stabilized, position and auto modes + - Shared pure-pursuit guidance library for all rover modules + - Legacy rover position control module deprecated in favor of the new modules + +## Upgrade Guide + +- [PX4-Autopilot#24648](https://github.com/PX4/PX4-Autopilot/pull/24648): Added setting default for EKF2_EV_CTRL to 15 for VOXL 2 boards +- [PX4-Autopilot#22517](https://github.com/PX4/PX4-Autopilot/pull/22517): Change default ethernet IP +- [PX4-Autopilot#24602](https://github.com/PX4/PX4-Autopilot/pull/24602): remove serial port default from sf45 module + +## Other changes + +### Hardware Support + +- **[New Hardware]** [PX4-Autopilot#23830](https://github.com/PX4/PX4-Autopilot/pull/23830): Boards: ARK FPV FC +- **[New Hardware]** [PX4-Autopilot#23414](https://github.com/PX4/PX4-Autopilot/pull/23414): board: add cuav 7-nano +- **[New Hardware]** [PX4-Autopilot#24769](https://github.com/PX4/PX4-Autopilot/pull/24769): add new board corvon743v1 +- **[New Hardware]** [PX4-Autopilot#24018](https://github.com/PX4/PX4-Autopilot/pull/24018): boards: bluerobotics: navigator: Add initial support +- **[New Hardware]** [PX4-Autopilot#24147](https://github.com/PX4/PX4-Autopilot/pull/24147): boards: add new board micoair743-v2 +- **[New Hardware]** [PX4-Autopilot#23218](https://github.com/PX4/PX4-Autopilot/pull/23218): boards: add new board micoair h743 +- **[New Hardware]** [PX4-Autopilot#24512](https://github.com/PX4/PX4-Autopilot/pull/24512): boards: Add FMUv6s target +- **[New Hardware]** [PX4-Autopilot#23927](https://github.com/PX4/PX4-Autopilot/pull/23927): manifest: Add Skynode S baseboard +- **[New Hardware]** [PX4-Autopilot#23257](https://github.com/PX4/PX4-Autopilot/pull/23257): Add Tropic VMU board support (Baseboard for Teensy 4.1) +- **[New Hardware]** [PX4-Autopilot#23697](https://github.com/PX4/PX4-Autopilot/pull/23697): boards: add new board X-MAV AP-H743v2 +- **[New Hardware]** [PX4-Autopilot#23551](https://github.com/PX4/PX4-Autopilot/pull/23551): 3DR boards: Support for 3DR Control Zero H7 OEM Rev G +- **[New Hardware]** [PX4-Autopilot#23623](https://github.com/PX4/PX4-Autopilot/pull/23623): new board support ZeroOne x6 + +### Common + +- [Optical flow scaling factor - SENS_FLOW_SCALE](../sensor/optical_flow.md#scale-factor). ([PX4-Autopilot#23936](https://github.com/PX4/PX4-Autopilot/pull/23936)). + +- [PX4-Autopilot#22813](https://github.com/PX4/PX4-Autopilot/pull/22813): Reintroduce optional parameter versioning mechanism for airframe maintainers + +- [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 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. + ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). + +- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. + Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. + This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. + ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). + +- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) + +- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. + This typically reduces false warnings due to magnetometer inconsistencies. + ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). + +### Control + +- [PX4-Autopilot#23863](https://github.com/PX4/PX4-Autopilot/pull/23863): [Sponsored by ARK] Bidirectional DShot + +- [PX4-Autopilot#24196](https://github.com/PX4/PX4-Autopilot/pull/24196): Make control allocation and actuator effectiveness a non-module-specific library + +- [PX4-Autopilot#24221](https://github.com/PX4/PX4-Autopilot/pull/24221): Spacecraft Build and Bare Control Allocator + +- Configurable multicopter orbit-mode yaw via `MC_ORBIT_YAW_MOD` ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) + +- Collision prevention now works in manual (acceleration-based) flight mode (`MPC_POS_MODE`) ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507)) + +### Estimation + +- [PX4-Autopilot#23854](https://github.com/PX4/PX4-Autopilot/pull/23854): EKF2: ellipsoidal earth navigation + +- [PX4-Autopilot#23263](https://github.com/PX4/PX4-Autopilot/pull/23263): EKF2: Terrain state + +- [PX4-Autopilot#23185](https://github.com/PX4/PX4-Autopilot/pull/23185): ekf2: add mag type init + +- [PX4-Autopilot#23436](https://github.com/PX4/PX4-Autopilot/pull/23436): ekf2: Optical flow enabled by default + +- Position-loss failsafe delay removed; triggers 1 s after loss (see Common) + +### 传感器 + +- [PX4-Autopilot#23656](https://github.com/PX4/PX4-Autopilot/pull/23656): Implemented AUAV absolute/differential pressure sensor support + +- [PX4-Autopilot#23639](https://github.com/PX4/PX4-Autopilot/pull/23639): Implemented temperature sensor support for INA228 / INA238 + +- [PX4-Autopilot#22744](https://github.com/PX4/PX4-Autopilot/pull/22744): Add Ublox ZED-F9P-15B + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Mag cal: automatically disable internal mags if external ones are available + +- [PX4-Autopilot#23064](https://github.com/PX4/PX4-Autopilot/pull/23064): BMP581: Add Bosch BMP581 barometer + +- [PX4-Autopilot#22914](https://github.com/PX4/PX4-Autopilot/pull/22914): Murata SCH16T IMU driver + +- [PX4-Autopilot#23023](https://github.com/PX4/PX4-Autopilot/pull/23023): ST IIS2MDC Magnetometer driver + +- [PX4-Autopilot#24121](https://github.com/PX4/PX4-Autopilot/pull/24121): Include distance sensor in dds topics + +- [PX4-Autopilot#23925](https://github.com/PX4/PX4-Autopilot/pull/23925): drivers: magnetometer: mmc5983ma: Add SPI support + +- [PX4-Autopilot#23909](https://github.com/PX4/PX4-Autopilot/pull/23909): drivers/magnetometer/ak09916: Add support to AK09915 + +- [PX4-Autopilot#23362](https://github.com/PX4/PX4-Autopilot/pull/23362): Add Bosch BMM350 magnetometer + +- [PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316): Compass calibration now disables internal compass when external unit present, reducing false warnings + +### 仿真 + +- **SIH**: + - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. + ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). + - SIH now supports the standard VTOL airframe + ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). +- **Gazebo**: + - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. + The default installer scripts (used for CI) and documentation have been updated. + This is required because Garden end-of-life is Nov 2024. + ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) + - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). + - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). + - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). + - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). + - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). + - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). + - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). + - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) + - [PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471): Gazebo: Moving platform + +### uXRCE-DDS / ROS2 + +- **[Feature]** [PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113): [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically +- [PX4-Autopilot#24582](https://github.com/PX4/PX4-Autopilot/pull/24582): dds_topics: add vtol_vehicle_status +- [PX4-Autopilot#24583](https://github.com/PX4/PX4-Autopilot/pull/24583): dds_topics: add home_position + +### MAVLink + +- TBD + +### Multi-Rotor + +- [PX4-Autopilot#24173](https://github.com/PX4/PX4-Autopilot/pull/24173): [Multirotor] add yaw torque low pass filter + +- [PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943): Add gz model for quadtailsitter + +- [PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358): Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) + +- [PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507): Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). + +### 垂直起降 + +- TBD + +### Fixed-wing + +- [PX4-Autopilot#24167](https://github.com/PX4/PX4-Autopilot/pull/24167): Fixedwing: fix wheel controller + +- [PX4-Autopilot#23520](https://github.com/PX4/PX4-Autopilot/pull/23520): FixedWing: allow position control without valid global position + +- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) + +### 无人车 + +This release contains a major rework for the rover support in PX4: + +- Complete restructure of the [rover related documentation](../frames_rover/index.md). +- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). +- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): + - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). +- New module dedicated to [differential rovers](../frames_rover/differential.md): + - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). +- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): + - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). +- Added rover-specific firmware build (`50000–52000`) for Ackermann, differential and mecanum rovers +- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). + This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): + - Generic Differential Rover `50000`. + - Generic Ackermann Rover `51000`. + - Axial SCX10 2 Trail Honcho `51001`. + - Generic Mecanum Rover `52000`. +- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. +- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). +- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. + +### Infrastructure + +- [PX4-Autopilot#24011](https://github.com/PX4/PX4-Autopilot/pull/24011): standard_modes: add vehicle-type specific standard modes +- [PX4-Autopilot#24020](https://github.com/PX4/PX4-Autopilot/pull/24020): ci: build all upload to releases +- [PX4-Autopilot#24002](https://github.com/PX4/PX4-Autopilot/pull/24002): ci: px4-dev container +- [PX4-Autopilot#23937](https://github.com/PX4/PX4-Autopilot/pull/23937): ci: workflow for ubuntu 24 +- [PX4-Autopilot#23869](https://github.com/PX4/PX4-Autopilot/pull/23869): ci: add test for Ubuntu 22.04 +- [PX4-Autopilot#23574](https://github.com/PX4/PX4-Autopilot/pull/23574): ci: try runs-on Dronecode Infra +- [PX4-Autopilot#23550](https://github.com/PX4/PX4-Autopilot/pull/23550): ci: replace build workflows diff --git a/docs/zh/releases/index.md b/docs/zh/releases/index.md index 0902cce8f2..e8c4dcc49e 100644 --- a/docs/zh/releases/index.md +++ b/docs/zh/releases/index.md @@ -2,7 +2,8 @@ 这是一份 PX4 发行说明列表,其中包含每次发布所做更改的清单,详细说明了新增功能、漏洞修复、弃用内容以及更新情况。 -- [main](../releases/main.md) (v1.15以来的变化) +- [main](../releases/main.md) (changes since v1.16) +- [v1.16](../releases/1.16.md) - [v1.15](../releases/1.15.md) - [v1.14](../releases/1.14.md) - [v1.13](../releases/1.13.md) diff --git a/docs/zh/releases/main.md b/docs/zh/releases/main.md index 1218fccdf4..0e9985ae9c 100644 --- a/docs/zh/releases/main.md +++ b/docs/zh/releases/main.md @@ -9,15 +9,15 @@ const { site } = useData();
-

This page is on a release bramch, 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 `main` branch since the last major release ([PX v1.15](../releases/1.15.md)). +This contains changes to PX4 `main` branch since the last major release ([PX v1.16](../releases/1.16.md)). :::warning -The PX4 v1.15 release is in beta testing, pending release. -Update these notes with features that are going to be in `main` but not the PX4 v1.15 release. +PX4 v1.16 is in candidate-release testing, pending release. +Update these notes with features that are going to be in `main` but not the PX4 v1.16 release. ::: ## Read Before Upgrading @@ -40,22 +40,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Common -- [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 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. - ([PX4-Autopilot#24024](https://github.com/PX4/PX4-Autopilot/pull/24024)). -- The generic mission command timeout [MIS_COMMAND_TOUT](../advanced_config/parameter_reference.md#MIS_COMMAND_TOUT) parameter replaces the delivery-specific `MIS_PD_TO` parameter. - Mission commands that may take some time to complete, such as those for controlling gimbals, winches, and grippers, will progress to the next item when either feedback is received or the timeout expires. - This is often used to provide a minimum delay for hardware that does not provide completion feedback, so that it can reach the commanded state before the mission progresses. - ([PX4-Autopilot#23960](https://github.com/PX4/PX4-Autopilot/pull/23960)). -- **[uORB]** Introduce a [version field](../middleware/uorb.md#message-versioning) for a subset of uORB messages ([PX4-Autopilot#23850](https://github.com/PX4/PX4-Autopilot/pull/23850)) -- [Compass calibration](../config/compass.md) disables internal compasses if an external compass is available. - This typically reduces false warnings due to magnetometer inconsistencies. - ([PX4-Autopilot#24316](https://github.com/PX4/PX4-Autopilot/pull/24316)). +- TBD ### Control @@ -71,26 +56,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### 仿真 -- [SIH]: - - The SIH on SITL [custom takeoff location](../sim_sih/index.md#set-custom-takeoff-location) in now set using the normal unscaled GPS position values, where previously the value needed to be multiplied by 1E7. - ([PX4-Autopilot#23363](https://github.com/PX4/PX4-Autopilot/pull/23363)). - - SIH now supports the standard VTOL airframe - ([PX4-Autopilot#24175](https://github.com/PX4/PX4-Autopilot/pull/24175)). -- [Gazebo]: - - Gazebo Harmonic LTS release replaces Gazebo Garden as the version supported by PX4. - The default installer scripts (used for CI) and documentation have been updated. - This is required because Garden end-of-life is Nov 2024. - ([PX4-Autopilot#23603](https://github.com/PX4/PX4-Autopilot/pull/23603)) - - New vehicle model `x500_lidar_2d` — [x500 Quadrotor with 2D Lidar](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-2d-lidar). ([PX4-Autopilot#22418](https://github.com/PX4/PX4-Autopilot/pull/22418), [PX4-gazebo-models#41](https://github.com/PX4/PX4-gazebo-models/pull/41)). - - New vehicle model `x500_lidar_front` — [X500 Quadrotor with 1D LIDAR (Front-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-front-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `x500_lidar_down` — [X500 Quadrotor with 1D LIDAR (Down-facing)](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-1d-lidar-down-facing). ([PX4-Autopilot#23879](https://github.com/PX4/PX4-Autopilot/pull/23879), [PX4-gazebo-models#62](https://github.com/PX4/PX4-gazebo-models/pull/62/files)). - - New vehicle model `r1_rover` — [Aion Robotics R1 Rover](../sim_gazebo_gz/vehicles.md#differential-rover) ([PX4-Autopilot#22402](https://github.com/PX4/PX4-Autopilot/pull/22402) and [PX4-gazebo-models#21](https://github.com/PX4/PX4-gazebo-models/pull/21)). - - New vehicle model `rover_ackermann` — [Ackermann Rover](../sim_gazebo_gz/vehicles.md#ackermann-rover) ([PX4-Autopilot#23383](https://github.com/PX4/PX4-Autopilot/pull/23383) and [PX4-gazebo-models#46](https://github.com/PX4/PX4-gazebo-models/pull/46)). - - New vehicle model `x500_gimbal` — [Quadrotor(x500) with gimbal (Front-facing) in Gazebo](../sim_gazebo_gz/vehicles.md#x500-quadrotor-with-gimbal-front-facing) ([PX4-Autopilot#23382](https://github.com/PX4/PX4-Autopilot/pull/23382) and [PX4-gazebo-models#47](https://github.com/PX4/PX4-gazebo-models/pull/47) and [PX4-gazebo-models#70](https://github.com/PX4/PX4-gazebo-models/pull/70)). - - New vehicle model `quadtailsitter` — [Quad Tailsitter VTOL](../sim_gazebo_gz/vehicles.md#quad-tailsitter-vtol) ([PX4-Autopilot#23943](https://github.com/PX4/PX4-Autopilot/pull/23943) and [PX4-gazebo-models#65](https://github.com/PX4/PX4-gazebo-models/pull/65)). - - New vehicle model `tiltrotor` — [Tiltrotor VTOL](../sim_gazebo_gz/vehicles.md#tiltrotor-vtol) ([PX4-Autopilot#24028](https://github.com/PX4/PX4-Autopilot/pull/24028) and [PX4-gazebo-models#66](https://github.com/PX4/PX4-gazebo-models/pull/66)). - - [Faster than Real-time Simulation](../simulation/index.md#simulation_speed) ([PX4-Autopilot#24421](https://github.com/PX4/PX4-Autopilot/pull/24421), [PX4-Autopilot#23783](https://github.com/PX4/PX4-Autopilot/pull/23783)) - - [Moving platform simulation](../sim_gazebo_gz/worlds#moving-platform) ([PX4-Autopilot#24471](https://github.com/PX4/PX4-Autopilot/pull/24471)) +- TBD ### Ethernet @@ -98,7 +64,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### uXRCE-DDS / ROS2 -- **[Feature]** [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to translate PX4 messages from one definition version to another dynamically ([PX4-Autopilot#24113](https://github.com/PX4/PX4-Autopilot/pull/24113)) +- [PX4 ROS 2 Interface Library](../ros2/px4_ros2_control_interface.md) support for [Fixed Wing lateral/longitudinal setpoint](../ros2/px4_ros2_control_interface.md#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype) (`FwLateralLongitudinalSetpointType`) and [VTOL transitions](../ros2/px4_ros2_control_interface.md#controlling-a-vtol). ([PX4-Autopilot#24056](https://github.com/PX4/PX4-Autopilot/pull/24056)). ### MAVLink @@ -106,8 +72,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Multi-Rotor -- Allow system-default [multicopter orbit mode](../flight_modes_mc/orbit.md) yaw behaviour to be configured, using the parameter [MC_ORBIT_YAW_MOD](../advanced_config/parameter_reference.md#MC_ORBIT_YAW_MOD) ([PX4-Autopilot#23358](https://github.com/PX4/PX4-Autopilot/pull/23358)) -- Adapted the [Collision Prevention](../computer_vision/collision_prevention.md) implementation to work in the default manual flight mode (Acceleration Based) [MPC_POS_MODE](../advanced_config/parameter_reference.md#MPC_POS_MODE). ([PX4-Autopilot#23507](https://github.com/PX4/PX4-Autopilot/pull/23507) +- TBD ### 垂直起降 @@ -115,29 +80,11 @@ Please continue reading for [upgrade instructions](#upgrade-guide). ### Fixed-wing -- Improvement: Fixed-wing auto takeoff: enable setting takeoff flaps for hand/catapult launch. [PX4-Autopilot#23460](https://github.com/PX4/PX4-Autopilot/pull/23460) +- TBD ### 无人车 -This release contains a major rework for the rover support in PX4: - -- Complete restructure of the [rover related documentation](../frames_rover/index.md). -- New firmware build specifically for [rovers](../frames_rover/index.md#flashing-the-rover-build). -- New module dedicated to [Ackermann rovers](../frames_rover/ackermann.md): - - The module currently supports [manual mode](../flight_modes_rover/ackermann.md#manual-mode), [acro mode](../flight_modes_rover/ackermann.md#acro-mode), [position mode](../flight_modes_rover/ackermann.md#position-mode) and [auto modes](../flight_modes_rover/ackermann.md#auto-modes). -- New module dedicated to [differential rovers](../frames_rover/differential.md): - - The module currently supports [manual mode](../flight_modes_rover/differential.md#manual-mode), [acro mode](../flight_modes_rover/differential.md#acro-mode), [stabilized mode](../flight_modes_rover/differential.md#stabilized-mode), [position mode](../flight_modes_rover/differential.md#position-mode) and [auto modes](../flight_modes_rover/differential.md#auto-modes). -- New module dedicated to [mecanum rovers](../frames_rover/mecanum.md): - - The module currently supports [manual mode](../flight_modes_rover/mecanum.md#manual-mode), [acro mode](../flight_modes_rover/mecanum.md#acro-mode), [stabilized mode](../flight_modes_rover/mecanum.md#stabilized-mode), [position mode](../flight_modes_rover/mecanum.md#position-mode) and [auto modes](../flight_modes_rover/mecanum.md#auto-modes). -- Restructure of the [rover airframe](../airframes/airframe_reference.md#rover) numbering convention ([PX4-Autopilot#23506](https://github.com/PX4/PX4-Autopilot/pull/23506)). - This also introduces several [new rover airframes](../airframes/airframe_reference.md#rover): - - Generic Differential Rover `50000`. - - Generic Ackermann Rover `51000`. - - Axial SCX10 2 Trail Honcho `51001`. - - Generic Mecanum Rover `52000`. -- Library for the [pure pursuit guidance algorithm](../config_rover/differential.md#pure-pursuit-guidance-logic) that is shared by all the rover modules. -- [Simulation](../frames_rover/index.md#simulation) for differential-steering and Ackermann rovers in gazebo (for release notes see `r1_rover` and `rover_ackermann` in [simulation](#simulation)). -- Deprecation of the [rover position control](../frames_rover/rover_position_control.md) module: Note that the legacy rover module still exists but has been superseded by the new dedicated modules. +- TBD ### ROS 2 diff --git a/docs/zh/ros2/px4_ros2_control_interface.md b/docs/zh/ros2/px4_ros2_control_interface.md index cc3efabd54..a31d7d5880 100644 --- a/docs/zh/ros2/px4_ros2_control_interface.md +++ b/docs/zh/ros2/px4_ros2_control_interface.md @@ -345,6 +345,7 @@ The used types also define the compatibility with different vehicle types. The following sections provide a list of supported setpoint types: - [GotoSetpointType](#go-to-setpoint-gotosetpointtype): Smooth position and (optionally) heading control +- [FwLateralLongitudinalSetpointType](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype): Direct control of lateral and longitudinal fixed wing dynamics - [DirectActuatorsSetpointType](#direct-actuator-control-setpoint-directactuatorssetpointtype): Direct control of motors and flight surface servo setpoints :::tip @@ -359,7 +360,7 @@ You can add your own setpoint types by adding a class that inherits from `px4_ro This setpoint type is currently only supported for multicopters. ::: -Smoothly control position and (optionally) heading setpoints with the [px4_ros2::GotoSetpointType](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. +Smoothly control position and (optionally) heading setpoints with the [`px4_ros2::GotoSetpointType`](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type. The setpoint type is streamed to FMU based position and heading smoothers formulated with time-optimal, maximum-jerk trajectories, with velocity and acceleration constraints. The most trivial use is simply inputting a 3D position into the update method: @@ -404,6 +405,137 @@ _goto_setpoint->update( max_heading_rate_rad_s); ``` +#### Fixed-Wing Lateral and Longitudinal Setpoint (FwLateralLongitudinalSetpointType) + + + +:::info +This setpoint type is supported for fixed-wing vehicles and for VTOLs in fixed-wing mode. +::: + +Use the [`px4_ros2::FwLateralLongitudinalSetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1FwLateralLongitudinalSetpointType.html) to directly control the lateral and longitudinal dynamics of a fixed-wing vehicle — that is, side-to-side motion (turning/banking) and forward/vertical motion (speeding up and climbing/descending), respectively. +This setpoint is streamed to the PX4 [_FwLateralLongitudinalControl_ module](../modules/modules_controller.md#fw-lat-lon-control), which decouples lateral and longitudinal inputs while ensuring that vehicle limits are respected. + +To control the vehicle, at least one lateral **and** one longitudinal setpoint must be provided: + +1. Of the longitudinal inputs: either `altitude` or `height_rate` must be finite to control vertical motion. + If both are set to `NAN`, the vehicle will maintain its current altitude. +2. Of the lateral inputs: at least one of `course`, `airspeed_direction`, or `lateral_acceleration` must be finite. + +For a detailed description of the controllable parameters, please refer to message definitions ([FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) and [FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md)). + +##### 基本用法 + +This type has a number of update methods, each allowing you to specify an increasing number of setpoints. + +The simplest method is `updateWithAltitude()`, which allows you to specify a `course` and `altitude` target setpoint: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, course); +``` + +PX4 uses the setpoints to compute the _roll angle_, _pitch angle_ and _throttle_ setpoints that are sent to lower level controllers. +Note that the commanded flight is expected to be relatively gentle/unaggressive when using this method. +This is done as follows: + +- Lateral control output: + + course setpoint (set by user) → airspeed direction (heading) setpoint → lateral acceleration setpoint → roll angle setpoint. + +- Longitudinal control output: + + altitude setpoint (set by user) → height rate setpoint → pitch angle setpoint and throttle settings. + +The `updateWithHeightRate()` method allows you to set a target `course` and `height_rate` (this is useful if the speed of ascent or descent matters, or needs to be dynamically controlled): + +```cpp +const float height_rate = 2.F; +const float course = 0.F; // due North +_fw_lateral_longitudinal_setpoint->updateWithHeightRate(height_rate, course); +``` + +The `updateWithAltitude()` and `updateWithHeightRate()` methods allow you to additionally control the equivalent airspeed or lateral acceleration by specifying them as the third and fourth arguments, respectively: + +```cpp +const float altitude_msl = 500.F; +const float course = 0.F; // due North +const float equivalent_aspd = 15.F; // m/s +const float lateral_acceleration = 2.F; // FRD, used as feedforward + +_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, + course, + equivalent_aspd, + lateral_acceleration); +``` + +The equivalent airspeed and lateral acceleration arguments are defined as `std::optional`, so you can omit any of them by passing `std::nullopt`. + +:::tip +If both lateral acceleration and course setpoints are provided, the lateral acceleration setpoint will be used as feedforward. +::: + +##### Full Control Using the Setpoint Struct + +For full flexibility, you can create and pass a [`FwLateralLongitudinalSetpoint`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwLateralLongitudinalSetpoint.html) struct. +Each field is templated with `std::optional`. + +:::tip +If both course and airspeed direction are set: airspeed direction takes precedence, course is not controlled. +Lateral acceleration is treated as feedforward if either course or airspeed direction are also finite. +If both altitude and height rate are set: height rate takes precedence, altitude is not controlled. +::: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withCourse(0.F); +// setpoint_s.withAirspeedDirection(0.2F); // uncontrolled +setpoint_s.withLateralAcceleration(2.F); // feedforward +//setpoint_s.withAltitude(500.F); // uncontrolled +setpoint_s.withHeightRate(2.F); +setpoint_s.withEquivalentAirspeed(15.F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s); +``` + +The diagram below illustrates the interaction between the `FwLateralLongitudinalSetpointType` and PX4 when all inputs are set. + +![FW ROS Interaction](../../assets/middleware/ros2/px4_ros2_interface_lib/fw_lat_long_ros_interaction.svg) + +##### Advanced Configuration (Optional) + +You can also pass a [`FwControlConfiguration`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwControlConfiguration.html) struct along with the setpoint to override default controller settings and constraints such as pitch limits, throttle limits, and target sink/climb rates. +This is intended for advanced users: + +```cpp +px4_ros2::FwLateralLongitudinalSetpoint setpoint_s; + +setpoint_s.withAirspeedDirection(0.F); +setpoint_s.withLateralAcceleration(2.F); // feedforward +setpoint_s.withAltitude(500.F); +setpoint_s.withEquivalentAirspeed(15.F); + +px4_ros2::FwControlConfiguration config_s; + +config_s.withTargetClimbRate(3.F); +config_s.withMaxAcceleration(5.F); +config_s.withThrottleLimits(0.4F, 0.6F); + +_fw_lateral_longitudinal_setpoint->update(setpoint_s, config_s); +``` + +All configuration fields are defined as `std::optional`. +Unset values will default to the PX4 configuration. +See [LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) and [FixedWingLongitudinalConfiguration](../msg_docs/LongitudinalControlConfiguration.md) for more information on configuration options. + +:::info +For safety, PX4 automatically limits configuration values to stay within the vehicle’s constraints. +For example, throttle overrides are clamped to remain between [`FW_THR_MIN`](../advanced_config/parameter_reference.md#FW_THR_MIN) +and [`FW_THR_MAX`](../advanced_config/parameter_reference.md#FW_THR_MAX). +::: + #### Direct Actuator Control Setpoint (DirectActuatorsSetpointType) Actuators can be directly controlled using the [px4_ros2::DirectActuatorsSetpointType](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1DirectActuatorsSetpointType.html) setpoint type. @@ -415,11 +547,55 @@ For example to control a quadrotor, you need to set the first 4 motors according If you want to control an actuator that does not control the vehicle's motion, but for example a payload servo, see [below](#controlling-an-independent-actuator-servo). ::: +### Controlling a VTOL + + + +To control a VTOL in an external flight mode, ensure you're returning the correct setpoint type based on the current flight configuration: + +- Multicopter mode: use a setpoint type that is compatible with multicopter control. For example: either the [`GotoSetpointType`](#go-to-setpoint-gotosetpointtype) or the [`TrajectorySetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1TrajectorySetpointType.html). +- Fixed-wing mode: Use the [`FwLateralLongitudinalSetpointType`](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype). + +As long as the VTOL remains in either multicopter or fixed-wing mode throughout the external mode, no additional handling is required. + +If you would like to command a VTOL transition in your external mode, you need to use the [VTOL API](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1VTOL.html). The VTOL API provides the functionality to command a transition and query the current state of the vehicle. + +Use this API with caution! +Commanding transitions externally makes the user partially responsible for ensuring smooth and safe behavior, unlike onboard transitions (e.g. via RC switch) where PX4 handles the full process: + +1. Ensure that both the `TrajectorySetpointType` and the `FwLateralLongitudinalSetpointType` are available to your mode. +2. Create an instance of `px4_ros2::VTOL` in the constructor of your mode. +3. To command a transition, you can use the `toMulticopter()` or `toFixedwing()` methods on your VTOL object to set the desired state. +4. During transition, send the following combination of setpoints: + + ```cpp + // Assuming the instance of the px4_ros2::VTOL object is called vtol + + // Send TrajectorySetpointType as follows: + Eigen::Vector3f acceleration_sp = vtol.computeAccelerationSetpointDuringTransition(); + Eigen::Vector3f velocity_sp{NAN, NAN, 0.f}; + + _trajectory_setpoint->update(velocity_sp, acceleration_sp); + + // Send FwLateralLongitudinalSetpointType with lateral input to realign vehicle as desired + + float course_sp = 0.F; // North + + _fw_lateral_longitudinal_setpoint->updateWithAltitude(NAN, course_sp) + ``` + + This will ensure that the transition is handled properly within PX4. + You can optionally pass a deceleration setpoint to `computeAccelerationSetpointDuringTransition()` to be used during back-transitions. + +To check the current state of the vehicle, use the `getCurrentState()` method on your `px4_ros2::VTOL` object. + +See [this external flight mode implementation](https://github.com/Auterion/px4-ros2-interface-lib/tree/main/examples/cpp/modes/vtol) for a practical example on how to use this API. + ### Controlling an Independent Actuator/Servo If you want to control an independent actuator (a servo), follow these steps: -1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink) +1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink). 2. Create an instance of [px4_ros2::PeripheralActuatorControls](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1PeripheralActuatorControls.html) in the constructor of your mode. 3. Call the `set()` method to control the actuator(s). This can be done independently of any active setpoints. @@ -431,6 +607,7 @@ You can access PX4 telemetry topics directly via the following classes: - [OdometryGlobalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryGlobalPosition.html): Global position - [OdometryLocalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryLocalPosition.html): Local position, velocity, acceleration, and heading - [OdometryAttitude](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAttitude.html): Vehicle attitude +- [OdometryAirspeed](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAirspeed.html): Airspeed For example, you can query the vehicle's current position estimate as follows: diff --git a/docs/zh/ros2/px4_ros2_msg_translation_node.md b/docs/zh/ros2/px4_ros2_msg_translation_node.md index da0622712e..2e999b28c1 100644 --- a/docs/zh/ros2/px4_ros2_msg_translation_node.md +++ b/docs/zh/ros2/px4_ros2_msg_translation_node.md @@ -1,6 +1,6 @@ # PX4 ROS 2 Message Translation Node - + The message translation node allows ROS 2 applications that were compiled against different versions of the PX4 messages to interwork with newer versions of PX4, and vice versa, without having to change either the application or the PX4 side. @@ -207,7 +207,7 @@ Message translations can be either _direct_ or _generic_. ### File Structure -Starting from PX4 v1.16 (main), the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: +Starting from PX4 v1.16, the PX4-Autopilot `msg/` and `srv/` directories are structured as follows: ``` PX4-Autopilot diff --git a/docs/zh/ros2/user_guide.md b/docs/zh/ros2/user_guide.md index 8d2c6581a4..dde38aa9a3 100644 --- a/docs/zh/ros2/user_guide.md +++ b/docs/zh/ros2/user_guide.md @@ -34,7 +34,7 @@ The generator uses the uORB message definitions in the source tree: [PX4-Autopil ROS 2 applications need to be built in a workspace that has the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware. You can include these by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your ROS 2 workspace (branches in the repo correspond to the messages for different PX4 releases). -Starting from PX4 v1.16 (main) in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. +Starting from PX4 v1.16, in which [message versioning](../middleware/uorb.md#message-versioning) was introduced, ROS2 applications may use a different version of message definitions than those used to build PX4. This requires the [ROS 2 Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) to be running to ensure that messages can be converted and exchanged correctly. Note that the micro XRCE-DDS _agent_ itself has no dependency on client-side code. @@ -378,7 +378,7 @@ accelerometer_integral_dt: 4739 #### (Optional) Starting the Translation Node - + This example is built with PX4 and ROS2 versions that use the same message definitions. If you were to use incompatible [message versions](../middleware/uorb.md#message-versioning) you would need to install and run the [Message Translation Node](./px4_ros2_msg_translation_node.md) as well, before running the example: diff --git a/docs/zh/sim_gazebo_gz/index.md b/docs/zh/sim_gazebo_gz/index.md index 4c3c1fa6e7..34c383c3c9 100644 --- a/docs/zh/sim_gazebo_gz/index.md +++ b/docs/zh/sim_gazebo_gz/index.md @@ -396,6 +396,11 @@ As long as the world file and the model file are in the Gazebo search path (`GZ_ However, `make px4_sitl gz__` won't work with them. ::: +## Extending Gazebo with Plugins + +World, vehicle (model), and sensor behaviour can be customised using plugins. +For more information see [Gazebo Plugins](../sim_gazebo_gz/plugins.md). + ## 基于gazebo的多飞行器仿真 Multi-Vehicle simulation is supported on Linux hosts. diff --git a/docs/zh/sim_gazebo_gz/plugins.md b/docs/zh/sim_gazebo_gz/plugins.md new file mode 100644 index 0000000000..9723f44177 --- /dev/null +++ b/docs/zh/sim_gazebo_gz/plugins.md @@ -0,0 +1,92 @@ +# Gazebo Plugins + +Gazebo plugins extend the simulator with custom functionality not provided by default. They can be attached to different entity types and allow you to add new sensors, modify world physics, or interact with the simulation environment. + +## Plugin Types + +Plugins can be attached to these entity types: + +- **World** - Global simulation behavior +- **Model** - Specific model functionality +- **Sensor** - Custom sensor implementations +- **Actor** - Dynamic entity behavior + +## Supported Plugins + +PX4 currently supports these plugins: + +- [OpticalFlowSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/optical_flow): Provides optical flow sensor simulation using OpenCV-based flow calculation. +- [GstCameraSystem](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/gstreamer): Streams camera feeds via UDP (RTP/H.264) or RTMP with optional NVIDIA CUDA hardware acceleration. +- [MovingPlatformController](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/moving_platform_controller): Controls moving platforms (ships, trucks, etc.) for takeoff and landing scenarios. + Includes configurable velocity, heading, and random fluctuations. + +## Plugin Registration + +Plugins must be registered in the [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) file to be available in your world: + +```xml + + + + + + + + + + +``` + +## Creating Custom Plugins + +When developing new plugins: + +1. **Follow the plugin architecture** - Implement desired interfaces. + + You can start by copying the [Template plugin](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins/template_plugin) which is a simple example that only implements `ISystemPreUpdate` and `ISystemPostUpdate`. + The interfaces are specified in the official [Gazebo documentation](https://gazebosim.org/api/sim/9/createsystemplugins.html). + +2. **Register your plugin** - Add it to [server.config](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/simulation/gz_bridge/server.config) for discovery. + +3. **Use the custom namespace** - Follow the pattern `custom::YourPluginName`. + +### Example Plugin Structure + +```cpp +class YourCustomSystem : + public gz::sim::System, + public gz::sim::ISystemPreUpdate, + public gz::sim::ISystemPostUpdate +{ +public: + void PreUpdate(const gz::sim::UpdateInfo &_info, + gz::sim::EntityComponentManager &_ecm) final; + void PostUpdate(const gz::sim::UpdateInfo &_info, + const gz::sim::EntityComponentManager &_ecm) final; +}; + +// Plugin registration +GZ_ADD_PLUGIN(YourCustomSystem, gz::sim::System, + YourCustomSystem::ISystemPreUpdate, + YourCustomSystem::ISystemPostUpdate) +GZ_ADD_PLUGIN_ALIAS(YourCustomSystem, "custom::YourCustomSystem") +``` + +## Enabling a Plugin + +For world plugins all you need to do is [register the plugin](#plugin-registration) (add it to the `server.config`). +It will then be available to all worlds and vehicles. + +The process for adding vehicle model/sensor plugins is not documented. +This can tracked through [PX4-Autopilot#2493](https://github.com/PX4/PX4-Autopilot/issues/24939). + +## Resources + +- **PX4 Plugins**: [Repository source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules/simulation/gz_plugins) +- **Official Gazebo Documentation**: [System Plugins Guide](https://gazebosim.org/api/sim/9/createsystemplugins.html) +- **Server Configuration**: [Configuration Reference](https://gazebosim.org/api/sim/9/server_config.html) +- **PX4 Gazebo-classic Plugins**: [PX4 Gazebo Classic Plugins](https://github.com/PX4/PX4-SITL_gazebo-classic/tree/main/src) + +:::info +Plugins for modern Gazebo are still evolving. The plugin system differs from Gazebo Classic. +::: diff --git a/docs/zh/sim_gazebo_gz/worlds.md b/docs/zh/sim_gazebo_gz/worlds.md index a66a255b76..18ab959587 100644 --- a/docs/zh/sim_gazebo_gz/worlds.md +++ b/docs/zh/sim_gazebo_gz/worlds.md @@ -75,7 +75,7 @@ World with walls that is designed for testing [collision prevention](../computer ## Moving Platform - + [Empty world](#default) with the addition of a flat moving platform, to simulate drone operations from moving vehicles like ships or trucks. The platform is controlled by a plugin which is included in the world. The platform is at a height of 2m, so place the vehicle on it with: diff --git a/docs/zh/sim_sih/index.md b/docs/zh/sim_sih/index.md index 2b4deb037a..473bbfcd95 100644 --- a/docs/zh/sim_sih/index.md +++ b/docs/zh/sim_sih/index.md @@ -58,6 +58,7 @@ To set up/start SIH: 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) @@ -116,25 +117,31 @@ 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): - - quadrotor: + - Quadcopter ```sh make px4_sitl sihsim_quadx ``` - - Fixed-wing (plane): + - Hexacopter + + ```sh + make px4_sitl sihsim_hex + ``` + + - Fixed-wing (plane) ```sh make px4_sitl sihsim_airplane ``` - - XVert VTOL tailsitter: + - XVert VTOL tailsitter ```sh make px4_sitl sihsim_xvert ``` - - Standard VTOL: + - 标准垂起固定翼 ```sh make px4_sitl sihsim_standard_vtol @@ -235,7 +242,8 @@ For specific examples see the `_sihsim_` airframes in [ROMFS/px4fmu_common/init. The dynamic models for the various vehicles are: -- Quadrotor: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/assets/simulation/SIH_dynamic_model.pdf). +- Quadcopter: [pdf report](https://github.com/PX4/PX4-user_guide/raw/main/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. diff --git a/docs/zh/simulation/community_supported_simulators.md b/docs/zh/simulation/community_supported_simulators.md index cf891fa2d6..0fcc37a3c9 100644 --- a/docs/zh/simulation/community_supported_simulators.md +++ b/docs/zh/simulation/community_supported_simulators.md @@ -12,10 +12,10 @@ 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) -| 仿真器 | 描述 | -| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [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 very 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).

| -| [Simulation-In-Hardware](../sim_sih/index.md) (SIH) |

An alternative to HITL that offers a hard real-time simulation directly on the hardware autopilot. This simulator is 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).

Supported Vehicles: Plane, Quad, Tailsitter, Standard VTOL

| +| 仿真器 | 描述 | +| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [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

| +| [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 very 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).

| diff --git a/docs/zh/telemetry/crsf_telemetry.md b/docs/zh/telemetry/crsf_telemetry.md index 8abc6fdf76..37cc7b10c2 100644 --- a/docs/zh/telemetry/crsf_telemetry.md +++ b/docs/zh/telemetry/crsf_telemetry.md @@ -71,7 +71,7 @@ For ExpressLRS receivers wire to the flight controller UART as shown below (wiri ### Firmware Configuration/Build CRSF telemetry support is not included in any PX4 firmware by default. -To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver.md#crsf-rc) and removes [rc_input](../modules/modules_driver.md#rc-input). +To use this feature you must build and upload custom firmware that includes [crsf-rc](../modules/modules_driver_radio_control.md#crsf-rc) and removes [rc_input](../modules/modules_driver_radio_control.md#rc-input). 步骤如下: diff --git a/docs/zh/telemetry/jfi_telemetry.md b/docs/zh/telemetry/jfi_telemetry.md index 5b02d24d23..e7fc2526c3 100644 --- a/docs/zh/telemetry/jfi_telemetry.md +++ b/docs/zh/telemetry/jfi_telemetry.md @@ -20,7 +20,7 @@ Operating in the 2.4GHz frequency band, it allows unrestricted global use withou - **Frequency Band:** 2.4GHz - **Speed:** Up to 11 Mbps (adjustable) -- **Range:** Up to 500 meters (varies upon environments) +- **Range:** Up to 1000 meters (varies upon environments) - **Payload Capacity:** Up to 1024 bytes ### Network Schemes diff --git a/docs/zh/tutorials/linux_sbus.md b/docs/zh/tutorials/linux_sbus.md index 0aecc4c85d..18b037fde0 100644 --- a/docs/zh/tutorials/linux_sbus.md +++ b/docs/zh/tutorials/linux_sbus.md @@ -10,9 +10,7 @@ For an S.Bus receiver (or encoder - e.g. from Futaba, RadioLink, etc.) you will Then [Start the PX4 RC Driver](#start_driver) on the device, as shown below. - - -## 启动驱动程序 +## Starting the Driver {#start_driver} To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): @@ -20,11 +18,9 @@ To start the RC driver on a particular UART (e.g. in this case `/dev/ttyS2`): linux_sbus start|stop|status -d <device> -c <channel> ``` -For other driver usage information see: [rc_input](../modules/modules_driver.md#rc-input). +For other driver usage information see: [rc_input](../modules/modules_driver_radio_control.md#rc-input). - - -## 信号反相器电路 (仅限S.Bus) +## Signal Inverter Circuit (S.Bus only) {#signal_inverter_circuit} S.Bus is an _inverted_ UART communication signal. diff --git a/msg/CMakeLists.txt b/msg/CMakeLists.txt index 6c374f2c35..e07888adb3 100644 --- a/msg/CMakeLists.txt +++ b/msg/CMakeLists.txt @@ -81,7 +81,7 @@ set(msg_files EstimatorStates.msg EstimatorStatus.msg EstimatorStatusFlags.msg - Event.msg + versioned/Event.msg FigureEightStatus.msg FailsafeFlags.msg FailureDetectorStatus.msg @@ -90,6 +90,9 @@ set(msg_files FollowTargetEstimator.msg FollowTargetStatus.msg FuelTankStatus.msg + FixedWingLateralGuidanceStatus.msg + FixedWingLateralStatus.msg + FixedWingRunwayControl.msg GeneratorStatus.msg GeofenceResult.msg GeofenceStatus.msg @@ -137,7 +140,6 @@ set(msg_files NavigatorMissionItem.msg NavigatorStatus.msg NormalizedUnsignedSetpoint.msg - NpfgStatus.msg ObstacleDistance.msg OffboardControlMode.msg OnboardComputerStatus.msg @@ -241,8 +243,12 @@ set(msg_files versioned/ArmingCheckRequest.msg versioned/BatteryStatus.msg versioned/ConfigOverrides.msg + versioned/FixedWingLateralSetpoint.msg + versioned/FixedWingLongitudinalSetpoint.msg versioned/GotoSetpoint.msg versioned/HomePosition.msg + versioned/LateralControlConfiguration.msg + versioned/LongitudinalControlConfiguration.msg versioned/ManualControlSetpoint.msg versioned/ModeCompleted.msg versioned/RegisterExtComponentReply.msg diff --git a/msg/CellularStatus.msg b/msg/CellularStatus.msg index 4ced957de4..c2aef7c459 100644 --- a/msg/CellularStatus.msg +++ b/msg/CellularStatus.msg @@ -2,37 +2,37 @@ # # This is currently used only for logging cell status from MAVLink. -uint64 timestamp # Time since system start [us] +uint64 timestamp # [us] Time since system start. -uint16 status # Status bitmap [@enum STATUS_FLAG] -uint16 STATUS_FLAG_UNKNOWN = 1 # State unknown or not reportable -uint16 STATUS_FLAG_FAILED = 2 # Modem is unusable -uint16 STATUS_FLAG_INITIALIZING = 4 # Modem is being initialized -uint16 STATUS_FLAG_LOCKED = 8 # Modem is locked -uint16 STATUS_FLAG_DISABLED = 16 # Modem is not enabled and is powered down -uint16 STATUS_FLAG_DISABLING = 32 # Modem is currently transitioning to the STATUS_FLAG_DISABLED state -uint16 STATUS_FLAG_ENABLING = 64 # Modem is currently transitioning to the STATUS_FLAG_ENABLED state -uint16 STATUS_FLAG_ENABLED = 128 # Modem is enabled and powered on but not registered with a network provider and not available for data connections -uint16 STATUS_FLAG_SEARCHING = 256 # Modem is searching for a network provider to register -uint16 STATUS_FLAG_REGISTERED = 512 # Modem is registered with a network provider, and data connections and messaging may be available for use -uint16 STATUS_FLAG_DISCONNECTING = 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 -uint16 STATUS_FLAG_CONNECTING = 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 -uint16 STATUS_FLAG_CONNECTED = 4096 # One or more packet data bearers is active and connected +uint16 status # [@enum STATUS_FLAG] Status bitmap. +uint16 STATUS_FLAG_UNKNOWN = 1 # State unknown or not reportable. +uint16 STATUS_FLAG_FAILED = 2 # Modem is unusable. +uint16 STATUS_FLAG_INITIALIZING = 4 # Modem is being initialized. +uint16 STATUS_FLAG_LOCKED = 8 # Modem is locked. +uint16 STATUS_FLAG_DISABLED = 16 # Modem is not enabled and is powered down. +uint16 STATUS_FLAG_DISABLING = 32 # Modem is currently transitioning to the STATUS_FLAG_DISABLED state. +uint16 STATUS_FLAG_ENABLING = 64 # Modem is currently transitioning to the STATUS_FLAG_ENABLED state. +uint16 STATUS_FLAG_ENABLED = 128 # Modem is enabled and powered on but not registered with a network provider and not available for data connections. +uint16 STATUS_FLAG_SEARCHING = 256 # Modem is searching for a network provider to register. +uint16 STATUS_FLAG_REGISTERED = 512 # Modem is registered with a network provider, and data connections and messaging may be available for use. +uint16 STATUS_FLAG_DISCONNECTING = 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. +uint16 STATUS_FLAG_CONNECTING = 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. +uint16 STATUS_FLAG_CONNECTED = 4096 # One or more packet data bearers is active and connected. -uint8 failure_reason # Failure reason [@enum FAILURE_REASON] -uint8 FAILURE_REASON_NONE = 0 # No error -uint8 FAILURE_REASON_UNKNOWN = 1 # Error state is unknown -uint8 FAILURE_REASON_SIM_MISSING = 2 # SIM is required for the modem but missing -uint8 FAILURE_REASON_SIM_ERROR = 3 # SIM is available, but not usable for connection +uint8 failure_reason # [@enum FAILURE_REASON] Failure reason. +uint8 FAILURE_REASON_NONE = 0 # No error. +uint8 FAILURE_REASON_UNKNOWN = 1 # Error state is unknown. +uint8 FAILURE_REASON_SIM_MISSING = 2 # SIM is required for the modem but missing. +uint8 FAILURE_REASON_SIM_ERROR = 3 # SIM is available, but not usable for connection. -uint8 type # Cellular network radio type [@enum CELLULAR_NETWORK_RADIO_TYPE] -uint8 CELLULAR_NETWORK_RADIO_TYPE_NONE = 0 -uint8 CELLULAR_NETWORK_RADIO_TYPE_GSM = 1 -uint8 CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2 -uint8 CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3 -uint8 CELLULAR_NETWORK_RADIO_TYPE_LTE = 4 +uint8 type # [@enum CELLULAR_NETWORK_RADIO_TYPE] Cellular network radio type. +uint8 CELLULAR_NETWORK_RADIO_TYPE_NONE = 0 # None +uint8 CELLULAR_NETWORK_RADIO_TYPE_GSM = 1 # GSM +uint8 CELLULAR_NETWORK_RADIO_TYPE_CDMA = 2 # CDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_WCDMA = 3 # WCDMA +uint8 CELLULAR_NETWORK_RADIO_TYPE_LTE = 4 # LTE -uint8 quality # Cellular network RSSI/RSRP, absolute value [dBm] -uint16 mcc # Mobile country code. [@invalid UINT16_MAX] -uint16 mnc # Mobile network code. [@invalid UINT16_MAX] -uint16 lac # Location area code. [@invalid 0] +uint8 quality # [dBm] Cellular network RSSI/RSRP, absolute value. +uint16 mcc # [@invalid UINT16_MAX] Mobile country code. +uint16 mnc # [@invalid UINT16_MAX] Mobile network code. +uint16 lac # [@invalid 0] Location area code. diff --git a/msg/FailsafeFlags.msg b/msg/FailsafeFlags.msg index 33240b0759..243a4b5c9e 100644 --- a/msg/FailsafeFlags.msg +++ b/msg/FailsafeFlags.msg @@ -12,6 +12,7 @@ uint32 mode_req_local_alt uint32 mode_req_local_position uint32 mode_req_local_position_relaxed uint32 mode_req_global_position +uint32 mode_req_global_position_relaxed uint32 mode_req_mission uint32 mode_req_offboard_signal uint32 mode_req_home_position @@ -29,6 +30,7 @@ bool local_position_invalid # Local position estimate invalid bool local_position_invalid_relaxed # Local position with reduced accuracy requirements invalid (e.g. flying with optical flow) bool local_velocity_invalid # Local velocity estimate invalid bool global_position_invalid # Global position estimate invalid +bool global_position_invalid_relaxed # Global position estimate invalid with relaxed accuracy requirements bool auto_mission_missing # No mission available bool offboard_control_signal_lost # Offboard signal lost bool home_position_invalid # No home position available @@ -48,7 +50,7 @@ bool mission_failure # Mission failure bool vtol_fixed_wing_system_failure # vehicle in fixed-wing system failure failsafe mode (after quad-chute) bool wind_limit_exceeded # Wind limit exceeded bool flight_time_limit_exceeded # Maximum flight time exceeded -bool local_position_accuracy_low # Local position estimate has dropped below threshold, but is currently still declared valid +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 diff --git a/msg/FixedWingLateralGuidanceStatus.msg b/msg/FixedWingLateralGuidanceStatus.msg new file mode 100644 index 0000000000..57a9df5136 --- /dev/null +++ b/msg/FixedWingLateralGuidanceStatus.msg @@ -0,0 +1,13 @@ +# Fixed Wing Lateral Guidance Status message +# Published by fw_pos_control module to report the resultant lateral setpoints and NPFG debug outputs + +uint64 timestamp # time since system start (microseconds) + +float32 course_setpoint # [rad] [@range -pi, pi] Desired direction of travel over ground w.r.t (true) North. Set by guidance law +float32 lateral_acceleration_ff # [m/s^2] [FRD] lateral acceleration demand only for maintaining curvature +float32 bearing_feas # [@range 0,1] bearing feasibility +float32 bearing_feas_on_track # [@range 0,1] on-track bearing feasibility +float32 signed_track_error # [m] signed track error +float32 track_error_bound # [m] track error bound +float32 adapted_period # [s] adapted period (if auto-tuning enabled) +uint8 wind_est_valid # [boolean] true = wind estimate is valid and/or being used by controller (also indicates if wind estimate usage is disabled despite being valid) diff --git a/msg/FixedWingLateralStatus.msg b/msg/FixedWingLateralStatus.msg new file mode 100644 index 0000000000..4843937069 --- /dev/null +++ b/msg/FixedWingLateralStatus.msg @@ -0,0 +1,7 @@ +# Fixed Wing Lateral Status message +# Published by the fw_lateral_longitudinal_control module to report the resultant lateral setpoint + +uint64 timestamp # time since system start (microseconds) + +float32 lateral_acceleration_setpoint # [m/s^2] [FRD] resultant lateral acceleration setpoint +float32 can_run_factor # [norm] [@range 0, 1] estimate of certainty of the correct functionality of the npfg roll setpoint diff --git a/msg/FixedWingRunwayControl.msg b/msg/FixedWingRunwayControl.msg new file mode 100644 index 0000000000..62d09a5ebf --- /dev/null +++ b/msg/FixedWingRunwayControl.msg @@ -0,0 +1,8 @@ +# Auxiliary control fields for fixed-wing runway takeoff/landing + +# Passes information from the FixedWingModeManager to the FixedWingAttitudeController + +uint64 timestamp # [us] time since system start + +bool wheel_steering_enabled # Flag that enables the wheel steering. +float32 wheel_steering_nudging_rate # [norm] [@range -1, 1] [FRD] Manual wheel nudging, added to controller output. NAN is interpreted as 0. diff --git a/msg/InternalCombustionEngineControl.msg b/msg/InternalCombustionEngineControl.msg index 08b4198e01..d1ea495998 100644 --- a/msg/InternalCombustionEngineControl.msg +++ b/msg/InternalCombustionEngineControl.msg @@ -1,8 +1,8 @@ uint64 timestamp # time since system start (microseconds) -bool ignition_on # activate/deactivate ignition (Spark Plug) -float32 throttle_control # [0,1] - Motor should idle with 0. Includes slew rate if enabled. -float32 choke_control # [0,1] - 1 fully closes the air inlet. -float32 starter_engine_control # [0,1] - control value for electric starter motor. +bool ignition_on # activate/deactivate ignition (spark plug) +float32 throttle_control # setpoint for throttle actuator, with slew rate if enabled, idles with 0 [norm] [@range 0,1] [@uncontrolled NAN to stop motor] +float32 choke_control # setpoint for choke actuator, 1: fully closed [norm] [@range 0,1] +float32 starter_engine_control # setpoint for (electric) starter motor [norm] [@range 0,1] uint8 user_request # user intent for the ICE being on/off diff --git a/msg/NpfgStatus.msg b/msg/NpfgStatus.msg deleted file mode 100644 index 132c1f7f3f..0000000000 --- a/msg/NpfgStatus.msg +++ /dev/null @@ -1,17 +0,0 @@ -uint64 timestamp # time since system start (microseconds) - -uint8 wind_est_valid # (boolean) true = wind estimate is valid and/or being used by controller (also indicates if wind est usage is disabled despite being valid) -float32 lat_accel # resultant lateral acceleration reference [m/s^2] -float32 lat_accel_ff # lateral acceleration demand only for maintaining curvature [m/s^2] -float32 bearing_feas # bearing feasibility [0,1] -float32 bearing_feas_on_track # on-track bearing feasibility [0,1] -float32 signed_track_error # signed track error [m] -float32 track_error_bound # track error bound [m] -float32 airspeed_ref # (true) airspeed reference [m/s] -float32 bearing # bearing angle [rad] -float32 heading_ref # heading angle reference [rad] -float32 min_ground_speed_ref # minimum forward ground speed reference [m/s] -float32 adapted_period # adapted period (if auto-tuning enabled) [s] -float32 p_gain # controller proportional gain [rad/s] -float32 time_const # controller time constant [s] -float32 can_run_factor # estimate of certainty of the correct functionality of the npfg roll setpoint in [0, 1] diff --git a/msg/RateCtrlStatus.msg b/msg/RateCtrlStatus.msg index 3f5644699d..b1e4d4feb1 100644 --- a/msg/RateCtrlStatus.msg +++ b/msg/RateCtrlStatus.msg @@ -4,4 +4,3 @@ uint64 timestamp # time since system start (microseconds) float32 rollspeed_integ float32 pitchspeed_integ float32 yawspeed_integ -float32 wheel_rate_integ # FW only and optional diff --git a/msg/RoverPositionSetpoint.msg b/msg/RoverPositionSetpoint.msg index 282eebfd51..d2ac0ac088 100644 --- a/msg/RoverPositionSetpoint.msg +++ b/msg/RoverPositionSetpoint.msg @@ -1,6 +1,8 @@ uint64 timestamp # time since system start (microseconds) float32[2] position_ned # 2-dimensional position setpoint in NED frame [m] -float32 cruising_speed # (Optional) Specify rover speed (Defaults to maximum speed) +float32[2] start_ned # (Optional) 2-dimensional start position in NED frame used to define the line that the rover will track to position_ned [m] (Defaults to vehicle position) +float32 cruising_speed # (Optional) Specify rover speed [m/s] (Defaults to maximum speed) +float32 arrival_speed # (Optional) Specify arrival speed [m/s] (Defaults to zero) -float32 yaw # [rad] [-pi,pi] from North. Optional, NAN if not set. Mecanum only. +float32 yaw # [rad] [-pi,pi] from North. Optional, NAN if not set. Mecanum only. (Defaults to vehicle yaw) diff --git a/msg/px4_msgs_old/msg/ArmingCheckReplyV0.msg b/msg/px4_msgs_old/msg/ArmingCheckReplyV0.msg new file mode 100644 index 0000000000..c417d6a4f0 --- /dev/null +++ b/msg/px4_msgs_old/msg/ArmingCheckReplyV0.msg @@ -0,0 +1,34 @@ +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +uint8 request_id +uint8 registration_id + +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 + +uint8 health_component_index # HEALTH_COMPONENT_INDEX_* +bool health_component_is_present +bool health_component_warning +bool health_component_error + +bool can_arm_and_run # whether arming is possible, and if it's a navigation mode, if it can run + +uint8 num_events + +EventV0[5] events + +# Mode requirements +bool mode_req_angular_velocity +bool mode_req_attitude +bool mode_req_local_alt +bool mode_req_local_position +bool mode_req_local_position_relaxed +bool mode_req_global_position +bool mode_req_mission +bool mode_req_home_position +bool mode_req_prevent_arming +bool mode_req_manual_control + + +uint8 ORB_QUEUE_LENGTH = 4 diff --git a/msg/px4_msgs_old/msg/EventV0.msg b/msg/px4_msgs_old/msg/EventV0.msg new file mode 100644 index 0000000000..84351a36aa --- /dev/null +++ b/msg/px4_msgs_old/msg/EventV0.msg @@ -0,0 +1,14 @@ +# this message is required here in the msg_old folder because other msg are depending on it +# Events interface + +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +uint32 id # Event ID +uint16 event_sequence # Event sequence number +uint8[25] arguments # (optional) arguments, depend on event id + +uint8 log_levels # Log levels: 4 bits MSB: internal, 4 bits LSB: external + +uint8 ORB_QUEUE_LENGTH = 16 diff --git a/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg b/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg new file mode 100644 index 0000000000..28aa780699 --- /dev/null +++ b/msg/px4_msgs_old/msg/VehicleAttitudeSetpointV0.msg @@ -0,0 +1,18 @@ +uint32 MESSAGE_VERSION = 0 + +uint64 timestamp # time since system start (microseconds) + +float32 yaw_sp_move_rate # rad/s (commanded by user) + +# For quaternion-based attitude control +float32[4] q_d # Desired quaternion for quaternion control + +# For clarification: For multicopters thrust_body[0] and thrust[1] are usually 0 and thrust[2] is the negative throttle demand. +# For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. +float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] + +bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) + +bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) + +# TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint diff --git a/msg/translation_node/translations/all_translations.h b/msg/translation_node/translations/all_translations.h index 7564a9f83d..22202033f1 100644 --- a/msg/translation_node/translations/all_translations.h +++ b/msg/translation_node/translations/all_translations.h @@ -12,3 +12,6 @@ #include "translation_vehicle_status_v1.h" #include "translation_airspeed_validated_v1.h" +#include "translation_vehicle_attitude_setpoint_v1.h" +#include "translation_arming_check_reply_v1.h" +#include "translation_event_v1.h" diff --git a/msg/translation_node/translations/translation_arming_check_reply_v1.h b/msg/translation_node/translations/translation_arming_check_reply_v1.h new file mode 100644 index 0000000000..7753ce96c2 --- /dev/null +++ b/msg/translation_node/translations/translation_arming_check_reply_v1.h @@ -0,0 +1,84 @@ +/**************************************************************************** + * Copyright (c) 2025 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate ArmingCheckReply v0 <--> v1 +#include +#include +#include "translation_event_v1.h" + +class ArmingCheckReplyV1Translation { +public: + using MessageOlder = px4_msgs_old::msg::ArmingCheckReplyV0; + static_assert(MessageOlder::MESSAGE_VERSION == 0); + + using MessageNewer = px4_msgs::msg::ArmingCheckReply; + static_assert(MessageNewer::MESSAGE_VERSION == 1); + + static constexpr const char* kTopic = "/fmu/in/arming_check_reply"; + + 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.registration_id = msg_older.registration_id; + + msg_newer.health_component_index = msg_older.health_component_index; + msg_newer.health_component_is_present = msg_older.health_component_is_present; + msg_newer.health_component_warning = msg_older.health_component_warning; + msg_newer.health_component_error = msg_older.health_component_error; + + msg_newer.can_arm_and_run = msg_older.can_arm_and_run; + + + for (std::size_t i = 0; i < msg_newer.events.size();i++) { + EventV1Translation::fromOlder(msg_older.events.at(i), msg_newer.events.at(i)); + } + + + msg_newer.mode_req_angular_velocity = msg_older.mode_req_angular_velocity; + msg_newer.mode_req_attitude = msg_older.mode_req_attitude; + msg_newer.mode_req_local_alt = msg_older.mode_req_local_alt; + msg_newer.mode_req_local_position = msg_older.mode_req_local_position; + msg_newer.mode_req_local_position_relaxed = msg_older.mode_req_local_position_relaxed; + msg_newer.mode_req_global_position = msg_older.mode_req_global_position; + msg_newer.mode_req_global_position_relaxed = false; + msg_newer.mode_req_mission = msg_older.mode_req_mission; + msg_newer.mode_req_home_position = msg_older.mode_req_home_position; + msg_newer.mode_req_prevent_arming = msg_older.mode_req_prevent_arming; + msg_newer.mode_req_manual_control = msg_older.mode_req_manual_control; + + } + + 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.registration_id = msg_newer.registration_id; + + msg_older.health_component_index = msg_newer.health_component_index; + msg_older.health_component_is_present = msg_newer.health_component_is_present; + msg_older.health_component_warning = msg_newer.health_component_warning; + msg_older.health_component_error = msg_newer.health_component_error; + + msg_older.can_arm_and_run = msg_newer.can_arm_and_run; + + for (std::size_t i = 0; i < msg_older.events.size();i++) { + EventV1Translation::toOlder(msg_newer.events.at(i), msg_older.events.at(i)); + } + + msg_older.mode_req_angular_velocity = msg_newer.mode_req_angular_velocity; + msg_older.mode_req_attitude = msg_newer.mode_req_attitude; + msg_older.mode_req_local_alt = msg_newer.mode_req_local_alt; + msg_older.mode_req_local_position = msg_newer.mode_req_local_position; + msg_older.mode_req_global_position = msg_newer.mode_req_global_position; + msg_older.mode_req_mission = msg_newer.mode_req_mission; + msg_older.mode_req_home_position = msg_newer.mode_req_home_position; + msg_older.mode_req_prevent_arming = msg_newer.mode_req_prevent_arming; + msg_older.mode_req_manual_control = msg_newer.mode_req_manual_control; + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(ArmingCheckReplyV1Translation); diff --git a/msg/translation_node/translations/translation_event_v1.h b/msg/translation_node/translations/translation_event_v1.h new file mode 100644 index 0000000000..edf2a74a9d --- /dev/null +++ b/msg/translation_node/translations/translation_event_v1.h @@ -0,0 +1,38 @@ +/**************************************************************************** + * Copyright (c) 2025 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate Event v0 <--> v1 +#include +#include + +class EventV1Translation { +public: + using MessageOlder = px4_msgs_old::msg::EventV0; + static_assert(MessageOlder::MESSAGE_VERSION == 0); + + using MessageNewer = px4_msgs::msg::Event; + static_assert(MessageNewer::MESSAGE_VERSION == 1); + + static constexpr const char* kTopic = "fmu/out/event"; + + static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) { + msg_newer.timestamp = msg_older.timestamp; + msg_newer.id = msg_older.id; + msg_newer.event_sequence = msg_older.event_sequence; + msg_newer.arguments = msg_older.arguments; + msg_newer.log_levels = msg_older.log_levels; + } + + static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) { + msg_older.timestamp = msg_newer.timestamp; + msg_older.id = msg_newer.id; + msg_older.event_sequence = msg_newer.event_sequence; + msg_older.arguments = msg_newer.arguments; + msg_older.log_levels = msg_newer.log_levels; + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(EventV1Translation); diff --git a/msg/translation_node/translations/translation_vehicle_attitude_setpoint_v1.h b/msg/translation_node/translations/translation_vehicle_attitude_setpoint_v1.h new file mode 100644 index 0000000000..b30e469dff --- /dev/null +++ b/msg/translation_node/translations/translation_vehicle_attitude_setpoint_v1.h @@ -0,0 +1,53 @@ +/**************************************************************************** + * Copyright (c) 2025 PX4 Development Team. + * SPDX-License-Identifier: BSD-3-Clause + ****************************************************************************/ +#pragma once + +// Translate VehicleAttitudeSetpoint v0 <--> v1 +#include +#include + +class VehicleAttitudeSetpointV1Translation { +public: + using MessageOlder = px4_msgs_old::msg::VehicleAttitudeSetpointV0; + static_assert(MessageOlder::MESSAGE_VERSION == 0); + + using MessageNewer = px4_msgs::msg::VehicleAttitudeSetpoint; + static_assert(MessageNewer::MESSAGE_VERSION == 1); + + static constexpr const char* kTopic = "fmu/in/vehicle_attitude_setpoint"; + + static void fromOlder(const MessageOlder &msg_older, MessageNewer &msg_newer) { + // Set msg_newer from msg_older + msg_newer.timestamp = msg_older.timestamp; + msg_newer.yaw_sp_move_rate = msg_older.yaw_sp_move_rate; + msg_newer.q_d[0] = msg_older.q_d[0]; + msg_newer.q_d[1] = msg_older.q_d[1]; + msg_newer.q_d[2] = msg_older.q_d[2]; + msg_newer.q_d[3] = msg_older.q_d[3]; + msg_newer.thrust_body[0] = msg_older.thrust_body[0]; + msg_newer.thrust_body[1] = msg_older.thrust_body[1]; + msg_newer.thrust_body[2] = msg_older.thrust_body[2]; + + } + + static void toOlder(const MessageNewer &msg_newer, MessageOlder &msg_older) { + // Set msg_older from msg_newer + msg_older.timestamp = msg_newer.timestamp; + msg_older.yaw_sp_move_rate = msg_newer.yaw_sp_move_rate; + msg_older.q_d[0] = msg_newer.q_d[0]; + msg_older.q_d[1] = msg_newer.q_d[1]; + msg_older.q_d[2] = msg_newer.q_d[2]; + msg_older.q_d[3] = msg_newer.q_d[3]; + msg_older.thrust_body[0] = msg_newer.thrust_body[0]; + msg_older.thrust_body[1] = msg_newer.thrust_body[1]; + msg_older.thrust_body[2] = msg_newer.thrust_body[2]; + + msg_older.reset_integral = false; + msg_older.fw_control_yaw_wheel = false; + + } +}; + +REGISTER_TOPIC_TRANSLATION_DIRECT(VehicleAttitudeSetpointV1Translation); diff --git a/msg/versioned/ArmingCheckReply.msg b/msg/versioned/ArmingCheckReply.msg index 4c1616d849..54e724bdb8 100644 --- a/msg/versioned/ArmingCheckReply.msg +++ b/msg/versioned/ArmingCheckReply.msg @@ -1,34 +1,43 @@ -uint32 MESSAGE_VERSION = 0 +# Arming check reply. +# +# This is a response to an ArmingCheckRequest message sent by the FMU to an external component, such as a ROS 2 navigation mode. +# The response contains the current set of external mode requirements, and a queue of events indicating recent failures to set the mode (which the FMU may then forward to a ground station). +# The request is sent regularly to all registered ROS modes, even while armed, so that the FMU always knows and can forward the current state. +# +# 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. -uint64 timestamp # time since system start (microseconds) +uint32 MESSAGE_VERSION = 1 -uint8 request_id -uint8 registration_id +uint64 timestamp # [us] Time since system start. -uint8 HEALTH_COMPONENT_INDEX_NONE = 0 +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 # HEALTH_COMPONENT_INDEX_* -bool health_component_is_present -bool health_component_warning -bool health_component_error +uint8 HEALTH_COMPONENT_INDEX_NONE = 0 # Index of health component for which this response applies. -bool can_arm_and_run # whether arming is possible, and if it's a navigation mode, if it can run +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 num_events +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. -Event[5] events +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). # Mode requirements -bool mode_req_angular_velocity -bool mode_req_attitude -bool mode_req_local_alt -bool mode_req_local_position -bool mode_req_local_position_relaxed -bool mode_req_global_position -bool mode_req_mission -bool mode_req_home_position -bool mode_req_prevent_arming -bool mode_req_manual_control +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 17c6e4bacd..37a56e3c4b 100644 --- a/msg/versioned/ArmingCheckRequest.msg +++ b/msg/versioned/ArmingCheckRequest.msg @@ -1,7 +1,14 @@ +# Arming check request. +# +# Broadcast message to request arming checks be reported by all registered components, such as external ROS 2 navigation modes. +# All registered components should respond with an ArmingCheckReply message that indicates their current mode requirements, and any arming failure information. +# The request is sent regularly, even while armed, so that the FMU always knows the current arming state for external modes, and can forward it to ground stations. +# +# 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). + uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start. -# broadcast message to request all registered arming checks to be reported - -uint8 request_id +uint8 request_id # Id of this request. Allows correlation with associated ArmingCheckReply messages. diff --git a/msg/Event.msg b/msg/versioned/Event.msg similarity index 92% rename from msg/Event.msg rename to msg/versioned/Event.msg index df1dd4a97d..ed8d841ebd 100644 --- a/msg/Event.msg +++ b/msg/versioned/Event.msg @@ -1,4 +1,6 @@ # Events interface +uint32 MESSAGE_VERSION = 1 + uint64 timestamp # time since system start (microseconds) uint32 id # Event ID diff --git a/msg/versioned/FixedWingLateralSetpoint.msg b/msg/versioned/FixedWingLateralSetpoint.msg new file mode 100644 index 0000000000..ac7410878e --- /dev/null +++ b/msg/versioned/FixedWingLateralSetpoint.msg @@ -0,0 +1,11 @@ +# 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) + +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. diff --git a/msg/versioned/FixedWingLongitudinalSetpoint.msg b/msg/versioned/FixedWingLongitudinalSetpoint.msg new file mode 100644 index 0000000000..06896df8b6 --- /dev/null +++ b/msg/versioned/FixedWingLongitudinalSetpoint.msg @@ -0,0 +1,14 @@ +# 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) + +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 diff --git a/msg/versioned/LateralControlConfiguration.msg b/msg/versioned/LateralControlConfiguration.msg new file mode 100644 index 0000000000..783bd38465 --- /dev/null +++ b/msg/versioned/LateralControlConfiguration.msg @@ -0,0 +1,8 @@ +# 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) + +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 new file mode 100644 index 0000000000..ac9c56df44 --- /dev/null +++ b/msg/versioned/LongitudinalControlConfiguration.msg @@ -0,0 +1,17 @@ +# 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) + +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 diff --git a/msg/versioned/VehicleAttitudeSetpoint.msg b/msg/versioned/VehicleAttitudeSetpoint.msg index 28aa780699..b32b336edb 100644 --- a/msg/versioned/VehicleAttitudeSetpoint.msg +++ b/msg/versioned/VehicleAttitudeSetpoint.msg @@ -1,4 +1,4 @@ -uint32 MESSAGE_VERSION = 0 +uint32 MESSAGE_VERSION = 1 uint64 timestamp # time since system start (microseconds) @@ -11,8 +11,4 @@ float32[4] q_d # Desired quaternion for quaternion control # For fixed wings thrust_x is the throttle demand and thrust_y, thrust_z will usually be zero. float32[3] thrust_body # Normalized thrust command in body FRD frame [-1,1] -bool reset_integral # Reset roll/pitch/yaw integrals (navigation logic change) - -bool fw_control_yaw_wheel # control heading with steering wheel (used for auto takeoff on runway) - # TOPICS vehicle_attitude_setpoint mc_virtual_attitude_setpoint fw_virtual_attitude_setpoint diff --git a/msg/versioned/VehicleCommand.msg b/msg/versioned/VehicleCommand.msg index bd1e84551f..669a4b8af9 100644 --- a/msg/versioned/VehicleCommand.msg +++ b/msg/versioned/VehicleCommand.msg @@ -3,127 +3,127 @@ uint32 MESSAGE_VERSION = 0 -uint64 timestamp # time since system start (microseconds) +uint64 timestamp # [us] Time since system start. -uint16 VEHICLE_CMD_CUSTOM_0 = 0 # test command -uint16 VEHICLE_CMD_CUSTOM_1 = 1 # test command -uint16 VEHICLE_CMD_CUSTOM_2 = 2 # test command -uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand |Unused (FW pitch from FW_TKO_PITCH_MIN)|Unused|Unused|Yaw angle in NED if yaw source available, ignored otherwise [deg] [@range 0,360]|Latitude (WGS-84)|Longitude (WGS-84)|Altitude AMSL [m]| -uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing -uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |Radius [m] |Velocity [m/s] |Yaw behaviour |Empty |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |Major Radius [m] |Minor Radius [m] |Velocity [m/s] |Orientation |Latitude/X |Longitude/Y |Altitude/Z | -uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| -uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| -uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time |Delay in seconds (decimal, -1 to enable time-of-day fields)| hour (24h format, UTC, -1 to ignore)| minute (24h format, UTC, -1 to ignore)| second (24h format, UTC)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| -uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold |2D coord mode: 0: Orthogonal to planned route | Altitude mode: 0: Ignore altitude| Empty| Empty| Lat| Lon| Alt| -uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately |Flight termination activated if > 0.5| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value |Altitude| Frame of new altitude | Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1| Actuator 2| Actuator 3| Actuator 4| Actuator 5| Actuator 6| Index| -uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Empty| Empty| Empty| Empty| Latitude| Longitude| Empty| -uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |Altitude (meters)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |Ground speed [m/s] |Bitmask |Loiter radius [m] for planes |Yaw [deg] |Latitude |Longitude |Altitude | +uint16 VEHICLE_CMD_CUSTOM_0 = 0 # Test command. +uint16 VEHICLE_CMD_CUSTOM_1 = 1 # Test command. +uint16 VEHICLE_CMD_CUSTOM_2 = 2 # Test command. +uint16 VEHICLE_CMD_NAV_WAYPOINT = 16 # Navigate to MISSION. |[s] (decimal) Hold time. (ignored by fixed wing, time to stay at MISSION for rotary wing)|[m] Acceptance radius (if the sphere with this radius is hit, the MISSION counts as reached)|0 to pass through the WP, if > 0 radius [m] to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.|Desired yaw angle at MISSION (rotary wing)|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time. |Unused|Unused|[m] Radius around MISSION. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns. |Turns|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for time. |[s] Seconds (decimal)|Unused|Radius around MISSION [m]. If positive loiter clockwise, else counter-clockwise|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAND = 21 # Land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand. |Unused (FW pitch from FW_TKO_PITCH_MIN)|Unused|Unused|[deg] [@range 0,360] Yaw angle in NED if yaw source available, ignored otherwise|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude AMSL| +uint16 VEHICLE_CMD_NAV_PRECLAND = 23 # Attempt a precision landing. +uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circle defined by the parameters. |[m] Radius|[m/s] Velocity|[@enum ORBIT_YAW_BEHAVIOUR] Yaw behaviour|Unused|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |[m] Major radius|[m] Minor radius|[m/s] Velocity|Orientation|Latitude/X|Longitude/Y|Altitude/Z| +uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| +uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning|0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid|Unused|[deg] [@range 0, 360] Yaw angle at goal, in compass degrees|Latitude/X of goal|Longitude/Y of goal|Altitude/Z of goal| +uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Unused|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min AMSL - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a specified time. |[s] Delay (decimal, -1 to enable time-of-day fields)|[h] hour (24h format, UTC, -1 to ignore)|minute (24h format, UTC, -1 to ignore)|second (24h format, UTC)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration.|Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_DELAY = 112 # Delay mission state machine. |[s] Delay (decimal seconds)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired altitude reached.|Descent / Ascend rate (m/s)|Unused|Unused|Unused|Unused|Unused|Finish Altitude| +uint16 VEHICLE_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV point. |Distance [m]|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_YAW = 115 # Reach a certain target angle. |[deg] [@range 0,360] Target angle. 0 is north|[deg/s] Speed during yaw change|[@range -1,1] Direction: negative: counter clockwise, positive: clockwise |[ 1,0] Relative offset or absolute angle|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_CONDITION_GATE = 4501 # Wait until passing a threshold. |2D coord mode: 0: Orthogonal to planned route|Altitude mode: 0: Ignore altitude|Unused|Unused|Lat|Lon|Alt| +uint16 VEHICLE_CMD_DO_SET_MODE = 176 # Set system mode. |Mode, as defined by ENUM MAV_MODE|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action only the specified number of times. |Sequence number|Repeat count|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. |[@enum SPEED_TYPE] Speed type (0=Airspeed, 1=Ground Speed)|Speed (m/s, -1 indicates no change)|[%] Throttle ( Percent, -1 indicates no change)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number|Parameter value|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. |Relay number|Setting (1=on, 0=off, others possible depending on system hardware)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cycles with a desired period. |Relay number|Cycle count|[s] Cycle time (decimal seconds)|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number|[us] PWM rate (1000 to 2000 typical)|Cycle count|[s] Cycle time|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately. |Flight termination activated if > 0.5|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CHANGE_ALTITUDE = 186 # Set the vehicle to Loiter mode and change the altitude to specified value. |Altitude|Frame of new altitude|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ACTUATOR = 187 # Sets actuators (e.g. servos) to a desired value. |Actuator 1|Actuator 2|Actuator 3|Actuator 4|Actuator 5|Actuator 6|Index| +uint16 VEHICLE_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. |Unused|Unused|Unused|Unused|Latitude|Longitude|Unused| +uint16 VEHICLE_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonomous landing. |[m] Altitude|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_REPOSITION = 192 # Reposition to specific WGS84 GPS position. |[m/s] Ground speed|Bitmask|[m] Loiter radius for planes|[deg] Yaw|Latitude|Longitude|Altitude| uint16 VEHICLE_CMD_DO_PAUSE_CONTINUE = 193 -uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Latitude| Longitude| Altitude| -uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| pitch offset from next waypoint| roll offset from next waypoint| yaw offset from next waypoint| -uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of interest mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| +uint16 VEHICLE_CMD_DO_SET_ROI_LOCATION = 195 # Sets the region of interest (ROI) to a location. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Latitude|Longitude|Altitude| +uint16 VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 # Sets the region of interest (ROI) to be toward next waypoint, with optional pitch/roll/yaw offset. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Pitch offset from next waypoint|Roll offset from next waypoint|Yaw offset from next waypoint| +uint16 VEHICLE_CMD_DO_SET_ROI_NONE = 197 # Cancels any previous ROI command returning the vehicle/sensors to default flight characteristics. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. |Camera ID (-1 for all)|Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw|Transmission mode: 0: video stream, >0: single images every n seconds (decimal seconds)|Recording: 0: disabled, 1: enabled compressed, 2: enabled raw|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z| uint16 VEHICLE_CMD_DO_DIGICAM_CONTROL=203 -uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount |pitch or lat in degrees, depending on mount mode.| roll or lon in degrees depending on mount mode| yaw or alt (in meters) depending on mount mode| reserved| reserved| reserved| MAV_MOUNT_MODE enum value| -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence |enable? (0=disable, 1=enable)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute |action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # motor test command |Instance (1, ...)| throttle type| throttle| timeout [s]| Motor count | Test order| Empty| -uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight |inverted (0=normal, 1=inverted)| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper -uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight |Camera trigger distance (meters)| Shutter integration time (ms)| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)| q2 - quaternion param #2, x (0 in null-rotation)| q3 - quaternion param #3, y (0 in null-rotation)| q4 - quaternion param #4, z (0 in null-rotation)| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # set id of master controller |System ID| Component ID| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # set limits for external control |timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout| absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit| absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit| horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit| Empty| Empty| Empty| -uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See mavlink spec MAV_CMD_PREFLIGHT_CALIBRATION -uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration -uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| -uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started -uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| -uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight|Camera trigger distance (meters)| Shutter integration time (ms)| Camera minimum trigger interval| Number of positions| Roll| Pitch| Empty| -uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode |MAV_STANDARD_MODE| -uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal +uint16 VEHICLE_CMD_DO_MOUNT_CONFIGURE=204 # Mission command to configure a camera or antenna mount. |[@enum MAV_MOUNT_MODE] Mount operation mode|Stabilize roll? (1 = yes, 0 = no)|Stabilize pitch? (1 = yes, 0 = no)|stabilize yaw? (1 = yes, 0 = no)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL=205 # Mission command to control a camera or antenna mount. |[deg] Pitch or lat, depending on mount mode.|[deg] Roll or lon depending on mount mode|[deg]/[m] Yaw or alt depending on mount mode|Unused|Unused|Unused|[@enum MAV_MOUNT_MODE]| +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_DIST=206 # Mission command to set TRIG_DIST for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_FENCE_ENABLE=207 # Mission command to enable the geofence. |enable? (0=disable, 1=enable)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_PARACHUTE=208 # Mission command to trigger a parachute. |action [@enum PARACHUTE_ACTION] (0=disable, 1=enable, 2=release, for some systems see [@enum PARACHUTE_ACTION], not in general message set.)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOTOR_TEST=209 # Motor test command. |Instance (@range 1, )|throttle type|throttle|timeout [s]|Motor count|Test order|Unused| +uint16 VEHICLE_CMD_DO_INVERTED_FLIGHT=210 # Change to/from inverted flight. |inverted (0=normal, 1=inverted)|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GRIPPER = 211 # Command to operate a gripper. +uint16 VEHICLE_CMD_DO_SET_CAM_TRIGG_INTERVAL=214 # Mission command to set TRIG_INTERVAL for this flight. |[m] Camera trigger distance|Shutter integration time (ms)|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_MOUNT_CONTROL_QUAT=220 # Mission command to control a camera or antenna mount, using a quaternion as reference. |q1 - quaternion param #1, w (1 in null-rotation)|q2 - quaternion param #2, x (0 in null-rotation)|q3 - quaternion param #3, y (0 in null-rotation)|q4 - quaternion param #4, z (0 in null-rotation)|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_MASTER=221 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_GUIDED_LIMITS=222 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min(AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused| +uint16 VEHICLE_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO commands in the enumeration. |Unused|Unused|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre-flight mode. See MAVLink spec MAV_CMD_PREFLIGHT_CALIBRATION. +uint16 PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION = 3# Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. +uint16 VEHICLE_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow|X axis offset (or generic dimension 1), in the sensor's raw units|Y axis offset (or generic dimension 2), in the sensor's raw units|Z axis offset (or generic dimension 3), in the sensor's raw units|Generic dimension 4, in the sensor's raw units|Generic dimension 5, in the sensor's raw units|Generic dimension 6, in the sensor's raw units| +uint16 VEHICLE_CMD_PREFLIGHT_UAVCAN = 243 # UAVCAN configuration. If param 1 == 1 actuator mapping and direction assignment should be started. +uint16 VEHICLE_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.|0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.|Unused|Unused|Unused|Unused|Unused| +uint16 VEHICLE_CMD_OBLIQUE_SURVEY=260 # Mission command to set a Camera Auto Mount Pivoting Oblique Survey for this flight. |[m] Camera trigger distance|[ms] Shutter integration time|Camera minimum trigger interval|Number of positions|Roll|Pitch|Unused| +uint16 VEHICLE_CMD_DO_SET_STANDARD_MODE=262 # Enable the specified standard MAVLink mode. |MAV_STANDARD_MODE| +uint16 VEHICLE_CMD_GIMBAL_DEVICE_INFORMATION = 283 # Command to ask information about a low level gimbal. -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|value [-1,1]|timeout [s]|Empty|Empty|output function| -uint16 VEHICLE_CMD_CONFIGURE_ACTUATOR = 311 # Actuator configuration command|configuration|Empty|Empty|Empty|output function| -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 -uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing |0:Spektrum| 0:Spektrum DSM2, 1:Spektrum DSMX| -uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message -uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities| Reserved (all remaining params)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| Reserved (default:0)| -uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.) -uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom +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_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. +uint16 VEHICLE_CMD_START_RX_PAIR = 500 # Starts receiver pairing. |0:Spektrum|0:Spektrum DSM2, 1:Spektrum DSMX| +uint16 VEHICLE_CMD_REQUEST_MESSAGE = 512 # Request to send a single instance of the specified message. +uint16 VEHICLE_CMD_REQUEST_CAMERA_INFORMATION = 521 # Request camera information (CAMERA_INFORMATION). |0: No action 1: Request camera capabilities|Reserved (all remaining params)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)|Reserved (default:0)| +uint16 VEHICLE_CMD_SET_CAMERA_MODE = 530 # Set camera capture mode (photo, video, etc.). +uint16 VEHICLE_CMD_SET_CAMERA_ZOOM = 531 # Set camera zoom. uint16 VEHICLE_CMD_SET_CAMERA_FOCUS = 532 -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw -uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control -uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. -uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system -uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. -uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. -uint16 VEHICLE_CMD_LOGGING_START = 2510 # start streaming ULog data -uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # stop streaming ULog data -uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # control starting/stopping transmitting data over the high latency link -uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition -uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization -uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan -uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment -uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. -uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_PITCHYAW = 1000 # Setpoint to be sent to a gimbal manager to set a gimbal pitch and yaw. +uint16 VEHICLE_CMD_DO_GIMBAL_MANAGER_CONFIGURE = 1001 # Gimbal configuration to set which sysid/compid is in primary and secondary control. +uint16 VEHICLE_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence. +uint16 VEHICLE_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. +uint16 VEHICLE_CMD_VIDEO_START_CAPTURE = 2500 # Start a video capture. +uint16 VEHICLE_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture. +uint16 VEHICLE_CMD_LOGGING_START = 2510 # Start streaming ULog data. +uint16 VEHICLE_CMD_LOGGING_STOP = 2511 # Stop streaming ULog data. +uint16 VEHICLE_CMD_CONTROL_HIGH_LATENCY = 2600 # Control starting/stopping transmitting data over the high latency link. +uint16 VEHICLE_CMD_DO_VTOL_TRANSITION = 3000 # Command VTOL transition. +uint16 VEHICLE_CMD_ARM_AUTHORIZATION_REQUEST = 3001 # Request arm authorization. +uint16 VEHICLE_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Prepare a payload deployment in the flight plan. +uint16 VEHICLE_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control a pre-programmed payload deployment. +uint16 VEHICLE_CMD_FIXED_MAG_CAL_YAW = 42006 # Magnetometer calibration based on provided known yaw. This allows for fast calibration using WMM field tables in the vehicle, given only the known yaw of the vehicle. If Latitude and longitude are both zero then use the current vehicle location. +uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch. -uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # external reset of estimator global position when deadreckoning +uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning. uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004 -# PX4 vehicle commands (beyond 16 bit mavlink commands) -uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # start of PX4 internal only vehicle commands (> UINT16_MAX) -uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position |Unused|Unused|Unused|Unused|Latitude (WGS-84)|Longitude (WGS-84)|Altitude [m] (AMSL from GNSS, positive above ground)| -uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Empty|Empty|Empty|Empty|Empty|Empty| +# PX4 vehicle commands (beyond 16 bit MAVLink commands). +uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX). +uint32 VEHICLE_CMD_SET_GPS_GLOBAL_ORIGIN = 100000 # Sets the GPS coordinates of the vehicle local origin (0,0,0) position. |Unused|Unused|Unused|Unused|Latitude (WGS-84)|Longitude (WGS-84)|[m] Altitude (AMSL from GNSS, positive above ground)| +uint32 VEHICLE_CMD_SET_NAV_STATE = 100001 # Change mode by specifying nav_state directly. |nav_state|Unused|Unused|Unused|Unused|Unused|Unused| -uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization | -uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. | -uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | -uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt | -uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # +uint8 VEHICLE_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. +uint8 VEHICLE_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. +uint8 VEHICLE_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with stabilization. +uint8 VEHICLE_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt. +uint8 VEHICLE_MOUNT_MODE_ENUM_END = 5 # -uint8 VEHICLE_ROI_NONE = 0 # No region of interest | -uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION | -uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION | -uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location | -uint8 VEHICLE_ROI_TARGET = 4 # Point toward target +uint8 VEHICLE_ROI_NONE = 0 # No region of interest. +uint8 VEHICLE_ROI_WPNEXT = 1 # Point toward next MISSION. +uint8 VEHICLE_ROI_WPINDEX = 2 # Point toward given MISSION. +uint8 VEHICLE_ROI_LOCATION = 3 # Point toward fixed location. +uint8 VEHICLE_ROI_TARGET = 4 # Point toward target. uint8 VEHICLE_ROI_ENUM_END = 5 uint8 PARACHUTE_ACTION_DISABLE = 0 @@ -155,13 +155,13 @@ uint8 FAILURE_TYPE_SLOW = 5 uint8 FAILURE_TYPE_DELAYED = 6 uint8 FAILURE_TYPE_INTERMITTENT = 7 -# used as param1 in DO_CHANGE_SPEED command +# Used as param1 in DO_CHANGE_SPEED command. uint8 SPEED_TYPE_AIRSPEED = 0 uint8 SPEED_TYPE_GROUNDSPEED = 1 uint8 SPEED_TYPE_CLIMB_SPEED = 2 uint8 SPEED_TYPE_DESCEND_SPEED = 3 -# used as param3 in CMD_DO_ORBIT +# Used as param3 in CMD_DO_ORBIT. uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TO_CIRCLE_CENTER = 0 uint8 ORBIT_YAW_BEHAVIOUR_HOLD_INITIAL_HEADING = 1 uint8 ORBIT_YAW_BEHAVIOUR_UNCONTROLLED = 2 @@ -169,29 +169,29 @@ uint8 ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE = 3 uint8 ORBIT_YAW_BEHAVIOUR_RC_CONTROLLED = 4 uint8 ORBIT_YAW_BEHAVIOUR_UNCHANGED = 5 -# used as param1 in ARM_DISARM command +# Used as param1 in ARM_DISARM command. int8 ARMING_ACTION_DISARM = 0 int8 ARMING_ACTION_ARM = 1 -# param2 in VEHICLE_CMD_DO_GRIPPER +# param2 in VEHICLE_CMD_DO_GRIPPER. uint8 GRIPPER_ACTION_RELEASE = 0 uint8 GRIPPER_ACTION_GRAB = 1 uint8 ORB_QUEUE_LENGTH = 8 -float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. -float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. -float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. -uint32 command # Command ID -uint8 target_system # System which should execute the command -uint8 target_component # Component which should execute the command, 0 for all components -uint8 source_system # System sending the command -uint16 source_component # Component / mode executor sending the command -uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) +float32 param1 # Parameter 1, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param2 # Parameter 2, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param3 # Parameter 3, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param4 # Parameter 4, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param5 # Parameter 5, as defined by MAVLink uint16 VEHICLE_CMD enum. +float64 param6 # Parameter 6, as defined by MAVLink uint16 VEHICLE_CMD enum. +float32 param7 # Parameter 7, as defined by MAVLink uint16 VEHICLE_CMD enum. +uint32 command # Command ID. +uint8 target_system # System which should execute the command. +uint8 target_component # Component which should execute the command, 0 for all components. +uint8 source_system # System sending the command. +uint16 source_component # Component / mode executor sending the command. +uint8 confirmation # 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command). bool from_external uint16 COMPONENT_MODE_EXECUTOR_START = 1000 diff --git a/platforms/common/pab_manifest.c b/platforms/common/pab_manifest.c index 13911c1440..5e0cee9a30 100644 --- a/platforms/common/pab_manifest.c +++ b/platforms/common/pab_manifest.c @@ -404,7 +404,7 @@ static const px4_hw_mft_item_t base_configuration_18[] = { // BASE ID 0x100 Holybro Pixhawk Jetson Baseboard Alaised to ID 0 // BASE ID 0x150 ZeroOne Pixhawk Baseboard Alaised to ID 0 - +// BASE ID 0x200 AmovLab Pixhawk Baseboard Alaised to ID 0 static px4_hw_mft_list_entry_t mft_lists[] = { // ver_rev {HW_BASE_ID(0), base_configuration_0, arraySize(base_configuration_0)}, // std Base with PX4IO @@ -421,6 +421,7 @@ static px4_hw_mft_list_entry_t mft_lists[] = { {HW_BASE_ID(18), base_configuration_18, arraySize(base_configuration_18)}, // Auterion Skynode S ver 18 {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/nuttx/NuttX/nuttx b/platforms/nuttx/NuttX/nuttx index eaf77e7e1a..886acbbdb4 160000 --- a/platforms/nuttx/NuttX/nuttx +++ b/platforms/nuttx/NuttX/nuttx @@ -1 +1 @@ -Subproject commit eaf77e7e1a9ef418ce589269d12967348b04c20b +Subproject commit 886acbbdb4f061e5c0ce1a76afbcfa7cb7df9849 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 bb4f75b7a7..22e9fda161 100644 --- a/platforms/nuttx/src/px4/stm/stm32_common/dshot/dshot.c +++ b/platforms/nuttx/src/px4/stm/stm32_common/dshot/dshot.c @@ -48,6 +48,8 @@ #include #include +#include + // This can be overriden for a specific board. #ifndef BOARD_DMA_NUM_DSHOT_CHANNELS #define BOARD_DMA_NUM_DSHOT_CHANNELS 1 @@ -137,6 +139,8 @@ 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 perf_counter_t hrt_callback_perf = NULL; + static void init_timer_config(uint32_t channel_mask) { // Mark timers in use, channels in use, and timers for bidir dshot @@ -206,7 +210,7 @@ static void init_timers_dma_up(void) continue; } - PX4_DEBUG("Allocated DMA UP Timer Index %u", timer_index); + PX4_INFO("Allocated DMA UP Timer Index %u", timer_index); timer_configs[timer_index].initialized = true; } @@ -215,7 +219,7 @@ static void init_timers_dma_up(void) if (timer_configs[timer_index].dma_handle != NULL) { stm32_dmafree(timer_configs[timer_index].dma_handle); timer_configs[timer_index].dma_handle = NULL; - PX4_DEBUG("Freed DMA UP Timer Index %u", timer_index); + PX4_INFO("Freed DMA UP Timer Index %u", timer_index); } } } @@ -275,6 +279,7 @@ int up_dshot_init(uint32_t channel_mask, unsigned dshot_pwm_freq, bool enable_bi if (_bidirectional) { PX4_INFO("Bidirectional DShot enabled, only one timer will be used"); + hrt_callback_perf = perf_alloc(PC_ELAPSED, "dshot: callback perf"); } // NOTE: if bidirectional is enabled only 1 timer can be used. This is because Burst mode uses 1 DMA channel per timer @@ -485,6 +490,8 @@ void dma_burst_finished_callback(DMA_HANDLE handle, uint8_t status, void *arg) static void capture_complete_callback(void *arg) { + perf_begin(hrt_callback_perf); + uint8_t timer_index = *((uint8_t *)arg); // Unallocate the timer as CaptureDMA @@ -525,6 +532,8 @@ static void capture_complete_callback(void *arg) // Enable all channels configured as DShotInverted io_timer_set_enable(true, IOTimerChanMode_DshotInverted, IO_TIMER_ALL_MODES_CHANNELS); + + perf_end(hrt_callback_perf); } void process_capture_results(uint8_t timer_index, uint8_t channel_index) diff --git a/posix-configs/SITL/init/test/test_shutdown b/posix-configs/SITL/init/test/test_shutdown index b452595732..2a00520ab9 100644 --- a/posix-configs/SITL/init/test/test_shutdown +++ b/posix-configs/SITL/init/test/test_shutdown @@ -29,7 +29,8 @@ flight_mode_manager start mc_pos_control start vtol mc_att_control start vtol mc_rate_control start vtol -fw_pos_control start vtol +fw_mode_manager start +fw_lat_lon_control start fw_att_control start vtol airspeed_selector start @@ -59,7 +60,7 @@ flight_mode_manager status mc_pos_control status mc_att_control status mc_rate_control status -fw_pos_control status +fw_mode_manager status fw_att_control status airspeed_selector status dataman status @@ -74,7 +75,7 @@ mc_att_control stop fw_att_control stop flight_mode_manager stop mc_pos_control stop -fw_pos_control stop +fw_mode_manager stop navigator stop commander stop land_detector stop diff --git a/posix-configs/bbblue/px4_fw.config b/posix-configs/bbblue/px4_fw.config index d6ba875fde..0d952b84cc 100644 --- a/posix-configs/bbblue/px4_fw.config +++ b/posix-configs/bbblue/px4_fw.config @@ -56,7 +56,8 @@ ekf2 start land_detector start fixedwing fw_att_control start -fw_pos_control start +fw_mode_manager start +fw_lat_lon_control start mavlink start -n SoftAp -x -u 14556 -r 1000000 -p # -n name of wifi interface: SoftAp, wlan or your custom interface, diff --git a/posix-configs/rpi/pilotpi_fw.config b/posix-configs/rpi/pilotpi_fw.config index a4fdf0f6fd..4c66381e1c 100644 --- a/posix-configs/rpi/pilotpi_fw.config +++ b/posix-configs/rpi/pilotpi_fw.config @@ -63,7 +63,8 @@ airspeed_selector start land_detector start fixedwing flight_mode_manager start fw_att_control start -fw_pos_control start +fw_mode_manager start +fw_lat_lon_control start mavlink start -x -u 14556 -r 1000000 -p diff --git a/posix-configs/rpi/px4_fw.config b/posix-configs/rpi/px4_fw.config index 55d8d9cfd9..5de9619fc8 100644 --- a/posix-configs/rpi/px4_fw.config +++ b/posix-configs/rpi/px4_fw.config @@ -41,7 +41,8 @@ navigator start ekf2 start land_detector start fixedwing fw_att_control start -fw_pos_control start +fw_mode_manager start +fw_lat_lon_control start mavlink start -x -u 14556 -r 1000000 -p diff --git a/src/drivers/barometer/bmp388/bmp388_i2c.cpp b/src/drivers/barometer/bmp388/bmp388_i2c.cpp index 73fe042705..8d47b8a09b 100644 --- a/src/drivers/barometer/bmp388/bmp388_i2c.cpp +++ b/src/drivers/barometer/bmp388/bmp388_i2c.cpp @@ -71,11 +71,20 @@ IBMP388 *bmp388_i2c_interface(uint8_t busnum, uint32_t device, int bus_frequency BMP388_I2C::BMP388_I2C(uint8_t bus, uint32_t device, int bus_frequency) : I2C(DRV_BARO_DEVTYPE_BMP388, MODULE_NAME, bus, device, bus_frequency) { + _retries = 1; } int BMP388_I2C::init() { - return I2C::init(); + for (int i = 0; i < 10; i++) { + if (I2C::init() == OK) { + return OK; + } + + px4_usleep(10000); + } + + return PX4_ERROR; } int BMP388_I2C::get_reg(uint8_t addr, uint8_t *value) diff --git a/src/drivers/dshot/DShot.cpp b/src/drivers/dshot/DShot.cpp index 10c356ade1..db6e16bf7d 100644 --- a/src/drivers/dshot/DShot.cpp +++ b/src/drivers/dshot/DShot.cpp @@ -38,6 +38,7 @@ #include char DShot::_telemetry_device[] {}; +bool DShot::_telemetry_swap_rxtx{false}; px4::atomic_bool DShot::_request_telemetry_init{false}; DShot::DShot() : @@ -189,7 +190,7 @@ void DShot::update_num_motors() _num_motors = motor_count; } -void DShot::init_telemetry(const char *device) +void DShot::init_telemetry(const char *device, bool swap_rxtx) { if (!_telemetry) { _telemetry = new DShotTelemetry{}; @@ -201,7 +202,7 @@ void DShot::init_telemetry(const char *device) } if (device != NULL) { - int ret = _telemetry->init(device); + int ret = _telemetry->init(device, swap_rxtx); if (ret != 0) { PX4_ERR("telemetry init failed (%i)", ret); @@ -574,7 +575,7 @@ void DShot::Run() // telemetry device update request? if (_request_telemetry_init.load()) { - init_telemetry(_telemetry_device); + init_telemetry(_telemetry_device, _telemetry_swap_rxtx); _request_telemetry_init.store(false); } @@ -703,33 +704,44 @@ int DShot::custom_command(int argc, char *argv[]) { const char *verb = argv[0]; - if (!strcmp(verb, "telemetry")) { - if (argc > 1) { - // telemetry can be requested before the module is started - strncpy(_telemetry_device, argv[1], sizeof(_telemetry_device) - 1); - _telemetry_device[sizeof(_telemetry_device) - 1] = '\0'; - _request_telemetry_init.store(true); - } - - return 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:", &myoptind, &myoptarg)) != EOF) { + while ((ch = px4_getopt(argc, argv, "m:xd:", &myoptind, &myoptarg)) != EOF) { switch (ch) { case 'm': motor_index = strtol(myoptarg, nullptr, 10) - 1; break; + case 'x': + swap_rxtx = true; + break; + + case 'd': + device_name = myoptarg; + break; + default: return print_usage("unrecognized flag"); } } + 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'; + _telemetry_swap_rxtx = swap_rxtx; + _request_telemetry_init.store(true); + } + + return 0; + } + struct VerbCommand { const char *name; dshot_command_t command; @@ -844,7 +856,8 @@ After saving, the reversed direction will be regarded as the normal one. So to r PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_COMMAND_DESCR("telemetry", "Enable Telemetry on a UART"); - PRINT_MODULE_USAGE_ARG("", "UART device", false); + 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"); diff --git a/src/drivers/dshot/DShot.h b/src/drivers/dshot/DShot.h index 9b4d8cfb48..d0300d0470 100644 --- a/src/drivers/dshot/DShot.h +++ b/src/drivers/dshot/DShot.h @@ -123,7 +123,7 @@ private: void enable_dshot_outputs(const bool enabled); - void init_telemetry(const char *device); + 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); @@ -149,6 +149,7 @@ private: uORB::PublicationMultiData esc_status_pub{ORB_ID(esc_status)}; static char _telemetry_device[20]; + static bool _telemetry_swap_rxtx; static px4::atomic_bool _request_telemetry_init; px4::atomic _new_command{nullptr}; diff --git a/src/drivers/dshot/DShotTelemetry.cpp b/src/drivers/dshot/DShotTelemetry.cpp index 70992b1703..fe75b36854 100644 --- a/src/drivers/dshot/DShotTelemetry.cpp +++ b/src/drivers/dshot/DShotTelemetry.cpp @@ -49,7 +49,7 @@ DShotTelemetry::~DShotTelemetry() deinit(); } -int DShotTelemetry::init(const char *uart_device) +int DShotTelemetry::init(const char *uart_device, bool swap_rxtx) { deinit(); _uart_fd = ::open(uart_device, O_RDONLY | O_NOCTTY); @@ -59,6 +59,19 @@ int DShotTelemetry::init(const char *uart_device) return -errno; } + if (swap_rxtx) { + // Swap RX/TX pins if the device supports it + int rv = ioctl(_uart_fd, TIOCSSWAP, SER_SWAP_ENABLED); + + // For other devices we can still place RX on TX pin via half-duplex single-wire mode + if (rv) { rv = ioctl(_uart_fd, TIOCSSINGLEWIRE, SER_SINGLEWIRE_ENABLED); } + + if (rv) { + PX4_ERR("failed to swap rx/tx pins: %s err: %d", uart_device, rv); + return rv; + } + } + _num_timeouts = 0; _num_successful_responses = 0; _current_motor_index_request = -1; diff --git a/src/drivers/dshot/DShotTelemetry.h b/src/drivers/dshot/DShotTelemetry.h index 8672e85f7f..1c5c14ef25 100644 --- a/src/drivers/dshot/DShotTelemetry.h +++ b/src/drivers/dshot/DShotTelemetry.h @@ -60,7 +60,7 @@ public: ~DShotTelemetry(); - int init(const char *uart_device); + int init(const char *uart_device, bool swap_rxtx); void deinit(); diff --git a/src/drivers/dshot/module.yaml b/src/drivers/dshot/module.yaml index e2dcf8bc97..a31d394815 100644 --- a/src/drivers/dshot/module.yaml +++ b/src/drivers/dshot/module.yaml @@ -1,6 +1,6 @@ module_name: DShot Driver serial_config: - - command: dshot telemetry ${SERIAL_DEV} + - command: dshot telemetry -d ${SERIAL_DEV} port_config_param: name: DSHOT_TEL_CFG group: DShot diff --git a/src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp b/src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp index c3cd02813c..79e165ca2c 100644 --- a/src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp +++ b/src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp @@ -50,6 +50,7 @@ protected: IIS2MDC_I2C::IIS2MDC_I2C(const I2CSPIDriverConfig &config) : I2C(config) { + _retries = 10; } int IIS2MDC_I2C::probe() diff --git a/src/drivers/osd/msp_osd/msp_defines.h b/src/drivers/osd/msp_osd/msp_defines.h index 317c0b51f2..55eda1074c 100644 --- a/src/drivers/osd/msp_osd/msp_defines.h +++ b/src/drivers/osd/msp_osd/msp_defines.h @@ -462,7 +462,7 @@ struct msp_rendor_satellites_used_t { uint8_t iconIndex = 0x1E; //satellites icon uint8_t iconIndex2 = 0x1F; //satellites icon - char str[2]; // 99 + char str[3]; // 99 } __attribute__((packed)); diff --git a/src/drivers/osd/msp_osd/msp_osd.cpp b/src/drivers/osd/msp_osd/msp_osd.cpp index 25b9aa7c96..e3a6b3838c 100644 --- a/src/drivers/osd/msp_osd/msp_osd.cpp +++ b/src/drivers/osd/msp_osd/msp_osd.cpp @@ -341,6 +341,9 @@ void MspOsd::Run() battery_status_s battery_status{}; _battery_status_sub.copy(&battery_status); + const auto msg_original = msp_osd::construct_BATTERY_STATE(battery_status); + this->Send(MSP_BATTERY_STATE, &msg_original); + const auto msg = msp_osd::construct_rendor_BATTERY_STATE(battery_status); this->Send(MSP_CMD_DISPLAYPORT, &msg, sizeof(msp_rendor_battery_state_t)); diff --git a/src/drivers/osd/msp_osd/uorb_to_msp.cpp b/src/drivers/osd/msp_osd/uorb_to_msp.cpp index e64842fb88..2ffd57e5f2 100644 --- a/src/drivers/osd/msp_osd/uorb_to_msp.cpp +++ b/src/drivers/osd/msp_osd/uorb_to_msp.cpp @@ -378,6 +378,7 @@ msp_rendor_satellites_used_t construct_rendor_GPS_NUM(const sensor_gps_s &vehicl num.screenYPosition = 0x08; num.screenXPosition = 0x29; + memset(&num.str[0], 0, sizeof(num.str)); snprintf(&num.str[0], sizeof(num.str), "%d", vehicle_gps_position.satellites_used); return num; @@ -485,6 +486,7 @@ msp_rendor_pitch_t construct_rendor_PITCH(const vehicle_attitude_s &vehicle_att double pitch_deg = (double)math::degrees(euler_attitude.theta()); // attitude.roll = math::degrees(euler_attitude.phi()) * 10; + memset(&pit.str[0], 0, sizeof(pit.str)); snprintf(&pit.str[0], sizeof(pit.str), "%.1f", pitch_deg); return pit; @@ -503,6 +505,7 @@ msp_rendor_roll_t construct_rendor_ROLL(const vehicle_attitude_s &vehicle_attit // double pitch = (double)math::degrees(euler_attitude.theta()); double roll_deg = (double)math::degrees(euler_attitude.phi()); + memset(&roll.str[0], 0, sizeof(roll.str)); snprintf(&roll.str[0], sizeof(roll.str), "%.1f", roll_deg); return roll; diff --git a/src/drivers/rc/crsf_rc/CrsfRc.cpp b/src/drivers/rc/crsf_rc/CrsfRc.cpp index 3ea6c0ac27..d7401f57ae 100644 --- a/src/drivers/rc/crsf_rc/CrsfRc.cpp +++ b/src/drivers/rc/crsf_rc/CrsfRc.cpp @@ -526,6 +526,7 @@ This module parses the CRSF RC uplink protocol and generates CRSF downlink telem )DESCR_STR"); PRINT_MODULE_USAGE_NAME("crsf_rc", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("radio_control"); PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_PARAM_STRING('d', "/dev/ttyS3", "", "RC device", true); diff --git a/src/drivers/rc/dsm_rc/DsmRc.cpp b/src/drivers/rc/dsm_rc/DsmRc.cpp index f35bc4487f..b12fbfedcc 100644 --- a/src/drivers/rc/dsm_rc/DsmRc.cpp +++ b/src/drivers/rc/dsm_rc/DsmRc.cpp @@ -399,6 +399,7 @@ This module does Spektrum DSM RC input parsing. )DESCR_STR"); PRINT_MODULE_USAGE_NAME("dsm_rc", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("radio_control"); PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_PARAM_STRING('d', "/dev/ttyS3", "", "RC device", true); diff --git a/src/drivers/rc/ghst_rc/GhstRc.cpp b/src/drivers/rc/ghst_rc/GhstRc.cpp index 1aa3c23e89..aa4525d64c 100644 --- a/src/drivers/rc/ghst_rc/GhstRc.cpp +++ b/src/drivers/rc/ghst_rc/GhstRc.cpp @@ -292,6 +292,7 @@ This module does Ghost (GHST) RC input parsing. )DESCR_STR"); PRINT_MODULE_USAGE_NAME("ghst_rc", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("radio_control"); PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_PARAM_STRING('d', "/dev/ttyS3", "", "RC device", true); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); diff --git a/src/drivers/rc/sbus_rc/SbusRc.cpp b/src/drivers/rc/sbus_rc/SbusRc.cpp index 12d57da141..2ebdcfa207 100644 --- a/src/drivers/rc/sbus_rc/SbusRc.cpp +++ b/src/drivers/rc/sbus_rc/SbusRc.cpp @@ -302,6 +302,7 @@ This module does SBUS RC input parsing. )DESCR_STR"); PRINT_MODULE_USAGE_NAME("sbus_rc", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("radio_control"); PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_PARAM_STRING('d', "/dev/ttyS3", "", "RC device", true); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); diff --git a/src/drivers/rc_input/RCInput.cpp b/src/drivers/rc_input/RCInput.cpp index a86ade0ad0..214853f647 100644 --- a/src/drivers/rc_input/RCInput.cpp +++ b/src/drivers/rc_input/RCInput.cpp @@ -1018,6 +1018,7 @@ This module does the RC input parsing and auto-selecting the method. Supported m )DESCR_STR"); PRINT_MODULE_USAGE_NAME("rc_input", "driver"); + PRINT_MODULE_USAGE_SUBCATEGORY("radio_control"); PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_PARAM_STRING('d', "/dev/ttyS3", "", "RC device", true); diff --git a/src/drivers/uavcan/actuators/esc.cpp b/src/drivers/uavcan/actuators/esc.cpp index 12f5d8600b..3eb07e08d5 100644 --- a/src/drivers/uavcan/actuators/esc.cpp +++ b/src/drivers/uavcan/actuators/esc.cpp @@ -39,7 +39,9 @@ #include "esc.hpp" #include +#include #include +#include #define MOTOR_BIT(x) (1<<(x)) @@ -66,6 +68,12 @@ UavcanEscController::init() _esc_status_pub.advertise(); + int32_t iface_mask{0xFF}; + + if (param_get(param_find("UAVCAN_ESC_IFACE"), &iface_mask) == OK) { + _uavcan_pub_raw_cmd.getTransferSender().setIfaceMask(iface_mask); + } + return res; } @@ -140,7 +148,7 @@ UavcanEscController::esc_status_sub_cb(const uavcan::ReceivedDataStructure=3' config_parameters: diff --git a/src/drivers/uavcan/uavcan_main.cpp b/src/drivers/uavcan/uavcan_main.cpp index ad39a943a7..05fd6201d2 100644 --- a/src/drivers/uavcan/uavcan_main.cpp +++ b/src/drivers/uavcan/uavcan_main.cpp @@ -546,7 +546,7 @@ UavcanNode::init(uavcan::NodeID node_id, UAVCAN_DRIVER::BusEvent &bus_events) #endif -#if defined(CONFIG_UAVCAN_SAFETY_CONTROLLER) +#if defined(CONFIG_UAVCAN_SAFETY_STATE_CONTROLLER) ret = _safety_state_controller.init(); if (ret < 0) { diff --git a/src/lib/dataman_client/DatamanClient.cpp b/src/lib/dataman_client/DatamanClient.cpp index c2c0ec995f..0e10b22d11 100644 --- a/src/lib/dataman_client/DatamanClient.cpp +++ b/src/lib/dataman_client/DatamanClient.cpp @@ -153,7 +153,6 @@ bool DatamanClient::readSync(dm_item_t item, uint32_t index, uint8_t *buffer, ui return false; } - bool success = false; hrt_abstime timestamp = hrt_absolute_time(); dataman_request_s request; @@ -165,7 +164,7 @@ bool DatamanClient::readSync(dm_item_t item, uint32_t index, uint8_t *buffer, ui request.item = static_cast(item); dataman_response_s response{}; - success = syncHandler(request, response, timestamp, timeout); + bool success = syncHandler(request, response, timestamp, timeout); if (success) { @@ -190,7 +189,6 @@ bool DatamanClient::writeSync(dm_item_t item, uint32_t index, uint8_t *buffer, u return false; } - bool success = false; hrt_abstime timestamp = hrt_absolute_time(); dataman_request_s request; @@ -204,7 +202,7 @@ bool DatamanClient::writeSync(dm_item_t item, uint32_t index, uint8_t *buffer, u memcpy(request.data, buffer, length); dataman_response_s response{}; - success = syncHandler(request, response, timestamp, timeout); + bool success = syncHandler(request, response, timestamp, timeout); if (success) { @@ -221,7 +219,6 @@ bool DatamanClient::writeSync(dm_item_t item, uint32_t index, uint8_t *buffer, u bool DatamanClient::clearSync(dm_item_t item, hrt_abstime timeout) { - bool success = false; hrt_abstime timestamp = hrt_absolute_time(); dataman_request_s request; @@ -231,7 +228,7 @@ bool DatamanClient::clearSync(dm_item_t item, hrt_abstime timeout) request.item = static_cast(item); dataman_response_s response{}; - success = syncHandler(request, response, timestamp, timeout); + bool success = syncHandler(request, response, timestamp, timeout); if (success) { diff --git a/src/lib/fw_performance_model/PerformanceModel.cpp b/src/lib/fw_performance_model/PerformanceModel.cpp index 6fb315cb89..e946347a44 100644 --- a/src/lib/fw_performance_model/PerformanceModel.cpp +++ b/src/lib/fw_performance_model/PerformanceModel.cpp @@ -144,17 +144,18 @@ float PerformanceModel::getCalibratedTrimAirspeed() const return math::constrain(_param_fw_airspd_trim.get() * sqrtf(getWeightRatio()), _param_fw_airspd_min.get(), _param_fw_airspd_max.get()); } -float PerformanceModel::getMinimumCalibratedAirspeed(float load_factor) const +float PerformanceModel::getMinimumCalibratedAirspeed(float load_factor, float flaps_setpoint) const { - load_factor = math::max(load_factor, FLT_EPSILON); - return _param_fw_airspd_min.get() * sqrtf(getWeightRatio() * load_factor); + const float airspeed_flap_factor = math::lerp(1.f, _param_fw_airspd_flp_sc.get(), flaps_setpoint); + return (_param_fw_airspd_min.get() * airspeed_flap_factor) * sqrtf(getWeightRatio() * load_factor); } -float PerformanceModel::getCalibratedStallAirspeed(float load_factor) const +float PerformanceModel::getCalibratedStallAirspeed(float load_factor, float flaps_setpoint) const { load_factor = math::max(load_factor, FLT_EPSILON); - return _param_fw_airspd_stall.get() * sqrtf(getWeightRatio() * load_factor); + const float airspeed_flap_factor = math::lerp(1.f, _param_fw_airspd_flp_sc.get(), flaps_setpoint); + return (_param_fw_airspd_stall.get() * airspeed_flap_factor) * sqrtf(getWeightRatio() * load_factor); } float PerformanceModel::getMaximumCalibratedAirspeed() const diff --git a/src/lib/fw_performance_model/PerformanceModel.hpp b/src/lib/fw_performance_model/PerformanceModel.hpp index fbdd8693c2..dece1bb3e0 100644 --- a/src/lib/fw_performance_model/PerformanceModel.hpp +++ b/src/lib/fw_performance_model/PerformanceModel.hpp @@ -94,11 +94,12 @@ public: float getCalibratedTrimAirspeed() const; /** - * Get the minimum airspeed compensated for weight and load factor due to bank angle. + * Get the minimum airspeed compensated for weight, load factor due to bank angle and flaps. * @param load_factor due to banking + * @param flaps_setpoint Flaps setpoint, normalized in range [0,1] * @return calibrated minimum airspeed in m/s */ - float getMinimumCalibratedAirspeed(float load_factor = 1.0f) const; + float getMinimumCalibratedAirspeed(float load_factor, float flaps_setpoint) const; /** * Get the maximum airspeed. @@ -109,9 +110,10 @@ public: /** * get the stall airspeed compensated for load factor due to bank angle. * @param load_factor load factor due to banking + * @param flaps_setpoint Flaps setpoint, normalized in range [0,1] * @return calibrated stall airspeed in m/s */ - float getCalibratedStallAirspeed(float load_factor) const; + float getCalibratedStallAirspeed(float load_factor, float flaps_setpoint) const; /** * Run some checks on parameters and detect unfeasible combinations. @@ -134,7 +136,9 @@ private: (ParamFloat) _param_fw_thr_max, (ParamFloat) _param_fw_thr_min, (ParamFloat) _param_fw_thr_aspd_min, - (ParamFloat) _param_fw_thr_aspd_max) + (ParamFloat) _param_fw_thr_aspd_max, + (ParamFloat) _param_fw_airspd_flp_sc + ) /** * Get the sea level trim throttle for a given calibrated airspeed setpoint. diff --git a/src/lib/fw_performance_model/performance_model_params.c b/src/lib/fw_performance_model/performance_model_params.c index 0c39d2ed39..2223f60139 100644 --- a/src/lib/fw_performance_model/performance_model_params.c +++ b/src/lib/fw_performance_model/performance_model_params.c @@ -212,3 +212,16 @@ PARAM_DEFINE_FLOAT(FW_AIRSPD_MIN, 10.0f); * @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/mixer_module/functions/FunctionICEngineControl.hpp b/src/lib/mixer_module/functions/FunctionICEngineControl.hpp index 0609f5cc94..6888384fce 100644 --- a/src/lib/mixer_module/functions/FunctionICEngineControl.hpp +++ b/src/lib/mixer_module/functions/FunctionICEngineControl.hpp @@ -55,6 +55,7 @@ public: internal_combustion_engine_control_s internal_combustion_engine_control; // map [0, 1] to [-1, 1] which is the interface for non-motor PWM channels + // NAN is mapped to disarmed if (_internal_combustion_engine_control_sub.update(&internal_combustion_engine_control)) { _data[0] = internal_combustion_engine_control.ignition_on * 2.f - 1.f; _data[1] = internal_combustion_engine_control.throttle_control * 2.f - 1.f; diff --git a/src/lib/npfg/AirspeedDirectionController.cpp b/src/lib/npfg/AirspeedDirectionController.cpp new file mode 100644 index 0000000000..621587f47e --- /dev/null +++ b/src/lib/npfg/AirspeedDirectionController.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "AirspeedDirectionController.hpp" +#include +#include + +using matrix::Vector2f; +AirspeedDirectionController::AirspeedDirectionController() +{ + // Constructor +} + +float AirspeedDirectionController::controlHeading(const float heading_sp, const float heading, + const float airspeed) const +{ + + const Vector2f airspeed_vector = Vector2f{cosf(heading), sinf(heading)} * airspeed; + const Vector2f airspeed_sp_vector_unit = Vector2f{cosf(heading_sp), sinf(heading_sp)}; + + const float dot_air_vel_err = airspeed_vector.dot(airspeed_sp_vector_unit); + const float cross_air_vel_err = airspeed_vector.cross(airspeed_sp_vector_unit); + + if (dot_air_vel_err < 0.0f) { + // hold max lateral acceleration command above 90 deg heading error + return p_gain_ * ((cross_air_vel_err < 0.0f) ? -airspeed : airspeed); + + } else { + // airspeed/airspeed_ref is used to scale any incremented airspeed reference back to the current airspeed + // for acceleration commands in a "feedback" sense (i.e. at the current vehicle airspeed) + // todo use airspeed_ref or adapt comment + return p_gain_ * cross_air_vel_err; + } +} diff --git a/src/lib/npfg/AirspeedDirectionController.hpp b/src/lib/npfg/AirspeedDirectionController.hpp new file mode 100644 index 0000000000..d0111729ca --- /dev/null +++ b/src/lib/npfg/AirspeedDirectionController.hpp @@ -0,0 +1,75 @@ +/**************************************************************************** + * + * 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 AirspeedDirectionController.hpp + * + * Original Author: Thomas Stastny + * Refactored to better suite new control API: Roman Bapst + * + * * Notes: + * - The wind estimate should be dynamic enough to capture ~1-2 second length gusts, + * Otherwise the performance will suffer. + * + * Acknowledgements and References: + * + * The logic is mostly based on [1] and Paper III of [2]. + * TODO: Concise, up to date documentation and stability analysis for the following + * implementation. + * + * [1] T. Stastny and R. Siegwart. "On Flying Backwards: Preventing Run-away of + * Small, Low-speed, Fixed-wing UAVs in Strong Winds". IEEE International Conference + * on Intelligent Robots and Systems (IROS). 2019. + * https://arxiv.org/pdf/1908.01381.pdf + * [2] T. Stastny. "Low-Altitude Control and Local Re-Planning Strategies for Small + * Fixed-Wing UAVs". Doctoral Thesis, ETH Zürich. 2020. + * https://tstastny.github.io/pdf/tstastny_phd_thesis_wcover.pdf + */ + +#ifndef PX4_AIRSPEEDDIRECTIONONTROLLER_HPP +#define PX4_AIRSPEEDDIRECTIONONTROLLER_HPP + +class AirspeedDirectionController +{ +public: + + AirspeedDirectionController(); + + + float controlHeading(const float heading_sp, const float heading, const float airspeed) const; + +private: + float p_gain_{0.8885f}; // proportional gain (computed from period_ and damping_) [rad/s] +}; + +#endif //PX4_AIRSPEEDDIRECTIONONTROLLER_HPP diff --git a/src/lib/npfg/CMakeLists.txt b/src/lib/npfg/CMakeLists.txt index 739e6af155..6e34a9a590 100644 --- a/src/lib/npfg/CMakeLists.txt +++ b/src/lib/npfg/CMakeLists.txt @@ -32,8 +32,13 @@ ############################################################################ px4_add_library(npfg - npfg.cpp - npfg.hpp + DirectionalGuidance.cpp + CourseToAirspeedRefMapper.cpp + AirspeedDirectionController.cpp + DirectionalGuidance.hpp + CourseToAirspeedRefMapper.hpp + AirspeedDirectionController.hpp ) target_link_libraries(npfg PRIVATE geo) +px4_add_unit_gtest(SRC NpfgTest.cpp LINKLIBS npfg) diff --git a/src/lib/npfg/CourseToAirspeedRefMapper.cpp b/src/lib/npfg/CourseToAirspeedRefMapper.cpp new file mode 100644 index 0000000000..170348f139 --- /dev/null +++ b/src/lib/npfg/CourseToAirspeedRefMapper.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "CourseToAirspeedRefMapper.hpp" +using matrix::Vector2f; + +float +CourseToAirspeedRefMapper::mapCourseSetpointToHeadingSetpoint(const float bearing_setpoint, const Vector2f &wind_vel, + float airspeed_sp) const +{ + const Vector2f bearing_vector = Vector2f{cosf(bearing_setpoint), sinf(bearing_setpoint)}; + const float wind_cross_bearing = wind_vel.cross(bearing_vector); + const float wind_dot_bearing = wind_vel.dot(bearing_vector); + + Vector2f air_vel_ref; + + if (bearingIsFeasible(wind_cross_bearing, wind_dot_bearing, airspeed_sp, wind_vel.norm())) { + + const float airsp_dot_bearing = projectAirspOnBearing(airspeed_sp, wind_cross_bearing); + air_vel_ref = solveWindTriangle(wind_cross_bearing, airsp_dot_bearing, bearing_vector); + + } else { + air_vel_ref = infeasibleAirVelRef(wind_vel, bearing_vector, wind_vel.norm(), airspeed_sp); + } + + return atan2f(air_vel_ref(1), air_vel_ref(0)); +} + +float +CourseToAirspeedRefMapper::getMinAirspeedForCurrentBearing(const float bearing_setpoint, const Vector2f &wind_vel, + float airspeed_max, float min_ground_speed) const +{ + const Vector2f bearing_vector = Vector2f{cosf(bearing_setpoint), sinf(bearing_setpoint)}; + const float wind_cross_bearing = wind_vel.cross(bearing_vector); + const float wind_dot_bearing = wind_vel.dot(bearing_vector); + + const bool wind_along_bearing_is_below_min_ground_speed = min_ground_speed > wind_dot_bearing; + + float airspeed_min = 0.f; // return 0 if no min airspeed is necessary + + if (wind_along_bearing_is_below_min_ground_speed) { + // airspeed required to achieve minimum ground speed along bearing vector (5.18) + airspeed_min = sqrtf((min_ground_speed - wind_dot_bearing) * (min_ground_speed - wind_dot_bearing) + + wind_cross_bearing * wind_cross_bearing); + + } + + return math::min(airspeed_min, airspeed_max); +} + +float CourseToAirspeedRefMapper::projectAirspOnBearing(const float airspeed_true, const float wind_cross_bearing) const +{ + // NOTE: wind_cross_bearing must be less than airspeed to use this function + // it is assumed that bearing feasibility is checked and found feasible (e.g. bearingIsFeasible() = true) prior to entering this method + // otherwise the return will be erroneous + + // 3.5.8 + return sqrtf(math::max(airspeed_true * airspeed_true - wind_cross_bearing * wind_cross_bearing, 0.0f)); +} + +int CourseToAirspeedRefMapper::bearingIsFeasible(const float wind_cross_bearing, const float wind_dot_bearing, + const float airspeed, const float wind_speed) const +{ + return (fabsf(wind_cross_bearing) < airspeed) && ((wind_dot_bearing > 0.0f) || (wind_speed < airspeed)); +} + +matrix::Vector2f +CourseToAirspeedRefMapper::solveWindTriangle(const float wind_cross_bearing, const float airsp_dot_bearing, + const Vector2f &bearing_vec) const +{ + // essentially a 2D rotation with the speeds (magnitudes) baked in + return Vector2f{airsp_dot_bearing * bearing_vec(0) - wind_cross_bearing * bearing_vec(1), + wind_cross_bearing * bearing_vec(0) + airsp_dot_bearing * bearing_vec(1)}; +} + +matrix::Vector2f CourseToAirspeedRefMapper::infeasibleAirVelRef(const Vector2f &wind_vel, const Vector2f &bearing_vec, + const float wind_speed, const float airspeed) const +{ + // NOTE: wind speed must be greater than airspeed, and airspeed must be greater than zero to use this function + // it is assumed that bearing feasibility is checked and found infeasible (e.g. bearingIsFeasible() = false) prior to entering this method + // otherwise the normalization of the air velocity vector could have a division by zero + Vector2f air_vel_ref = sqrtf(math::max(wind_speed * wind_speed - airspeed * airspeed, 0.0f)) * bearing_vec - wind_vel; + return air_vel_ref.normalized() * airspeed; +} diff --git a/src/lib/npfg/CourseToAirspeedRefMapper.hpp b/src/lib/npfg/CourseToAirspeedRefMapper.hpp new file mode 100644 index 0000000000..65d8e7ae81 --- /dev/null +++ b/src/lib/npfg/CourseToAirspeedRefMapper.hpp @@ -0,0 +1,124 @@ +/**************************************************************************** + * + * 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 CourseToAirspeedRefMapper.hpp + * + * Original Author: Thomas Stastny + * Refactored to better suite new control API: Roman Bapst + * + * * Notes: + * - The wind estimate should be dynamic enough to capture ~1-2 second length gusts, + * Otherwise the performance will suffer. + * + * Acknowledgements and References: + * + * The logic is mostly based on [1] and Paper III of [2]. + * TODO: Concise, up to date documentation and stability analysis for the following + * implementation. + * + * [1] T. Stastny and R. Siegwart. "On Flying Backwards: Preventing Run-away of + * Small, Low-speed, Fixed-wing UAVs in Strong Winds". IEEE International Conference + * on Intelligent Robots and Systems (IROS). 2019. + * https://arxiv.org/pdf/1908.01381.pdf + * [2] T. Stastny. "Low-Altitude Control and Local Re-Planning Strategies for Small + * Fixed-Wing UAVs". Doctoral Thesis, ETH Zürich. 2020. + * https://tstastny.github.io/pdf/tstastny_phd_thesis_wcover.pdf + */ + +#ifndef PX4_COURSETOAIRSPEEDREFMAPPER_HPP +#define PX4_COURSETOAIRSPEEDREFMAPPER_HPP + + +#include +#include + +class CourseToAirspeedRefMapper +{ +public: + + CourseToAirspeedRefMapper() {}; + + ~CourseToAirspeedRefMapper() = default; + + float mapCourseSetpointToHeadingSetpoint(const float bearing_setpoint, + const matrix::Vector2f &wind_vel, float airspeed_sp) const; + float getMinAirspeedForCurrentBearing(const float bearing_setpoint, + const matrix::Vector2f &wind_vel, float max_airspeed, float min_ground_speed) const; + +private: + /* + * Projection of the air velocity vector onto the bearing line considering + * a connected wind triangle. + * + * @param[in] airspeed Vehicle true airspeed setpoint [m/s] + * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] + * @return Projection of air velocity vector on bearing vector [m/s] + */ + float projectAirspOnBearing(const float airspeed, const float wind_cross_bearing) const; + /* + * Check for binary bearing feasibility. + * + * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] + * @param[in] wind_dot_bearing 2D dot product of wind velocity and bearing vector [m/s] + * @param[in] airspeed Vehicle true airspeed [m/s] + * @param[in] wind_speed Wind speed [m/s] + * @return Binary bearing feasibility: 1 if feasible, 0 if infeasible + */ + int bearingIsFeasible(const float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, + const float wind_speed) const; + /* + * Air velocity solution for a given wind velocity and bearing vector assuming + * a "high speed" (not backwards) solution in the excess wind case. + * + * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] + * @param[in] airsp_dot_bearing 2D dot product of air velocity (solution) and bearing vector [m/s] + * @param[in] bearing_vec Bearing vector + * @return Air velocity reference vector [m/s] + */ + matrix::Vector2f solveWindTriangle(const float wind_cross_bearing, const float airsp_dot_bearing, + const matrix::Vector2f &bearing_vec) const; + /* + * Air velocity solution for an infeasible bearing. + * + * @param[in] wind_vel Wind velocity vector [m/s] + * @param[in] bearing_vec Bearing vector + * @param[in] wind_speed Wind speed [m/s] + * @param[in] airspeed Vehicle true airspeed [m/s] + * @return Air velocity vector [m/s] + */ + matrix::Vector2f infeasibleAirVelRef(const matrix::Vector2f &wind_vel, const matrix::Vector2f &bearing_vec, + const float wind_speed, const float airspeed) const; +}; + +#endif //PX4_COURSETOAIRSPEEDREFMAPPER_HPP diff --git a/src/lib/npfg/DirectionalGuidance.cpp b/src/lib/npfg/DirectionalGuidance.cpp new file mode 100644 index 0000000000..cd1f7aef93 --- /dev/null +++ b/src/lib/npfg/DirectionalGuidance.cpp @@ -0,0 +1,315 @@ +/**************************************************************************** + * + * 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 DirectionalGuidance.cpp + */ +#include "DirectionalGuidance.hpp" +using matrix::Vector2d; +using matrix::Vector2f; + +DirectionalGuidance::DirectionalGuidance() +{ + +} + +DirectionalGuidanceOutput +DirectionalGuidance::guideToPath(const Vector2f &curr_pos_local, const Vector2f &ground_vel, const Vector2f &wind_vel, + const Vector2f &unit_path_tangent, const Vector2f &position_on_path, + const float path_curvature) +{ + const float ground_speed = ground_vel.norm(); + + const Vector2f air_vel = ground_vel - wind_vel; + const float airspeed = air_vel.norm(); + + const float wind_speed = wind_vel.norm(); + + const Vector2f path_pos_to_vehicle{curr_pos_local - position_on_path}; + signed_track_error_ = unit_path_tangent.cross(path_pos_to_vehicle); + + // on-track wind triangle projections + const float wind_cross_upt = wind_vel.cross(unit_path_tangent); + const float wind_dot_upt = wind_vel.dot(unit_path_tangent); + + // calculate the bearing feasibility on the track at the current closest point + feas_on_track_ = bearingFeasibility(wind_cross_upt, wind_dot_upt, airspeed, wind_speed); + + const float track_error = fabsf(signed_track_error_); + + // update control parameters considering upper and lower stability bounds (if enabled) + // must be called before trackErrorBound() as it updates time_const_ + adapted_period_ = adaptPeriod(ground_speed, airspeed, wind_speed, track_error, + path_curvature, wind_vel, unit_path_tangent, feas_on_track_); + const float time_const = timeConst(adapted_period_, damping_); + + // track error bound is dynamic depending on ground speed + track_error_bound_ = trackErrorBound(ground_speed, time_const); + const float normalized_track_error = normalizedTrackError(track_error, track_error_bound_); + + // look ahead angle based solely on track proximity + const float look_ahead_ang = lookAheadAngle(normalized_track_error); + + track_proximity_ = trackProximity(look_ahead_ang); + + bearing_vec_ = bearingVec(unit_path_tangent, look_ahead_ang, signed_track_error_); + + // wind triangle projections + const float wind_cross_bearing = wind_vel.cross(bearing_vec_); + const float wind_dot_bearing = wind_vel.dot(bearing_vec_); + + // continuous representation of the bearing feasibility + feas_ = bearingFeasibility(wind_cross_bearing, wind_dot_bearing, airspeed, wind_speed); + + // we consider feasibility of both the current bearing as well as that on the track at the current closest point + const float feas_combined = feas_ * feas_on_track_; + // lateral acceleration needed to stay on curved track (assuming no heading error) + lateral_accel_ff_ = lateralAccelFF(unit_path_tangent, ground_vel, wind_dot_upt, + wind_cross_upt, airspeed, wind_speed, signed_track_error_, path_curvature) * feas_combined * track_proximity_; + course_sp_ = atan2f(bearing_vec_(1), bearing_vec_(0)); + + return DirectionalGuidanceOutput{.course_setpoint = course_sp_, + .lateral_acceleration_feedforward = lateral_accel_ff_}; +} + +float DirectionalGuidance::adaptPeriod(const float ground_speed, const float airspeed, const float wind_speed, + const float track_error, const float path_curvature, const Vector2f &wind_vel, + const Vector2f &unit_path_tangent, const float feas_on_track) const +{ + float period = period_; + const float air_turn_rate = fabsf(path_curvature * airspeed); + const float wind_factor = windFactor(airspeed, wind_speed); + + if (en_period_lb_ && roll_time_const_ > NPFG_EPSILON) { + // lower bound for period not considering path curvature + const float period_lb_zero_curvature = periodLowerBound(0.0f, wind_factor, feas_on_track) * period_safety_factor_; + + // lower bound for period *considering path curvature + float period_lb = periodLowerBound(air_turn_rate, wind_factor, feas_on_track) * period_safety_factor_; + + // calculate the time constant and track error bound considering the zero + // curvature, lower-bounded period and subsequently recalculate the normalized + // track error + const float time_const = timeConst(period_lb_zero_curvature, damping_); + const float track_error_bound = trackErrorBound(ground_speed, time_const); + const float normalized_track_error = normalizedTrackError(track_error, track_error_bound); + + // calculate nominal track proximity with lower bounded time constant + // (only a numerical solution can find corresponding track proximity + // and adapted gains simultaneously) + const float look_ahead_ang = lookAheadAngle(normalized_track_error); + const float track_proximity = trackProximity(look_ahead_ang); + + // linearly ramp in curvature dependent lower bound with track proximity + period_lb = period_lb * track_proximity + (1.0f - track_proximity) * period_lb_zero_curvature; + + // lower bounded period + period = math::max(period_lb, period); + + // only allow upper bounding ONLY if lower bounding is enabled (is otherwise + // dangerous to allow period decrements without stability checks). + // NOTE: if the roll time constant is not accurately known, lower-bound + // checks may be too optimistic and reducing the period can still destabilize + // the system! enable this feature at your own risk. + if (en_period_ub_) { + + const float period_ub = periodUpperBound(air_turn_rate, wind_factor, feas_on_track); + + if (en_period_ub_ && PX4_ISFINITE(period_ub) && period > period_ub) { + // NOTE: if the roll time constant is not accurately known, reducing + // the period here can destabilize the system! + // enable this feature at your own risk! + + // upper bound the period (for track keeping stability), prefer lower bound if violated + const float period_adapted = math::max(period_lb, period_ub); + + // transition from the nominal period to the adapted period as we get + // closer to the track + period = period_adapted * track_proximity + (1.0f - track_proximity) * period; + } + } + } + + return period; +} + +float DirectionalGuidance::normalizedTrackError(const float track_error, const float track_error_bound) const +{ + return math::constrain(track_error / track_error_bound, 0.0f, 1.0f); +} + +float DirectionalGuidance::windFactor(const float airspeed, const float wind_speed) const +{ + // See [TODO: include citation] for definition/elaboration of this approximation. + if (wind_speed > airspeed || airspeed < NPFG_EPSILON) { + return 2.0f; + + } else { + return 2.0f * (1.0f - sqrtf(1.0f - math::min(1.0f, wind_speed / airspeed))); + } +} + +float DirectionalGuidance::periodUpperBound(const float air_turn_rate, const float wind_factor, + const float feas_on_track) const +{ + if (air_turn_rate * wind_factor > NPFG_EPSILON) { + // multiply air turn rate by feasibility on track to zero out when we anyway + // should not consider the curvature + return 4.0f * M_PI_F * damping_ / (air_turn_rate * wind_factor * feas_on_track); + } + + return INFINITY; +} + +float DirectionalGuidance::periodLowerBound(const float air_turn_rate, const float wind_factor, + const float feas_on_track) const +{ + // this method considers a "conservative" lower period bound, i.e. a constant + // worst case bound for any wind ratio, airspeed, and path curvature + + // the lower bound for zero curvature and no wind OR damping ratio < 0.5 + const float period_lb = M_PI_F * roll_time_const_ / damping_; + + if (air_turn_rate * wind_factor < NPFG_EPSILON || damping_ < 0.5f) { + return period_lb; + + } else { + // the lower bound for tracking a curved path in wind with damping ratio > 0.5 + const float period_windy_curved_damped = 4.0f * M_PI_F * roll_time_const_ * damping_; + + // blend the two together as the bearing on track becomes less feasible + return period_windy_curved_damped * feas_on_track + (1.0f - feas_on_track) * period_lb; + } +} + +float DirectionalGuidance::trackProximity(const float look_ahead_ang) const +{ + const float sin_look_ahead_ang = sinf(look_ahead_ang); + return sin_look_ahead_ang * sin_look_ahead_ang; +} + +float DirectionalGuidance::trackErrorBound(const float ground_speed, const float time_const) const +{ + if (ground_speed > 1.0f) { + return ground_speed * time_const; + + } else { + // limit bound to some minimum ground speed to avoid singularities in track + // error normalization. the following equation assumes ground speed minimum = 1.0 + return 0.5f * time_const * (ground_speed * ground_speed + 1.0f); + } +} + +float DirectionalGuidance::timeConst(const float period, const float damping) const +{ + return period * damping; +} + +float DirectionalGuidance::lookAheadAngle(const float normalized_track_error) const +{ + return M_PI_2_F * (normalized_track_error - 1.0f) * (normalized_track_error - 1.0f); +} + + +matrix::Vector2f DirectionalGuidance::bearingVec(const Vector2f &unit_path_tangent, const float look_ahead_ang, + const float signed_track_error) const +{ + const float cos_look_ahead_ang = cosf(look_ahead_ang); + const float sin_look_ahead_ang = sinf(look_ahead_ang); + + Vector2f unit_path_normal(-unit_path_tangent(1), unit_path_tangent(0)); // right handed 90 deg (clockwise) turn + Vector2f unit_track_error = -((signed_track_error < 0.0f) ? -1.0f : 1.0f) * unit_path_normal; + + return cos_look_ahead_ang * unit_track_error + sin_look_ahead_ang * unit_path_tangent; +} + +float +DirectionalGuidance::bearingFeasibility(float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, + const float wind_speed) const +{ + if (wind_dot_bearing < 0.0f) { + wind_cross_bearing = wind_speed; + + } else { + wind_cross_bearing = fabsf(wind_cross_bearing); + } + + float sin_arg = sinf(M_PI_F * 0.5f * math::constrain((airspeed - wind_cross_bearing) / AIRSPEED_BUFFER, 0.0f, 1.0f)); + return sin_arg * sin_arg; +} + +float DirectionalGuidance::lateralAccelFF(const Vector2f &unit_path_tangent, const Vector2f &ground_vel, + const float wind_dot_upt, const float wind_cross_upt, const float airspeed, + const float wind_speed, const float signed_track_error, + const float path_curvature) const +{ + // NOTE: all calculations within this function take place at the closet point + // on the path, as if the aircraft were already tracking the given path at + // this point with zero angular error. this allows us to evaluate curvature + // induced requirements for lateral acceleration incrementation and ramp them + // in with the track proximity and further consider the bearing feasibility + // in excess wind conditions (this is done external to this method). + + // path frame curvature is the instantaneous curvature at our current distance + // from the actual path (considering e.g. concentric circles emanating outward/inward) + const float path_frame_curvature = path_curvature / math::max(1.0f - path_curvature * signed_track_error, + fabsf(path_curvature) * MIN_RADIUS); + + // limit tangent ground speed to along track (forward moving) direction + const float tangent_ground_speed = math::max(ground_vel.dot(unit_path_tangent), 0.0f); + + const float path_frame_rate = path_frame_curvature * tangent_ground_speed; + + // speed ratio = projection of ground vel on track / projection of air velocity + // on track + const float speed_ratio = (1.0f + wind_dot_upt / math::max(projectAirspOnBearing(airspeed, wind_cross_upt), + NPFG_EPSILON)); + + // note the use of airspeed * speed_ratio as oppose to ground_speed^2 here -- + // the prior considers that we command lateral acceleration in the air mass + // relative frame while the latter does not + return airspeed * speed_ratio * path_frame_rate; +} + +float DirectionalGuidance::projectAirspOnBearing(const float airspeed, const float wind_cross_bearing) const +{ + // NOTE: wind_cross_bearing must be less than airspeed to use this function + // it is assumed that bearing feasibility is checked and found feasible (e.g. bearingIsFeasible() = true) prior to entering this method + // otherwise the return will be erroneous + return sqrtf(math::max(airspeed * airspeed - wind_cross_bearing * wind_cross_bearing, 0.0f)); +} + +float DirectionalGuidance::switchDistance(float wp_radius) const +{ + return math::min(wp_radius, track_error_bound_ * switch_distance_multiplier_); +} diff --git a/src/lib/npfg/npfg.hpp b/src/lib/npfg/DirectionalGuidance.hpp similarity index 51% rename from src/lib/npfg/npfg.hpp rename to src/lib/npfg/DirectionalGuidance.hpp index c36184ef96..691b1fd4dd 100644 --- a/src/lib/npfg/npfg.hpp +++ b/src/lib/npfg/DirectionalGuidance.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2021 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 @@ -32,13 +32,12 @@ ****************************************************************************/ /* - * @file npfg.hpp - * Implementation of a lateral-directional nonlinear path following guidance - * law with excess wind handling. Commands lateral acceleration and airspeed. + * @file DirectionalGuidance.hpp * - * @author Thomas Stastny + * Original Author: Thomas Stastny + * Refactored to better suite new control API: Roman Bapst * - * Notes: + * * Notes: * - The wind estimate should be dynamic enough to capture ~1-2 second length gusts, * Otherwise the performance will suffer. * @@ -57,50 +56,26 @@ * https://tstastny.github.io/pdf/tstastny_phd_thesis_wcover.pdf */ -#ifndef NPFG_H_ -#define NPFG_H_ - +#ifndef PX4_DIRECTIONALGUIDANCE_HPP +#define PX4_DIRECTIONALGUIDANCE_HPP #include #include -#include +struct DirectionalGuidanceOutput { + float course_setpoint{NAN}; + float lateral_acceleration_feedforward{NAN}; +}; -/* - * NPFG - * Lateral-directional nonlinear path following guidance logic with excess wind handling - */ -class NPFG +class DirectionalGuidance { - public: - /** - * @brief Can run - * - * Evaluation if all the necessary information are available such that npfg can produce meaningful results. - * - * @param[in] local_pos is the current vehicle local position uorb message - * @param[in] is_wind_valid flag if the wind estimation is valid - * @return estimate of certainty of the correct functionality of the npfg roll setpoint in [0, 1]. Can be used to define proper mitigation actions. - */ - float canRun(const vehicle_local_position_s &local_pos, bool is_wind_valid) const; - /* - * Computes the lateral acceleration and true airspeed references necessary to track - * a path in wind (including excess wind conditions). - * - * @param[in] curr_pos_local Current horizontal vehicle position in local coordinates [m] - * @param[in] ground_vel Vehicle ground velocity vector [m/s] - * @param[in] wind_vel Wind velocity vector [m/s] - * @param[in] unit_path_tangent Unit vector tangent to path at closest point - * in direction of path - * @param[in] position_on_path Horizontal point on the path to track described in local coordinates [m] - * @param[in] path_curvature Path curvature at closest point on track [m^-1] - */ - void guideToPath(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_vel, - const matrix::Vector2f &wind_vel, - const matrix::Vector2f &unit_path_tangent, const matrix::Vector2f &position_on_path, - const float path_curvature); + DirectionalGuidance(); + DirectionalGuidanceOutput guideToPath(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_vel, + const matrix::Vector2f &wind_vel, + const matrix::Vector2f &unit_path_tangent, const matrix::Vector2f &position_on_path, + const float path_curvature); /* * Set the nominal controller period [s]. */ @@ -122,42 +97,6 @@ public: */ void enablePeriodUB(const bool en) { en_period_ub_ = en; } - /* - * Enable minimum forward ground speed maintenance logic. - */ - void enableMinGroundSpeed(const bool en) { en_min_ground_speed_ = en; } - - /* - * Enable track keeping logic in excess wind conditions. - */ - void enableTrackKeeping(const bool en) { en_track_keeping_ = en; } - - /* - * Enable wind excess regulation. Disabling this param disables all airspeed - * reference incrementaion (airspeed reference will always be nominal). - */ - void enableWindExcessRegulation(const bool en) { en_wind_excess_regulation_ = en; } - - /* - * Set the minimum allowed forward ground speed [m/s]. - */ - void setMinGroundSpeed(float min_gsp) { min_gsp_desired_ = math::max(min_gsp, 0.0f); } - - /* - * Set the maximum value of the minimum forward ground speed command for track - * keeping (occurs at the track error boundary) [m/s]. - */ - void setMaxTrackKeepingMinGroundSpeed(float min_gsp) { min_gsp_track_keeping_max_ = math::max(min_gsp, 0.0f); } - - /* - * Set the nominal airspeed reference (true airspeed) [m/s]. - */ - void setAirspeedNom(float airsp) { airspeed_nom_ = math::max(airsp, 0.1f); } - - /* - * Set the maximum airspeed reference (true airspeed) [m/s]. - */ - void setAirspeedMax(float airsp) { airspeed_max_ = math::max(airsp, 0.1f); } /* * Set the autopilot roll response time constant [s]. @@ -165,88 +104,14 @@ public: void setRollTimeConst(float tc) { roll_time_const_ = tc; } /* - * Set the switch distance multiplier. - */ + * Set the switch distance multiplier. + */ void setSwitchDistanceMultiplier(float mult) { switch_distance_multiplier_ = math::max(mult, 0.1f); } /* * Set the period safety factor. */ void setPeriodSafetyFactor(float sf) { period_safety_factor_ = math::max(sf, 1.0f); } - - /* - * @return Controller proportional gain [rad/s] - */ - float getPGain() const { return p_gain_; } - - /* - * @return Controller time constant [s] - */ - float getTimeConst() const { return time_const_; } - - /* - * @return Adapted controller period [s] - */ - float getAdaptedPeriod() const { return adapted_period_; } - - /* - * @return Track error boundary [m] - */ - float getTrackErrorBound() const { return track_error_bound_; } - - /* - * @return Signed track error [m] - */ - float getTrackError() const { return signed_track_error_; } - - /* - * @return Airspeed reference [m/s] - */ - float getAirspeedRef() const { return airspeed_ref_; } - - /* - * @return Heading angle reference [rad] - */ - float getHeadingRef() const { return atan2f(air_vel_ref_(1), air_vel_ref_(0)); } - - /* - * @return Bearing angle [rad] - */ - float getBearing() const { return atan2f(bearing_vec_(1), bearing_vec_(0)); } - - /* - * @return Lateral acceleration command [m/s^2] - */ - float getLateralAccel() const { return lateral_accel_; } - - /* - * @return Feed-forward lateral acceleration command increment for tracking - * path curvature [m/s^2] - */ - float getLateralAccelFF() const { return lateral_accel_ff_; } - - /* - * @return Bearing feasibility [0, 1] - */ - float getBearingFeas() const { return feas_; } - - /* - * @return On-track bearing feasibility [0, 1] - */ - float getOnTrackBearingFeas() const { return feas_on_track_; } - - /* - * @return Minimum forward ground speed reference [m/s] - */ - float getMinGroundSpeedRef() const { return min_ground_speed_ref_; } - - /* - * [Copied directly from ECL_L1_Pos_Controller] - * - * Set the maximum roll angle output in radians - */ - void setRollLimit(float roll_lim_rad) { roll_lim_rad_ = roll_lim_rad; } - /* * [Copied directly from ECL_L1_Pos_Controller] * @@ -259,38 +124,21 @@ public: */ float switchDistance(float wp_radius) const; - /* - * [Copied directly from ECL_L1_Pos_Controller] - * - * Get roll angle setpoint for fixed wing. - * - * @return Roll angle (in NED frame) - */ - float getRollSetpoint() { return roll_setpoint_; } + float getCourseSetpoint() const { return course_sp_; } + float getLateralAccelerationSetpoint() const { return lateral_accel_ff_; } + float getBearingFeasibility() const { return feas_; } + float getBearingFeasibilityOnTrack() const { return feas_on_track_; } + float getSignedTrackError() const { return signed_track_error_; } + float getTrackErrorBound() const { return track_error_bound_; } + float getAdaptedPeriod() const { return adapted_period_; } private: - static constexpr float HORIZONTAL_EVH_FACTOR_COURSE_VALID{3.f}; ///< Factor of velocity standard deviation above which course calculation is considered good enough - static constexpr float HORIZONTAL_EVH_FACTOR_COURSE_INVALID{2.f}; ///< Factor of velocity standard deviation below which course calculation is considered unsafe - static constexpr float COS_HEADING_TRACK_ANGLE_NOT_PUSHED_BACK{0.09f}; ///< Cos of Heading to track angle below which it is assumed that the vehicle is not pushed back by the wind ~cos(85°) - static constexpr float COS_HEADING_TRACK_ANGLE_PUSHED_BACK{0.f}; ///< Cos of Heading to track angle above which it is assumed that the vehicle is pushed back by the wind - static constexpr float NPFG_EPSILON = 1.0e-6; // small number *bigger than machine epsilon static constexpr float MIN_RADIUS = 0.5f; // minimum effective radius (avoid singularities) [m] - static constexpr float NTE_FRACTION = 0.5f; // normalized track error fraction (must be > 0) - // ^determines at what fraction of the normalized track error the maximum track keeping forward ground speed demand is reached static constexpr float AIRSPEED_BUFFER = 1.5f; // airspeed buffer [m/s] (must be > 0) - // ^the size of the feasibility transition region at cross wind angle >= 90 deg. - // This must be non-zero to avoid jumpy airspeed incrementation while using wind - // excess handling logic. Similarly used as buffer region around zero airspeed. - - /* - * tuning - */ float period_{10.0f}; // nominal (desired) period -- user defined [s] float damping_{0.7071f}; // nominal (desired) damping ratio -- user defined - float p_gain_{0.8885f}; // proportional gain (computed from period_ and damping_) [rad/s] - float time_const_{7.071f}; // time constant (computed from period_ and damping_) [s] float adapted_period_{10.0f}; // auto-adapted period (if stability bounds enabled) [s] /* @@ -300,17 +148,9 @@ private: // guidance options bool en_period_lb_{true}; // enables automatic lower bound constraints on controller period bool en_period_ub_{true}; // enables automatic upper bound constraints on controller period (remains disabled if lower bound is disabled) - bool en_min_ground_speed_{true}; // the airspeed reference is incremented to sustain a user defined minimum forward ground speed - bool en_track_keeping_{false}; // the airspeed reference is incremented to return to the track and sustain zero ground velocity until excess wind subsides - bool en_wind_excess_regulation_{true}; // the airspeed reference is incremented to regulate the excess wind, but not overcome it ... - // ^disabling this parameter disables all other excess wind handling options, using only the nominal airspeed for reference // guidance settings - float airspeed_nom_{15.0f}; // nominal (desired) true airspeed reference (generally equivalent to cruise optimized airspeed) [m/s] - float airspeed_max_{20.0f}; // maximum true airspeed reference - the maximum achievable/allowed airspeed reference [m/s] float roll_time_const_{0.0f}; // autopilot roll response time constant [s] - float min_gsp_desired_{0.0f}; // user defined miminum desired forward ground speed [m/s] - float min_gsp_track_keeping_max_{5.0f}; // maximum, minimum forward ground speed demand from track keeping logic [m/s] // guidance parameters float switch_distance_multiplier_{0.32f}; // a value multiplied by the track error boundary resulting in a lower switch distance @@ -318,12 +158,8 @@ private: float period_safety_factor_{1.5f}; // multiplied by the minimum period for conservative lower bound /* - * internal guidance states - */ - - // speeds - float min_gsp_track_keeping_{0.0f}; // minimum forward ground speed demand from track keeping logic [m/s] - float min_ground_speed_ref_{0.0f}; // resultant minimum forward ground speed reference considering all active guidance logic [m/s] + * internal guidance states + */ //bearing feasibility float feas_{1.0f}; // continous representation of bearing feasibility in [0,1] (0=infeasible, 1=feasible) @@ -332,27 +168,23 @@ private: // track proximity float track_error_bound_{212.13f}; // the current ground speed dependent track error bound [m] float track_proximity_{0.0f}; // value in [0,1] indicating proximity to track, 0 = at track error boundary or beyond, 1 = on track - - // path following states float signed_track_error_{0.0f}; // signed track error [m] matrix::Vector2f bearing_vec_{matrix::Vector2f{1.0f, 0.0f}}; // bearing unit vector + float course_sp_{0.f}; // course setpoint [rad] + float lateral_accel_ff_{0.f}; // lateral acceleration feedforward [m/s^2] /* - * guidance outputs + * Cacluates a continuous representation of the bearing feasibility from [0,1]. + * 0 = infeasible, 1 = fully feasible, partial feasibility in between. + * + * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] + * @param[in] wind_dot_bearing 2D dot product of wind velocity and bearing vector [m/s] + * @param[in] airspeed Vehicle true airspeed [m/s] + * @param[in] wind_speed Wind speed [m/s] + * @return bearing feasibility */ - - float airspeed_ref_{15.0f}; // true airspeed reference [m/s] - matrix::Vector2f air_vel_ref_{matrix::Vector2f{15.0f, 0.0f}}; // true air velocity reference vector [m/s] - float lateral_accel_{0.0f}; // lateral acceleration reference [m/s^2] - float lateral_accel_ff_{0.0f}; // lateral acceleration demand to maintain path curvature [m/s^2] - - /* - * ECL_L1_Pos_Controller functionality - */ - - float roll_lim_rad_{math::radians(30.0f)}; // maximum roll angle [rad] - float roll_setpoint_{0.0f}; // current roll angle setpoint [rad] - + float bearingFeasibility(float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, + const float wind_speed) const; /* * Adapts the controller period considering user defined inputs, current flight * condition, path properties, and stability bounds. @@ -371,7 +203,6 @@ private: float adaptPeriod(const float ground_speed, const float airspeed, const float wind_speed, const float track_error, const float path_curvature, const matrix::Vector2f &wind_vel, const matrix::Vector2f &unit_path_tangent, const float feas_on_track) const; - /* * Returns normalized (unitless) and constrained track error [0,1]. * @@ -435,17 +266,6 @@ private: */ float trackErrorBound(const float ground_speed, const float time_const) const; - /* - * Calculates the required controller proportional gain to achieve the desired - * system period and damping ratio. NOTE: actual period and damping will vary - * when following paths with curvature in wind. - * - * @param[in] period Desired system period [s] - * @param[in] damping Desired system damping ratio - * @return Proportional gain [rad/s] - */ - float pGain(const float period, const float damping) const; - /* * Calculates the required controller time constant to achieve the desired * system period and damping ratio. NOTE: actual period and damping will vary @@ -465,7 +285,6 @@ private: * @return Look ahead angle [rad] */ float lookAheadAngle(const float normalized_track_error) const; - /* * Calculates the bearing vector and track proximity transitioning variable * from the look-ahead angle mapping. @@ -481,33 +300,6 @@ private: matrix::Vector2f bearingVec(const matrix::Vector2f &unit_path_tangent, const float look_ahead_ang, const float signed_track_error) const; - /* - * Calculates the minimum forward ground speed demand for minimum forward - * ground speed maintanence as well as track keeping logic. - * - * @param[in] normalized_track_error Normalized track error (track error / track error boundary) - * @param[in] feas Bearing feasibility - * @return Minimum forward ground speed demand [m/s] - */ - float minGroundSpeed(const float normalized_track_error, const float feas); - - /* - * Determines a reference air velocity *without curvature compensation, but - * including "optimal" true airspeed reference compensation in excess wind conditions. - * Nominal and maximum true airspeed member variables must be set before using this method. - * - * @param[in] wind_vel Wind velocity vector [m/s] - * @param[in] bearing_vec Bearing vector - * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] - * @param[in] wind_dot_bearing 2D dot product of wind velocity and bearing vector [m/s] - * @param[in] wind_speed Wind speed [m/s] - * @param[in] min_ground_speed Minimum commanded forward ground speed [m/s] - * @return Air velocity vector [m/s] - */ - matrix::Vector2f refAirVelocity(const matrix::Vector2f &wind_vel, const matrix::Vector2f &bearing_vec, - const float wind_cross_bearing, const float wind_dot_bearing, const float wind_speed, - const float min_ground_speed) const; - /* * Projection of the air velocity vector onto the bearing line considering * a connected wind triangle. @@ -517,58 +309,6 @@ private: * @return Projection of air velocity vector on bearing vector [m/s] */ float projectAirspOnBearing(const float airspeed, const float wind_cross_bearing) const; - - /* - * Check for binary bearing feasibility. - * - * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] - * @param[in] wind_dot_bearing 2D dot product of wind velocity and bearing vector [m/s] - * @param[in] airspeed Vehicle true airspeed [m/s] - * @param[in] wind_speed Wind speed [m/s] - * @return Binary bearing feasibility: 1 if feasible, 0 if infeasible - */ - int bearingIsFeasible(const float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, - const float wind_speed) const; - - /* - * Air velocity solution for a given wind velocity and bearing vector assuming - * a "high speed" (not backwards) solution in the excess wind case. - * - * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] - * @param[in] airsp_dot_bearing 2D dot product of air velocity (solution) and bearing vector [m/s] - * @param[in] bearing_vec Bearing vector - * @return Air velocity vector [m/s] - */ - matrix::Vector2f solveWindTriangle(const float wind_cross_bearing, const float airsp_dot_bearing, - const matrix::Vector2f &bearing_vec) const; - - - /* - * Air velocity solution for an infeasible bearing. - * - * @param[in] wind_vel Wind velocity vector [m/s] - * @param[in] bearing_vec Bearing vector - * @param[in] wind_speed Wind speed [m/s] - * @param[in] airspeed Vehicle true airspeed [m/s] - * @return Air velocity vector [m/s] - */ - matrix::Vector2f infeasibleAirVelRef(const matrix::Vector2f &wind_vel, const matrix::Vector2f &bearing_vec, - const float wind_speed, const float airspeed) const; - - - /* - * Cacluates a continuous representation of the bearing feasibility from [0,1]. - * 0 = infeasible, 1 = fully feasible, partial feasibility in between. - * - * @param[in] wind_cross_bearing 2D cross product of wind velocity and bearing vector [m/s] - * @param[in] wind_dot_bearing 2D dot product of wind velocity and bearing vector [m/s] - * @param[in] airspeed Vehicle true airspeed [m/s] - * @param[in] wind_speed Wind speed [m/s] - * @return bearing feasibility - */ - float bearingFeasibility(float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, - const float wind_speed) const; - /* * Calculates an additional feed-forward lateral acceleration demand considering * the path curvature. @@ -588,29 +328,6 @@ private: const float wind_dot_upt, const float wind_cross_upt, const float airspeed, const float wind_speed, const float signed_track_error, const float path_curvature) const; - /* - * Calculates a lateral acceleration demand from the heading error. - * (does not consider path curvature) - * - * @param[in] air_vel Vechile air velocity vector [m/s] - * @param[in] air_vel_ref Reference air velocity vector [m/s] - * @param[in] airspeed Vehicle true airspeed [m/s] - * @return Lateral acceleration demand [m/s^2] - */ - float lateralAccel(const matrix::Vector2f &air_vel, const matrix::Vector2f &air_vel_ref, - const float airspeed) const; +}; - /******************************************************************************* - * PX4 POSITION SETPOINT INTERFACE FUNCTIONS - */ - - /** - * [Copied directly from ECL_L1_Pos_Controller] - * - * Update roll angle setpoint. This will also apply slew rate limits if set. - */ - void updateRollSetpoint(); - -}; // class NPFG - -#endif // NPFG_H_ +#endif //PX4_DIRECTIONALGUIDANCE_HPP diff --git a/src/lib/npfg/NpfgTest.cpp b/src/lib/npfg/NpfgTest.cpp new file mode 100644 index 0000000000..767fcf69b9 --- /dev/null +++ b/src/lib/npfg/NpfgTest.cpp @@ -0,0 +1,368 @@ + +/**************************************************************************** + * + * 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 NPFG algorithm + * Run this test only using "make tests TESTFILTER=Npfg" + * + * + * NOTE: + * + * +******************************************************************/ + +#include +#include +#include + +using namespace matrix; + +TEST(NpfgTest, NoWind) +{ + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN + const Vector2f wind_vel(0.f, 0.f); + float bearing = 0.f; + float airspeed_max = 20.f; + float min_ground_speed = 5.0f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = _course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted); + + // THEN: expect heading due North with a min airspeed equal to min_ground_speed + EXPECT_NEAR(heading_setpoint, 0.f, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, min_ground_speed, FLT_EPSILON); + + // GIVEN: bearing due East + bearing = M_PI_2_F; + airspeed_max = 20.f; + min_ground_speed = 5.0f; + + // WHEN: we update bearing and airspeed magnitude augmentation + min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + + // THEN: expect heading due East with a min airspeed equal to min_ground_speed + EXPECT_NEAR(heading_setpoint, M_PI_2_F, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, min_ground_speed, FLT_EPSILON); +} + +TEST(NpfgTest, LightCrossWind) +{ + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN + const Vector2f wind_vel(0.f, 6.f); + float bearing = 0.f; + float airspeed_max = 20.f; + float min_ground_speed = 5.0f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading -0.4115168 with a min airspeed of to 7.8 (sqrt(25+36)) + EXPECT_NEAR(heading_setpoint, -0.4115168, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, 7.8f, 0.1f); + + // GIVEN: bearing due South + bearing = M_PI_F; + airspeed_max = 20.f; + min_ground_speed = 5.0f; + + // WHEN: we update bearing and airspeed magnitude augmentation + min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading of -2.73 and a min airspeed of 7.8 (sqrt(25+36)) + EXPECT_NEAR(heading_setpoint, -2.73f, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, 7.8f, 0.1f); +} + +TEST(NpfgTest, StrongHeadWind) +{ + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN: bearing due North and wind from the North + const Vector2f wind_vel(-16.f, 0.f); + float bearing = 0.f; + float airspeed_max = 25.f; + float min_ground_speed = 5.0f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading due North with a min airspeed equal to 16+min_ground_speed + EXPECT_NEAR(heading_setpoint, 0.f, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, 16 + min_ground_speed, 0.1f); +} + +TEST(NpfgTest, StrongTailWind) +{ + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN: bearing due East and wind from the West + const Vector2f wind_vel(0.f, 16.f); + float bearing = M_PI_2_F; + float airspeed_max = 25.f; + float min_ground_speed = 5.0f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading due East with a min airspeed at 0 + EXPECT_NEAR(heading_setpoint, M_PI_2_F, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, 0.f, 0.1f); +} + +TEST(NpfgTest, ExcessHeadWind) +{ + // TEST DESCRIPTION: infeasible bearing, with |wind| = |airspeed|. Align with wind + + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN: bearing due North and wind from the North + const Vector2f wind_vel(-25.f, 0.f); + float bearing = 0.f; + float airspeed_max = 25.f; + float min_ground_speed = 5.0f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading sp due North with a min airspeed equal to airspeed_max + EXPECT_NEAR(heading_setpoint, 0.f, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, airspeed_max, 0.1f); + + // WHEN: we increase the maximum airspeed + airspeed_max = 35.f; + + min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + // THEN: expect the minimum airspeed to be high enough to maintain minimum groundspeed + EXPECT_NEAR(min_airspeed_for_bearing, 30.f, 0.1f); + + // TEST DESCRIPTION: infeasible bearing, with |wind| = |airspeed|. Align with wind + + // GIVEN: bearing east + bearing = M_PI_F / 2.f; + airspeed_max = 25.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading sp due North with a min airspeed equal to airspeed_max + EXPECT_NEAR(heading_setpoint, 0.f, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, airspeed_max, 0.1f); + + // TEST DESCRIPTION: infeasible bearing, with |wind| > |airspeed|. Aircraft should have a heading between the target bearing + // and wind direction to minimize drift while still attempting to reach the bearing. + + // GIVEN: bearing NE + bearing = M_PI_F / 4.f; + airspeed_max = 20.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading setpoint to be between the target bearing and the cross wind + // & the minimum airspeed to be = maximum airspeed + EXPECT_TRUE((heading_setpoint > -M_PI_F / 2.f) && (heading_setpoint < bearing)); + EXPECT_NEAR(min_airspeed_for_bearing, airspeed_max, 0.1f); +} + +TEST(NpfgTest, ExcessTailWind) +{ + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN: bearing due East and wind from the West + const Vector2f wind_vel(0.f, 25.f); + float bearing = M_PI_2_F; + float airspeed_max = 25.f; + float min_ground_speed = 5.0f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + const float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading due East with a min airspeed equal to 0 + EXPECT_NEAR(heading_setpoint, M_PI_2_F, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, 0.f, 0.1f); +} + +TEST(NpfgTest, ExcessCrossWind) +{ + // TEST DESCRIPTION: infeasible bearing, with |wind| > |airspeed|. Aircraft should have a heading between the target bearing + // and wind direction to minimize drift while still attempting to reach the bearing. + + CourseToAirspeedRefMapper _course_to_airspeed; + + // GIVEN: bearing due North, strong wind due East + const Vector2f wind_vel(0, 30.f); + float bearing = 0.f; + float airspeed_max = 25.f; + float min_ground_speed = 5.f; + float airspeed_setpoint = 15.f; + + // WHEN: we update bearing and airspeed magnitude augmentation + float min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + float airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + float heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + // THEN: expect heading setpoint to be between the target bearing and the cross wind + // & the minimum airspeed to be = maximum airspeed + EXPECT_TRUE((heading_setpoint > -M_PI_F / 2.f) && (heading_setpoint < bearing)); + EXPECT_NEAR(min_airspeed_for_bearing, airspeed_max, 0.1f); + + // TEST DESCRIPTION: infeasible bearing, with |wind| = |airspeed|. Align with wind. + + airspeed_max = 30.f; + + min_airspeed_for_bearing = _course_to_airspeed.getMinAirspeedForCurrentBearing(bearing, wind_vel, + airspeed_max, min_ground_speed); + + airspeed_setpoint_adapted = math::constrain(airspeed_setpoint, min_airspeed_for_bearing, airspeed_max); + + heading_setpoint = matrix::wrap_pi(_course_to_airspeed.mapCourseSetpointToHeadingSetpoint(bearing, wind_vel, + airspeed_setpoint_adapted)); + + EXPECT_NEAR(heading_setpoint, -M_PI_F / 2.f, 0.01f); + EXPECT_NEAR(min_airspeed_for_bearing, airspeed_max, 0.1f); +} + +TEST(NpfgTest, HeadingControl) +{ + AirspeedDirectionController _airspeed_reference_controller; + const float p_gain = 0.8885f; + + // GIVEN: that we are already aligned with out heading setpoint + float heading_sp = 0.f; + float heading = 0.f; + float airspeed = 15.f; + + // WHEN: we compute the lateral acceleration setpoint + float lateral_acceleration_setpoint = _airspeed_reference_controller.controlHeading(heading_sp, heading, airspeed); + + // THEN: we expect 0 lateral acceleration + EXPECT_NEAR(lateral_acceleration_setpoint, 0.f, 0.01f); + + // GIVEN: current heading 45 deg NW + heading = - M_PI_F / 4.f; + + // WHEN: we compute the lateral acceleration setpoint + lateral_acceleration_setpoint = _airspeed_reference_controller.controlHeading(heading_sp, heading, airspeed); + + // THEN: we expect a positive lateral acceleration input. = Airspeed vector + // required to correct the difference between the setpoint and the current heading, + // scaled by p_gain. + EXPECT_NEAR(lateral_acceleration_setpoint, airspeed * sinf(heading_sp - heading) * p_gain, 0.01f); + + // GIVEN: current heading 180 (South) + heading = M_PI_F; + + // WHEN: we compute the lateral acceleration setpoint + lateral_acceleration_setpoint = _airspeed_reference_controller.controlHeading(heading_sp, heading, airspeed); + + // THEN: we we expect maxmimum lateral acceleration setpoint + EXPECT_NEAR(lateral_acceleration_setpoint, airspeed * p_gain, 0.01f); +} diff --git a/src/lib/npfg/npfg.cpp b/src/lib/npfg/npfg.cpp deleted file mode 100644 index fdcfa570b0..0000000000 --- a/src/lib/npfg/npfg.cpp +++ /dev/null @@ -1,508 +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 npfg.cpp - * Implementation of a lateral-directional nonlinear path following guidance - * law with excess wind handling. Commands lateral acceleration and airspeed. - * - * Authors and acknowledgements in header. - */ - -#include "npfg.hpp" -#include -#include -#include - -using matrix::Vector2d; -using matrix::Vector2f; - -float NPFG::canRun(const vehicle_local_position_s &local_pos, const bool is_wind_valid) const -{ - if (is_wind_valid) { - // If we have a valid wind estimate, npfg is able to handle all degenerated cases - return 1.f; - } - - // NPFG can run without wind information as long as the system is not flying backwards and has a minimal ground speed - // Check the minimal ground speed. if it is greater than twice the standard deviation, we assume that we can infer a valid track angle - const Vector2f ground_vel(local_pos.vx, local_pos.vy); - const float ground_speed(ground_vel.norm()); - const float low_ground_speed_factor(math::constrain((ground_speed - HORIZONTAL_EVH_FACTOR_COURSE_INVALID * - local_pos.evh) / ((HORIZONTAL_EVH_FACTOR_COURSE_VALID - HORIZONTAL_EVH_FACTOR_COURSE_INVALID)*local_pos.evh), - 0.f, 1.f)); - - // Check that the angle between heading and track is not off too much. if it is greater than 90° we will be pushed back from the wind and the npfg will propably give a roll command in the wrong direction. - const Vector2f heading_vector(matrix::Dcm2f(local_pos.heading)*Vector2f({1.f, 0.f})); - const Vector2f ground_vel_norm(ground_vel.normalized()); - const float flying_forward_factor(math::constrain((heading_vector.dot(ground_vel_norm) - - COS_HEADING_TRACK_ANGLE_PUSHED_BACK) / ((COS_HEADING_TRACK_ANGLE_NOT_PUSHED_BACK - - COS_HEADING_TRACK_ANGLE_PUSHED_BACK)), - 0.f, 1.f)); - - return flying_forward_factor * low_ground_speed_factor; -} - -void NPFG::guideToPath(const matrix::Vector2f &curr_pos_local, const Vector2f &ground_vel, const Vector2f &wind_vel, - const Vector2f &unit_path_tangent, - const Vector2f &position_on_path, const float path_curvature) -{ - const float ground_speed = ground_vel.norm(); - - const Vector2f air_vel = ground_vel - wind_vel; - const float airspeed = air_vel.norm(); - - const float wind_speed = wind_vel.norm(); - - const Vector2f path_pos_to_vehicle{curr_pos_local - position_on_path}; - signed_track_error_ = unit_path_tangent.cross(path_pos_to_vehicle); - - // on-track wind triangle projections - const float wind_cross_upt = wind_vel.cross(unit_path_tangent); - const float wind_dot_upt = wind_vel.dot(unit_path_tangent); - - // calculate the bearing feasibility on the track at the current closest point - feas_on_track_ = bearingFeasibility(wind_cross_upt, wind_dot_upt, airspeed, wind_speed); - - const float track_error = fabsf(signed_track_error_); - - // update control parameters considering upper and lower stability bounds (if enabled) - // must be called before trackErrorBound() as it updates time_const_ - adapted_period_ = adaptPeriod(ground_speed, airspeed, wind_speed, track_error, - path_curvature, wind_vel, unit_path_tangent, feas_on_track_); - p_gain_ = pGain(adapted_period_, damping_); - time_const_ = timeConst(adapted_period_, damping_); - - // track error bound is dynamic depending on ground speed - track_error_bound_ = trackErrorBound(ground_speed, time_const_); - const float normalized_track_error = normalizedTrackError(track_error, track_error_bound_); - - // look ahead angle based solely on track proximity - const float look_ahead_ang = lookAheadAngle(normalized_track_error); - - track_proximity_ = trackProximity(look_ahead_ang); - - bearing_vec_ = bearingVec(unit_path_tangent, look_ahead_ang, signed_track_error_); - - // wind triangle projections - const float wind_cross_bearing = wind_vel.cross(bearing_vec_); - const float wind_dot_bearing = wind_vel.dot(bearing_vec_); - - // continuous representation of the bearing feasibility - feas_ = bearingFeasibility(wind_cross_bearing, wind_dot_bearing, airspeed, wind_speed); - - // we consider feasibility of both the current bearing as well as that on the track at the current closest point - const float feas_combined = feas_ * feas_on_track_; - - min_ground_speed_ref_ = minGroundSpeed(normalized_track_error, feas_combined); - - // reference air velocity with directional feedforward effect for following - // curvature in wind and magnitude incrementation depending on minimum ground - // speed violations and/or high wind conditions in general - air_vel_ref_ = refAirVelocity(wind_vel, bearing_vec_, wind_cross_bearing, - wind_dot_bearing, wind_speed, min_ground_speed_ref_); - airspeed_ref_ = air_vel_ref_.norm(); - - // lateral acceleration demand based on heading error - const float lateral_accel = lateralAccel(air_vel, air_vel_ref_, airspeed); - - // lateral acceleration needed to stay on curved track (assuming no heading error) - lateral_accel_ff_ = lateralAccelFF(unit_path_tangent, ground_vel, wind_dot_upt, - wind_cross_upt, airspeed, wind_speed, signed_track_error_, path_curvature); - - // total lateral acceleration to drive aircaft towards track as well as account - // for path curvature. The full effect of the feed-forward acceleration is smoothly - // ramped in as the vehicle approaches the track and is further smoothly - // zeroed out as the bearing becomes infeasible. - lateral_accel_ = lateral_accel + feas_combined * track_proximity_ * lateral_accel_ff_; - - updateRollSetpoint(); -} // guideToPath - -float NPFG::adaptPeriod(const float ground_speed, const float airspeed, const float wind_speed, - const float track_error, const float path_curvature, const Vector2f &wind_vel, - const Vector2f &unit_path_tangent, const float feas_on_track) const -{ - float period = period_; - const float air_turn_rate = fabsf(path_curvature * airspeed); - const float wind_factor = windFactor(airspeed, wind_speed); - - if (en_period_lb_ && roll_time_const_ > NPFG_EPSILON) { - // lower bound for period not considering path curvature - const float period_lb_zero_curvature = periodLowerBound(0.0f, wind_factor, feas_on_track) * period_safety_factor_; - - // lower bound for period *considering path curvature - float period_lb = periodLowerBound(air_turn_rate, wind_factor, feas_on_track) * period_safety_factor_; - - // calculate the time constant and track error bound considering the zero - // curvature, lower-bounded period and subsequently recalculate the normalized - // track error - const float time_const = timeConst(period_lb_zero_curvature, damping_); - const float track_error_bound = trackErrorBound(ground_speed, time_const); - const float normalized_track_error = normalizedTrackError(track_error, track_error_bound); - - // calculate nominal track proximity with lower bounded time constant - // (only a numerical solution can find corresponding track proximity - // and adapted gains simultaneously) - const float look_ahead_ang = lookAheadAngle(normalized_track_error); - const float track_proximity = trackProximity(look_ahead_ang); - - // linearly ramp in curvature dependent lower bound with track proximity - period_lb = period_lb * track_proximity + (1.0f - track_proximity) * period_lb_zero_curvature; - - // lower bounded period - period = math::max(period_lb, period); - - // only allow upper bounding ONLY if lower bounding is enabled (is otherwise - // dangerous to allow period decrements without stability checks). - // NOTE: if the roll time constant is not accurately known, lower-bound - // checks may be too optimistic and reducing the period can still destabilize - // the system! enable this feature at your own risk. - if (en_period_ub_) { - - const float period_ub = periodUpperBound(air_turn_rate, wind_factor, feas_on_track); - - if (en_period_ub_ && PX4_ISFINITE(period_ub) && period > period_ub) { - // NOTE: if the roll time constant is not accurately known, reducing - // the period here can destabilize the system! - // enable this feature at your own risk! - - // upper bound the period (for track keeping stability), prefer lower bound if violated - const float period_adapted = math::max(period_lb, period_ub); - - // transition from the nominal period to the adapted period as we get - // closer to the track - period = period_adapted * track_proximity + (1.0f - track_proximity) * period; - } - } - } - - return period; -} // adaptPeriod - -float NPFG::normalizedTrackError(const float track_error, const float track_error_bound) const -{ - return math::constrain(track_error / track_error_bound, 0.0f, 1.0f); -} - -float NPFG::windFactor(const float airspeed, const float wind_speed) const -{ - // See [TODO: include citation] for definition/elaboration of this approximation. - if (wind_speed > airspeed || airspeed < NPFG_EPSILON) { - return 2.0f; - - } else { - return 2.0f * (1.0f - sqrtf(1.0f - math::min(1.0f, wind_speed / airspeed))); - } -} // windFactor - -float NPFG::periodUpperBound(const float air_turn_rate, const float wind_factor, const float feas_on_track) const -{ - if (air_turn_rate * wind_factor > NPFG_EPSILON) { - // multiply air turn rate by feasibility on track to zero out when we anyway - // should not consider the curvature - return 4.0f * M_PI_F * damping_ / (air_turn_rate * wind_factor * feas_on_track); - } - - return INFINITY; -} // periodUB - -float NPFG::periodLowerBound(const float air_turn_rate, const float wind_factor, const float feas_on_track) const -{ - // this method considers a "conservative" lower period bound, i.e. a constant - // worst case bound for any wind ratio, airspeed, and path curvature - - // the lower bound for zero curvature and no wind OR damping ratio < 0.5 - const float period_lb = M_PI_F * roll_time_const_ / damping_; - - if (air_turn_rate * wind_factor < NPFG_EPSILON || damping_ < 0.5f) { - return period_lb; - - } else { - // the lower bound for tracking a curved path in wind with damping ratio > 0.5 - const float period_windy_curved_damped = 4.0f * M_PI_F * roll_time_const_ * damping_; - - // blend the two together as the bearing on track becomes less feasible - return period_windy_curved_damped * feas_on_track + (1.0f - feas_on_track) * period_lb; - } -} // periodLB - -float NPFG::trackProximity(const float look_ahead_ang) const -{ - const float sin_look_ahead_ang = sinf(look_ahead_ang); - return sin_look_ahead_ang * sin_look_ahead_ang; -} // trackProximity - -float NPFG::trackErrorBound(const float ground_speed, const float time_const) const -{ - if (ground_speed > 1.0f) { - return ground_speed * time_const; - - } else { - // limit bound to some minimum ground speed to avoid singularities in track - // error normalization. the following equation assumes ground speed minimum = 1.0 - return 0.5f * time_const * (ground_speed * ground_speed + 1.0f); - } -} // trackErrorBound - -float NPFG::pGain(const float period, const float damping) const -{ - return 4.0f * M_PI_F * damping / period; -} // pGain - -float NPFG::timeConst(const float period, const float damping) const -{ - return period * damping; -} // timeConst - -float NPFG::lookAheadAngle(const float normalized_track_error) const -{ - return M_PI_2_F * (normalized_track_error - 1.0f) * (normalized_track_error - 1.0f); -} // lookAheadAngle - -Vector2f NPFG::bearingVec(const Vector2f &unit_path_tangent, const float look_ahead_ang, - const float signed_track_error) const -{ - const float cos_look_ahead_ang = cosf(look_ahead_ang); - const float sin_look_ahead_ang = sinf(look_ahead_ang); - - Vector2f unit_path_normal(-unit_path_tangent(1), unit_path_tangent(0)); // right handed 90 deg (clockwise) turn - Vector2f unit_track_error = -((signed_track_error < 0.0f) ? -1.0f : 1.0f) * unit_path_normal; - - return cos_look_ahead_ang * unit_track_error + sin_look_ahead_ang * unit_path_tangent; -} // bearingVec - -float NPFG::minGroundSpeed(const float normalized_track_error, const float feas) -{ - // minimum ground speed demand from track keeping logic - min_gsp_track_keeping_ = 0.0f; - - if (en_track_keeping_ && en_wind_excess_regulation_) { - // zero out track keeping speed increment when bearing is feasible - // maximum track keeping speed increment is applied until we are within - // a user defined fraction of the normalized track error - min_gsp_track_keeping_ = (1.0f - feas) * min_gsp_track_keeping_max_ * math::constrain( - normalized_track_error / NTE_FRACTION, 0.0f, - 1.0f); - } - - // minimum ground speed demand from minimum forward ground speed user setting - float min_gsp_desired = 0.0f; - - if (en_min_ground_speed_ && en_wind_excess_regulation_) { - min_gsp_desired = min_gsp_desired_; - } - - return math::max(min_gsp_track_keeping_, min_gsp_desired); -} // minGroundSpeed - -Vector2f NPFG::refAirVelocity(const Vector2f &wind_vel, const Vector2f &bearing_vec, - const float wind_cross_bearing, const float wind_dot_bearing, const float wind_speed, - const float min_ground_speed) const -{ - Vector2f air_vel_ref; - - if (min_ground_speed > wind_dot_bearing && (en_min_ground_speed_ || en_track_keeping_) && en_wind_excess_regulation_) { - // minimum ground speed and/or track keeping - - // airspeed required to achieve minimum ground speed along bearing vector - const float airspeed_min = sqrtf((min_ground_speed - wind_dot_bearing) * (min_ground_speed - wind_dot_bearing) + - wind_cross_bearing * wind_cross_bearing); - - if (airspeed_min > airspeed_max_) { - if (bearingIsFeasible(wind_cross_bearing, wind_dot_bearing, airspeed_max_, wind_speed)) { - // we will not maintain the minimum ground speed, but can still achieve the bearing at maximum airspeed - const float airsp_dot_bearing = projectAirspOnBearing(airspeed_max_, wind_cross_bearing); - air_vel_ref = solveWindTriangle(wind_cross_bearing, airsp_dot_bearing, bearing_vec); - - } else { - // bearing is maximally infeasible, employ mitigation law - air_vel_ref = infeasibleAirVelRef(wind_vel, bearing_vec, wind_speed, airspeed_max_); - } - - } else if (airspeed_min > airspeed_nom_) { - // the minimum ground speed is achievable within the nom - max airspeed range - // solve wind triangle with for air velocity reference with minimum airspeed - const float airsp_dot_bearing = projectAirspOnBearing(airspeed_min, wind_cross_bearing); - air_vel_ref = solveWindTriangle(wind_cross_bearing, airsp_dot_bearing, bearing_vec); - - } else { - // the minimum required airspeed is less than nominal, so we can track the bearing and minimum - // ground speed with our nominal airspeed reference - const float airsp_dot_bearing = projectAirspOnBearing(airspeed_nom_, wind_cross_bearing); - air_vel_ref = solveWindTriangle(wind_cross_bearing, airsp_dot_bearing, bearing_vec); - } - - } else { - // wind excess regulation and/or mitigation - - if (bearingIsFeasible(wind_cross_bearing, wind_dot_bearing, airspeed_nom_, wind_speed)) { - // bearing is nominally feasible, solve wind triangle for air velocity reference using nominal airspeed - const float airsp_dot_bearing = projectAirspOnBearing(airspeed_nom_, wind_cross_bearing); - air_vel_ref = solveWindTriangle(wind_cross_bearing, airsp_dot_bearing, bearing_vec); - - } else if (bearingIsFeasible(wind_cross_bearing, wind_dot_bearing, airspeed_max_, wind_speed) - && en_wind_excess_regulation_) { - // bearing is maximally feasible - if (wind_dot_bearing <= 0.0f) { - // we only increment the airspeed to regulate, but not overcome, excess wind - // NOTE: in the terminal condition, this will result in a zero ground velocity configuration - air_vel_ref = wind_vel; - - } else { - // the bearing is achievable within the nom - max airspeed range - // solve wind triangle with for air velocity reference with minimum airspeed - const float airsp_dot_bearing = 0.0f; // right angle to the bearing line gives minimal airspeed usage - air_vel_ref = solveWindTriangle(wind_cross_bearing, airsp_dot_bearing, bearing_vec); - } - - } else { - // bearing is maximally infeasible, employ mitigation law - const float airspeed_input = (en_wind_excess_regulation_) ? airspeed_max_ : airspeed_nom_; - air_vel_ref = infeasibleAirVelRef(wind_vel, bearing_vec, wind_speed, airspeed_input); - } - } - - return air_vel_ref; -} // refAirVelocity - -float NPFG::projectAirspOnBearing(const float airspeed, const float wind_cross_bearing) const -{ - // NOTE: wind_cross_bearing must be less than airspeed to use this function - // it is assumed that bearing feasibility is checked and found feasible (e.g. bearingIsFeasible() = true) prior to entering this method - // otherwise the return will be erroneous - return sqrtf(math::max(airspeed * airspeed - wind_cross_bearing * wind_cross_bearing, 0.0f)); -} // projectAirspOnBearing - -int NPFG::bearingIsFeasible(const float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, - const float wind_speed) const -{ - return (fabsf(wind_cross_bearing) < airspeed) && ((wind_dot_bearing > 0.0f) || (wind_speed < airspeed)); -} // bearingIsFeasible - -Vector2f NPFG::solveWindTriangle(const float wind_cross_bearing, const float airsp_dot_bearing, - const Vector2f &bearing_vec) const -{ - // essentially a 2D rotation with the speeds (magnitudes) baked in - return Vector2f{airsp_dot_bearing * bearing_vec(0) - wind_cross_bearing * bearing_vec(1), - wind_cross_bearing * bearing_vec(0) + airsp_dot_bearing * bearing_vec(1)}; -} // solveWindTriangle - -Vector2f NPFG::infeasibleAirVelRef(const Vector2f &wind_vel, const Vector2f &bearing_vec, const float wind_speed, - const float airspeed) const -{ - // NOTE: wind speed must be greater than airspeed, and airspeed must be greater than zero to use this function - // it is assumed that bearing feasibility is checked and found infeasible (e.g. bearingIsFeasible() = false) prior to entering this method - // otherwise the normalization of the air velocity vector could have a division by zero - Vector2f air_vel_ref = sqrtf(math::max(wind_speed * wind_speed - airspeed * airspeed, 0.0f)) * bearing_vec - wind_vel; - return air_vel_ref.normalized() * airspeed; -} // infeasibleAirVelRef - -float NPFG::bearingFeasibility(float wind_cross_bearing, const float wind_dot_bearing, const float airspeed, - const float wind_speed) const -{ - if (wind_dot_bearing < 0.0f) { - wind_cross_bearing = wind_speed; - - } else { - wind_cross_bearing = fabsf(wind_cross_bearing); - } - - float sin_arg = sinf(M_PI_F * 0.5f * math::constrain((airspeed - wind_cross_bearing) / AIRSPEED_BUFFER, 0.0f, 1.0f)); - return sin_arg * sin_arg; -} // bearingFeasibility - -float NPFG::lateralAccelFF(const Vector2f &unit_path_tangent, const Vector2f &ground_vel, - const float wind_dot_upt, const float wind_cross_upt, const float airspeed, - const float wind_speed, const float signed_track_error, const float path_curvature) const -{ - // NOTE: all calculations within this function take place at the closet point - // on the path, as if the aircraft were already tracking the given path at - // this point with zero angular error. this allows us to evaluate curvature - // induced requirements for lateral acceleration incrementation and ramp them - // in with the track proximity and further consider the bearing feasibility - // in excess wind conditions (this is done external to this method). - - // path frame curvature is the instantaneous curvature at our current distance - // from the actual path (considering e.g. concentric circles emanating outward/inward) - const float path_frame_curvature = path_curvature / math::max(1.0f - path_curvature * signed_track_error, - fabsf(path_curvature) * MIN_RADIUS); - - // limit tangent ground speed to along track (forward moving) direction - const float tangent_ground_speed = math::max(ground_vel.dot(unit_path_tangent), 0.0f); - - const float path_frame_rate = path_frame_curvature * tangent_ground_speed; - - // speed ratio = projection of ground vel on track / projection of air velocity - // on track - const float speed_ratio = (1.0f + wind_dot_upt / math::max(projectAirspOnBearing(airspeed, wind_cross_upt), - NPFG_EPSILON)); - - // note the use of airspeed * speed_ratio as oppose to ground_speed^2 here -- - // the prior considers that we command lateral acceleration in the air mass - // relative frame while the latter does not - return airspeed * speed_ratio * path_frame_rate; -} // lateralAccelFF - -float NPFG::lateralAccel(const Vector2f &air_vel, const Vector2f &air_vel_ref, const float airspeed) const -{ - // lateral acceleration demand only from the heading error - - const float dot_air_vel_err = air_vel.dot(air_vel_ref); - const float cross_air_vel_err = air_vel.cross(air_vel_ref); - - if (dot_air_vel_err < 0.0f) { - // hold max lateral acceleration command above 90 deg heading error - return p_gain_ * ((cross_air_vel_err < 0.0f) ? -airspeed : airspeed); - - } else { - // airspeed/airspeed_ref is used to scale any incremented airspeed reference back to the current airspeed - // for acceleration commands in a "feedback" sense (i.e. at the current vehicle airspeed) - return p_gain_ * cross_air_vel_err / airspeed_ref_; - } -} // lateralAccel - -float NPFG::switchDistance(float wp_radius) const -{ - return math::min(wp_radius, track_error_bound_ * switch_distance_multiplier_); -} // switchDistance - -void NPFG::updateRollSetpoint() -{ - float roll_new = atanf(lateral_accel_ * 1.0f / CONSTANTS_ONE_G); - roll_new = math::constrain(roll_new, -roll_lim_rad_, roll_lim_rad_); - - if (PX4_ISFINITE(roll_new)) { - roll_setpoint_ = roll_new; - } -} // updateRollSetpoint diff --git a/src/lib/tecs/TECS.cpp b/src/lib/tecs/TECS.cpp index 6a09b87759..5ff73eb83c 100644 --- a/src/lib/tecs/TECS.cpp +++ b/src/lib/tecs/TECS.cpp @@ -172,7 +172,12 @@ void TECSAltitudeReferenceModel::update(const float dt, const AltitudeReferenceS bool control_altitude = true; float altitude_setpoint = setpoint.alt; - if (PX4_ISFINITE(setpoint.alt_rate)) { + if (!PX4_ISFINITE(setpoint.alt) && !PX4_ISFINITE(setpoint.alt_rate)) { + // neither altitude nor altitude rate is set - reset to current altitude + _velocity_control_traj_generator.reset(0.f, 0, current_alt); + altitude_setpoint = current_alt; + + } else if (PX4_ISFINITE(setpoint.alt_rate)) { // input is height rate (not altitude) _velocity_control_traj_generator.setCurrentPositionEstimate(current_alt); _velocity_control_traj_generator.update(dt, setpoint.alt_rate); @@ -180,6 +185,7 @@ void TECSAltitudeReferenceModel::update(const float dt, const AltitudeReferenceS control_altitude = PX4_ISFINITE(altitude_setpoint); // returns true if altitude is locked } else { + // input is altitude _velocity_control_traj_generator.reset(0, height_rate, altitude_setpoint); } @@ -463,7 +469,7 @@ void TECSControl::_calcPitchControlUpdate(float dt, const Input &input, const Co if (param.integrator_gain_pitch > FLT_EPSILON) { // Calculate derivative from change in climb angle to rate of change of specific energy balance - const float climb_angle_to_SEB_rate = input.tas * CONSTANTS_ONE_G; + const float climb_angle_to_SEB_rate = max(input.tas, param.tas_min) * CONSTANTS_ONE_G; // Calculate pitch integrator input term float pitch_integ_input = _getControlError(seb_rate) * param.integrator_gain_pitch / climb_angle_to_SEB_rate; @@ -710,7 +716,6 @@ void TECS::update(float pitch, float altitude, float hgt_setpoint, float EAS_set float throttle_trim, float pitch_limit_min, float pitch_limit_max, float target_climbrate, float target_sinkrate, const float speed_deriv_forward, float hgt_rate, float hgt_rate_sp) { - // Calculate the time since last update (seconds) const hrt_abstime now(hrt_absolute_time()); const float dt = static_cast((now - _update_timestamp)) / 1_s; @@ -781,7 +786,9 @@ void TECS::update(float pitch, float altitude, float hgt_setpoint, float EAS_set void TECS::_setFastDescend(const float alt_setpoint, const float alt) { - if (_control_flag.airspeed_enabled && (_fast_descend_alt_err > FLT_EPSILON) + // disable fast descend if we are close to the target altitude or the altitude setpoint is not finite + + if (PX4_ISFINITE(alt_setpoint) && _control_flag.airspeed_enabled && (_fast_descend_alt_err > FLT_EPSILON) && ((alt_setpoint + _fast_descend_alt_err) < alt)) { auto now = hrt_absolute_time(); @@ -792,7 +799,7 @@ void TECS::_setFastDescend(const float alt_setpoint, const float alt) _fast_descend = constrain(max(_fast_descend, static_cast(now - _enabled_fast_descend_timestamp) / static_cast(FAST_DESCEND_RAMP_UP_TIME)), 0.f, 1.f); - } else if ((_fast_descend > FLT_EPSILON) && (_fast_descend_alt_err > FLT_EPSILON)) { + } else if (PX4_ISFINITE(alt_setpoint) && (_fast_descend > FLT_EPSILON) && (_fast_descend_alt_err > FLT_EPSILON)) { // Were in fast descend, scale it down. up until 5m above target altitude _fast_descend = constrain((alt - alt_setpoint - 5.f) / _fast_descend_alt_err, 0.f, 1.f); _enabled_fast_descend_timestamp = 0U; diff --git a/src/lib/timesync/Timesync.cpp b/src/lib/timesync/Timesync.cpp index 98b4902c23..078c60d249 100644 --- a/src/lib/timesync/Timesync.cpp +++ b/src/lib/timesync/Timesync.cpp @@ -66,7 +66,7 @@ void Timesync::update(const uint64_t now_us, const int64_t remote_timestamp_ns, // We reset the filter if we received 5 consecutive samples which violate our present estimate. // This is most likely due to a time jump on the offboard system. if (_high_deviation_count > MAX_CONSECUTIVE_HIGH_DEVIATION) { - PX4_WARN("time jump detected. Resetting time synchroniser."); + PX4_DEBUG("time jump detected. Resetting time synchroniser."); // Reset the filter reset_filter(); } @@ -104,7 +104,7 @@ void Timesync::update(const uint64_t now_us, const int64_t remote_timestamp_ns, _high_rtt_count++; if (_high_rtt_count == MAX_CONSECUTIVE_HIGH_RTT) { - PX4_WARN("RTT too high for timesync: %llu ms", rtt_us / 1000ULL); + PX4_DEBUG("RTT too high for timesync: %llu ms", rtt_us / 1000ULL); } } diff --git a/src/lib/timesync/Timesync.hpp b/src/lib/timesync/Timesync.hpp index 2948be529d..4844713442 100644 --- a/src/lib/timesync/Timesync.hpp +++ b/src/lib/timesync/Timesync.hpp @@ -78,7 +78,7 @@ static constexpr uint32_t CONVERGENCE_WINDOW = 500; // Outlier rejection and filter reset // // Samples with round-trip time higher than MAX_RTT_SAMPLE are not used to update the filter. -// More than MAX_CONSECUTIVE_HIGH_RTT number of such events in a row will throw a warning +// More than MAX_CONSECUTIVE_HIGH_RTT number of such events in a row will throw a debug message // but not reset the filter. // Samples whose calculated clock offset is more than MAX_DEVIATION_SAMPLE off from the current // estimate are not used to update the filter. More than MAX_CONSECUTIVE_HIGH_DEVIATION number diff --git a/src/modules/airship_att_control/airship_att_control_main.cpp b/src/modules/airship_att_control/airship_att_control_main.cpp index 2a18b349da..27f12b731f 100644 --- a/src/modules/airship_att_control/airship_att_control_main.cpp +++ b/src/modules/airship_att_control/airship_att_control_main.cpp @@ -126,8 +126,8 @@ AirshipAttitudeControl::Run() if (_vehicle_angular_velocity_sub.update(&angular_velocity)) { /* run the rate controller immediately after a gyro update */ - publishTorqueSetpoint(angular_velocity.timestamp_sample); publishThrustSetpoint(angular_velocity.timestamp_sample); + publishTorqueSetpoint(angular_velocity.timestamp_sample); /* check for updates in manual control topic */ _manual_control_setpoint_sub.update(&_manual_control_setpoint); diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index cebc08ae94..ad5eccafb4 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -613,7 +613,7 @@ transition_result_t Commander::arm(arm_disarm_reason_t calling_reason, bool run_ events::send(events::ID("commander_armed_by"), events::Log::Info, "Armed by {1}", calling_reason); - if (_param_com_home_en.get()) { + if (_param_com_home_en.get() && !_mission_in_progress) { _home_position.setHomePosition(); } @@ -1809,7 +1809,10 @@ void Commander::run() vtolStatusUpdate(); - _home_position.update(_param_com_home_en.get(), !isArmed() && _vehicle_land_detected.landed); + _mission_in_progress = (_vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION) + && !_mission_result_sub.get().finished; + + _home_position.update(_param_com_home_en.get(), !isArmed() && _vehicle_land_detected.landed && !_mission_in_progress); handleAutoDisarm(); @@ -2110,7 +2113,7 @@ void Commander::landDetectorUpdate() } // automatically set or update home position - if (_param_com_home_en.get()) { + if (_param_com_home_en.get() && !_mission_in_progress) { // set the home position when taking off if (!_vehicle_land_detected.landed) { if (was_landed) { diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index af16a7f81d..1d7841cdc8 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -279,6 +279,7 @@ private: bool _arm_tune_played{false}; bool _have_taken_off_since_arming{false}; bool _status_changed{true}; + bool _mission_in_progress{false}; vehicle_land_detected_s _vehicle_land_detected{}; diff --git a/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.cpp b/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.cpp index f4f91d0450..ffb72e6d78 100644 --- a/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.cpp +++ b/src/modules/commander/HealthAndArmingChecks/HealthAndArmingChecks.cpp @@ -45,6 +45,7 @@ HealthAndArmingChecks::HealthAndArmingChecks(ModuleParams *parent, vehicle_statu _failsafe_flags.local_position_invalid_relaxed = true; _failsafe_flags.local_velocity_invalid = true; _failsafe_flags.global_position_invalid = true; + _failsafe_flags.global_position_invalid_relaxed = true; _failsafe_flags.auto_mission_missing = true; _failsafe_flags.offboard_control_signal_lost = true; _failsafe_flags.home_position_invalid = true; @@ -54,7 +55,10 @@ bool HealthAndArmingChecks::update(bool force_reporting, bool is_arming_request) { _reporter.reset(); - _reporter.prepare(_context.status().vehicle_type); + // treat VTOLs in transition mode as fixed-wing - this is not in line with what's published as vehicle_status_s::vehicle_type + const uint8_t vehicle_type = _context.status().in_transition_mode ? vehicle_status_s::VEHICLE_TYPE_FIXED_WING : + _context.status().vehicle_type; + _reporter.prepare(vehicle_type); _context.setIsArmingRequest(is_arming_request); @@ -78,7 +82,7 @@ bool HealthAndArmingChecks::update(bool force_reporting, bool is_arming_request) _reporter._mavlink_log_pub = &_mavlink_log_pub; _reporter.reset(); - _reporter.prepare(_context.status().vehicle_type); + _reporter.prepare(vehicle_type); for (unsigned i = 0; i < sizeof(_checks) / sizeof(_checks[0]); ++i) { if (!_checks[i]) { diff --git a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp index c20919ba56..9b40fb39ac 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/batteryCheck.cpp @@ -204,12 +204,12 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) const bool critical_or_higher = reporter.failsafeFlags().battery_warning >= battery_status_s::WARNING_CRITICAL; NavModes affected_modes = (!configured_arm_threshold_in_use && critical_or_higher) || (configured_arm_threshold_in_use && below_configured_arm_threshold) ? NavModes::All : NavModes::None; - events::LogLevel log_level = critical_or_higher || below_configured_arm_threshold - ? events::Log::Critical : events::Log::Warning; switch (reporter.failsafeFlags().battery_warning) { default: case battery_status_s::WARNING_LOW: + // 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. @@ -219,10 +219,10 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) * */ reporter.armingCheckFailure(affected_modes, health_component_t::battery, events::ID("check_battery_low"), - log_level, "Low battery"); + events::Log::Critical, "Low battery"); if (reporter.mavlink_log_pub()) { - mavlink_log_emergency(reporter.mavlink_log_pub(), "Low battery\t"); + mavlink_log_critical(reporter.mavlink_log_pub(), "Low battery\t"); } break; @@ -237,10 +237,10 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) * */ reporter.armingCheckFailure(affected_modes, health_component_t::battery, events::ID("check_battery_critical"), - log_level, "Critical battery"); + events::Log::Critical, "Critical battery"); if (reporter.mavlink_log_pub()) { - mavlink_log_emergency(reporter.mavlink_log_pub(), "Critical battery\t"); + mavlink_log_critical(reporter.mavlink_log_pub(), "Critical battery\t"); } break; @@ -255,7 +255,7 @@ void BatteryChecks::checkAndReport(const Context &context, Report &reporter) * */ reporter.armingCheckFailure(affected_modes, health_component_t::battery, events::ID("check_battery_emergency"), - log_level, "Emergency battery level"); + events::Log::Emergency, "Emergency battery level"); if (reporter.mavlink_log_pub()) { mavlink_log_emergency(reporter.mavlink_log_pub(), "Emergency battery level\t"); diff --git a/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp index 8d1dbbd2df..fa7def7727 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp @@ -633,10 +633,18 @@ void EstimatorChecks::checkGps(const Context &context, Report &reporter, const s void EstimatorChecks::lowPositionAccuracy(const Context &context, Report &reporter, const vehicle_local_position_s &lpos) const { - const bool local_position_valid_but_low_accuracy = !reporter.failsafeFlags().local_position_invalid - && (_param_com_low_eph.get() > FLT_EPSILON && lpos.eph > _param_com_low_eph.get()); - if (!reporter.failsafeFlags().local_position_accuracy_low && local_position_valid_but_low_accuracy + bool position_valid_but_low_accuracy = false; + + if ((reporter.failsafeFlags().mode_req_global_position && !reporter.failsafeFlags().global_position_invalid) || + (reporter.failsafeFlags().mode_req_global_position_relaxed + && !reporter.failsafeFlags().global_position_invalid_relaxed) || + (reporter.failsafeFlags().mode_req_local_position && !reporter.failsafeFlags().local_position_invalid)) { + + position_valid_but_low_accuracy = (_param_com_low_eph.get() > FLT_EPSILON && lpos.eph > _param_com_low_eph.get()); + } + + if (!reporter.failsafeFlags().position_accuracy_low && position_valid_but_low_accuracy && _param_com_pos_low_act.get()) { // only report if armed @@ -658,7 +666,7 @@ void EstimatorChecks::lowPositionAccuracy(const Context &context, Report &report } } - reporter.failsafeFlags().local_position_accuracy_low = local_position_valid_but_low_accuracy; + reporter.failsafeFlags().position_accuracy_low = position_valid_but_low_accuracy; } void EstimatorChecks::setModeRequirementFlags(const Context &context, bool pre_flt_fail_innov_heading, @@ -698,6 +706,12 @@ void EstimatorChecks::setModeRequirementFlags(const Context &context, bool pre_f !checkPosVelValidity(now, global_pos_valid, gpos.eph, lpos_eph_threshold, gpos.timestamp, _last_gpos_fail_time_us, !failsafe_flags.global_position_invalid); + // for relaxed global condition we don't have any accuracy requirement + const float pos_eph_relaxed_treshold = INFINITY; + failsafe_flags.global_position_invalid_relaxed = !checkPosVelValidity(now, global_pos_valid, gpos.eph, + pos_eph_relaxed_treshold, gpos.timestamp, _last_gpos_relaxed_fail_time_us, + !failsafe_flags.global_position_invalid_relaxed); + // Additional warning if the system is about to enter position-loss failsafe after dead-reckoning period const float eph_critical = 2.5f * lpos_eph_threshold; // threshold used to trigger the navigation failsafe const float gpos_critical_warning_thrld = math::max(0.9f * eph_critical, math::max(eph_critical - 10.f, 0.f)); @@ -712,6 +726,7 @@ void EstimatorChecks::setModeRequirementFlags(const Context &context, bool pre_f || estimator_status_flags.cs_wind_dead_reckoning; if (!failsafe_flags.global_position_invalid + && failsafe_flags.mode_req_global_position && !_nav_failure_imminent_warned && gpos.eph > gpos_critical_warning_thrld && dead_reckoning) { diff --git a/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.hpp index 0e10484023..13b351c986 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.hpp @@ -96,6 +96,7 @@ private: uORB::Subscription _vehicle_gps_position_sub{ORB_ID(vehicle_gps_position)}; hrt_abstime _last_gpos_fail_time_us{0}; ///< Last time that the global position validity recovery check failed (usec) + hrt_abstime _last_gpos_relaxed_fail_time_us{0}; ///< Last time that the global position relaxed validity recovery check failed (usec) hrt_abstime _last_lpos_fail_time_us{0}; ///< Last time that the local position validity recovery check failed (usec) hrt_abstime _last_lpos_relaxed_fail_time_us{0}; ///< Last time that the relaxed local position validity recovery check failed (usec) hrt_abstime _last_lvel_fail_time_us{0}; ///< Last time that the local velocity validity recovery check failed (usec) diff --git a/src/modules/commander/HealthAndArmingChecks/checks/externalChecks.cpp b/src/modules/commander/HealthAndArmingChecks/checks/externalChecks.cpp index 8ef3c5cfa9..b1f2abc064 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/externalChecks.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/externalChecks.cpp @@ -173,6 +173,8 @@ void ExternalChecks::checkAndReport(const Context &context, Report &reporter) reporter.failsafeFlags().mode_req_local_position_relaxed); setOrClearRequirementBits(reply.mode_req_global_position, nav_mode_id, replaces_nav_state, reporter.failsafeFlags().mode_req_global_position); + setOrClearRequirementBits(reply.mode_req_global_position_relaxed, nav_mode_id, replaces_nav_state, + reporter.failsafeFlags().mode_req_global_position_relaxed); setOrClearRequirementBits(reply.mode_req_mission, nav_mode_id, replaces_nav_state, reporter.failsafeFlags().mode_req_mission); setOrClearRequirementBits(reply.mode_req_home_position, nav_mode_id, replaces_nav_state, diff --git a/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp index 7352a6bbfe..d13a4a19ae 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp @@ -86,16 +86,27 @@ void ModeChecks::checkAndReport(const Context &context, Report &reporter) reporter.clearCanRunBits(local_position_modes); } + NavModes global_position_modes = NavModes::None; + if (reporter.failsafeFlags().global_position_invalid && reporter.failsafeFlags().mode_req_global_position != 0) { + global_position_modes = (NavModes)reporter.failsafeFlags().mode_req_global_position; + } + + if (reporter.failsafeFlags().global_position_invalid_relaxed + && reporter.failsafeFlags().mode_req_global_position_relaxed != 0) { + global_position_modes = global_position_modes | (NavModes)reporter.failsafeFlags().mode_req_global_position_relaxed; + } + + if (global_position_modes != NavModes::None) { /* EVENT * @description * The available positioning data is not sufficient to execute the selected mode. */ - reporter.armingCheckFailure((NavModes)reporter.failsafeFlags().mode_req_global_position, + reporter.armingCheckFailure(global_position_modes, health_component_t::global_position_estimate, events::ID("check_modes_global_pos"), events::Log::Error, "Navigation error: No valid global position estimate"); - reporter.clearCanRunBits((NavModes)reporter.failsafeFlags().mode_req_global_position); + reporter.clearCanRunBits(global_position_modes); } if (reporter.failsafeFlags().local_altitude_invalid && reporter.failsafeFlags().mode_req_local_alt != 0) { diff --git a/src/modules/commander/ModeUtil/mode_requirements.cpp b/src/modules/commander/ModeUtil/mode_requirements.cpp index 555b564d97..5c6fa30295 100644 --- a/src/modules/commander/ModeUtil/mode_requirements.cpp +++ b/src/modules/commander/ModeUtil/mode_requirements.cpp @@ -50,6 +50,7 @@ void getModeRequirements(uint8_t vehicle_type, failsafe_flags_s &flags) flags.mode_req_local_position = 0; flags.mode_req_local_position_relaxed = 0; flags.mode_req_global_position = 0; + flags.mode_req_global_position_relaxed = 0; flags.mode_req_local_alt = 0; flags.mode_req_mission = 0; flags.mode_req_offboard_signal = 0; @@ -85,8 +86,16 @@ void getModeRequirements(uint8_t vehicle_type, failsafe_flags_s &flags) // NAVIGATION_STATE_AUTO_MISSION setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_angular_velocity); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_attitude); - setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_local_position); - setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_global_position); + + if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) { + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_global_position_relaxed); + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_local_position_relaxed); + + } else { + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_global_position); + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_local_position); + } + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_local_alt); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_mission); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION, flags.mode_req_wind_and_flight_time_compliance); @@ -94,16 +103,32 @@ void getModeRequirements(uint8_t vehicle_type, failsafe_flags_s &flags) // NAVIGATION_STATE_AUTO_LOITER setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_angular_velocity); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_attitude); - setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_position); - setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_global_position); + + if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) { + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_global_position_relaxed); + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_position_relaxed); + + } else { + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_global_position); + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_position); + } + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_local_alt); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER, flags.mode_req_wind_and_flight_time_compliance); // NAVIGATION_STATE_AUTO_RTL setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_angular_velocity); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_attitude); - setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_local_position); - setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_global_position); + + if (vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) { + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_global_position_relaxed); + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_local_position_relaxed); + + } else { + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_global_position); + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_local_position); + } + setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_local_alt); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_home_position); setRequirement(vehicle_status_s::NAVIGATION_STATE_AUTO_RTL, flags.mode_req_prevent_arming); diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index 3f350618b6..3cd9b95f72 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -142,6 +142,9 @@ PARAM_DEFINE_FLOAT(COM_RC_LOSS_T, 0.5f); * * Set home position automatically if possible. * + * During missions, 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. + * * @group Commander * @reboot_required true * @boolean @@ -513,12 +516,13 @@ PARAM_DEFINE_INT32(COM_ARM_AUTH_MET, 0); PARAM_DEFINE_FLOAT(COM_ARM_AUTH_TO, 1); /** - * Horizontal position error threshold. + * Horizontal position error threshold for hovering systems * * This is the horizontal position error (EPH) threshold that will trigger a failsafe. - * The default is appropriate for a multicopter. Can be increased for a fixed-wing. * 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. * diff --git a/src/modules/commander/esc_calibration.cpp b/src/modules/commander/esc_calibration.cpp index 3e78578dff..4977ad5c0d 100644 --- a/src/modules/commander/esc_calibration.cpp +++ b/src/modules/commander/esc_calibration.cpp @@ -63,19 +63,13 @@ bool check_battery_disconnected(orb_advert_t *mavlink_log_pub) const bool recent_battery_measurement = hrt_absolute_time() < (battery_status_sub.get().timestamp + 1_s); - if (!recent_battery_measurement) { - // We have to send this message for now because "battery unavailable" gets ignored by QGC + if (recent_battery_measurement && battery_status_sub.get().connected) { calibration_log_critical(mavlink_log_pub, CAL_QGC_FAILED_MSG, "Disconnect battery and try again"); return false; - } - // Make sure battery is reported to be disconnected - if (recent_battery_measurement && !battery_status_sub.get().connected) { + } else { return true; } - - calibration_log_critical(mavlink_log_pub, CAL_QGC_FAILED_MSG, "Disconnect battery and try again"); - return false; } static void set_motor_actuators(uORB::Publication &publisher, float value, bool release_control) diff --git a/src/modules/commander/failsafe/failsafe.cpp b/src/modules/commander/failsafe/failsafe.cpp index 6d2bc83d83..905d24491c 100644 --- a/src/modules/commander/failsafe/failsafe.cpp +++ b/src/modules/commander/failsafe/failsafe.cpp @@ -532,7 +532,7 @@ void Failsafe::checkStateAndMode(const hrt_abstime &time_us, const State &state, // trigger Low Position Accuracy Failsafe (only in auto mission and auto loiter) if (state.user_intended_mode == vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION || state.user_intended_mode == vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER) { - CHECK_FAILSAFE(status_flags, local_position_accuracy_low, fromPosLowActParam(_param_com_pos_low_act.get())); + CHECK_FAILSAFE(status_flags, position_accuracy_low, fromPosLowActParam(_param_com_pos_low_act.get())); } if (state.user_intended_mode == vehicle_status_s::NAVIGATION_STATE_AUTO_TAKEOFF || diff --git a/src/modules/commander/failsafe/framework.cpp b/src/modules/commander/failsafe/framework.cpp index 8d633e9f21..0632c0681e 100644 --- a/src/modules/commander/failsafe/framework.cpp +++ b/src/modules/commander/failsafe/framework.cpp @@ -290,7 +290,9 @@ void FailsafeBase::notifyUser(uint8_t user_intended_mode, Action action, Action } } - mavlink_log_critical(&_mavlink_log_pub, "Failsafe activated\t"); + if (action != Action::Warn) { + mavlink_log_critical(&_mavlink_log_pub, "Failsafe activated\t"); + } } #endif /* EMSCRIPTEN_BUILD */ @@ -695,6 +697,7 @@ bool FailsafeBase::modeCanRun(const failsafe_flags_s &status_flags, uint8_t mode (!status_flags.local_position_invalid || ((status_flags.mode_req_local_position & mode_mask) == 0)) && (!status_flags.local_position_invalid_relaxed || ((status_flags.mode_req_local_position_relaxed & mode_mask) == 0)) && (!status_flags.global_position_invalid || ((status_flags.mode_req_global_position & mode_mask) == 0)) && + (!status_flags.global_position_invalid_relaxed || ((status_flags.mode_req_global_position_relaxed & mode_mask) == 0)) && (!status_flags.local_altitude_invalid || ((status_flags.mode_req_local_alt & mode_mask) == 0)) && (!status_flags.auto_mission_missing || ((status_flags.mode_req_mission & mode_mask) == 0)) && (!status_flags.offboard_control_signal_lost || ((status_flags.mode_req_offboard_signal & mode_mask) == 0)) && diff --git a/src/modules/control_allocator/ControlAllocator.cpp b/src/modules/control_allocator/ControlAllocator.cpp index 99e280dd71..a7e43a64e3 100644 --- a/src/modules/control_allocator/ControlAllocator.cpp +++ b/src/modules/control_allocator/ControlAllocator.cpp @@ -95,11 +95,6 @@ ControlAllocator::init() return false; } - if (!_vehicle_thrust_setpoint_sub.registerCallback()) { - PX4_ERR("callback registration failed"); - return false; - } - #ifndef ENABLE_LOCKSTEP_SCHEDULER // Backup schedule would interfere with lockstep ScheduleDelayed(50_ms); #endif @@ -309,7 +304,6 @@ ControlAllocator::Run() { if (should_exit()) { _vehicle_torque_setpoint_sub.unregisterCallback(); - _vehicle_thrust_setpoint_sub.unregisterCallback(); exit_and_cleanup(); return; } @@ -396,15 +390,8 @@ ControlAllocator::Run() } - // Also run allocator on thrust setpoint changes if the torque setpoint - // has not been updated for more than 5ms if (_vehicle_thrust_setpoint_sub.update(&vehicle_thrust_setpoint)) { _thrust_sp = matrix::Vector3f(vehicle_thrust_setpoint.xyz); - - if (dt > 0.005f) { - do_update = true; - _timestamp_sample = vehicle_thrust_setpoint.timestamp_sample; - } } if (do_update) { diff --git a/src/modules/control_allocator/ControlAllocator.hpp b/src/modules/control_allocator/ControlAllocator.hpp index 1f91f7d17d..ce92c5036b 100644 --- a/src/modules/control_allocator/ControlAllocator.hpp +++ b/src/modules/control_allocator/ControlAllocator.hpp @@ -175,7 +175,7 @@ private: // Inputs uORB::SubscriptionCallbackWorkItem _vehicle_torque_setpoint_sub{this, ORB_ID(vehicle_torque_setpoint)}; /**< vehicle torque setpoint subscription */ - uORB::SubscriptionCallbackWorkItem _vehicle_thrust_setpoint_sub{this, ORB_ID(vehicle_thrust_setpoint)}; /**< vehicle thrust setpoint subscription */ + uORB::Subscription _vehicle_thrust_setpoint_sub{ORB_ID(vehicle_thrust_setpoint)}; /**< vehicle thrust setpoint subscription */ 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) */ diff --git a/src/modules/ekf2/CMakeLists.txt b/src/modules/ekf2/CMakeLists.txt index 181978792c..a7b8e18f8a 100644 --- a/src/modules/ekf2/CMakeLists.txt +++ b/src/modules/ekf2/CMakeLists.txt @@ -173,8 +173,8 @@ endif() if(CONFIG_EKF2_GNSS) list(APPEND EKF_SRCS + EKF/aid_sources/gnss/gnss_checks.cpp EKF/aid_sources/gnss/gnss_height_control.cpp - EKF/aid_sources/gnss/gps_checks.cpp EKF/aid_sources/gnss/gps_control.cpp ) diff --git a/src/modules/ekf2/EKF/CMakeLists.txt b/src/modules/ekf2/EKF/CMakeLists.txt index 2c4c898d41..381e265380 100644 --- a/src/modules/ekf2/EKF/CMakeLists.txt +++ b/src/modules/ekf2/EKF/CMakeLists.txt @@ -90,8 +90,8 @@ endif() if(CONFIG_EKF2_GNSS) list(APPEND EKF_SRCS + aid_sources/gnss/gnss_checks.cpp aid_sources/gnss/gnss_height_control.cpp - aid_sources/gnss/gps_checks.cpp aid_sources/gnss/gps_control.cpp ) diff --git a/src/modules/ekf2/EKF/aid_sources/gnss/gnss_checks.cpp b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_checks.cpp new file mode 100644 index 0000000000..fc26914693 --- /dev/null +++ b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_checks.cpp @@ -0,0 +1,250 @@ +/**************************************************************************** + * + * 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 gnss_checks.cpp + * Perform pre-flight and in-flight GNSS quality checks + */ + +#include "aid_sources/gnss/gnss_checks.hpp" + +namespace estimator +{ +bool GnssChecks::run(const gnssSample &gnss, uint64_t time_us) +{ + // assume failed first time through + if (_time_last_fail_us == 0) { + _time_last_fail_us = time_us; + } + + bool passed = false; + + if (_initial_checks_passed) { + if (runSimplifiedChecks(gnss)) { + _time_last_pass_us = time_us; + passed = isTimedOut(_time_last_fail_us, time_us, math::max((uint64_t)1e6, (uint64_t)_params.min_health_time_us / 10)); + + } else { + _time_last_fail_us = time_us; + } + + } else { + if (runInitialFixChecks(gnss)) { + _time_last_pass_us = time_us; + + if (isTimedOut(_time_last_fail_us, time_us, (uint64_t)_params.min_health_time_us)) { + _initial_checks_passed = true; + passed = true; + } + + } else { + _time_last_fail_us = time_us; + } + } + + lat_lon_prev.initReference(gnss.lat, gnss.lon, gnss.time_us); + _alt_prev = gnss.alt; + + _passed = passed; + return passed; +} + +bool GnssChecks::runSimplifiedChecks(const gnssSample &gnss) +{ + _check_fail_status.flags.fix = (gnss.fix_type < 3); + + // Check the reported horizontal and vertical position accuracy + _check_fail_status.flags.hacc = (gnss.hacc > 50.f); + _check_fail_status.flags.vacc = (gnss.vacc > 50.f); + + // Check the reported speed accuracy + _check_fail_status.flags.sacc = (gnss.sacc > 10.f); + + _check_fail_status.flags.spoofed = gnss.spoofed; + + bool passed = true; + + if ( + _check_fail_status.flags.fix || + (_check_fail_status.flags.hacc && isCheckEnabled(GnssChecksMask::kHacc)) || + (_check_fail_status.flags.vacc && isCheckEnabled(GnssChecksMask::kVacc)) || + (_check_fail_status.flags.sacc && isCheckEnabled(GnssChecksMask::kSacc)) || + (_check_fail_status.flags.spoofed && isCheckEnabled(GnssChecksMask::kSpoofed)) + ) { + passed = false; + } + + return passed; +} + +bool GnssChecks::runInitialFixChecks(const gnssSample &gnss) +{ + // Check the fix type + _check_fail_status.flags.fix = (gnss.fix_type < 3); + + // Check the number of satellites + _check_fail_status.flags.nsats = (gnss.nsats < _params.req_nsats); + + // Check the position dilution of precision + _check_fail_status.flags.pdop = (gnss.pdop > _params.req_pdop); + + // Check the reported horizontal and vertical position accuracy + _check_fail_status.flags.hacc = (gnss.hacc > _params.req_hacc); + _check_fail_status.flags.vacc = (gnss.vacc > _params.req_vacc); + + // Check the reported speed accuracy + _check_fail_status.flags.sacc = (gnss.sacc > _params.req_sacc); + + _check_fail_status.flags.spoofed = gnss.spoofed; + + runOnGroundGnssChecks(gnss); + + // force horizontal speed failure if above the limit + if (gnss.vel.xy().longerThan(_params.velocity_limit)) { + _check_fail_status.flags.hspeed = true; + } + + // force vertical speed failure if above the limit + if (fabsf(gnss.vel(2)) > _params.velocity_limit) { + _check_fail_status.flags.vspeed = true; + } + + bool passed = true; + + // if any user selected checks have failed, record the fail time + if ( + _check_fail_status.flags.fix || + (_check_fail_status.flags.nsats && isCheckEnabled(GnssChecksMask::kNsats)) || + (_check_fail_status.flags.pdop && isCheckEnabled(GnssChecksMask::kPdop)) || + (_check_fail_status.flags.hacc && isCheckEnabled(GnssChecksMask::kHacc)) || + (_check_fail_status.flags.vacc && isCheckEnabled(GnssChecksMask::kVacc)) || + (_check_fail_status.flags.sacc && isCheckEnabled(GnssChecksMask::kSacc)) || + (_check_fail_status.flags.hdrift && isCheckEnabled(GnssChecksMask::kHdrift)) || + (_check_fail_status.flags.vdrift && isCheckEnabled(GnssChecksMask::kVdrift)) || + (_check_fail_status.flags.hspeed && isCheckEnabled(GnssChecksMask::kHspd)) || + (_check_fail_status.flags.vspeed && isCheckEnabled(GnssChecksMask::kVspd)) || + (_check_fail_status.flags.spoofed && isCheckEnabled(GnssChecksMask::kSpoofed)) + ) { + passed = false; + } + + return passed; +} + +void GnssChecks::runOnGroundGnssChecks(const gnssSample &gnss) +{ + if (_control_status.flags.in_air) { + // These checks are always declared as passed when flying + // If on ground and moving, the last result before movement commenced is kept + _check_fail_status.flags.hdrift = false; + _check_fail_status.flags.vdrift = false; + _check_fail_status.flags.hspeed = false; + _check_fail_status.flags.vspeed = false; + + resetDriftFilters(); + return; + } + + if (_control_status.flags.vehicle_at_rest) { + // Calculate time lapsed since last update, limit to prevent numerical errors and calculate a lowpass filter coefficient + constexpr float filt_time_const = 10.0f; + const float dt = math::constrain(float(int64_t(gnss.time_us) - int64_t( + lat_lon_prev.getProjectionReferenceTimestamp())) + * 1e-6f, 0.001f, filt_time_const); + const float filter_coef = dt / filt_time_const; + + // Calculate position movement since last measurement + float delta_pos_n = 0.0f; + float delta_pos_e = 0.0f; + + // calculate position movement since last fix + if (lat_lon_prev.getProjectionReferenceTimestamp() > 0) { + lat_lon_prev.project(gnss.lat, gnss.lon, delta_pos_n, delta_pos_e); + + } else { + // no previous position has been set + lat_lon_prev.initReference(gnss.lat, gnss.lon, gnss.time_us); + _alt_prev = gnss.alt; + } + + // Calculate the horizontal and vertical drift velocity components and limit to 10x the threshold + const Vector3f vel_limit(_params.req_hdrift, _params.req_hdrift, _params.req_vdrift); + Vector3f delta_pos(delta_pos_n, delta_pos_e, (_alt_prev - gnss.alt)); + + // Apply a low pass filter + _lat_lon_alt_deriv_filt = delta_pos / dt * filter_coef + _lat_lon_alt_deriv_filt * (1.0f - filter_coef); + + // Apply anti-windup to the state instead of the input to avoid generating a bias on asymmetric signals + _lat_lon_alt_deriv_filt = matrix::constrain(_lat_lon_alt_deriv_filt, -10.0f * vel_limit, 10.0f * vel_limit); + + // hdrift: calculate the horizontal drift speed and fail if too high + _horizontal_position_drift_rate_m_s = Vector2f(_lat_lon_alt_deriv_filt.xy()).norm(); + _check_fail_status.flags.hdrift = (_horizontal_position_drift_rate_m_s > _params.req_hdrift); + + // vdrift: fail if the vertical drift speed is too high + _vertical_position_drift_rate_m_s = fabsf(_lat_lon_alt_deriv_filt(2)); + _check_fail_status.flags.vdrift = (_vertical_position_drift_rate_m_s > _params.req_vdrift); + + // hspeed: check the magnitude of the filtered horizontal GNSS velocity + const Vector2f vel_ne = matrix::constrain(Vector2f(gnss.vel.xy()), + -10.0f * _params.req_hdrift, + 10.0f * _params.req_hdrift); + _vel_ne_filt = vel_ne * filter_coef + _vel_ne_filt * (1.0f - filter_coef); + _filtered_horizontal_velocity_m_s = _vel_ne_filt.norm(); + _check_fail_status.flags.hspeed = (_filtered_horizontal_velocity_m_s > _params.req_hdrift); + + // vspeed: check the magnitude of the filtered vertical GNSS velocity + const float gnss_vz_limit = 10.f * _params.req_vdrift; + const float gnss_vz = math::constrain(gnss.vel(2), -gnss_vz_limit, gnss_vz_limit); + _vel_d_filt = gnss_vz * filter_coef + _vel_d_filt * (1.f - filter_coef); + + _check_fail_status.flags.vspeed = (fabsf(_vel_d_filt) > _params.req_vdrift); + + } else { + // This is the case where the vehicle is on ground and IMU movement is blocking the drift calculation + resetDriftFilters(); + } +} + +void GnssChecks::resetDriftFilters() +{ + _vel_ne_filt.setZero(); + _vel_d_filt = 0.f; + + _lat_lon_alt_deriv_filt.setZero(); + + _horizontal_position_drift_rate_m_s = NAN; + _vertical_position_drift_rate_m_s = NAN; + _filtered_horizontal_velocity_m_s = NAN; +} +}; // namespace estimator diff --git a/src/modules/ekf2/EKF/aid_sources/gnss/gnss_checks.hpp b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_checks.hpp new file mode 100644 index 0000000000..a8fdb39b90 --- /dev/null +++ b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_checks.hpp @@ -0,0 +1,162 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#ifndef EKF_GNSS_CHECKS_H +#define EKF_GNSS_CHECKS_H + +#include + +#include "../../common.h" + +namespace estimator +{ +class GnssChecks final +{ +public: + GnssChecks(int32_t &check_mask, int32_t &req_nsats, float &req_pdop, float &req_hacc, float &req_vacc, float &req_sacc, + float &req_hdrift, float &req_vdrift, float &velocity_limit, uint32_t &min_health_time_us, + filter_control_status_u &control_status): + _params{check_mask, req_nsats, req_pdop, req_hacc, req_vacc, req_sacc, req_hdrift, req_vdrift, velocity_limit, min_health_time_us}, + _control_status(control_status) + {}; + + union gps_check_fail_status_u { + struct { + uint16_t fix : 1; ///< 0 - true if the fix type is insufficient (no 3D solution) + uint16_t nsats : 1; ///< 1 - true if number of satellites used is insufficient + uint16_t pdop : 1; ///< 2 - true if position dilution of precision is insufficient + uint16_t hacc : 1; ///< 3 - true if reported horizontal accuracy is insufficient + uint16_t vacc : 1; ///< 4 - true if reported vertical accuracy is insufficient + uint16_t sacc : 1; ///< 5 - true if reported speed accuracy is insufficient + uint16_t hdrift : 1; ///< 6 - true if horizontal drift is excessive (can only be used when stationary on ground) + uint16_t vdrift : 1; ///< 7 - true if vertical drift is excessive (can only be used when stationary on ground) + uint16_t hspeed : 1; ///< 8 - true if horizontal speed is excessive (can only be used when stationary on ground) + uint16_t vspeed : 1; ///< 9 - true if vertical speed error is excessive + uint16_t spoofed: 1; ///< 10 - true if the GNSS data is spoofed + } flags; + uint16_t value; + }; + + void resetHard() + { + _initial_checks_passed = false; + reset(); + } + + void reset() + { + _passed = false; + _time_last_pass_us = 0; + _time_last_fail_us = 0; + resetDriftFilters(); + } + + /* + * Return true if the GNSS solution quality is adequate. + */ + bool run(const gnssSample &gnss, uint64_t time_us); + bool passed() const { return _passed; } + bool initialChecksPassed() const { return _initial_checks_passed; } + uint64_t getLastPassUs() const { return _time_last_pass_us; } + uint64_t getLastFailUs() const { return _time_last_fail_us; } + + const gps_check_fail_status_u &getFailStatus() const { return _check_fail_status; } + + float horizontal_position_drift_rate_m_s() const { return _horizontal_position_drift_rate_m_s; } + float vertical_position_drift_rate_m_s() const { return _vertical_position_drift_rate_m_s; } + float filtered_horizontal_velocity_m_s() const { return _filtered_horizontal_velocity_m_s; } + +private: + enum class GnssChecksMask : int32_t { + kNsats = (1 << 0), + kPdop = (1 << 1), + kHacc = (1 << 2), + kVacc = (1 << 3), + kSacc = (1 << 4), + kHdrift = (1 << 5), + kVdrift = (1 << 6), + kHspd = (1 << 7), + kVspd = (1 << 8), + kSpoofed = (1 << 9) + }; + + bool isCheckEnabled(GnssChecksMask check) { return (_params.check_mask & static_cast(check)); } + + bool runSimplifiedChecks(const gnssSample &gnss); + bool runInitialFixChecks(const gnssSample &gnss); + void runOnGroundGnssChecks(const gnssSample &gnss); + + void resetDriftFilters(); + + bool isTimedOut(uint64_t timestamp_to_check_us, uint64_t now_us, uint64_t timeout_period) const + { + return (timestamp_to_check_us == 0) || (timestamp_to_check_us + timeout_period < now_us); + } + + gps_check_fail_status_u _check_fail_status{}; + + float _horizontal_position_drift_rate_m_s{NAN}; + float _vertical_position_drift_rate_m_s{NAN}; + float _filtered_horizontal_velocity_m_s{NAN}; + + MapProjection lat_lon_prev{}; + float _alt_prev{0.0f}; + + Vector3f _lat_lon_alt_deriv_filt{}; + Vector2f _vel_ne_filt{}; + + float _vel_d_filt{0.0f}; ///< GNSS filtered Down velocity (m/sec) + uint64_t _time_last_fail_us{0}; + uint64_t _time_last_pass_us{0}; + bool _initial_checks_passed{false}; + bool _passed{false}; + + struct Params { + const int32_t &check_mask; + const int32_t &req_nsats; + const float &req_pdop; + const float &req_hacc; + const float &req_vacc; + const float &req_sacc; + const float &req_hdrift; + const float &req_vdrift; + const float &velocity_limit; + const uint32_t &min_health_time_us; + }; + + const Params _params; + const filter_control_status_u &_control_status; +}; +}; // namespace estimator + +#endif // !EKF_GNSS_CHECKS_H 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 9426fa2664..e8285f7267 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 @@ -87,7 +87,7 @@ void Ekf::controlGnssHeightFusion(const gnssSample &gps_sample) // determine if we should use height aiding const bool common_conditions_passing = measurement_valid && _local_origin_lat_lon.isInitialized() - && _gps_checks_passed; + && _gnss_checks.passed(); const bool continuing_conditions_passing = (_params.gnss_ctrl & static_cast(GnssCtrl::VPOS)) && common_conditions_passing; diff --git a/src/modules/ekf2/EKF/aid_sources/gnss/gnss_yaw_control.cpp b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_yaw_control.cpp index bd37c0fb37..06b8fffccc 100644 --- a/src/modules/ekf2/EKF/aid_sources/gnss/gnss_yaw_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/gnss/gnss_yaw_control.cpp @@ -66,7 +66,7 @@ void Ekf::controlGnssYawFusion(const gnssSample &gnss_sample) 2 * GNSS_YAW_MAX_INTERVAL); const bool starting_conditions_passing = continuing_conditions_passing - && _gps_checks_passed + && _gnss_checks.passed() && !is_gnss_yaw_data_intermittent && !_gps_intermittent; diff --git a/src/modules/ekf2/EKF/aid_sources/gnss/gps_checks.cpp b/src/modules/ekf2/EKF/aid_sources/gnss/gps_checks.cpp deleted file mode 100644 index 81b3fcc76b..0000000000 --- a/src/modules/ekf2/EKF/aid_sources/gnss/gps_checks.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/**************************************************************************** - * - * Copyright (c) 2015-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 gps_checks.cpp - * Perform pre-flight and in-flight GPS quality checks - * - * @author Paul Riseborough - * - */ - -#include "ekf.h" - -#include - -// GPS pre-flight check bit locations -#define MASK_GPS_NSATS (1<<0) -#define MASK_GPS_PDOP (1<<1) -#define MASK_GPS_HACC (1<<2) -#define MASK_GPS_VACC (1<<3) -#define MASK_GPS_SACC (1<<4) -#define MASK_GPS_HDRIFT (1<<5) -#define MASK_GPS_VDRIFT (1<<6) -#define MASK_GPS_HSPD (1<<7) -#define MASK_GPS_VSPD (1<<8) -#define MASK_GPS_SPOOFED (1<<9) - -bool Ekf::runGnssChecks(const gnssSample &gps) -{ - _gps_check_fail_status.flags.spoofed = gps.spoofed; - - // Check the fix type - _gps_check_fail_status.flags.fix = (gps.fix_type < 3); - - // Check the number of satellites - _gps_check_fail_status.flags.nsats = (gps.nsats < _params.req_nsats); - - // Check the position dilution of precision - _gps_check_fail_status.flags.pdop = (gps.pdop > _params.req_pdop); - - // Check the reported horizontal and vertical position accuracy - _gps_check_fail_status.flags.hacc = (gps.hacc > _params.req_hacc); - _gps_check_fail_status.flags.vacc = (gps.vacc > _params.req_vacc); - - // Check the reported speed accuracy - _gps_check_fail_status.flags.sacc = (gps.sacc > _params.req_sacc); - - // Calculate time lapsed since last update, limit to prevent numerical errors and calculate a lowpass filter coefficient - constexpr float filt_time_const = 10.0f; - const float dt = math::constrain(float(int64_t(gps.time_us) - int64_t(_gps_pos_prev.getProjectionReferenceTimestamp())) - * 1e-6f, 0.001f, filt_time_const); - const float filter_coef = dt / filt_time_const; - - // The following checks are only valid when the vehicle is at rest - const double lat = gps.lat; - const double lon = gps.lon; - - if (!_control_status.flags.in_air && _control_status.flags.vehicle_at_rest) { - // Calculate position movement since last measurement - float delta_pos_n = 0.0f; - float delta_pos_e = 0.0f; - - // calculate position movement since last GPS fix - if (_gps_pos_prev.getProjectionReferenceTimestamp() > 0) { - _gps_pos_prev.project(lat, lon, delta_pos_n, delta_pos_e); - - } else { - // no previous position has been set - _gps_pos_prev.initReference(lat, lon, gps.time_us); - _gps_alt_prev = gps.alt; - } - - // Calculate the horizontal and vertical drift velocity components and limit to 10x the threshold - const Vector3f vel_limit(_params.req_hdrift, _params.req_hdrift, _params.req_vdrift); - Vector3f delta_pos(delta_pos_n, delta_pos_e, (_gps_alt_prev - gps.alt)); - - // Apply a low pass filter - _gps_pos_deriv_filt = delta_pos / dt * filter_coef + _gps_pos_deriv_filt * (1.0f - filter_coef); - - // Apply anti-windup to the state instead of the input to avoid generating a bias on asymmetric signals - _gps_pos_deriv_filt = matrix::constrain(_gps_pos_deriv_filt, -10.0f * vel_limit, 10.0f * vel_limit); - - // hdrift: calculate the horizontal drift speed and fail if too high - _gps_horizontal_position_drift_rate_m_s = Vector2f(_gps_pos_deriv_filt.xy()).norm(); - _gps_check_fail_status.flags.hdrift = (_gps_horizontal_position_drift_rate_m_s > _params.req_hdrift); - - // vdrift: fail if the vertical drift speed is too high - _gps_vertical_position_drift_rate_m_s = fabsf(_gps_pos_deriv_filt(2)); - _gps_check_fail_status.flags.vdrift = (_gps_vertical_position_drift_rate_m_s > _params.req_vdrift); - - // hspeed: check the magnitude of the filtered horizontal GNSS velocity - const Vector2f gps_velNE = matrix::constrain(Vector2f(gps.vel.xy()), - -10.0f * _params.req_hdrift, - 10.0f * _params.req_hdrift); - _gps_velNE_filt = gps_velNE * filter_coef + _gps_velNE_filt * (1.0f - filter_coef); - _gps_filtered_horizontal_velocity_m_s = _gps_velNE_filt.norm(); - _gps_check_fail_status.flags.hspeed = (_gps_filtered_horizontal_velocity_m_s > _params.req_hdrift); - - // vspeed: check the magnitude of the filtered vertical GNSS velocity - const float gnss_vz_limit = 10.f * _params.req_vdrift; - const float gnss_vz = math::constrain(gps.vel(2), -gnss_vz_limit, gnss_vz_limit); - _gps_vel_d_filt = gnss_vz * filter_coef + _gps_vel_d_filt * (1.f - filter_coef); - - _gps_check_fail_status.flags.vspeed = (fabsf(_gps_vel_d_filt) > _params.req_vdrift); - - } else if (_control_status.flags.in_air) { - // These checks are always declared as passed when flying - // If on ground and moving, the last result before movement commenced is kept - _gps_check_fail_status.flags.hdrift = false; - _gps_check_fail_status.flags.vdrift = false; - _gps_check_fail_status.flags.hspeed = false; - _gps_check_fail_status.flags.vspeed = false; - - resetGpsDriftCheckFilters(); - - } else { - // This is the case where the vehicle is on ground and IMU movement is blocking the drift calculation - resetGpsDriftCheckFilters(); - } - - // force horizontal speed failure if above the limit - if (gps.vel.xy().longerThan(_params.velocity_limit)) { - _gps_check_fail_status.flags.hspeed = true; - } - - // force vertical speed failure if above the limit - if (fabsf(gps.vel(2)) > _params.velocity_limit) { - _gps_check_fail_status.flags.vspeed = true; - } - - // save GPS fix for next time - _gps_pos_prev.initReference(lat, lon, gps.time_us); - _gps_alt_prev = gps.alt; - - // assume failed first time through - if (_last_gps_fail_us == 0) { - _last_gps_fail_us = _time_delayed_us; - } - - // if any user selected checks have failed, record the fail time - if ( - _gps_check_fail_status.flags.fix || - (_gps_check_fail_status.flags.nsats && (_params.gps_check_mask & MASK_GPS_NSATS)) || - (_gps_check_fail_status.flags.pdop && (_params.gps_check_mask & MASK_GPS_PDOP)) || - (_gps_check_fail_status.flags.hacc && (_params.gps_check_mask & MASK_GPS_HACC)) || - (_gps_check_fail_status.flags.vacc && (_params.gps_check_mask & MASK_GPS_VACC)) || - (_gps_check_fail_status.flags.sacc && (_params.gps_check_mask & MASK_GPS_SACC)) || - (_gps_check_fail_status.flags.hdrift && (_params.gps_check_mask & MASK_GPS_HDRIFT)) || - (_gps_check_fail_status.flags.vdrift && (_params.gps_check_mask & MASK_GPS_VDRIFT)) || - (_gps_check_fail_status.flags.hspeed && (_params.gps_check_mask & MASK_GPS_HSPD)) || - (_gps_check_fail_status.flags.vspeed && (_params.gps_check_mask & MASK_GPS_VSPD)) || - (_gps_check_fail_status.flags.spoofed && (_params.gps_check_mask & MASK_GPS_SPOOFED)) - ) { - _last_gps_fail_us = _time_delayed_us; - return false; - - } else { - _last_gps_pass_us = _time_delayed_us; - return true; - } -} - -void Ekf::resetGpsDriftCheckFilters() -{ - _gps_velNE_filt.setZero(); - _gps_vel_d_filt = 0.f; - - _gps_pos_deriv_filt.setZero(); - - _gps_horizontal_position_drift_rate_m_s = NAN; - _gps_vertical_position_drift_rate_m_s = NAN; - _gps_filtered_horizontal_velocity_m_s = NAN; -} 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 9eabfe156d..01d15601c0 100644 --- a/src/modules/ekf2/EKF/aid_sources/gnss/gps_control.cpp +++ b/src/modules/ekf2/EKF/aid_sources/gnss/gps_control.cpp @@ -63,23 +63,22 @@ void Ekf::controlGpsFusion(const imuSample &imu_delayed) if (_gps_data_ready) { const gnssSample &gnss_sample = _gps_sample_delayed; - if (runGnssChecks(gnss_sample) - && isTimedOut(_last_gps_fail_us, max((uint64_t)1e6, (uint64_t)_min_gps_health_time_us / 10))) { - if (isTimedOut(_last_gps_fail_us, (uint64_t)_min_gps_health_time_us)) { - // First time checks are passing, latching. - if (!_gps_checks_passed) { - _information_events.flags.gps_checks_passed = true; - } + const bool initial_checks_passed_prev = _gnss_checks.initialChecksPassed(); - _gps_checks_passed = true; + if (_gnss_checks.run(gnss_sample, _time_delayed_us)) { + if (_gnss_checks.initialChecksPassed() && !initial_checks_passed_prev) { + // First time checks are passing, latching. + _information_events.flags.gps_checks_passed = true; } } else { // Skip this sample _gps_data_ready = false; - if ((_control_status.flags.gnss_vel || _control_status.flags.gnss_pos) - && isTimedOut(_last_gps_pass_us, _params.reset_timeout_max)) { + const bool using_gnss = _control_status.flags.gnss_vel || _control_status.flags.gnss_pos; + const bool gnss_checks_pass_timeout = isTimedOut(_gnss_checks.getLastPassUs(), _params.reset_timeout_max); + + if (using_gnss && gnss_checks_pass_timeout) { stopGnssFusion(); ECL_WARN("GNSS quality poor - stopping use"); } @@ -128,7 +127,7 @@ void Ekf::controlGnssVelFusion(estimator_aid_source3d_s &aid_src, const bool for const bool continuing_conditions_passing = (_params.gnss_ctrl & static_cast(GnssCtrl::VEL)) && _control_status.flags.tilt_align && _control_status.flags.yaw_align; - const bool starting_conditions_passing = continuing_conditions_passing && _gps_checks_passed; + const bool starting_conditions_passing = continuing_conditions_passing && _gnss_checks.passed(); if (_control_status.flags.gnss_vel) { if (continuing_conditions_passing) { @@ -175,8 +174,8 @@ void Ekf::controlGnssPosFusion(estimator_aid_source2d_s &aid_src, const bool for const bool continuing_conditions_passing = gnss_pos_enabled && _control_status.flags.tilt_align && _control_status.flags.yaw_align; - const bool starting_conditions_passing = continuing_conditions_passing && _gps_checks_passed; - const bool gpos_init_conditions_passing = gnss_pos_enabled && _gps_checks_passed; + const bool starting_conditions_passing = continuing_conditions_passing && _gnss_checks.passed(); + const bool gpos_init_conditions_passing = gnss_pos_enabled && _gnss_checks.passed(); if (_control_status.flags.gnss_pos) { if (continuing_conditions_passing) { @@ -394,8 +393,7 @@ bool Ekf::shouldResetGpsFusion() const void Ekf::stopGnssFusion() { if (_control_status.flags.gnss_vel || _control_status.flags.gnss_pos) { - _last_gps_fail_us = 0; - _last_gps_pass_us = 0; + _gnss_checks.reset(); } stopGnssVelFusion(); @@ -416,8 +414,7 @@ void Ekf::stopGnssVelFusion() //TODO: what if gnss yaw or height is used? if (!_control_status.flags.gnss_pos) { - _last_gps_fail_us = 0; - _last_gps_pass_us = 0; + _gnss_checks.reset(); } } } @@ -430,8 +427,7 @@ void Ekf::stopGnssPosFusion() //TODO: what if gnss yaw or height is used? if (!_control_status.flags.gnss_vel) { - _last_gps_fail_us = 0; - _last_gps_pass_us = 0; + _gnss_checks.reset(); } } } diff --git a/src/modules/ekf2/EKF/common.h b/src/modules/ekf2/EKF/common.h index a6a6ee6b56..b4452b0bee 100644 --- a/src/modules/ekf2/EKF/common.h +++ b/src/modules/ekf2/EKF/common.h @@ -543,24 +543,6 @@ union innovation_fault_status_u { uint16_t value; }; -// publish the status of various GPS quality checks -union gps_check_fail_status_u { - struct { - uint16_t fix : 1; ///< 0 - true if the fix type is insufficient (no 3D solution) - uint16_t nsats : 1; ///< 1 - true if number of satellites used is insufficient - uint16_t pdop : 1; ///< 2 - true if position dilution of precision is insufficient - uint16_t hacc : 1; ///< 3 - true if reported horizontal accuracy is insufficient - uint16_t vacc : 1; ///< 4 - true if reported vertical accuracy is insufficient - uint16_t sacc : 1; ///< 5 - true if reported speed accuracy is insufficient - uint16_t hdrift : 1; ///< 6 - true if horizontal drift is excessive (can only be used when stationary on ground) - uint16_t vdrift : 1; ///< 7 - true if vertical drift is excessive (can only be used when stationary on ground) - uint16_t hspeed : 1; ///< 8 - true if horizontal speed is excessive (can only be used when stationary on ground) - uint16_t vspeed : 1; ///< 9 - true if vertical speed error is excessive - uint16_t spoofed: 1; ///< 10 - true if the GNSS data is spoofed - } flags; - uint16_t value; -}; - // bitmask containing filter control status union filter_control_status_u { struct { diff --git a/src/modules/ekf2/EKF/ekf.cpp b/src/modules/ekf2/EKF/ekf.cpp index b6efa80e5d..5444886870 100644 --- a/src/modules/ekf2/EKF/ekf.cpp +++ b/src/modules/ekf2/EKF/ekf.cpp @@ -94,8 +94,7 @@ void Ekf::reset() _innov_check_fail_status.value = 0; #if defined(CONFIG_EKF2_GNSS) - resetGpsDriftCheckFilters(); - _gps_checks_passed = false; + _gnss_checks.resetHard(); #endif // CONFIG_EKF2_GNSS _local_origin_alt = NAN; diff --git a/src/modules/ekf2/EKF/ekf.h b/src/modules/ekf2/EKF/ekf.h index 3bab2cd8bc..602b94bdfd 100644 --- a/src/modules/ekf2/EKF/ekf.h +++ b/src/modules/ekf2/EKF/ekf.h @@ -46,6 +46,7 @@ #include "estimator_interface.h" #if defined(CONFIG_EKF2_GNSS) +# include "aid_sources/gnss/gnss_checks.hpp" # include "yaw_estimator/EKFGSF_yaw.h" #endif // CONFIG_EKF2_GNSS @@ -376,10 +377,10 @@ public: // set minimum continuous period without GPS fail required to mark a healthy GPS status void set_min_required_gps_health_time(uint32_t time_us) { _min_gps_health_time_us = time_us; } - const gps_check_fail_status_u &gps_check_fail_status() const { return _gps_check_fail_status; } - const decltype(gps_check_fail_status_u::flags) &gps_check_fail_status_flags() const { return _gps_check_fail_status.flags; } + const GnssChecks::gps_check_fail_status_u &gps_check_fail_status() const { return _gnss_checks.getFailStatus(); } + const decltype(GnssChecks::gps_check_fail_status_u::flags) &gps_check_fail_status_flags() const { return _gnss_checks.getFailStatus().flags; } - bool gps_checks_passed() const { return _gps_checks_passed; }; + bool gps_checks_passed() const { return _gnss_checks.passed(); }; const BiasEstimator::status &getGpsHgtBiasEstimatorStatus() const { return _gps_hgt_b_est.getStatus(); } @@ -554,17 +555,6 @@ private: #if defined(CONFIG_EKF2_GNSS) bool _gps_data_ready {false}; ///< true when new GPS data has fallen behind the fusion time horizon and is available to be fused - // variables used for the GPS quality checks - Vector3f _gps_pos_deriv_filt{}; ///< GPS NED position derivative (m/sec) - Vector2f _gps_velNE_filt{}; ///< filtered GPS North and East velocity (m/sec) - - float _gps_vel_d_filt{0.0f}; ///< GNSS filtered Down velocity (m/sec) - uint64_t _last_gps_fail_us{0}; ///< last system time in usec that the GPS failed it's checks - uint64_t _last_gps_pass_us{0}; ///< last system time in usec that the GPS passed it's checks - uint32_t _min_gps_health_time_us{10000000}; ///< GPS is marked as healthy only after this amount of time - bool _gps_checks_passed{false}; ///> true when all active GPS checks have passed - - gps_check_fail_status_u _gps_check_fail_status{}; // height sensor status bool _gps_intermittent{true}; ///< true if data into the buffer is intermittent @@ -877,18 +867,9 @@ private: void resetHorizontalPositionToGnss(estimator_aid_source2d_s &aid_src); bool shouldResetGpsFusion() const; - /* - * Return true if the GPS solution quality is adequate. - * Checks are activated using the EKF2_GPS_CHECK bitmask parameter - * Checks are adjusted using the EKF2_REQ_* parameters - */ - bool runGnssChecks(const gnssSample &gps); - void controlGnssHeightFusion(const gnssSample &gps_sample); void stopGpsHgtFusion(); - void resetGpsDriftCheckFilters(); - # if defined(CONFIG_EKF2_GNSS_YAW) void controlGnssYawFusion(const gnssSample &gps_sample); void stopGnssYawFusion(); diff --git a/src/modules/ekf2/EKF/estimator_interface.h b/src/modules/ekf2/EKF/estimator_interface.h index 592b786a6e..0a8272a929 100644 --- a/src/modules/ekf2/EKF/estimator_interface.h +++ b/src/modules/ekf2/EKF/estimator_interface.h @@ -71,6 +71,10 @@ # include "aid_sources/range_finder/sensor_range_finder.hpp" #endif // CONFIG_EKF2_RANGE_FINDER +#if defined(CONFIG_EKF2_GNSS) +# include "aid_sources/gnss/gnss_checks.hpp" +#endif // CONFIG_EKF2_GNSS + #include #include #include @@ -89,9 +93,9 @@ public: const gnssSample &get_gps_sample_delayed() const { return _gps_sample_delayed; } - float gps_horizontal_position_drift_rate_m_s() const { return _gps_horizontal_position_drift_rate_m_s; } - float gps_vertical_position_drift_rate_m_s() const { return _gps_vertical_position_drift_rate_m_s; } - float gps_filtered_horizontal_velocity_m_s() const { return _gps_filtered_horizontal_velocity_m_s; } + float gps_horizontal_position_drift_rate_m_s() const { return _gnss_checks.horizontal_position_drift_rate_m_s(); } + float gps_vertical_position_drift_rate_m_s() const { return _gnss_checks.vertical_position_drift_rate_m_s(); } + float gps_filtered_horizontal_velocity_m_s() const { return _gnss_checks.filtered_horizontal_velocity_m_s(); } #endif // CONFIG_EKF2_GNSS @@ -243,6 +247,7 @@ public: int getNumberOfActiveVerticalVelocityAidingSources() const; const matrix::Quatf &getQuaternion() const { return _output_predictor.getQuaternion(); } + Vector3f getAngularVelocityAndResetAccumulator() { return _output_predictor.getAngularVelocityAndResetAccumulator(); } float getUnaidedYaw() const { return _output_predictor.getUnaidedYaw(); } Vector3f getVelocity() const { return _output_predictor.getVelocity(); } @@ -398,12 +403,18 @@ protected: gnssSample _gps_sample_delayed{}; - float _gps_horizontal_position_drift_rate_m_s{NAN}; // Horizontal position drift rate (m/s) - float _gps_vertical_position_drift_rate_m_s{NAN}; // Vertical position drift rate (m/s) - float _gps_filtered_horizontal_velocity_m_s{NAN}; // Filtered horizontal velocity (m/s) - - MapProjection _gps_pos_prev{}; // Contains WGS-84 position latitude and longitude of the previous GPS message - float _gps_alt_prev{0.0f}; // height from the previous GPS message (m) + uint32_t _min_gps_health_time_us{10000000}; ///< GPS is marked as healthy only after this amount of time + GnssChecks _gnss_checks{_params.gps_check_mask, + _params.req_nsats, + _params.req_pdop, + _params.req_hacc, + _params.req_vacc, + _params.req_sacc, + _params.req_hdrift, + _params.req_vdrift, + _params.velocity_limit, + _min_gps_health_time_us, + _control_status}; # if defined(CONFIG_EKF2_GNSS_YAW) // innovation consistency check monitoring ratios diff --git a/src/modules/ekf2/EKF/output_predictor/output_predictor.cpp b/src/modules/ekf2/EKF/output_predictor/output_predictor.cpp index c165303574..2c65279049 100644 --- a/src/modules/ekf2/EKF/output_predictor/output_predictor.cpp +++ b/src/modules/ekf2/EKF/output_predictor/output_predictor.cpp @@ -113,6 +113,9 @@ void OutputPredictor::reset() _delta_vel_sum.setZero(); _delta_vel_dt = 0.f; + _delta_angle_sum.setIdentity(); + _delta_angle_sum_dt = 0.f; + _delta_angle_corr.setZero(); _vel_err_integ.setZero(); @@ -247,13 +250,18 @@ void OutputPredictor::calculateOutputStates(const uint64_t time_us, const Vector // update auxiliary yaw estimate // rotate the state quternion by the delta quaternion only corrected for bias without EKF corrections - const Vector3f delta_angle_unaided = delta_angle - delta_angle_bias_scaled; + const Quatf delta_quat_unaided = Quatf(AxisAnglef(delta_angle - delta_angle_bias_scaled)); const float yaw_state = Eulerf(quat_nominal_before_update).psi(); - const Quatf quat_unaided = quat_nominal_before_update * Quatf(AxisAnglef(delta_angle_unaided)); + const Quatf quat_unaided = quat_nominal_before_update * delta_quat_unaided; const float yaw_without_aiding = Eulerf(quat_unaided).psi(); // Yaw before delta quaternion applied and yaw after. The difference is the delta yaw. Accumulate it. const float unaided_delta_yaw = yaw_without_aiding - yaw_state; _unaided_yaw = matrix::wrap_pi(_unaided_yaw + unaided_delta_yaw); + + // angular velocity downsampling + _delta_angle_sum *= delta_quat_unaided; + _delta_angle_sum.normalize(); + _delta_angle_sum_dt += delta_angle_dt; } void OutputPredictor::correctOutputStates(const uint64_t time_delayed_us, @@ -412,3 +420,17 @@ void OutputPredictor::resetVelocityDerivativeAccumulation() _delta_vel_dt = 0.f; _delta_vel_sum.setZero(); } + +Vector3f OutputPredictor::getAngularVelocityAndResetAccumulator() +{ + Vector3f angular_velocity; + + if (_delta_angle_sum_dt > FLT_EPSILON) { + angular_velocity = AxisAnglef(_delta_angle_sum) / _delta_angle_sum_dt; + } + + _delta_angle_sum.setIdentity(); + _delta_angle_sum_dt = 0.f; + + return angular_velocity; +} diff --git a/src/modules/ekf2/EKF/output_predictor/output_predictor.h b/src/modules/ekf2/EKF/output_predictor/output_predictor.h index e90bdf9481..f9643b3ec2 100644 --- a/src/modules/ekf2/EKF/output_predictor/output_predictor.h +++ b/src/modules/ekf2/EKF/output_predictor/output_predictor.h @@ -95,6 +95,8 @@ public: const matrix::Quatf &getQuaternion() const { return _output_new.quat_nominal; } + matrix::Vector3f getAngularVelocityAndResetAccumulator(); + // get a yaw value solely based on bias-removed gyro integration float getUnaidedYaw() const { return _unaided_yaw; } @@ -192,6 +194,8 @@ private: matrix::Vector3f _imu_pos_body{}; ///< xyz position of IMU in body frame (m) + matrix::Quatf _delta_angle_sum{}; + float _delta_angle_sum_dt{0.f}; float _unaided_yaw{}; // output complementary filter tuning diff --git a/src/modules/ekf2/EKF2.cpp b/src/modules/ekf2/EKF2.cpp index f39501ee6a..319dbfd926 100644 --- a/src/modules/ekf2/EKF2.cpp +++ b/src/modules/ekf2/EKF2.cpp @@ -1676,9 +1676,7 @@ void EKF2::PublishOdometry(const hrt_abstime ×tamp, const imuSample &imu_sa _ekf.getVelocity().copyTo(odom.velocity); // angular_velocity - const Vector3f rates{imu_sample.delta_ang / imu_sample.delta_ang_dt}; - const Vector3f angular_velocity = rates - _ekf.getGyroBias(); - angular_velocity.copyTo(odom.angular_velocity); + _ekf.getAngularVelocityAndResetAccumulator().copyTo(odom.angular_velocity); // velocity covariances _ekf.getVelocityVariance().copyTo(odom.velocity_variance); diff --git a/src/modules/ekf2/test/test_EKF_gps.cpp b/src/modules/ekf2/test/test_EKF_gps.cpp index f6aae937df..cc738a3f6f 100644 --- a/src/modules/ekf2/test/test_EKF_gps.cpp +++ b/src/modules/ekf2/test/test_EKF_gps.cpp @@ -84,12 +84,19 @@ TEST_F(EkfGpsTest, gpsTimeout) // WHEN: the number of satellites drops below the minimum _sensor_simulator._gps.setNumberOfSatellites(3); + // THEN: the GNSS fusion does not stop because other metrics are good enough + _sensor_simulator.runSeconds(8); + EXPECT_TRUE(_ekf_wrapper.isIntendingGpsFusion()); + + // WHEN: the fix type drops + _sensor_simulator._gps.setFixType(0); + // THEN: the GNSS fusion stops after some time _sensor_simulator.runSeconds(8); EXPECT_FALSE(_ekf_wrapper.isIntendingGpsFusion()); - // BUT WHEN: the number of satellites is good again - _sensor_simulator._gps.setNumberOfSatellites(16); + // BUT WHEN: the fix type is good again + _sensor_simulator._gps.setFixType(3); // THEN: the GNSS fusion restarts _sensor_simulator.runSeconds(6); diff --git a/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp b/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp index f23ec7dc02..1ae5d733f0 100644 --- a/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp +++ b/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.cpp @@ -70,7 +70,10 @@ bool FlightTaskAuto::activate(const trajectory_setpoint_s &last_setpoint) _position_smoothing.reset(accel_prev, vel_prev, pos_prev); - _yaw_sp_prev = PX4_ISFINITE(last_setpoint.yaw) ? last_setpoint.yaw : _yaw; + _yaw_setpoint_previous = last_setpoint.yaw; + _heading_smoothing.reset(PX4_ISFINITE(last_setpoint.yaw) ? last_setpoint.yaw : _yaw, + PX4_ISFINITE(last_setpoint.yawspeed) ? last_setpoint.yawspeed : 0.f); + _updateTrajConstraints(); _is_emergency_braking_active = false; _time_last_cruise_speed_override = 0; @@ -190,16 +193,14 @@ bool FlightTaskAuto::update() // no valid heading -> generate heading in this flight task // Generate heading along trajectory if possible, otherwise hold the previous yaw setpoint if (!_generateHeadingAlongTraj()) { - _yaw_setpoint = PX4_ISFINITE(_yaw_sp_prev) ? _yaw_sp_prev : _yaw; + _yaw_setpoint = _yaw_setpoint_previous; } } // update previous type _type_previous = _type; - // If the FlightTask generates a yaw or a yawrate setpoint that exceeds this value - // it will see its setpoint constrained here - _limitYawRate(); + _smoothYaw(); _constraints.want_takeoff = _checkTakeoff(); @@ -257,7 +258,7 @@ void FlightTaskAuto::_prepareLandSetpoints() if (sticks_xy.longerThan(FLT_EPSILON)) { // Ensure no unintended yawing when nudging horizontally during initial heading alignment - _land_heading = _yaw_sp_prev; + _land_heading = _yaw_setpoint_previous; } rcHelpModifyYaw(_land_heading); @@ -300,39 +301,32 @@ void FlightTaskAuto::_prepareLandSetpoints() _gear.landing_gear = landing_gear_s::GEAR_DOWN; } -void FlightTaskAuto::_limitYawRate() +void FlightTaskAuto::_smoothYaw() { const float yawrate_max = math::radians(_param_mpc_yawrauto_max.get()); + _heading_smoothing.setMaxHeadingRate(yawrate_max); + _heading_smoothing.setMaxHeadingAccel(math::radians(_param_mpc_yawrauto_acc.get())); _yaw_sp_aligned = true; - if (PX4_ISFINITE(_yaw_setpoint) && PX4_ISFINITE(_yaw_sp_prev)) { - // Limit the rate of change of the yaw setpoint - const float dyaw_desired = matrix::wrap_pi(_yaw_setpoint - _yaw_sp_prev); - const float dyaw_max = yawrate_max * _deltatime; - const float dyaw = math::constrain(dyaw_desired, -dyaw_max, dyaw_max); - const float yaw_setpoint_sat = matrix::wrap_pi(_yaw_sp_prev + dyaw); + if (PX4_ISFINITE(_yaw_setpoint)) { + const float yaw_sp_unsmoothed = _yaw_setpoint; + _heading_smoothing.update(_yaw_setpoint, _deltatime); + _yaw_setpoint = _heading_smoothing.getSmoothedHeading(); + _yawspeed_setpoint = _heading_smoothing.getSmoothedHeadingRate(); // The yaw setpoint is aligned when it is within tolerance - _yaw_sp_aligned = fabsf(matrix::wrap_pi(_yaw_setpoint - yaw_setpoint_sat)) < math::radians(_param_mis_yaw_err.get()); + _yaw_sp_aligned = fabsf(matrix::wrap_pi(yaw_sp_unsmoothed - _yaw_setpoint)) < math::radians(_param_mis_yaw_err.get()); - _yaw_setpoint = yaw_setpoint_sat; - - if (!PX4_ISFINITE(_yawspeed_setpoint) && (_deltatime > FLT_EPSILON)) { - // Create a feedforward using the filtered derivative - _yawspeed_filter.setParameters(_deltatime, .2f); - _yawspeed_filter.update(dyaw / _deltatime); - _yawspeed_setpoint = _yawspeed_filter.getState(); - } + } else { + _heading_smoothing.reset(_yaw, 0.f); } - _yaw_sp_prev = PX4_ISFINITE(_yaw_setpoint) ? _yaw_setpoint : _yaw; + _yaw_setpoint_previous = _yaw_setpoint; if (PX4_ISFINITE(_yawspeed_setpoint)) { // The yaw setpoint is aligned when its rate is not saturated _yaw_sp_aligned = _yaw_sp_aligned && (fabsf(_yawspeed_setpoint) < yawrate_max); - - _yawspeed_setpoint = math::constrain(_yawspeed_setpoint, -yawrate_max, yawrate_max); } } @@ -725,7 +719,7 @@ void FlightTaskAuto::_ekfResetHandlerVelocityZ(float delta_vz) void FlightTaskAuto::_ekfResetHandlerHeading(float delta_psi) { - _yaw_sp_prev += delta_psi; + _yaw_setpoint_previous += delta_psi; } void FlightTaskAuto::_checkEmergencyBraking() diff --git a/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.hpp b/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.hpp index c177a74d5f..00610d910c 100644 --- a/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.hpp +++ b/src/modules/flight_mode_manager/tasks/Auto/FlightTaskAuto.hpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -136,8 +137,8 @@ protected: State _current_state{State::none}; float _target_acceptance_radius{0.0f}; /**< Acceptances radius of the target */ - float _yaw_sp_prev{NAN}; - AlphaFilter _yawspeed_filter; + float _yaw_setpoint_previous{NAN}; /**< Used because _yaw_setpoint is overwritten in multiple places */ + HeadingSmoothing _heading_smoothing; bool _yaw_sp_aligned{false}; PositionSmoothing _position_smoothing; @@ -156,6 +157,7 @@ protected: (ParamFloat) _param_nav_mc_alt_rad, //vertical acceptance radius at which waypoints are updated (ParamInt) _param_mpc_yaw_mode, // defines how heading is executed, + (ParamFloat) _param_mpc_yawrauto_acc, (ParamFloat) _param_mpc_yawrauto_max, (ParamFloat) _param_mis_yaw_err, // yaw-error threshold (ParamFloat) _param_mpc_acc_hor, // acceleration in flight @@ -201,7 +203,7 @@ private: matrix::Vector3f _initial_land_position; - void _limitYawRate(); /**< Limits the rate of change of the yaw setpoint. */ + void _smoothYaw(); /**< Smoothen the yaw setpoint. */ bool _evaluateTriplets(); /**< Checks and sets triplets. */ bool _isFinite(const position_setpoint_s &sp); /**< Checks if all waypoint triplets are finite. */ bool _evaluateGlobalReference(); /**< Check is global reference is available. */ diff --git a/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp b/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp index 3136c98051..70b5835a6c 100644 --- a/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp +++ b/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.cpp @@ -179,8 +179,8 @@ bool FlightTaskOrbit::activate(const trajectory_setpoint_s &last_setpoint) _orbit_velocity = 1.f; _center = _position; _initial_heading = _yaw; - _slew_rate_yaw.setForcedValue(_yaw); - _slew_rate_yaw.setSlewRate(math::radians(_param_mpc_yawrauto_max.get())); + _heading_smoothing.reset(PX4_ISFINITE(last_setpoint.yaw) ? last_setpoint.yaw : _yaw, + PX4_ISFINITE(last_setpoint.yawspeed) ? last_setpoint.yawspeed : 0.f); _slew_rate_velocity.setSlewRate(_param_mpc_acc_hor.get()); // need a valid position and velocity @@ -238,7 +238,14 @@ bool FlightTaskOrbit::update() } // Apply yaw smoothing - _yaw_setpoint = _slew_rate_yaw.update(_yaw_setpoint, _deltatime); + _heading_smoothing.setMaxHeadingRate(math::radians(_param_mpc_yawrauto_max.get())); + _heading_smoothing.setMaxHeadingAccel(math::radians(_param_mpc_yawrauto_acc.get())); + _heading_smoothing.update(_yaw_setpoint, _deltatime); + _yaw_setpoint = _heading_smoothing.getSmoothedHeading(); + + if (_in_circle_approach) { // don't override feed-forward which is already calculated for circling + _yawspeed_setpoint = _heading_smoothing.getSmoothedHeadingRate(); + } // publish information to UI sendTelemetry(); @@ -362,7 +369,7 @@ void FlightTaskOrbit::_generate_circle_yaw_setpoints() case orbit_status_s::ORBIT_YAW_BEHAVIOUR_UNCONTROLLED: // no yaw setpoint _yaw_setpoint = NAN; - _yawspeed_setpoint = NAN; + _yawspeed_setpoint = 0.f; // No yaw setpoint is invalid -> just brake to 0°/s break; case orbit_status_s::ORBIT_YAW_BEHAVIOUR_HOLD_FRONT_TANGENT_TO_CIRCLE: diff --git a/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.hpp b/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.hpp index 13e53bf83f..af4ddc67be 100644 --- a/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.hpp +++ b/src/modules/flight_mode_manager/tasks/Orbit/FlightTaskOrbit.hpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -127,7 +128,7 @@ private: bool _started_clockwise{true}; bool _currently_orbiting{false}; float _initial_heading = 0.f; /**< the heading of the drone when the orbit command was issued */ - SlewRateYaw _slew_rate_yaw; + HeadingSmoothing _heading_smoothing; SlewRate _slew_rate_velocity; orb_advert_t _mavlink_log_pub{nullptr}; @@ -138,6 +139,7 @@ private: (ParamInt) _param_mc_orbit_yaw_mod, (ParamFloat) _param_mpc_xy_cruise, /**< cruise speed for circle approach */ (ParamFloat) _param_mpc_yawrauto_max, + (ParamFloat) _param_mpc_yawrauto_acc, (ParamFloat) _param_mpc_xy_traj_p, (ParamFloat) _param_nav_mc_alt_rad, //vertical acceptance radius at which waypoints are updated diff --git a/src/modules/fw_att_control/FixedwingAttitudeControl.cpp b/src/modules/fw_att_control/FixedwingAttitudeControl.cpp index 9057d792b9..f9328635e6 100644 --- a/src/modules/fw_att_control/FixedwingAttitudeControl.cpp +++ b/src/modules/fw_att_control/FixedwingAttitudeControl.cpp @@ -47,6 +47,7 @@ FixedwingAttitudeControl::FixedwingAttitudeControl(bool vtol) : { /* fetch initial parameter values */ parameters_update(); + _landing_gear_wheel_pub.advertise(); } FixedwingAttitudeControl::~FixedwingAttitudeControl() @@ -82,6 +83,7 @@ FixedwingAttitudeControl::parameters_update() _wheel_ctrl.set_k_ff(_param_fw_wr_ff.get()); _wheel_ctrl.set_integrator_max(_param_fw_wr_imax.get()); _wheel_ctrl.set_max_rate(radians(_param_fw_w_rmax.get())); + _wheel_ctrl.set_time_constant(0.1f); } void @@ -108,8 +110,6 @@ FixedwingAttitudeControl::vehicle_manual_poll(const float yaw_body) const Quatf q(Eulerf(roll_body, pitch_body, yaw_body)); q.copyTo(_att_sp.q_d); - _att_sp.reset_integral = false; - _att_sp.timestamp = hrt_absolute_time(); _attitude_sp_pub.publish(_att_sp); @@ -269,12 +269,6 @@ void FixedwingAttitudeControl::Run() vehicle_land_detected_poll(); - bool wheel_control = false; - - if (_param_fw_w_en.get() && _att_sp.fw_control_yaw_wheel && _vcontrol_mode.flag_control_auto_enabled) { - wheel_control = true; - } - /* if we are in rotary wing mode, do nothing */ if (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING && !_vehicle_status.is_vtol) { perf_end(_loop_perf); @@ -283,11 +277,10 @@ void FixedwingAttitudeControl::Run() if (_vcontrol_mode.flag_control_rates_enabled) { - /* Reset integrators if commanded by attitude setpoint, or the aircraft is on ground + /* Reset integrators if the aircraft is on ground * or a multicopter (but not transitioning VTOL or tailsitter) */ - if (_att_sp.reset_integral - || _landed + if (_landed || !_in_fw_or_transition_wo_tailsitter_transition) { _rates_sp.reset_integral = true; @@ -297,27 +290,6 @@ void FixedwingAttitudeControl::Run() _rates_sp.reset_integral = false; } - float groundspeed_scale = 1.f; - - if (wheel_control) { - if (_local_pos_sub.updated()) { - vehicle_local_position_s vehicle_local_position; - - if (_local_pos_sub.copy(&vehicle_local_position)) { - _groundspeed = sqrtf(vehicle_local_position.vx * vehicle_local_position.vx + vehicle_local_position.vy * - vehicle_local_position.vy); - } - } - - // Use stall airspeed to calculate ground speed scaling region. Don't scale below gspd_scaling_trim - float gspd_scaling_trim = (_param_fw_airspd_stall.get()); - - if (_groundspeed > gspd_scaling_trim) { - groundspeed_scale = gspd_scaling_trim / _groundspeed; - - } - } - /* Run attitude controllers */ if (_vcontrol_mode.flag_control_attitude_enabled && _in_fw_or_transition_wo_tailsitter_transition) { @@ -335,13 +307,6 @@ void FixedwingAttitudeControl::Run() _yaw_ctrl.control_yaw(roll_sp, _pitch_ctrl.get_euler_rate_setpoint(), euler_angles.phi(), euler_angles.theta(), get_airspeed_constrained()); - if (wheel_control) { - _wheel_ctrl.control_attitude(euler_sp.psi(), euler_angles.psi()); - - } else { - _wheel_ctrl.reset_integrator(); - } - /* 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()); @@ -382,40 +347,61 @@ void FixedwingAttitudeControl::Run() _rate_sp_pub.publish(_rates_sp); } } + } - // wheel control - float wheel_u = 0.f; + // steering wheel control + fixed_wing_runway_control_s runway_control{}; + _fixed_wing_runway_control_sub.copy(&runway_control); + const bool runway_control_recent = hrt_elapsed_time(&runway_control.timestamp) < 1_s; + const bool wheel_controller_enabled = _param_fw_w_en.get() && _vcontrol_mode.flag_control_auto_enabled + && runway_control_recent && runway_control.wheel_steering_enabled; - if (_vcontrol_mode.flag_control_manual_enabled) { - // always direct control of steering wheel with yaw stick in manual modes - wheel_u = _manual_control_setpoint.yaw; + float groundspeed_scale = 1.f; + float wheel_u = 0.f; - } else { - vehicle_angular_velocity_s angular_velocity{}; - _vehicle_rates_sub.copy(&angular_velocity); + if (wheel_controller_enabled) { + if (_local_pos_sub.updated()) { + vehicle_local_position_s vehicle_local_position; - // XXX: yaw_sp_move_rate here is an abuse -- used to ferry manual yaw inputs from - // position controller during auto modes _manual_control_setpoint.r gets passed - // whenever nudging is enabled, otherwise zero - const float wheel_controller_output = _wheel_ctrl.control_bodyrate(dt, angular_velocity.xyz[2], _groundspeed, - groundspeed_scale); - wheel_u = wheel_control ? wheel_controller_output + _att_sp.yaw_sp_move_rate : 0.f; + if (_local_pos_sub.copy(&vehicle_local_position)) { + _groundspeed = sqrtf(vehicle_local_position.vx * vehicle_local_position.vx + vehicle_local_position.vy * + vehicle_local_position.vy); + } } - _landing_gear_wheel.normalized_wheel_setpoint = PX4_ISFINITE(wheel_u) ? wheel_u : 0.f; - _landing_gear_wheel.timestamp = hrt_absolute_time(); - _landing_gear_wheel_pub.publish(_landing_gear_wheel); + // Use stall airspeed to calculate ground speed scaling region. Don't scale below gspd_scaling_trim + float gspd_scaling_trim = (_param_fw_airspd_stall.get()); + + if (_groundspeed > gspd_scaling_trim) { + groundspeed_scale = gspd_scaling_trim / _groundspeed; + + } + + // set now yaw setpoint once we're entering the first time + if (!PX4_ISFINITE(_steering_wheel_yaw_setpoint)) { + _steering_wheel_yaw_setpoint = euler_angles.psi(); + } + + _wheel_ctrl.control_attitude(_steering_wheel_yaw_setpoint, euler_angles.psi()); + + vehicle_angular_velocity_s angular_velocity{}; + _vehicle_rates_sub.copy(&angular_velocity); + + const float wheel_controller_output = wheel_controller_enabled ? _wheel_ctrl.control_bodyrate(dt, + angular_velocity.xyz[2], _groundspeed, + groundspeed_scale) : 0.f; + + wheel_u = wheel_controller_output + runway_control.wheel_steering_nudging_rate; } else { - // full manual _wheel_ctrl.reset_integrator(); - - _landing_gear_wheel.normalized_wheel_setpoint = PX4_ISFINITE(_manual_control_setpoint.yaw) ? - _manual_control_setpoint.yaw : 0.f; - _landing_gear_wheel.timestamp = hrt_absolute_time(); - _landing_gear_wheel_pub.publish(_landing_gear_wheel); - + _steering_wheel_yaw_setpoint = NAN; + wheel_u = _manual_control_setpoint.yaw; // direct yaw stick to wheel steering } + + _landing_gear_wheel.normalized_wheel_setpoint = PX4_ISFINITE(wheel_u) ? wheel_u : 0.f; + _landing_gear_wheel.timestamp = hrt_absolute_time(); + _landing_gear_wheel_pub.publish(_landing_gear_wheel); } // backup schedule diff --git a/src/modules/fw_att_control/FixedwingAttitudeControl.hpp b/src/modules/fw_att_control/FixedwingAttitudeControl.hpp index 6c902878e1..73a08c00e0 100644 --- a/src/modules/fw_att_control/FixedwingAttitudeControl.hpp +++ b/src/modules/fw_att_control/FixedwingAttitudeControl.hpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -100,6 +101,7 @@ private: uORB::Subscription _att_sp_sub{ORB_ID(vehicle_attitude_setpoint)}; /**< vehicle attitude setpoint */ uORB::Subscription _autotune_attitude_control_status_sub{ORB_ID(autotune_attitude_control_status)}; + uORB::Subscription _fixed_wing_runway_control_sub{ORB_ID(fixed_wing_runway_control)}; uORB::Subscription _local_pos_sub{ORB_ID(vehicle_local_position)}; /**< local position subscription */ uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; /**< notification of manual control updates */ uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; /**< vehicle status subscription */ @@ -129,10 +131,10 @@ private: bool _landed{true}; float _groundspeed{0.f}; bool _in_fw_or_transition_wo_tailsitter_transition{false}; // only run the FW attitude controller in these states + float _steering_wheel_yaw_setpoint{NAN}; DEFINE_PARAMETERS( (ParamFloat) _param_fw_airspd_max, - (ParamFloat) _param_fw_airspd_min, (ParamFloat) _param_fw_airspd_stall, (ParamFloat) _param_fw_airspd_trim, (ParamBool) _param_fw_use_airspd, diff --git a/src/modules/fw_att_control/fw_wheel_controller.cpp b/src/modules/fw_att_control/fw_wheel_controller.cpp index e26d9a5d38..3868a97369 100644 --- a/src/modules/fw_att_control/fw_wheel_controller.cpp +++ b/src/modules/fw_att_control/fw_wheel_controller.cpp @@ -58,7 +58,7 @@ float WheelController::control_bodyrate(float dt, float body_z_rate, float groun if (_k_i > 0.f && groundspeed > 1.f) { // only start integrating when above 1m/s - float id = rate_error * dt * groundspeed_scaler; + float id = rate_error * dt * groundspeed_scaler * groundspeed_scaler; if (_last_output < -1.f) { /* only allow motion to center: increase value */ @@ -74,7 +74,7 @@ float WheelController::control_bodyrate(float dt, float body_z_rate, float groun /* Apply PI rate controller and store non-limited output */ _last_output = _body_rate_setpoint * _k_ff * groundspeed_scaler + - groundspeed_scaler * groundspeed_scaler * (rate_error * _k_p + _integrator); + groundspeed_scaler * groundspeed_scaler * (rate_error * _k_p) + _integrator; return math::constrain(_last_output, -1.f, 1.f); } diff --git a/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt b/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt new file mode 100644 index 0000000000..7642594b7a --- /dev/null +++ b/src/modules/fw_lateral_longitudinal_control/CMakeLists.txt @@ -0,0 +1,15 @@ +set(CONTROL_DEPENDENCIES + npfg + tecs +) + + +px4_add_module( + MODULE modules__fw_lateral_longitudinal_control + MAIN fw_lat_lon_control + SRCS + FwLateralLongitudinalControl.cpp + FwLateralLongitudinalControl.hpp + DEPENDS + ${CONTROL_DEPENDENCIES} +) diff --git a/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp new file mode 100644 index 0000000000..1c42f5838c --- /dev/null +++ b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.cpp @@ -0,0 +1,848 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "FwLateralLongitudinalControl.hpp" +#include + +using math::constrain; +using math::max; +using math::radians; + +using matrix::Dcmf; +using matrix::Eulerf; +using matrix::Quatf; +using matrix::Vector2f; + +// [m/s] maximum reference altitude rate threshhold +static constexpr float MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT = 0.1f; +// [us] time after which the wind estimate is disabled if no longer updating +static constexpr hrt_abstime WIND_EST_TIMEOUT = 10_s; +// [s] slew rate with which we change altitude time constant +static constexpr float TECS_ALT_TIME_CONST_SLEW_RATE = 1.0f; + +static constexpr float HORIZONTAL_EVH_FACTOR_COURSE_VALID{3.f}; ///< Factor of velocity standard deviation above which course calculation is considered good enough +static constexpr float HORIZONTAL_EVH_FACTOR_COURSE_INVALID{2.f}; ///< Factor of velocity standard deviation below which course calculation is considered unsafe +static constexpr float COS_HEADING_TRACK_ANGLE_NOT_PUSHED_BACK{0.09f}; ///< Cos of Heading to track angle below which it is assumed that the vehicle is not pushed back by the wind ~cos(85°) +static constexpr float COS_HEADING_TRACK_ANGLE_PUSHED_BACK{0.f}; ///< Cos of Heading to track angle above which it is assumed that the vehicle is pushed back by the wind + +// [s] Timeout that has to pass in roll-constraining failsafe before warning is triggered +static constexpr uint64_t ROLL_WARNING_TIMEOUT = 2_s; + +// [-] Can-run threshold needed to trigger the roll-constraining failsafe warning +static constexpr float ROLL_WARNING_CAN_RUN_THRESHOLD = 0.9f; + +// [m/s/s] slew rate limit for airspeed setpoint changes +static constexpr float ASPD_SP_SLEW_RATE = 1.f; + +FwLateralLongitudinalControl::FwLateralLongitudinalControl(bool is_vtol) : + ModuleParams(nullptr), + WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers), + _attitude_sp_pub(is_vtol ? ORB_ID(fw_virtual_attitude_setpoint) : ORB_ID(vehicle_attitude_setpoint)), + _loop_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")) +{ + _tecs_status_pub.advertise(); + _flight_phase_estimation_pub.advertise(); + _fixed_wing_lateral_status_pub.advertise(); + parameters_update(); + _airspeed_slew_rate_controller.setSlewRate(ASPD_SP_SLEW_RATE); +} + +FwLateralLongitudinalControl::~FwLateralLongitudinalControl() +{ + perf_free(_loop_perf); +} +void +FwLateralLongitudinalControl::parameters_update() +{ + updateParams(); + _performance_model.updateParameters(); + _performance_model.runSanityChecks(); + + _tecs.set_max_climb_rate(_performance_model.getMaximumClimbRate(_air_density)); + _tecs.set_max_sink_rate(_param_fw_t_sink_max.get()); + _tecs.set_min_sink_rate(_performance_model.getMinimumSinkRate(_air_density)); + _tecs.set_equivalent_airspeed_trim(_performance_model.getCalibratedTrimAirspeed()); + _tecs.set_equivalent_airspeed_min(_performance_model.getMinimumCalibratedAirspeed(getLoadFactor(), _flaps_setpoint)); + _tecs.set_equivalent_airspeed_max(_performance_model.getMaximumCalibratedAirspeed()); + _tecs.set_throttle_damp(_param_fw_t_thr_damping.get()); + _tecs.set_integrator_gain_throttle(_param_fw_t_thr_integ.get()); + _tecs.set_integrator_gain_pitch(_param_fw_t_I_gain_pit.get()); + _tecs.set_throttle_slewrate(_param_fw_thr_slew_max.get()); + _tecs.set_vertical_accel_limit(_param_fw_t_vert_acc.get()); + _tecs.set_roll_throttle_compensation(_param_fw_t_rll2thr.get()); + _tecs.set_pitch_damping(_param_fw_t_ptch_damp.get()); + _tecs.set_altitude_error_time_constant(_param_fw_t_h_error_tc.get()); + _tecs.set_fast_descend_altitude_error(_param_fw_t_fast_alt_err.get()); + _tecs.set_altitude_rate_ff(_param_fw_t_hrate_ff.get()); + _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()); +} + +void FwLateralLongitudinalControl::Run() +{ + if (should_exit()) { + _local_pos_sub.unregisterCallback(); + exit_and_cleanup(); + return; + } + + perf_begin(_loop_perf); + + /* only run controller if position changed */ + // check for parameter updates + if (_parameter_update_sub.updated()) { + // clear update + parameter_update_s pupdate; + _parameter_update_sub.copy(&pupdate); + + // update parameters from storage + parameters_update(); + } + + if (_local_pos_sub.update(&_local_pos)) { + + const float control_interval = math::constrain((_local_pos.timestamp - _last_time_loop_ran) * 1e-6f, + 0.001f, 0.1f); + _last_time_loop_ran = _local_pos.timestamp; + + updateControllerConfiguration(); + + _tecs.set_speed_weight(_long_configuration.speed_weight); + updateTECSAltitudeTimeConstant(checkLowHeightConditions() + || _long_configuration.enforce_low_height_condition, control_interval); + _tecs.set_altitude_error_time_constant(_tecs_alt_time_const_slew_rate.getState()); + + if (_vehicle_air_data_sub.updated()) { + _vehicle_air_data_sub.update(); + _air_density = PX4_ISFINITE(_vehicle_air_data_sub.get().rho) ? _vehicle_air_data_sub.get().rho : _air_density; + _tecs.set_max_climb_rate(_performance_model.getMaximumClimbRate(_air_density)); + _tecs.set_min_sink_rate(_performance_model.getMinimumSinkRate(_air_density)); + } + + if (_vehicle_landed_sub.updated()) { + vehicle_land_detected_s landed{}; + _vehicle_landed_sub.copy(&landed); + _landed = landed.landed; + } + + _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_UNKNOWN; + + _vehicle_status_sub.update(); + _control_mode_sub.update(); + + if (_flaps_setpoint_sub.updated()) { + normalized_unsigned_setpoint_s flaps_setpoint{}; + _flaps_setpoint_sub.copy(&flaps_setpoint); + _flaps_setpoint = flaps_setpoint.normalized_setpoint; + } + + update_control_state(); + + if (_control_mode_sub.get().flag_control_manual_enabled && _control_mode_sub.get().flag_control_altitude_enabled + && _local_pos.z_reset_counter != _z_reset_counter) { + if (_control_mode_sub.get().flag_control_altitude_enabled && _local_pos.z_reset_counter != _z_reset_counter) { + // make TECS accept step in altitude and demanded altitude + _tecs.handle_alt_step(_long_control_state.altitude_msl, _long_control_state.height_rate); + } + } + + const bool should_run = (_control_mode_sub.get().flag_control_position_enabled || + _control_mode_sub.get().flag_control_velocity_enabled || + _control_mode_sub.get().flag_control_acceleration_enabled || + _control_mode_sub.get().flag_control_altitude_enabled || + _control_mode_sub.get().flag_control_climb_rate_enabled) && + (_vehicle_status_sub.get().vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING + || _vehicle_status_sub.get().in_transition_mode); + + if (should_run) { + + // ----- Longitudinal ------ + float pitch_sp{NAN}; + float throttle_sp{NAN}; + + if (_fw_longitudinal_ctrl_sub.updated()) { + _fw_longitudinal_ctrl_sub.copy(&_long_control_sp); + } + + const float airspeed_sp_eas = adapt_airspeed_setpoint(control_interval, _long_control_sp.equivalent_airspeed, + _min_airspeed_from_guidance, _lateral_control_state.wind_speed.length()); + + // If the both altitude and height rate are set, set altitude setpoint to NAN + const float altitude_sp = PX4_ISFINITE(_long_control_sp.height_rate) ? NAN : _long_control_sp.altitude; + + tecs_update_pitch_throttle(control_interval, altitude_sp, + airspeed_sp_eas, + _long_configuration.pitch_min, + _long_configuration.pitch_max, + _long_configuration.throttle_min, + _long_configuration.throttle_max, + _long_configuration.sink_rate_target, + _long_configuration.climb_rate_target, + _long_configuration.disable_underspeed_protection, + _long_control_sp.height_rate + ); + + pitch_sp = PX4_ISFINITE(_long_control_sp.pitch_direct) ? _long_control_sp.pitch_direct : _tecs.get_pitch_setpoint(); + throttle_sp = PX4_ISFINITE(_long_control_sp.throttle_direct) ? _long_control_sp.throttle_direct : + _tecs.get_throttle_setpoint(); + + // ----- Lateral ------ + float roll_sp {NAN}; + + if (_fw_lateral_ctrl_sub.updated()) { + // We store the update of _fw_lateral_ctrl_sub in a member variable instead of only local such that we can run + // the controllers also without new setpoints. + _fw_lateral_ctrl_sub.copy(&_lat_control_sp); + } + + float airspeed_direction_sp{NAN}; + float lateral_accel_sp {NAN}; + const Vector2f airspeed_vector = _lateral_control_state.ground_speed - _lateral_control_state.wind_speed; + + if (PX4_ISFINITE(_lat_control_sp.course) && !PX4_ISFINITE(_lat_control_sp.airspeed_direction)) { + // only use the course setpoint if it's finite but airspeed_direction is not + + airspeed_direction_sp = _course_to_airspeed.mapCourseSetpointToHeadingSetpoint( + _lat_control_sp.course, _lateral_control_state.wind_speed, + airspeed_sp_eas); + + // Note: the here updated _min_airspeed_from_guidance is only used in the next iteration + // in the longitudinal controller. + const float max_true_airspeed = _performance_model.getMaximumCalibratedAirspeed() * _long_control_state.eas2tas; + _min_airspeed_from_guidance = _course_to_airspeed.getMinAirspeedForCurrentBearing( + _lat_control_sp.course, _lateral_control_state.wind_speed, + max_true_airspeed, _param_fw_gnd_spd_min.get()) + / _long_control_state.eas2tas; + + } else if (PX4_ISFINITE(_lat_control_sp.airspeed_direction)) { + // If the airspeed_direction is finite we use that instead of the course. + + airspeed_direction_sp = _lat_control_sp.airspeed_direction; + _min_airspeed_from_guidance = 0.f; // reset if no longer in course control + + } else { + _min_airspeed_from_guidance = 0.f; // reset if no longer in course control + } + + if (PX4_ISFINITE(airspeed_direction_sp)) { + const float heading = atan2f(airspeed_vector(1), airspeed_vector(0)); + lateral_accel_sp = _airspeed_direction_control.controlHeading(airspeed_direction_sp, heading, + airspeed_vector.norm()); + } + + if (PX4_ISFINITE(_lat_control_sp.lateral_acceleration)) { + lateral_accel_sp = PX4_ISFINITE(lateral_accel_sp) ? lateral_accel_sp + _lat_control_sp.lateral_acceleration : + _lat_control_sp.lateral_acceleration; + } + + if (!PX4_ISFINITE(lateral_accel_sp)) { + lateral_accel_sp = 0.f; // mitigation if no valid setpoint is received: 0 lateral acceleration + } + + lateral_accel_sp = getCorrectedLateralAccelSetpoint(lateral_accel_sp); + lateral_accel_sp = math::constrain(lateral_accel_sp, -_lateral_configuration.lateral_accel_max, + _lateral_configuration.lateral_accel_max); + roll_sp = mapLateralAccelerationToRollAngle(lateral_accel_sp); + + fixed_wing_lateral_status_s fixed_wing_lateral_status{}; + fixed_wing_lateral_status.timestamp = hrt_absolute_time(); + fixed_wing_lateral_status.lateral_acceleration_setpoint = lateral_accel_sp; + fixed_wing_lateral_status.can_run_factor = _can_run_factor; + + _fixed_wing_lateral_status_pub.publish(fixed_wing_lateral_status); + + // 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 + const float thrust_body_x = PX4_ISFINITE(throttle_sp) ? throttle_sp : 0.0f; + + if (_control_mode_sub.get().flag_control_manual_enabled) { + roll_body = constrain(roll_body, -radians(_param_fw_r_lim.get()), + radians(_param_fw_r_lim.get())); + pitch_body = constrain(pitch_body, radians(_param_fw_p_lim_min.get()), + radians(_param_fw_p_lim_max.get())); + } + + // roll slew rate + roll_body = _roll_slew_rate.update(roll_body, control_interval); + + _att_sp.timestamp = hrt_absolute_time(); + const Quatf q(Eulerf(roll_body, pitch_body, yaw_body)); + q.copyTo(_att_sp.q_d); + + _att_sp.thrust_body[0] = thrust_body_x; + + _attitude_sp_pub.publish(_att_sp); + + } + + _z_reset_counter = _local_pos.z_reset_counter; + } + + perf_end(_loop_perf); +} + +void FwLateralLongitudinalControl::updateControllerConfiguration() +{ + if (_lateral_configuration.timestamp == 0) { + _lateral_configuration.timestamp = _local_pos.timestamp; + _lateral_configuration.lateral_accel_max = tanf(radians(_param_fw_r_lim.get())) * CONSTANTS_ONE_G; + + } + + if (_long_configuration.timestamp == 0) { + setDefaultLongitudinalControlConfiguration(); + } + + if (_long_control_configuration_sub.updated() || _parameter_update_sub.updated()) { + longitudinal_control_configuration_s configuration_in{}; + _long_control_configuration_sub.copy(&configuration_in); + updateLongitudinalControlConfiguration(configuration_in); + } + + if (_lateral_control_configuration_sub.updated() || _parameter_update_sub.updated()) { + lateral_control_configuration_s configuration_in{}; + _lateral_control_configuration_sub.copy(&configuration_in); + _lateral_configuration.timestamp = configuration_in.timestamp; + + if (PX4_ISFINITE(configuration_in.lateral_accel_max)) { + _lateral_configuration.lateral_accel_max = min(configuration_in.lateral_accel_max, tanf(radians( + _param_fw_r_lim.get())) * CONSTANTS_ONE_G); + + } else { + _lateral_configuration.lateral_accel_max = tanf(radians(_param_fw_r_lim.get())) * CONSTANTS_ONE_G; + } + } +} + +void +FwLateralLongitudinalControl::tecs_update_pitch_throttle(const float control_interval, float alt_sp, float airspeed_sp, + float pitch_min_rad, float pitch_max_rad, float throttle_min, + float throttle_max, const float desired_max_sinkrate, + const float desired_max_climbrate, + bool disable_underspeed_detection, float hgt_rate_sp) +{ + bool tecs_is_running = true; + + // do not run TECS if vehicle is a VTOL and we are in rotary wing mode or in transition + if (_vehicle_status_sub.get().is_vtol + && (_vehicle_status_sub.get().vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING + || _vehicle_status_sub.get().in_transition_mode)) { + tecs_is_running = false; + return; + + } + + const float throttle_trim_compensated = _performance_model.getTrimThrottle(throttle_min, + throttle_max, airspeed_sp, _air_density); + + _tecs.set_detect_underspeed_enabled(!disable_underspeed_detection); + + // HOTFIX: the airspeed rate estimate using acceleration in body-forward direction has shown to lead to high biases + // when flying tight turns. It's in this case much safer to just set the estimated airspeed rate to 0. + const float airspeed_rate_estimate = 0.f; + + _tecs.update(_long_control_state.pitch_rad - radians(_param_fw_psp_off.get()), + _long_control_state.altitude_msl, + alt_sp, + airspeed_sp, + _long_control_state.airspeed_eas, + _long_control_state.eas2tas, + throttle_min, + throttle_max, + throttle_trim_compensated, + pitch_min_rad - radians(_param_fw_psp_off.get()), + pitch_max_rad - radians(_param_fw_psp_off.get()), + desired_max_climbrate, + desired_max_sinkrate, + airspeed_rate_estimate, + _long_control_state.height_rate, + hgt_rate_sp); + + tecs_status_publish(alt_sp, airspeed_sp, airspeed_rate_estimate, throttle_trim_compensated); + + if (tecs_is_running && !_vehicle_status_sub.get().in_transition_mode + && (_vehicle_status_sub.get().vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING)) { + const TECS::DebugOutput &tecs_output{_tecs.getStatus()}; + + // Check level flight: the height rate setpoint is not set or set to 0 and we are close to the target altitude and target altitude is not moving + if ((fabsf(tecs_output.height_rate_reference) < MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT) && + fabsf(_long_control_state.altitude_msl - tecs_output.altitude_reference) < _param_nav_fw_alt_rad.get()) { + _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_LEVEL; + + } else if (((tecs_output.altitude_reference - _long_control_state.altitude_msl) >= _param_nav_fw_alt_rad.get()) || + (tecs_output.height_rate_reference >= MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT)) { + _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_CLIMB; + + } else if (((_long_control_state.altitude_msl - tecs_output.altitude_reference) >= _param_nav_fw_alt_rad.get()) || + (tecs_output.height_rate_reference <= -MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT)) { + _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_DESCEND; + + } else { + //We can't infer the flight phase , do nothing, estimation is reset at each step + } + } +} + +void +FwLateralLongitudinalControl::tecs_status_publish(float alt_sp, float equivalent_airspeed_sp, + float true_airspeed_derivative_raw, float throttle_trim) +{ + tecs_status_s tecs_status{}; + + const TECS::DebugOutput &debug_output{_tecs.getStatus()}; + + tecs_status.altitude_sp = alt_sp; + tecs_status.altitude_reference = debug_output.altitude_reference; + tecs_status.altitude_time_constant = _tecs.get_altitude_error_time_constant(); + tecs_status.height_rate_reference = debug_output.height_rate_reference; + tecs_status.height_rate_direct = debug_output.height_rate_direct; + tecs_status.height_rate_setpoint = debug_output.control.altitude_rate_control; + tecs_status.height_rate = -_local_pos.vz; + tecs_status.equivalent_airspeed_sp = equivalent_airspeed_sp; + tecs_status.true_airspeed_sp = debug_output.true_airspeed_sp; + tecs_status.true_airspeed_filtered = debug_output.true_airspeed_filtered; + tecs_status.true_airspeed_derivative_sp = debug_output.control.true_airspeed_derivative_control; + tecs_status.true_airspeed_derivative = debug_output.true_airspeed_derivative; + tecs_status.true_airspeed_derivative_raw = true_airspeed_derivative_raw; + tecs_status.total_energy_rate = debug_output.control.total_energy_rate_estimate; + tecs_status.total_energy_balance_rate = debug_output.control.energy_balance_rate_estimate; + tecs_status.total_energy_rate_sp = debug_output.control.total_energy_rate_sp; + tecs_status.total_energy_balance_rate_sp = debug_output.control.energy_balance_rate_sp; + tecs_status.throttle_integ = debug_output.control.throttle_integrator; + tecs_status.pitch_integ = debug_output.control.pitch_integrator; + tecs_status.throttle_sp = _tecs.get_throttle_setpoint(); + tecs_status.pitch_sp_rad = _tecs.get_pitch_setpoint(); + tecs_status.throttle_trim = throttle_trim; + tecs_status.underspeed_ratio = _tecs.get_underspeed_ratio(); + tecs_status.fast_descend_ratio = debug_output.fast_descend; + + tecs_status.timestamp = hrt_absolute_time(); + + _tecs_status_pub.publish(tecs_status); +} + +int FwLateralLongitudinalControl::task_spawn(int argc, char *argv[]) +{ + bool is_vtol = false; + + if (argc > 1) { + if (strcmp(argv[1], "vtol") == 0) { + is_vtol = true; + } + } + + FwLateralLongitudinalControl *instance = new FwLateralLongitudinalControl(is_vtol); + + if (instance) { + _object.store(instance); + _task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + _object.store(nullptr); + _task_id = -1; + + return PX4_ERROR; +} + +bool +FwLateralLongitudinalControl::init() +{ + if (!_local_pos_sub.registerCallback()) { + PX4_ERR("callback registration failed"); + return false; + } + + return true; +} + +int FwLateralLongitudinalControl::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int FwLateralLongitudinalControl::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +fw_lat_lon_control computes attitude and throttle setpoints from lateral and longitudinal control setpoints. + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("fw_lat_lon_control", "controller"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_ARG("vtol", "VTOL mode", true); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +void FwLateralLongitudinalControl::update_control_state() { + updateAltitudeAndHeightRate(); + updateAirspeed(); + updateAttitude(); + updateWind(); + + _lateral_control_state.ground_speed = Vector2f(_local_pos.vx, _local_pos.vy); +} + +void FwLateralLongitudinalControl::updateWind() { + if (_wind_sub.updated()) { + wind_s wind{}; + _wind_sub.update(&wind); + + // assumes wind is valid if finite + _wind_valid = PX4_ISFINITE(wind.windspeed_north) + && PX4_ISFINITE(wind.windspeed_east); + + _time_wind_last_received = hrt_absolute_time(); + + _lateral_control_state.wind_speed(0) = wind.windspeed_north; + _lateral_control_state.wind_speed(1) = wind.windspeed_east; + + } else { + // invalidate wind estimate usage (and correspondingly NPFG, if enabled) after subscription timeout + _wind_valid = _wind_valid && (hrt_absolute_time() - _time_wind_last_received) < WIND_EST_TIMEOUT; + } + + if (!_wind_valid) { + _lateral_control_state.wind_speed.setZero(); + } +} + +void FwLateralLongitudinalControl::updateAltitudeAndHeightRate() { + float ref_alt{0.f}; + if (_local_pos.z_global && PX4_ISFINITE(_local_pos.ref_alt)) { + ref_alt = _local_pos.ref_alt; + } + + _long_control_state.altitude_msl = -_local_pos.z + ref_alt; // Altitude AMSL in meters + _long_control_state.height_rate = -_local_pos.vz; + +} + +void FwLateralLongitudinalControl::updateAttitude() { + vehicle_attitude_s att; + + if (_vehicle_attitude_sub.update(&att)) { + + Dcmf R{Quatf(att.q)}; + + // if the vehicle is a tailsitter we have to rotate the attitude by the pitch offset + // between multirotor and fixed wing flight + if (_vehicle_status_sub.get().is_vtol_tailsitter) { + const Dcmf R_offset{Eulerf{0.f, M_PI_2_F, 0.f}}; + R = R * R_offset; + } + + const Eulerf euler_angles(R); + _long_control_state.pitch_rad = euler_angles.theta(); + _yaw = euler_angles.psi(); + + // load factor due to banking + const float load_factor_from_bank_angle = 1.0f / max(cosf(euler_angles.phi()), FLT_EPSILON); + _tecs.set_load_factor(load_factor_from_bank_angle); + } +} + +void FwLateralLongitudinalControl::updateAirspeed() { + + airspeed_validated_s airspeed_validated; + + if (_param_fw_use_airspd.get() && _airspeed_validated_sub.update(&airspeed_validated)) { + + // do not use synthetic airspeed as this would create a thrust loop + if (PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s) + && PX4_ISFINITE(airspeed_validated.true_airspeed_m_s) + && airspeed_validated.airspeed_source != airspeed_validated_s::SYNTHETIC) { + + _time_airspeed_last_valid = airspeed_validated.timestamp; + _long_control_state.airspeed_eas = airspeed_validated.calibrated_airspeed_m_s; + _long_control_state.eas2tas = constrain(airspeed_validated.true_airspeed_m_s / airspeed_validated.calibrated_airspeed_m_s, 0.9f, 2.0f); + } + } + + // no airspeed updates for one second --> declare invalid + const bool airspeed_valid = hrt_elapsed_time(&_time_airspeed_last_valid) < 1_s; + + if (!airspeed_valid) { + _long_control_state.eas2tas = 1.f; + } + + _tecs.enable_airspeed(airspeed_valid); +} + +float +FwLateralLongitudinalControl::adapt_airspeed_setpoint(const float control_interval, float calibrated_airspeed_setpoint, + float calibrated_min_airspeed_guidance, float wind_speed) +{ + float system_min_airspeed = _performance_model.getMinimumCalibratedAirspeed(getLoadFactor(), _flaps_setpoint); + + const float system_max_airspeed = _performance_model.getMaximumCalibratedAirspeed(); + + // airspeed setpoint adjustments + if (!PX4_ISFINITE(calibrated_airspeed_setpoint) || calibrated_airspeed_setpoint <= FLT_EPSILON) { + calibrated_airspeed_setpoint = _performance_model.getCalibratedTrimAirspeed(); + + // Aditional option to increase the min airspeed setpoint based on wind estimate for more stability in higher winds. + if (_wind_valid && _param_fw_wind_arsp_sc.get() > FLT_EPSILON) { + system_min_airspeed = math::min(system_min_airspeed + _param_fw_wind_arsp_sc.get() * + wind_speed, system_max_airspeed); + } + } + + // increase setpoint to at what's at least required for the lateral guidance + calibrated_airspeed_setpoint = math::max(calibrated_airspeed_setpoint, calibrated_min_airspeed_guidance); + + // constrain airspeed to feasible range + calibrated_airspeed_setpoint = math::constrain(calibrated_airspeed_setpoint, system_min_airspeed, system_max_airspeed); + + if (!PX4_ISFINITE(_airspeed_slew_rate_controller.getState())) { + + // initialize the airspeed setpoint + if (PX4_ISFINITE(_long_control_state.airspeed_eas) && _long_control_state.airspeed_eas < system_min_airspeed) { + // current airpseed is below minimum - init with minimum + _airspeed_slew_rate_controller.setForcedValue(system_min_airspeed); + + } else if (PX4_ISFINITE(_long_control_state.airspeed_eas) && _long_control_state.airspeed_eas > system_max_airspeed) { + // current airpseed is above maximum - init with maximum + _airspeed_slew_rate_controller.setForcedValue(system_max_airspeed); + + } else if (PX4_ISFINITE(_long_control_state.airspeed_eas)) { + // current airpseed is between min and max - init with current + _airspeed_slew_rate_controller.setForcedValue(_long_control_state.airspeed_eas); + + } else { + // current airpseed is invalid - init with setpoint + _airspeed_slew_rate_controller.setForcedValue(calibrated_airspeed_setpoint); + } + } else { + // update slew rate state + if (_airspeed_slew_rate_controller.getState() < system_min_airspeed) { + // current airpseed setpoint is below minimum - reset to minimum + _airspeed_slew_rate_controller.setForcedValue(system_min_airspeed); + + } else if (_airspeed_slew_rate_controller.getState() > system_max_airspeed) { + // current airpseed setpoint is above maximum - reset to maximum + _airspeed_slew_rate_controller.setForcedValue(system_max_airspeed); + + } else if (PX4_ISFINITE(_long_control_state.airspeed_eas)) { + // current airpseed setpoint is between min and max - update + _airspeed_slew_rate_controller.update(calibrated_airspeed_setpoint, control_interval); + + } + } + + return _airspeed_slew_rate_controller.getState(); +} + +bool FwLateralLongitudinalControl::checkLowHeightConditions() const +{ + // Are conditions for low-height + return _param_fw_t_thr_low_hgt.get() >= 0.f && _local_pos.dist_bottom_valid + && _local_pos.dist_bottom < _param_fw_t_thr_low_hgt.get(); +} + +void FwLateralLongitudinalControl::updateTECSAltitudeTimeConstant(const bool is_low_height, const float dt) +{ + // Target time constant for the TECS altitude tracker + float alt_tracking_tc = _param_fw_t_h_error_tc.get(); + + if (is_low_height) { + // If low-height conditions satisfied, compute target time constant for altitude tracking + alt_tracking_tc *= _param_fw_thrtc_sc.get(); + } + + _tecs_alt_time_const_slew_rate.update(alt_tracking_tc, dt); +} + +float FwLateralLongitudinalControl::getGuidanceQualityFactor(const vehicle_local_position_s &local_pos, const bool is_wind_valid) const +{ + if (is_wind_valid) { + // If we have a valid wind estimate, npfg is able to handle all degenerated cases + return 1.f; + } + + // NPFG can run without wind information as long as the system is not flying backwards and has a minimal ground speed + // Check the minimal ground speed. if it is greater than twice the standard deviation, we assume that we can infer a valid track angle + const Vector2f ground_vel(local_pos.vx, local_pos.vy); + const float ground_speed(ground_vel.norm()); + const float low_ground_speed_factor(math::constrain((ground_speed - HORIZONTAL_EVH_FACTOR_COURSE_INVALID * + local_pos.evh) / ((HORIZONTAL_EVH_FACTOR_COURSE_VALID - HORIZONTAL_EVH_FACTOR_COURSE_INVALID)*local_pos.evh), + 0.f, 1.f)); + + // Check that the angle between heading and track is not off too much. if it is greater than 90° we will be pushed back from the wind and the npfg will propably give a roll command in the wrong direction. + const Vector2f heading_vector(matrix::Dcm2f(local_pos.heading)*Vector2f({1.f, 0.f})); + const Vector2f ground_vel_norm(ground_vel.normalized()); + const float flying_forward_factor(math::constrain((heading_vector.dot(ground_vel_norm) - + COS_HEADING_TRACK_ANGLE_PUSHED_BACK) / ((COS_HEADING_TRACK_ANGLE_NOT_PUSHED_BACK - + COS_HEADING_TRACK_ANGLE_PUSHED_BACK)), + 0.f, 1.f)); + + return flying_forward_factor * low_ground_speed_factor; +} +float FwLateralLongitudinalControl::getCorrectedLateralAccelSetpoint(float lateral_accel_sp) +{ + // Scale the npfg output to zero if npfg is not certain for correct output + _can_run_factor = math::constrain(getGuidanceQualityFactor(_local_pos, _wind_valid), 0.f, 1.f); + + hrt_abstime now{hrt_absolute_time()}; + + // Warn the user when the scale is less than 90% for at least 2 seconds (disable in transition) + + // If the npfg was not running before, reset the user warning variables. + if ((now - _time_since_last_npfg_call) > ROLL_WARNING_TIMEOUT) { + _need_report_npfg_uncertain_condition = true; + _time_since_first_reduced_roll = 0U; + } + + if (_vehicle_status_sub.get().in_transition_mode || _can_run_factor > ROLL_WARNING_CAN_RUN_THRESHOLD || _landed) { + // NPFG reports a good condition or we are in transition, reset the user warning variables. + _need_report_npfg_uncertain_condition = true; + _time_since_first_reduced_roll = 0U; + + } else if (_need_report_npfg_uncertain_condition) { + if (_time_since_first_reduced_roll == 0U) { + _time_since_first_reduced_roll = now; + } + + if ((now - _time_since_first_reduced_roll) > ROLL_WARNING_TIMEOUT) { + _need_report_npfg_uncertain_condition = false; + events::send(events::ID("npfg_roll_command_uncertain"), events::Log::Warning, + "Roll command reduced due to uncertain velocity/wind estimates!"); + } + + } else { + // Nothing to do, already reported. + } + + _time_since_last_npfg_call = now; + + return _can_run_factor * (lateral_accel_sp); +} +float FwLateralLongitudinalControl::mapLateralAccelerationToRollAngle(float lateral_acceleration_sp) const { + return atanf(lateral_acceleration_sp / CONSTANTS_ONE_G); +} + +void FwLateralLongitudinalControl::setDefaultLongitudinalControlConfiguration() { + _long_configuration.timestamp = hrt_absolute_time(); + _long_configuration.pitch_min = radians(_param_fw_p_lim_min.get()); + _long_configuration.pitch_max = radians(_param_fw_p_lim_max.get()); + _long_configuration.throttle_min = _param_fw_thr_min.get(); + _long_configuration.throttle_max = _param_fw_thr_max.get(); + _long_configuration.climb_rate_target = _param_climbrate_target.get(); + _long_configuration.sink_rate_target = _param_sinkrate_target.get(); + _long_configuration.disable_underspeed_protection = false; + _long_configuration.enforce_low_height_condition = false; +} + +void FwLateralLongitudinalControl::updateLongitudinalControlConfiguration(const longitudinal_control_configuration_s &configuration_in) { + _long_configuration.timestamp = configuration_in.timestamp; + + if (PX4_ISFINITE(configuration_in.pitch_min)) { + _long_configuration.pitch_min = math::constrain(configuration_in.pitch_min, radians(_param_fw_p_lim_min.get()), radians(_param_fw_p_lim_max.get())); + } else { + _long_configuration.pitch_min = radians(_param_fw_p_lim_min.get()); + } + + if (PX4_ISFINITE(configuration_in.pitch_max)) { + _long_configuration.pitch_max = math::constrain(configuration_in.pitch_max, _long_configuration.pitch_min, radians(_param_fw_p_lim_max.get())); + } else { + _long_configuration.pitch_max = radians(_param_fw_p_lim_max.get()); + } + + if (PX4_ISFINITE(configuration_in.throttle_min)) { + _long_configuration.throttle_min = math::constrain(configuration_in.throttle_min, _param_fw_thr_min.get(), _param_fw_thr_max.get()); + } else { + _long_configuration.throttle_min = _param_fw_thr_min.get(); + } + + if (PX4_ISFINITE(configuration_in.throttle_max)) { + _long_configuration.throttle_max = math::constrain(configuration_in.throttle_max, _long_configuration.throttle_min, _param_fw_thr_max.get()); + } else { + _long_configuration.throttle_max = _param_fw_thr_max.get(); + } + + if (PX4_ISFINITE(configuration_in.climb_rate_target)) { + _long_configuration.climb_rate_target = math::max(0.0f, configuration_in.climb_rate_target); + } else { + _long_configuration.climb_rate_target = _param_climbrate_target.get(); + } + + if (PX4_ISFINITE(configuration_in.sink_rate_target)) { + _long_configuration.sink_rate_target = math::max(0.0f, configuration_in.sink_rate_target); + } else { + _long_configuration.sink_rate_target = _param_sinkrate_target.get(); + } +} + +float FwLateralLongitudinalControl::getLoadFactor() const +{ + float load_factor_from_bank_angle = 1.f; + + const float roll_body = Eulerf(Quatf(_att_sp.q_d)).phi(); + + if (PX4_ISFINITE(roll_body)) { + load_factor_from_bank_angle = 1.f / math::max(cosf(roll_body), FLT_EPSILON); + } + + return load_factor_from_bank_angle; +} + +extern "C" __EXPORT int fw_lat_lon_control_main(int argc, char *argv[]) +{ + return FwLateralLongitudinalControl::main(argc, argv); +} diff --git a/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp new file mode 100644 index 0000000000..590054ae89 --- /dev/null +++ b/src/modules/fw_lateral_longitudinal_control/FwLateralLongitudinalControl.hpp @@ -0,0 +1,264 @@ +/**************************************************************************** + * + * 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 FwLateralLongitudinalControl.hpp + */ + +#ifndef PX4_FWLATERALLONGITUDINALCONTROL_HPP +#define PX4_FWLATERALLONGITUDINALCONTROL_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static constexpr fixed_wing_lateral_setpoint_s empty_lateral_control_setpoint = {.timestamp = 0, .course = NAN, .airspeed_direction = NAN, .lateral_acceleration = NAN}; +static constexpr fixed_wing_longitudinal_setpoint_s empty_longitudinal_control_setpoint = {.timestamp = 0, .altitude = NAN, .height_rate = NAN, .equivalent_airspeed = NAN, .pitch_direct = NAN, .throttle_direct = NAN}; + +class FwLateralLongitudinalControl final : public ModuleBase, public ModuleParams, + public px4::WorkItem +{ +public: + FwLateralLongitudinalControl(bool is_vtol); + + ~FwLateralLongitudinalControl() override; + + /** @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 _local_pos_sub{this, ORB_ID(vehicle_local_position)}; + + uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s}; + + uORB::Subscription _airspeed_validated_sub{ORB_ID(airspeed_validated)}; + uORB::Subscription _flaps_setpoint_sub{ORB_ID(flaps_setpoint)}; + uORB::Subscription _wind_sub{ORB_ID(wind)}; + uORB::SubscriptionData _control_mode_sub{ORB_ID(vehicle_control_mode)}; + uORB::SubscriptionData _vehicle_air_data_sub{ORB_ID(vehicle_air_data)}; + uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; + uORB::Subscription _vehicle_landed_sub{ORB_ID(vehicle_land_detected)}; + uORB::SubscriptionData _vehicle_status_sub{ORB_ID(vehicle_status)}; + uORB::Subscription _fw_lateral_ctrl_sub{ORB_ID(fixed_wing_lateral_setpoint)}; + uORB::Subscription _fw_longitudinal_ctrl_sub{ORB_ID(fixed_wing_longitudinal_setpoint)}; + uORB::Subscription _long_control_configuration_sub{ORB_ID(longitudinal_control_configuration)}; + uORB::Subscription _lateral_control_configuration_sub{ORB_ID(lateral_control_configuration)}; + + vehicle_local_position_s _local_pos{}; + fixed_wing_longitudinal_setpoint_s _long_control_sp{empty_longitudinal_control_setpoint}; + longitudinal_control_configuration_s _long_configuration{}; + fixed_wing_lateral_setpoint_s _lat_control_sp{empty_lateral_control_setpoint}; + lateral_control_configuration_s _lateral_configuration{}; + + float _flaps_setpoint{0.f}; + + uORB::Publication _attitude_sp_pub; + uORB::Publication _tecs_status_pub{ORB_ID(tecs_status)}; + uORB::PublicationData _flight_phase_estimation_pub{ORB_ID(flight_phase_estimation)}; + uORB::Publication _fixed_wing_lateral_status_pub{ORB_ID(fixed_wing_lateral_status)}; + + DEFINE_PARAMETERS( + (ParamFloat) _param_fw_psp_off, + (ParamBool) _param_fw_use_airspd, + (ParamFloat) _param_nav_fw_alt_rad, + (ParamFloat) _param_fw_r_lim, + (ParamFloat) _param_fw_p_lim_max, + (ParamFloat) _param_fw_p_lim_min, + (ParamFloat) _param_fw_pn_r_slew_max, + (ParamFloat) _param_fw_t_hrate_ff, + (ParamFloat) _param_fw_t_h_error_tc, + (ParamFloat) _param_fw_t_fast_alt_err, + (ParamFloat) _param_fw_t_thr_integ, + (ParamFloat) _param_fw_t_I_gain_pit, + (ParamFloat) _param_fw_t_ptch_damp, + (ParamFloat) _param_fw_t_rll2thr, + (ParamFloat) _param_fw_t_sink_max, + (ParamFloat) _param_fw_t_tas_error_tc, + (ParamFloat) _param_fw_t_thr_damping, + (ParamFloat) _param_fw_t_vert_acc, + (ParamFloat) _param_ste_rate_time_const, + (ParamFloat) _param_seb_rate_ff, + (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, + (ParamFloat) _param_fw_thr_min, + (ParamFloat) _param_fw_thr_slew_max, + (ParamFloat) _param_fw_thrtc_sc, + (ParamFloat) _param_fw_t_thr_low_hgt, + (ParamFloat) _param_fw_wind_arsp_sc, + (ParamFloat) _param_fw_gnd_spd_min + ) + + hrt_abstime _last_time_loop_ran{}; + uint8_t _z_reset_counter{UINT8_C(0)}; + uint64_t _time_airspeed_last_valid{UINT64_C(0)}; + float _air_density{atmosphere::kAirDensitySeaLevelStandardAtmos}; + // Smooths changes in the altitude tracking error time constant value + SlewRate _tecs_alt_time_const_slew_rate; + struct longitudinal_control_state { + float pitch_rad{0.f}; + float altitude_msl{0.f}; + float airspeed_eas{0.f}; + float eas2tas{1.f}; + float height_rate{0.f}; + } _long_control_state{}; + + bool _wind_valid{false}; + hrt_abstime _time_wind_last_received{0}; + SlewRate _roll_slew_rate; + float _yaw{0.f}; + struct lateral_control_state { + matrix::Vector2f ground_speed; + matrix::Vector2f wind_speed; + } _lateral_control_state{}; + bool _need_report_npfg_uncertain_condition{false}; ///< boolean if reporting of uncertain npfg output condition is needed + hrt_abstime _time_since_first_reduced_roll{0U}; ///< absolute time since start when entering reduced roll angle for the first time + hrt_abstime _time_since_last_npfg_call{0U}; ///< absolute time since start when the npfg reduced roll angle calculations was last performed + vehicle_attitude_setpoint_s _att_sp{}; + bool _landed{false}; + float _can_run_factor{0.f}; + SlewRate _airspeed_slew_rate_controller; + + perf_counter_t _loop_perf; // loop performance counter + + PerformanceModel _performance_model; + TECS _tecs; + CourseToAirspeedRefMapper _course_to_airspeed; + AirspeedDirectionController _airspeed_direction_control; + + float _min_airspeed_from_guidance{0.f}; // need to store it bc we only update after running longitudinal controller + + void parameters_update(); + void update_control_state(); + void tecs_update_pitch_throttle(const float control_interval, float alt_sp, float airspeed_sp, + float pitch_min_rad, float pitch_max_rad, float throttle_min, + float throttle_max, const float desired_max_sinkrate, + const float desired_max_climbrate, + bool disable_underspeed_detection, float hgt_rate_sp); + + void tecs_status_publish(float alt_sp, float equivalent_airspeed_sp, float true_airspeed_derivative_raw, + float throttle_trim); + + void updateAirspeed(); + + void updateAttitude(); + + void updateAltitudeAndHeightRate(); + + float mapLateralAccelerationToRollAngle(float lateral_acceleration_sp) const; + + void updateWind(); + + void updateTECSAltitudeTimeConstant(const bool is_low_height, const float dt); + + bool checkLowHeightConditions() const; + + float getGuidanceQualityFactor(const vehicle_local_position_s &local_pos, const bool is_wind_valid) const; + + float getCorrectedLateralAccelSetpoint(float lateral_accel_sp); + + void setDefaultLongitudinalControlConfiguration(); + + void updateLongitudinalControlConfiguration(const longitudinal_control_configuration_s &configuration_in); + + void updateControllerConfiguration(); + + float getLoadFactor() const; + + /** + * @brief Returns an adapted calibrated airspeed setpoint + * + * Adjusts the setpoint for wind, accelerated stall, and slew rates. + * + * @param control_interval Time since the last position control update [s] + * @param calibrated_airspeed_setpoint Calibrated airspeed septoint (generally from the position setpoint) [m/s] + * @param calibrated_min_airspeed_guidance Minimum airspeed required for lateral guidance [m/s] + * @return Adjusted calibrated airspeed setpoint [m/s] + */ + float adapt_airspeed_setpoint(const float control_interval, float calibrated_airspeed_setpoint, + float calibrated_min_airspeed_guidance, float wind_speed); +}; + +#endif //PX4_FWLATERALLONGITUDINALCONTROL_HPP diff --git a/src/modules/fw_lateral_longitudinal_control/Kconfig b/src/modules/fw_lateral_longitudinal_control/Kconfig new file mode 100644 index 0000000000..aefa5a7559 --- /dev/null +++ b/src/modules/fw_lateral_longitudinal_control/Kconfig @@ -0,0 +1,5 @@ +menuconfig MODULES_FW_LATERAL_LONGITUDINAL_CONTROL + bool "fw_lateral_longitudinal_control" + default n + ---help--- + Enable support for fw_lat_lon_control 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 new file mode 100644 index 0000000000..0856e8c123 --- /dev/null +++ b/src/modules/fw_lateral_longitudinal_control/fw_lat_long_params.c @@ -0,0 +1,284 @@ +/** + * 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_pos_control/CMakeLists.txt b/src/modules/fw_mode_manager/CMakeLists.txt similarity index 89% rename from src/modules/fw_pos_control/CMakeLists.txt rename to src/modules/fw_mode_manager/CMakeLists.txt index 9248e8d2df..3e21a51ee1 100644 --- a/src/modules/fw_pos_control/CMakeLists.txt +++ b/src/modules/fw_mode_manager/CMakeLists.txt @@ -1,6 +1,6 @@ ############################################################################ # -# Copyright (c) 2015-2017 PX4 Development Team. All rights reserved. +# Copyright (c) 2015-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 @@ -55,11 +55,13 @@ endif() px4_add_module( - MODULE modules__fw_pos_control - MAIN fw_pos_control + MODULE modules__fw_mode_manager + MAIN fw_mode_manager SRCS - FixedwingPositionControl.cpp - FixedwingPositionControl.hpp + FixedWingModeManager.cpp + FixedWingModeManager.hpp + ControllerConfigurationHandler.cpp + ControllerConfigurationHandler.hpp DEPENDS ${POSCONTROL_DEPENDENCIES} ) diff --git a/src/modules/fw_mode_manager/ControllerConfigurationHandler.cpp b/src/modules/fw_mode_manager/ControllerConfigurationHandler.cpp new file mode 100644 index 0000000000..fcfabb1679 --- /dev/null +++ b/src/modules/fw_mode_manager/ControllerConfigurationHandler.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** + * + * 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 CombinedControllerConfigurationHandler.cpp + */ + +#include "ControllerConfigurationHandler.hpp" +#include + +using namespace time_literals; + + +void CombinedControllerConfigurationHandler::update(const hrt_abstime now) +{ + _longitudinal_updated = floatValueChanged(_longitudinal_configuration_current_cycle.pitch_min, + _longitudinal_publisher.get().pitch_min); + _longitudinal_updated |= floatValueChanged(_longitudinal_configuration_current_cycle.pitch_max, + _longitudinal_publisher.get().pitch_max); + _longitudinal_updated |= floatValueChanged(_longitudinal_configuration_current_cycle.throttle_min, + _longitudinal_publisher.get().throttle_min); + _longitudinal_updated |= floatValueChanged(_longitudinal_configuration_current_cycle.throttle_max, + _longitudinal_publisher.get().throttle_max); + _longitudinal_updated |= floatValueChanged(_longitudinal_configuration_current_cycle.speed_weight, + _longitudinal_publisher.get().speed_weight); + _longitudinal_updated |= floatValueChanged(_longitudinal_configuration_current_cycle.climb_rate_target, + _longitudinal_publisher.get().climb_rate_target); + _longitudinal_updated |= floatValueChanged(_longitudinal_configuration_current_cycle.sink_rate_target, + _longitudinal_publisher.get().sink_rate_target); + _longitudinal_updated |= booleanValueChanged(_longitudinal_configuration_current_cycle.enforce_low_height_condition, + _longitudinal_publisher.get().enforce_low_height_condition); + _longitudinal_updated |= booleanValueChanged(_longitudinal_configuration_current_cycle.disable_underspeed_protection, + _longitudinal_publisher.get().disable_underspeed_protection); + + _lateral_updated |= floatValueChanged(_lateral_configuration_current_cycle.lateral_accel_max, + _lateral_publisher.get().lateral_accel_max); + + if (_longitudinal_updated || now - _time_last_longitudinal_publish > 1_s) { + _longitudinal_configuration_current_cycle.timestamp = now; + _longitudinal_publisher.update(_longitudinal_configuration_current_cycle); + _time_last_longitudinal_publish = _longitudinal_configuration_current_cycle.timestamp; + } + + if (_lateral_updated || now - _time_last_lateral_publish > 1_s) { + _lateral_configuration_current_cycle.timestamp = now; + _lateral_publisher.update(_lateral_configuration_current_cycle); + _time_last_lateral_publish = _lateral_configuration_current_cycle.timestamp; + } + + _longitudinal_updated = _lateral_updated = false; + _longitudinal_configuration_current_cycle = empty_longitudinal_control_configuration; + _lateral_configuration_current_cycle = empty_lateral_control_configuration; +} + +void CombinedControllerConfigurationHandler::setThrottleMax(float throttle_max) +{ + _longitudinal_configuration_current_cycle.throttle_max = throttle_max; +} + +void CombinedControllerConfigurationHandler::setThrottleMin(float throttle_min) +{ + _longitudinal_configuration_current_cycle.throttle_min = throttle_min; +} + +void CombinedControllerConfigurationHandler::setSpeedWeight(float speed_weight) +{ + _longitudinal_configuration_current_cycle.speed_weight = speed_weight; +} + +void CombinedControllerConfigurationHandler::setPitchMin(const float pitch_min) +{ + _longitudinal_configuration_current_cycle.pitch_min = pitch_min; +} + +void CombinedControllerConfigurationHandler::setPitchMax(const float pitch_max) +{ + _longitudinal_configuration_current_cycle.pitch_max = pitch_max; +} + +void CombinedControllerConfigurationHandler::setClimbRateTarget(float climbrate_target) +{ + _longitudinal_configuration_current_cycle.climb_rate_target = climbrate_target; +} + +void CombinedControllerConfigurationHandler::setDisableUnderspeedProtection(bool disable) +{ + _longitudinal_configuration_current_cycle.disable_underspeed_protection = disable; +} + +void CombinedControllerConfigurationHandler::setSinkRateTarget(const float sinkrate_target) +{ + _longitudinal_configuration_current_cycle.sink_rate_target = sinkrate_target; +} + +void CombinedControllerConfigurationHandler::setLateralAccelMax(float lateral_accel_max) +{ + _lateral_configuration_current_cycle.lateral_accel_max = lateral_accel_max; +} + +void CombinedControllerConfigurationHandler::setEnforceLowHeightCondition(bool low_height_condition) +{ + _longitudinal_configuration_current_cycle.enforce_low_height_condition = low_height_condition; +} + +void CombinedControllerConfigurationHandler::resetLastPublishTime() +{ + _time_last_longitudinal_publish = _time_last_lateral_publish = 0; +} diff --git a/src/modules/fw_mode_manager/ControllerConfigurationHandler.hpp b/src/modules/fw_mode_manager/ControllerConfigurationHandler.hpp new file mode 100644 index 0000000000..73cfc78e4b --- /dev/null +++ b/src/modules/fw_mode_manager/ControllerConfigurationHandler.hpp @@ -0,0 +1,113 @@ +/**************************************************************************** + * + * 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 CombinedControllerConfigurationHandler.hpp + */ +#ifndef PX4_CONTROLLERCONFIGURATIONHANDLER_HPP +#define PX4_CONTROLLERCONFIGURATIONHANDLER_HPP + +#include +#include +#include +#include + +static constexpr longitudinal_control_configuration_s empty_longitudinal_control_configuration = {.timestamp = 0, .pitch_min = NAN, .pitch_max = NAN, .throttle_min = NAN, .throttle_max = NAN, .climb_rate_target = NAN, .sink_rate_target = NAN, .speed_weight = NAN, .enforce_low_height_condition = false, .disable_underspeed_protection = false }; +static constexpr lateral_control_configuration_s empty_lateral_control_configuration = {.timestamp = 0, .lateral_accel_max = NAN}; + + +class CombinedControllerConfigurationHandler +{ +public: + CombinedControllerConfigurationHandler() = default; + ~CombinedControllerConfigurationHandler() = default; + + void update(const hrt_abstime now); + + void setEnforceLowHeightCondition(bool low_height_condition); + + void setThrottleMax(float throttle_max); + + void setThrottleMin(float throttle_min); + + void setSpeedWeight(float speed_weight); + + void setPitchMin(const float pitch_min); + + void setPitchMax(const float pitch_max); + + void setClimbRateTarget(float climbrate_target); + + void setDisableUnderspeedProtection(bool disable); + + void setSinkRateTarget(const float sinkrate_target); + + void setLateralAccelMax(float lateral_accel_max); + + void resetLastPublishTime(); + +private: + bool booleanValueChanged(bool new_value, bool current_value) + { + return current_value != new_value; + } + + bool floatValueChanged(float new_value, float current_value) + { + bool diff; + + if (PX4_ISFINITE(new_value)) { + diff = PX4_ISFINITE(current_value) ? (fabsf(new_value - current_value) > FLT_EPSILON) : true; + + } else { + diff = PX4_ISFINITE(current_value); + } + + return diff; + } + + bool _lateral_updated{false}; + bool _longitudinal_updated{false}; + + hrt_abstime _time_last_longitudinal_publish{0}; + hrt_abstime _time_last_lateral_publish{0}; + + uORB::PublicationData _lateral_publisher{ORB_ID(lateral_control_configuration)}; + uORB::PublicationData _longitudinal_publisher{ORB_ID(longitudinal_control_configuration)}; + + lateral_control_configuration_s _lateral_configuration_current_cycle{empty_lateral_control_configuration}; + longitudinal_control_configuration_s _longitudinal_configuration_current_cycle {empty_longitudinal_control_configuration}; +}; + +#endif //PX4_CONTROLLERCONFIGURATIONHANDLER_HPP diff --git a/src/modules/fw_pos_control/FixedwingPositionControl.cpp b/src/modules/fw_mode_manager/FixedWingModeManager.cpp similarity index 50% rename from src/modules/fw_pos_control/FixedwingPositionControl.cpp rename to src/modules/fw_mode_manager/FixedWingModeManager.cpp index de00c74b59..57eef702d8 100644 --- a/src/modules/fw_pos_control/FixedwingPositionControl.cpp +++ b/src/modules/fw_mode_manager/FixedWingModeManager.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2013-2023 PX4 Development Team. All rights reserved. + * 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 @@ -31,9 +31,10 @@ * ****************************************************************************/ -#include "FixedwingPositionControl.hpp" +#include "FixedWingModeManager.hpp" #include +#include using math::constrain; using math::max; @@ -48,50 +49,40 @@ using matrix::Vector2d; using matrix::Vector3f; using matrix::wrap_pi; -FixedwingPositionControl::FixedwingPositionControl(bool vtol) : +const fixed_wing_lateral_setpoint_s empty_lateral_control_setpoint = {.timestamp = 0, .course = NAN, .airspeed_direction = NAN, .lateral_acceleration = NAN}; +const fixed_wing_longitudinal_setpoint_s empty_longitudinal_control_setpoint = {.timestamp = 0, .altitude = NAN, .height_rate = NAN, .equivalent_airspeed = NAN, .pitch_direct = NAN, .throttle_direct = NAN}; + +FixedWingModeManager::FixedWingModeManager() : ModuleParams(nullptr), WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers), - _attitude_sp_pub(vtol ? ORB_ID(fw_virtual_attitude_setpoint) : ORB_ID(vehicle_attitude_setpoint)), _loop_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")), _launchDetector(this), _runway_takeoff(this) #ifdef CONFIG_FIGURE_OF_EIGHT - , _figure_eight(_npfg, _wind_vel, _eas2tas) + , _figure_eight(_directional_guidance, _wind_vel) #endif // CONFIG_FIGURE_OF_EIGHT { - // limit to 50 Hz _local_pos_sub.set_interval_ms(20); - _pos_ctrl_status_pub.advertise(); _pos_ctrl_landing_status_pub.advertise(); - _tecs_status_pub.advertise(); _launch_detection_status_pub.advertise(); _landing_gear_pub.advertise(); - _flaps_setpoint_pub.advertise(); _spoilers_setpoint_pub.advertise(); + _fixed_wing_lateral_guidance_status_pub.advertise(); + _fixed_wing_runway_control_pub.advertise(); - _airspeed_slew_rate_controller.setSlewRate(ASPD_SP_SLEW_RATE); - - /* fetch initial parameter values */ parameters_update(); - - _roll_slew_rate.setSlewRate(radians(_param_fw_pn_r_slew_max.get())); - _roll_slew_rate.setForcedValue(0.f); - - _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()); - } -FixedwingPositionControl::~FixedwingPositionControl() +FixedWingModeManager::~FixedWingModeManager() { perf_free(_loop_perf); } bool -FixedwingPositionControl::init() +FixedWingModeManager::init() { if (!_local_pos_sub.registerCallback()) { PX4_ERR("callback registration failed"); @@ -102,59 +93,21 @@ FixedwingPositionControl::init() } void -FixedwingPositionControl::parameters_update() +FixedWingModeManager::parameters_update() { updateParams(); - _performance_model.updateParameters(); - - _roll_slew_rate.setSlewRate(radians(_param_fw_pn_r_slew_max.get())); - - // NPFG parameters - _npfg.setPeriod(_param_npfg_period.get()); - _npfg.setDamping(_param_npfg_damping.get()); - _npfg.enablePeriodLB(_param_npfg_en_period_lb.get()); - _npfg.enablePeriodUB(_param_npfg_en_period_ub.get()); - _npfg.enableMinGroundSpeed(_param_npfg_en_min_gsp.get()); - _npfg.enableTrackKeeping(_param_npfg_en_track_keeping.get()); - _npfg.enableWindExcessRegulation(_param_npfg_en_wind_reg.get()); - _npfg.setMinGroundSpeed(_param_fw_gnd_spd_min.get()); - _npfg.setMaxTrackKeepingMinGroundSpeed(_param_npfg_track_keeping_gsp_max.get()); - _npfg.setRollTimeConst(_param_npfg_roll_time_const.get()); - _npfg.setSwitchDistanceMultiplier(_param_npfg_switch_distance_multiplier.get()); - _npfg.setRollLimit(radians(_param_fw_r_lim.get())); - _npfg.setPeriodSafetyFactor(_param_npfg_period_safety_factor.get()); - - // TECS parameters - _tecs.set_max_climb_rate(_performance_model.getMaximumClimbRate(_air_density)); - _tecs.set_max_sink_rate(_param_fw_t_sink_max.get()); - _tecs.set_min_sink_rate(_performance_model.getMinimumSinkRate(_air_density)); - _tecs.set_speed_weight(_param_fw_t_spdweight.get()); - _tecs.set_equivalent_airspeed_trim(_performance_model.getCalibratedTrimAirspeed()); - _tecs.set_equivalent_airspeed_min(_performance_model.getMinimumCalibratedAirspeed()); - _tecs.set_equivalent_airspeed_max(_performance_model.getMaximumCalibratedAirspeed()); - _tecs.set_throttle_damp(_param_fw_t_thr_damping.get()); - _tecs.set_integrator_gain_throttle(_param_fw_t_thr_integ.get()); - _tecs.set_integrator_gain_pitch(_param_fw_t_I_gain_pit.get()); - _tecs.set_throttle_slewrate(_param_fw_thr_slew_max.get()); - _tecs.set_vertical_accel_limit(_param_fw_t_vert_acc.get()); - _tecs.set_roll_throttle_compensation(_param_fw_t_rll2thr.get()); - _tecs.set_pitch_damping(_param_fw_t_ptch_damp.get()); - _tecs.set_altitude_error_time_constant(_param_fw_t_h_error_tc.get()); - _tecs.set_fast_descend_altitude_error(_param_fw_t_fast_alt_err.get()); - _tecs.set_altitude_rate_ff(_param_fw_t_hrate_ff.get()); - _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()); - - _performance_model.runSanityChecks(); + _directional_guidance.setPeriod(_param_npfg_period.get()); + _directional_guidance.setDamping(_param_npfg_damping.get()); + _directional_guidance.enablePeriodLB(_param_npfg_en_period_lb.get()); + _directional_guidance.enablePeriodUB(_param_npfg_en_period_ub.get()); + _directional_guidance.setRollTimeConst(_param_npfg_roll_time_const.get()); + _directional_guidance.setSwitchDistanceMultiplier(_param_npfg_switch_distance_multiplier.get()); + _directional_guidance.setPeriodSafetyFactor(_param_npfg_period_safety_factor.get()); } void -FixedwingPositionControl::vehicle_control_mode_poll() +FixedWingModeManager::vehicle_control_mode_poll() { if (_control_mode_sub.updated()) { const bool was_armed = _control_mode.flag_armed; @@ -171,7 +124,7 @@ FixedwingPositionControl::vehicle_control_mode_poll() } void -FixedwingPositionControl::vehicle_command_poll() +FixedWingModeManager::vehicle_command_poll() { vehicle_command_s vehicle_command; @@ -205,47 +158,27 @@ FixedwingPositionControl::vehicle_command_poll() } void -FixedwingPositionControl::airspeed_poll() +FixedWingModeManager::airspeed_poll() { - bool airspeed_valid = _airspeed_valid; airspeed_validated_s airspeed_validated; if (_param_fw_use_airspd.get() && _airspeed_validated_sub.update(&airspeed_validated)) { - _eas2tas = 1.0f; //this is the default value, taken in case of invalid airspeed - - // do not use synthetic airspeed as this would create a thrust loop + // do not use synthetic airspeed as it's for the use here not reliable enough if (PX4_ISFINITE(airspeed_validated.calibrated_airspeed_m_s) - && PX4_ISFINITE(airspeed_validated.true_airspeed_m_s) && airspeed_validated.airspeed_source != airspeed_validated_s::SYNTHETIC) { - airspeed_valid = true; - - _time_airspeed_last_valid = airspeed_validated.timestamp; _airspeed_eas = airspeed_validated.calibrated_airspeed_m_s; - - _eas2tas = constrain(airspeed_validated.true_airspeed_m_s / airspeed_validated.calibrated_airspeed_m_s, 0.9f, 2.0f); - - } else { - airspeed_valid = false; - } - - } else { - // no airspeed updates for one second - if (airspeed_valid && (hrt_elapsed_time(&_time_airspeed_last_valid) > 1_s)) { - airspeed_valid = false; } } - // update TECS if validity changed - if (airspeed_valid != _airspeed_valid) { - _tecs.enable_airspeed(airspeed_valid); - _airspeed_valid = airspeed_valid; - } + // no airspeed updates for one second --> declare invalid + // this flag is used for some logic like: exiting takeoff, flaps retraction + _airspeed_valid = hrt_elapsed_time(&_time_airspeed_last_valid) < 1_s; } void -FixedwingPositionControl::wind_poll() +FixedWingModeManager::wind_poll(const hrt_abstime now) { if (_wind_sub.updated()) { wind_s wind; @@ -255,14 +188,14 @@ FixedwingPositionControl::wind_poll() _wind_valid = PX4_ISFINITE(wind.windspeed_north) && PX4_ISFINITE(wind.windspeed_east); - _time_wind_last_received = hrt_absolute_time(); + _time_wind_last_received = now; _wind_vel(0) = wind.windspeed_north; _wind_vel(1) = wind.windspeed_east; } else { // invalidate wind estimate usage (and correspondingly NPFG, if enabled) after subscription timeout - _wind_valid = _wind_valid && (hrt_absolute_time() - _time_wind_last_received) < WIND_EST_TIMEOUT; + _wind_valid = _wind_valid && (now - _time_wind_last_received) < WIND_EST_TIMEOUT; } if (!_wind_valid) { @@ -272,7 +205,7 @@ FixedwingPositionControl::wind_poll() } void -FixedwingPositionControl::manual_control_setpoint_poll() +FixedWingModeManager::manual_control_setpoint_poll() { _manual_control_setpoint_sub.update(&_manual_control_setpoint); @@ -294,18 +227,17 @@ FixedwingPositionControl::manual_control_setpoint_poll() } } - void -FixedwingPositionControl::vehicle_attitude_poll() +FixedWingModeManager::vehicle_attitude_poll() { - vehicle_attitude_s att; + vehicle_attitude_s vehicle_attitude; - if (_vehicle_attitude_sub.update(&att)) { + if (_vehicle_attitude_sub.update(&vehicle_attitude)) { vehicle_angular_velocity_s angular_velocity{}; _vehicle_angular_velocity_sub.copy(&angular_velocity); const Vector3f rates{angular_velocity.xyz}; - Dcmf R{Quatf(att.q)}; + Dcmf R{Quatf(vehicle_attitude.q)}; // if the vehicle is a tailsitter we have to rotate the attitude by the pitch offset // between multirotor and fixed wing flight @@ -320,184 +252,37 @@ FixedwingPositionControl::vehicle_attitude_poll() } const Eulerf euler_angles(R); - _pitch = euler_angles(1); _yaw = euler_angles(2); - Vector3f body_acceleration = R.transpose() * Vector3f{_local_pos.ax, _local_pos.ay, _local_pos.az}; + const Vector3f body_acceleration = R.transpose() * Vector3f{_local_pos.ax, _local_pos.ay, _local_pos.az}; _body_acceleration_x = body_acceleration(0); - Vector3f body_velocity = R.transpose() * Vector3f{_local_pos.vx, _local_pos.vy, _local_pos.vz}; + const Vector3f body_velocity = R.transpose() * Vector3f{_local_pos.vx, _local_pos.vy, _local_pos.vz}; _body_velocity_x = body_velocity(0); - - // load factor due to banking - _tecs.set_load_factor(getLoadFactor()); } } float -FixedwingPositionControl::get_manual_airspeed_setpoint() +FixedWingModeManager::get_manual_airspeed_setpoint() { - - float altctrl_airspeed = _performance_model.getCalibratedTrimAirspeed(); + float manual_airspeed_setpoint = NAN; if (_param_fw_pos_stk_conf.get() & STICK_CONFIG_ENABLE_AIRSPEED_SP_MANUAL_BIT) { // neutral throttle corresponds to trim airspeed - return math::interpolateNXY(_manual_control_setpoint_for_airspeed, + manual_airspeed_setpoint = math::interpolateNXY(_manual_control_setpoint_for_airspeed, {-1.f, 0.f, 1.f}, - {_performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), altctrl_airspeed, _performance_model.getMaximumCalibratedAirspeed()}); + {_param_fw_airspd_min.get(), _param_fw_airspd_trim.get(), _param_fw_airspd_max.get()}); } else if (PX4_ISFINITE(_commanded_manual_airspeed_setpoint)) { - altctrl_airspeed = constrain(_commanded_manual_airspeed_setpoint, - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), - _performance_model.getMaximumCalibratedAirspeed()); + // override stick by commanded airspeed + manual_airspeed_setpoint = _commanded_manual_airspeed_setpoint; } - return altctrl_airspeed; -} - -float -FixedwingPositionControl::adapt_airspeed_setpoint(const float control_interval, float calibrated_airspeed_setpoint, - float calibrated_min_airspeed, const Vector2f &ground_speed, bool in_takeoff_situation) -{ - // --- airspeed *constraint adjustments --- - - // Aditional option to increase the min airspeed setpoint based on wind estimate for more stability in higher winds. - if (!in_takeoff_situation && _airspeed_valid && _wind_valid && _param_fw_wind_arsp_sc.get() > FLT_EPSILON) { - calibrated_min_airspeed = math::min(calibrated_min_airspeed + _param_fw_wind_arsp_sc.get() * - _wind_vel.length(), _performance_model.getMaximumCalibratedAirspeed()); - } - - // --- airspeed *setpoint adjustments --- - - if (!PX4_ISFINITE(calibrated_airspeed_setpoint) || calibrated_airspeed_setpoint <= FLT_EPSILON) { - calibrated_airspeed_setpoint = _performance_model.getCalibratedTrimAirspeed(); - } - - // Adapt cruise airspeed when otherwise the min groundspeed couldn't be maintained - if (!_wind_valid && !in_takeoff_situation) { - /* - * This error value ensures that a plane (as long as its throttle capability is - * not exceeded) travels towards a waypoint (and is not pushed more and more away - * by wind). Not countering this would lead to a fly-away. Only non-zero in presence - * of sufficient wind. "minimum ground speed undershoot". - */ - const float ground_speed_body = _body_velocity_x; - - if (ground_speed_body < _param_fw_gnd_spd_min.get()) { - calibrated_airspeed_setpoint += _param_fw_gnd_spd_min.get() - ground_speed_body; - } - } - - calibrated_airspeed_setpoint = constrain(calibrated_airspeed_setpoint, calibrated_min_airspeed, - _performance_model.getMaximumCalibratedAirspeed()); - - // initialize the airspeed setpoint to the max(current airsped, min airspeed) - if (!PX4_ISFINITE(_airspeed_slew_rate_controller.getState()) - || !_tecs_is_running) { - _airspeed_slew_rate_controller.setForcedValue(math::max(calibrated_min_airspeed, _airspeed_eas)); - } - - // reset the airspeed setpoint to the min airspeed if the min airspeed changes while in operation - if (_airspeed_slew_rate_controller.getState() < calibrated_min_airspeed) { - _airspeed_slew_rate_controller.setForcedValue(calibrated_min_airspeed); - } - - if (control_interval > FLT_EPSILON) { - // constrain airspeed setpoint changes with slew rate of ASPD_SP_SLEW_RATE m/s/s - _airspeed_slew_rate_controller.update(calibrated_airspeed_setpoint, control_interval); - } - - if (_airspeed_slew_rate_controller.getState() > _performance_model.getMaximumCalibratedAirspeed()) { - _airspeed_slew_rate_controller.setForcedValue(_performance_model.getMaximumCalibratedAirspeed()); - } - - return _airspeed_slew_rate_controller.getState(); + return manual_airspeed_setpoint; } void -FixedwingPositionControl::tecs_status_publish(float alt_sp, float equivalent_airspeed_sp, - float true_airspeed_derivative_raw, float throttle_trim) -{ - tecs_status_s tecs_status{}; - - const TECS::DebugOutput &debug_output{_tecs.getStatus()}; - - tecs_status.altitude_sp = alt_sp; - tecs_status.altitude_reference = debug_output.altitude_reference; - tecs_status.altitude_time_constant = _tecs.get_altitude_error_time_constant(); - tecs_status.height_rate_reference = debug_output.height_rate_reference; - tecs_status.height_rate_direct = debug_output.height_rate_direct; - tecs_status.height_rate_setpoint = debug_output.control.altitude_rate_control; - tecs_status.height_rate = -_local_pos.vz; - tecs_status.equivalent_airspeed_sp = equivalent_airspeed_sp; - tecs_status.true_airspeed_sp = debug_output.true_airspeed_sp; - tecs_status.true_airspeed_filtered = debug_output.true_airspeed_filtered; - tecs_status.true_airspeed_derivative_sp = debug_output.control.true_airspeed_derivative_control; - tecs_status.true_airspeed_derivative = debug_output.true_airspeed_derivative; - tecs_status.true_airspeed_derivative_raw = true_airspeed_derivative_raw; - tecs_status.total_energy_rate = debug_output.control.total_energy_rate_estimate; - tecs_status.total_energy_balance_rate = debug_output.control.energy_balance_rate_estimate; - tecs_status.total_energy_rate_sp = debug_output.control.total_energy_rate_sp; - tecs_status.total_energy_balance_rate_sp = debug_output.control.energy_balance_rate_sp; - tecs_status.throttle_integ = debug_output.control.throttle_integrator; - tecs_status.pitch_integ = debug_output.control.pitch_integrator; - tecs_status.throttle_sp = _tecs.get_throttle_setpoint(); - tecs_status.pitch_sp_rad = _tecs.get_pitch_setpoint(); - tecs_status.throttle_trim = throttle_trim; - tecs_status.underspeed_ratio = _tecs.get_underspeed_ratio(); - tecs_status.fast_descend_ratio = debug_output.fast_descend; - - tecs_status.timestamp = hrt_absolute_time(); - - _tecs_status_pub.publish(tecs_status); -} - -void -FixedwingPositionControl::status_publish() -{ - position_controller_status_s pos_ctrl_status = {}; - - npfg_status_s npfg_status = {}; - - npfg_status.wind_est_valid = _wind_valid; - - const float bearing = _npfg.getBearing(); // dont repeat atan2 calc - - pos_ctrl_status.nav_bearing = bearing; - pos_ctrl_status.target_bearing = _target_bearing; - pos_ctrl_status.xtrack_error = _npfg.getTrackError(); - pos_ctrl_status.acceptance_radius = _npfg.switchDistance(500.0f); - - npfg_status.lat_accel = _npfg.getLateralAccel(); - npfg_status.lat_accel_ff = _npfg.getLateralAccelFF(); - npfg_status.heading_ref = _npfg.getHeadingRef(); - npfg_status.bearing = bearing; - npfg_status.bearing_feas = _npfg.getBearingFeas(); - npfg_status.bearing_feas_on_track = _npfg.getOnTrackBearingFeas(); - npfg_status.signed_track_error = _npfg.getTrackError(); - npfg_status.track_error_bound = _npfg.getTrackErrorBound(); - npfg_status.airspeed_ref = _npfg.getAirspeedRef(); - npfg_status.min_ground_speed_ref = _npfg.getMinGroundSpeedRef(); - npfg_status.adapted_period = _npfg.getAdaptedPeriod(); - npfg_status.p_gain = _npfg.getPGain(); - npfg_status.time_const = _npfg.getTimeConst(); - npfg_status.can_run_factor = _npfg.canRun(_local_pos, _wind_valid); - npfg_status.timestamp = hrt_absolute_time(); - - _npfg_status_pub.publish(npfg_status); - - pos_ctrl_status.wp_dist = get_distance_to_next_waypoint(_current_latitude, _current_longitude, - _pos_sp_triplet.current.lat, _pos_sp_triplet.current.lon); - - pos_ctrl_status.timestamp = hrt_absolute_time(); - - pos_ctrl_status.type = _position_sp_type; - - _pos_ctrl_status_pub.publish(pos_ctrl_status); -} - -void -FixedwingPositionControl::landing_status_publish() +FixedWingModeManager::landing_status_publish() { position_controller_landing_status_s pos_ctrl_landing_status = {}; @@ -509,49 +294,8 @@ FixedwingPositionControl::landing_status_publish() _pos_ctrl_landing_status_pub.publish(pos_ctrl_landing_status); } -float FixedwingPositionControl::getCorrectedNpfgRollSetpoint() -{ - // Scale the npfg output to zero if npfg is not certain for correct output - float new_roll_setpoint(_npfg.getRollSetpoint()); - const float can_run_factor(constrain(_npfg.canRun(_local_pos, _wind_valid), 0.f, 1.f)); - - hrt_abstime now{hrt_absolute_time()}; - - // Warn the user when the scale is less than 90% for at least 2 seconds (disable in transition) - - // If the npfg was not running before, reset the user warning variables. - if ((now - _time_since_last_npfg_call) > ROLL_WARNING_TIMEOUT) { - _need_report_npfg_uncertain_condition = true; - _time_since_first_reduced_roll = 0U; - } - - if (_vehicle_status.in_transition_mode || can_run_factor > ROLL_WARNING_CAN_RUN_THRESHOLD || _landed) { - // NPFG reports a good condition or we are in transition, reset the user warning variables. - _need_report_npfg_uncertain_condition = true; - _time_since_first_reduced_roll = 0U; - - } else if (_need_report_npfg_uncertain_condition) { - if (_time_since_first_reduced_roll == 0U) { - _time_since_first_reduced_roll = now; - } - - if ((now - _time_since_first_reduced_roll) > ROLL_WARNING_TIMEOUT) { - _need_report_npfg_uncertain_condition = false; - events::send(events::ID("npfg_roll_command_uncertain"), events::Log::Warning, - "Roll command reduced due to uncertain velocity/wind estimates!"); - } - - } else { - // Nothing to do, already reported. - } - - _time_since_last_npfg_call = now; - - return can_run_factor * (new_roll_setpoint); -} - void -FixedwingPositionControl::updateLandingAbortStatus(const uint8_t new_abort_status) +FixedWingModeManager::updateLandingAbortStatus(const uint8_t new_abort_status) { // prevent automatic aborts if already flaring, but allow manual aborts if (!_flare_states.flaring || new_abort_status == position_controller_landing_status_s::ABORTED_BY_OPERATOR) { @@ -591,86 +335,28 @@ FixedwingPositionControl::updateLandingAbortStatus(const uint8_t new_abort_statu } } -void -FixedwingPositionControl::get_waypoint_heading_distance(float heading, position_setpoint_s &waypoint_prev, - position_setpoint_s &waypoint_next, bool flag_init) +float +FixedWingModeManager::getManualHeightRateSetpoint() { - position_setpoint_s temp_prev = waypoint_prev; - position_setpoint_s temp_next = waypoint_next; + float height_rate_setpoint = 0.f; - if (flag_init) { - // previous waypoint: HDG_HOLD_SET_BACK_DIST meters behind us - waypoint_from_heading_and_distance(_current_latitude, _current_longitude, heading + radians(180.0f), - HDG_HOLD_SET_BACK_DIST, &temp_prev.lat, &temp_prev.lon); - - // next waypoint: HDG_HOLD_DIST_NEXT meters in front of us - waypoint_from_heading_and_distance(_current_latitude, _current_longitude, heading, - HDG_HOLD_DIST_NEXT, &temp_next.lat, &temp_next.lon); + if (_manual_control_setpoint_for_height_rate >= FLT_EPSILON) { + height_rate_setpoint = math::interpolate(math::deadzone(_manual_control_setpoint_for_height_rate, + kStickDeadBand), 0, 1.f, 0.f, -_param_sinkrate_target.get()); } else { - // use the existing flight path from prev to next - - // previous waypoint: shifted HDG_HOLD_REACHED_DIST + HDG_HOLD_SET_BACK_DIST - create_waypoint_from_line_and_dist(waypoint_next.lat, waypoint_next.lon, waypoint_prev.lat, waypoint_prev.lon, - HDG_HOLD_REACHED_DIST + HDG_HOLD_SET_BACK_DIST, &temp_prev.lat, &temp_prev.lon); - - // next waypoint: shifted -(HDG_HOLD_DIST_NEXT + HDG_HOLD_REACHED_DIST) - create_waypoint_from_line_and_dist(waypoint_next.lat, waypoint_next.lon, waypoint_prev.lat, waypoint_prev.lon, - -(HDG_HOLD_REACHED_DIST + HDG_HOLD_DIST_NEXT), &temp_next.lat, &temp_next.lon); - } - - waypoint_prev = temp_prev; - waypoint_prev.alt = _current_altitude; - - waypoint_next = temp_next; - waypoint_next.alt = _current_altitude; -} - -float -FixedwingPositionControl::getManualHeightRateSetpoint() -{ - /* - * The complete range is -1..+1, so this is 6% - * of the up or down range or 3% of the total range. - */ - const float deadBand = 0.06f; - - /* - * The correct scaling of the complete range needs - * to account for the missing part of the slope - * due to the deadband - */ - const float factor = 1.0f - deadBand; - - float height_rate_setpoint = 0.0f; - - /* - * Manual control has as convention the rotation around - * an axis. Positive X means to rotate positively around - * the X axis in NED frame, which is pitching down - */ - if (_manual_control_setpoint_for_height_rate > deadBand) { - /* pitching down */ - float pitch = -(_manual_control_setpoint_for_height_rate - deadBand) / factor; - height_rate_setpoint = pitch * _param_sinkrate_target.get(); - - } else if (_manual_control_setpoint_for_height_rate < - deadBand) { - /* pitching up */ - float pitch = -(_manual_control_setpoint_for_height_rate + deadBand) / factor; - const float climb_rate_target = _param_climbrate_target.get(); - - height_rate_setpoint = pitch * climb_rate_target; - + height_rate_setpoint = math::interpolate(math::deadzone(_manual_control_setpoint_for_height_rate, + kStickDeadBand), -1., 0.f, _param_climbrate_target.get(), 0.f); } return height_rate_setpoint; } void -FixedwingPositionControl::updateManualTakeoffStatus() +FixedWingModeManager::updateManualTakeoffStatus() { if (!_completed_manual_takeoff) { - const bool at_controllable_airspeed = _airspeed_eas > _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()) + const bool at_controllable_airspeed = _airspeed_eas > _param_fw_airspd_min.get() || !_airspeed_valid; const bool is_hovering = _vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING && _control_mode.flag_armed; @@ -679,7 +365,7 @@ FixedwingPositionControl::updateManualTakeoffStatus() } void -FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) +FixedWingModeManager::set_control_mode_current(const hrt_abstime &now) { /* only run position controller in fixed-wing mode and during transitions for VTOL */ if (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING && !_vehicle_status.in_transition_mode) { @@ -687,7 +373,7 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) return; // do not publish the setpoint } - FW_POSCTRL_MODE commanded_position_control_mode = _control_mode_current; + const FW_POSCTRL_MODE previous_position_control_mode = _control_mode_current; _skipping_takeoff_detection = false; const bool doing_backtransition = _vehicle_status.in_transition_mode && !_vehicle_status.in_transition_to_fw; @@ -727,7 +413,7 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) } else { _control_mode_current = FW_POSCTRL_MODE_AUTO_TAKEOFF; - if (commanded_position_control_mode != FW_POSCTRL_MODE_AUTO_TAKEOFF && !_landed) { + if (previous_position_control_mode != FW_POSCTRL_MODE_AUTO_TAKEOFF && !_landed) { // skip takeoff detection when switching from any other mode, auto or manual, // while already in air. // TODO: find a better place for / way of doing this @@ -758,8 +444,8 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) // failsafe modes engaged if position estimate is invalidated - if (commanded_position_control_mode != FW_POSCTRL_MODE_AUTO_ALTITUDE - && commanded_position_control_mode != FW_POSCTRL_MODE_AUTO_CLIMBRATE) { + if (previous_position_control_mode != FW_POSCTRL_MODE_AUTO_ALTITUDE + && previous_position_control_mode != FW_POSCTRL_MODE_AUTO_CLIMBRATE) { // reset timer the first time we switch into this mode _time_in_fixed_bank_loiter = now; } @@ -770,7 +456,7 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) } else if (hrt_elapsed_time(&_time_in_fixed_bank_loiter) < (_param_nav_gpsf_lt.get() * 1_s) && !_vehicle_status.in_transition_mode) { - if (commanded_position_control_mode != FW_POSCTRL_MODE_AUTO_ALTITUDE) { + if (previous_position_control_mode != FW_POSCTRL_MODE_AUTO_ALTITUDE) { // Need to init because last loop iteration was in a different mode events::send(events::ID("fixedwing_position_control_fb_loiter"), events::Log::Critical, "Start loiter with fixed bank angle"); @@ -779,7 +465,7 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) _control_mode_current = FW_POSCTRL_MODE_AUTO_ALTITUDE; } else { - if (commanded_position_control_mode != FW_POSCTRL_MODE_AUTO_CLIMBRATE && !_vehicle_status.in_transition_mode) { + if (previous_position_control_mode != FW_POSCTRL_MODE_AUTO_CLIMBRATE && !_vehicle_status.in_transition_mode) { events::send(events::ID("fixedwing_position_control_descend"), events::Log::Critical, "Start descending"); } @@ -788,19 +474,11 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) } else if (_control_mode.flag_control_manual_enabled && _control_mode.flag_control_position_enabled) { - if (commanded_position_control_mode != FW_POSCTRL_MODE_MANUAL_POSITION) { + if (previous_position_control_mode != FW_POSCTRL_MODE_MANUAL_POSITION) { /* Need to init because last loop iteration was in a different mode */ _hdg_hold_yaw = _yaw; // yaw is not controlled, so set setpoint to current yaw _hdg_hold_enabled = false; // this makes sure the waypoints are reset below _yaw_lock_engaged = false; - - /* reset setpoints from other modes (auto) otherwise we won't - * level out without new manual input */ - float roll_body = _manual_control_setpoint.roll * radians(_param_fw_r_lim.get()); - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - const Eulerf current_setpoint(Quatf(_att_sp.q_d)); - const Quatf setpoint(Eulerf(roll_body, current_setpoint.theta(), yaw_body)); - setpoint.copyTo(_att_sp.q_d); } _control_mode_current = FW_POSCTRL_MODE_MANUAL_POSITION; @@ -815,17 +493,16 @@ FixedwingPositionControl::set_control_mode_current(const hrt_abstime &now) } void -FixedwingPositionControl::update_in_air_states(const hrt_abstime now) +FixedWingModeManager::update_in_air_states(const hrt_abstime now) { /* reset flag when airplane landed */ if (_landed) { _completed_manual_takeoff = false; } - } void -FixedwingPositionControl::move_position_setpoint_for_vtol_transition(position_setpoint_s ¤t_sp) +FixedWingModeManager::move_position_setpoint_for_vtol_transition(position_setpoint_s ¤t_sp) { // TODO: velocity, altitude, or just a heading hold position mode should be used for this, not position // shifting hacks @@ -847,7 +524,6 @@ FixedwingPositionControl::move_position_setpoint_for_vtol_transition(position_se _transition_waypoint(1) = lon_transition; } - current_sp.lat = _transition_waypoint(0); current_sp.lon = _transition_waypoint(1); @@ -859,9 +535,9 @@ FixedwingPositionControl::move_position_setpoint_for_vtol_transition(position_se } void -FixedwingPositionControl::control_auto(const float control_interval, const Vector2d &curr_pos, - const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr, - const position_setpoint_s &pos_sp_next) +FixedWingModeManager::control_auto(const float control_interval, const Vector2d &curr_pos, + const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr, + const position_setpoint_s &pos_sp_next) { position_setpoint_s current_sp = pos_sp_curr; move_position_setpoint_for_vtol_transition(current_sp); @@ -886,13 +562,7 @@ FixedwingPositionControl::control_auto(const float control_interval, const Vecto switch (position_sp_type) { case position_setpoint_s::SETPOINT_TYPE_IDLE: { - _att_sp.thrust_body[0] = 0.0f; - const float roll_body = 0.0f; - const float pitch_body = radians(_param_fw_psp_off.get()); - const float yaw_body = 0.0f; - - const Quatf setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - setpoint.copyTo(_att_sp.q_d); + control_idle(); break; } @@ -907,12 +577,12 @@ FixedwingPositionControl::control_auto(const float control_interval, const Vecto case position_setpoint_s::SETPOINT_TYPE_LOITER: #ifdef CONFIG_FIGURE_OF_EIGHT if (current_sp.loiter_pattern == position_setpoint_s::LOITER_TYPE_FIGUREEIGHT) { - controlAutoFigureEight(control_interval, curr_pos, ground_speed, pos_sp_prev, current_sp); + controlAutoFigureEight(control_interval, curr_pos, ground_speed, current_sp); } else #endif // CONFIG_FIGURE_OF_EIGHT { - control_auto_loiter(control_interval, curr_pos, ground_speed, pos_sp_prev, current_sp, pos_sp_next); + control_auto_loiter(control_interval, curr_pos, ground_speed, current_sp, pos_sp_next); } @@ -930,94 +600,93 @@ FixedwingPositionControl::control_auto(const float control_interval, const Vecto #endif // CONFIG_FIGURE_OF_EIGHT - /* Copy thrust output for publication, handle special cases */ - if (position_sp_type == position_setpoint_s::SETPOINT_TYPE_IDLE) { - - _att_sp.thrust_body[0] = 0.0f; - - } else { - // when we are landed state we want the motor to spin at idle speed - _att_sp.thrust_body[0] = (_landed) ? min(_param_fw_thr_idle.get(), 1.f) : get_tecs_thrust(); - } - if (!_vehicle_status.in_transition_to_fw) { publishLocalPositionSetpoint(current_sp); } } -void -FixedwingPositionControl::control_auto_fixed_bank_alt_hold(const float control_interval) +void FixedWingModeManager::control_idle() { - const bool is_low_height = checkLowHeightConditions(); + const hrt_abstime now = hrt_absolute_time(); + fixed_wing_lateral_setpoint_s lateral_ctrl_sp {empty_lateral_control_setpoint}; + lateral_ctrl_sp.timestamp = now; + lateral_ctrl_sp.lateral_acceleration = 0.0f; + _lateral_ctrl_sp_pub.publish(lateral_ctrl_sp); - // only control altitude and airspeed ("fixed-bank loiter") - tecs_update_pitch_throttle(control_interval, - _current_altitude, - _performance_model.getCalibratedTrimAirspeed(), - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - _param_fw_thr_max.get(), - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height); + fixed_wing_longitudinal_setpoint_s long_contrl_sp {empty_longitudinal_control_setpoint}; + long_contrl_sp.timestamp = now; + long_contrl_sp.pitch_direct = 0.f; + long_contrl_sp.throttle_direct = 0.0f; + _longitudinal_ctrl_sp_pub.publish(long_contrl_sp); - const float roll_body = math::radians(_param_nav_gpsf_r.get()); // open loop loiter bank angle - const float yaw_body = 0.f; + _ctrl_configuration_handler.setThrottleMax(0.0f); + _ctrl_configuration_handler.setThrottleMin(0.0f); +} + +void +FixedWingModeManager::control_auto_fixed_bank_alt_hold() +{ + const hrt_abstime now = hrt_absolute_time(); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = _current_altitude, + .height_rate = NAN, + .equivalent_airspeed = NAN, + .pitch_direct = NAN, + .throttle_direct = NAN + }; + + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); + + float throttle_max = _param_fw_thr_max.get(); // Special case: if z or vz estimate is invalid we cannot control height anymore. To prevent a // "climb-away" we set the thrust to MIN in that case. if (_landed || !_local_pos.z_valid || !_local_pos.v_z_valid) { - _att_sp.thrust_body[0] = _param_fw_thr_min.get(); - - } else { - _att_sp.thrust_body[0] = min(get_tecs_thrust(), _param_fw_thr_max.get()); + throttle_max = _param_fw_thr_min.get(); } - const float pitch_body = get_tecs_pitch(); - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + _ctrl_configuration_handler.setThrottleMax(throttle_max); + fixed_wing_lateral_setpoint_s lateral_ctrl_sp = empty_lateral_control_setpoint; + lateral_ctrl_sp.timestamp = hrt_absolute_time(); + const float roll_body = math::radians(_param_nav_gpsf_r.get()); // open loop loiter bank angle + lateral_ctrl_sp.lateral_acceleration = rollAngleToLateralAccel(roll_body); + _lateral_ctrl_sp_pub.publish(lateral_ctrl_sp); } void -FixedwingPositionControl::control_auto_descend(const float control_interval) +FixedWingModeManager::control_auto_descend() { // Hard-code descend rate to 0.5m/s. This is a compromise to give the system to recover, // but not letting it drift too far away. - const float descend_rate = -0.5f; - const bool disable_underspeed_handling = false; + const float descend_rate = 0.5f; - const bool is_low_height = checkLowHeightConditions(); + const hrt_abstime now = hrt_absolute_time(); - tecs_update_pitch_throttle(control_interval, - _current_altitude, - _performance_model.getCalibratedTrimAirspeed(), - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - _param_fw_thr_max.get(), - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - descend_rate); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = NAN, + .height_rate = -descend_rate, + .equivalent_airspeed = NAN, + .pitch_direct = NAN, + .throttle_direct = NAN + }; + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); + + _ctrl_configuration_handler.setThrottleMax((_landed + || !_local_pos.v_z_valid) ? _param_fw_thr_min.get() : _param_fw_thr_max.get()); + + fixed_wing_lateral_setpoint_s lateral_ctrl_sp = empty_lateral_control_setpoint; + lateral_ctrl_sp.timestamp = now; const float roll_body = math::radians(_param_nav_gpsf_r.get()); // open loop loiter bank angle - const float yaw_body = 0.f; - - // Special case: if vz estimate is invalid we cannot control height rate anymore. To prevent a - // "climb-away" we set the thrust to MIN in that case. - _att_sp.thrust_body[0] = (_landed - || !_local_pos.v_z_valid) ? _param_fw_thr_min.get() : min(get_tecs_thrust(), _param_fw_thr_max.get()); - - const float pitch_body = get_tecs_pitch(); - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + lateral_ctrl_sp.lateral_acceleration = rollAngleToLateralAccel(roll_body); + _lateral_ctrl_sp_pub.publish(lateral_ctrl_sp); } uint8_t -FixedwingPositionControl::handle_setpoint_type(const position_setpoint_s &pos_sp_curr, +FixedWingModeManager::handle_setpoint_type(const position_setpoint_s &pos_sp_curr, const position_setpoint_s &pos_sp_next) { uint8_t position_sp_type = pos_sp_curr.type; @@ -1031,13 +700,12 @@ FixedwingPositionControl::handle_setpoint_type(const position_setpoint_s &pos_sp /* current waypoint (the one currently heading for) */ curr_wp = Vector2d(pos_sp_curr.lat, pos_sp_curr.lon); - const float acc_rad = _npfg.switchDistance(500.0f); + const float acc_rad = _directional_guidance.switchDistance(500.0f); const bool approaching_vtol_backtransition = _vehicle_status.is_vtol && pos_sp_curr.type == position_setpoint_s::SETPOINT_TYPE_POSITION && _position_setpoint_current_valid && pos_sp_next.type == position_setpoint_s::SETPOINT_TYPE_LAND && _position_setpoint_next_valid; - // check if we should switch to loiter but only if we are not expecting a backtransition to happen if (pos_sp_curr.type == position_setpoint_s::SETPOINT_TYPE_POSITION && !approaching_vtol_backtransition) { @@ -1069,23 +737,11 @@ FixedwingPositionControl::handle_setpoint_type(const position_setpoint_s &pos_sp } void -FixedwingPositionControl::control_auto_position(const float control_interval, const Vector2d &curr_pos, +FixedWingModeManager::control_auto_position(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr) { - const float acc_rad = _npfg.switchDistance(500.0f); - float tecs_fw_thr_min; - float tecs_fw_thr_max; - - if (pos_sp_curr.gliding_enabled) { - /* enable gliding with this waypoint */ - _tecs.set_speed_weight(2.0f); - tecs_fw_thr_min = 0.0; - tecs_fw_thr_max = 0.0; - - } else { - tecs_fw_thr_min = _param_fw_thr_min.get(); - tecs_fw_thr_max = _param_fw_thr_max.get(); - } + const float acc_rad = _directional_guidance.switchDistance(500.0f); + const float target_airspeed = pos_sp_curr.cruising_speed > FLT_EPSILON ? pos_sp_curr.cruising_speed : NAN; // waypoint is a plain navigation waypoint float position_sp_alt = pos_sp_curr.alt; @@ -1122,149 +778,95 @@ FixedwingPositionControl::control_auto_position(const float control_interval, co } } - float target_airspeed = adapt_airspeed_setpoint(control_interval, pos_sp_curr.cruising_speed, - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), ground_speed); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = position_sp_alt, + .height_rate = NAN, + .equivalent_airspeed = target_airspeed, + .pitch_direct = NAN, + .throttle_direct = NAN + }; + + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); + + float throttle_min = NAN; + float throttle_max = NAN; + + if (pos_sp_curr.gliding_enabled) { + /* enable gliding with this waypoint */ + throttle_min = 0.0; + throttle_max = 0.0; + _ctrl_configuration_handler.setSpeedWeight(2.f); + } + + _ctrl_configuration_handler.setThrottleMax(throttle_max); + _ctrl_configuration_handler.setThrottleMin(throttle_min); Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; Vector2f curr_wp_local = _global_local_proj_ref.project(pos_sp_curr.lat, pos_sp_curr.lon); - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); + DirectionalGuidanceOutput sp{}; if (_position_setpoint_previous_valid && pos_sp_prev.type != position_setpoint_s::SETPOINT_TYPE_TAKEOFF) { Vector2f prev_wp_local = _global_local_proj_ref.project(pos_sp_prev.lat, pos_sp_prev.lon); - navigateWaypoints(prev_wp_local, curr_wp_local, curr_pos_local, ground_speed, _wind_vel); + sp = navigateWaypoints(prev_wp_local, curr_wp_local, curr_pos_local, ground_speed, _wind_vel); } else { - navigateWaypoint(curr_wp_local, curr_pos_local, ground_speed, _wind_vel); + sp = navigateWaypoint(curr_wp_local, curr_pos_local, ground_speed, _wind_vel); } - float roll_body = getCorrectedNpfgRollSetpoint(); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; - - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - - const bool is_low_height = checkLowHeightConditions(); - - tecs_update_pitch_throttle(control_interval, - position_sp_alt, - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - tecs_fw_thr_min, - tecs_fw_thr_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height); - - const float pitch_body = get_tecs_pitch(); - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + fixed_wing_lateral_setpoint_s lateral_ctrl_sp{empty_lateral_control_setpoint}; + lateral_ctrl_sp.timestamp = hrt_absolute_time(); + lateral_ctrl_sp.course = sp.course_setpoint; + lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(lateral_ctrl_sp); } void -FixedwingPositionControl::control_auto_velocity(const float control_interval, const Vector2d &curr_pos, +FixedWingModeManager::control_auto_velocity(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) { - float tecs_fw_thr_min; - float tecs_fw_thr_max; - - if (pos_sp_curr.gliding_enabled) { - /* enable gliding with this waypoint */ - _tecs.set_speed_weight(2.0f); - tecs_fw_thr_min = 0.0; - tecs_fw_thr_max = 0.0; - - } else { - tecs_fw_thr_min = _param_fw_thr_min.get(); - tecs_fw_thr_max = _param_fw_thr_max.get(); - } - - // waypoint is a plain navigation waypoint - float position_sp_alt = pos_sp_curr.alt; - - //Offboard velocity control Vector2f target_velocity{pos_sp_curr.vx, pos_sp_curr.vy}; - _target_bearing = wrap_pi(atan2f(target_velocity(1), target_velocity(0))); + const float target_bearing = wrap_pi(atan2f(target_velocity(1), target_velocity(0))); - float target_airspeed = adapt_airspeed_setpoint(control_interval, pos_sp_curr.cruising_speed, - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), ground_speed); + const Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; + const DirectionalGuidanceOutput sp = navigateBearing(curr_pos_local, target_bearing, ground_speed, _wind_vel); - Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateBearing(curr_pos_local, _target_bearing, ground_speed, _wind_vel); - float roll_body = getCorrectedNpfgRollSetpoint(); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); - float yaw_body = _yaw; - const bool disable_underspeed_handling = false; + const float target_airspeed = pos_sp_curr.cruising_speed > FLT_EPSILON ? pos_sp_curr.cruising_speed : NAN; - const bool is_low_height = checkLowHeightConditions(); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = pos_sp_curr.alt, + .height_rate = pos_sp_curr.vz, + .equivalent_airspeed = target_airspeed, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - tecs_update_pitch_throttle(control_interval, - position_sp_alt, - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - tecs_fw_thr_min, - tecs_fw_thr_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - pos_sp_curr.vz); - const float pitch_body = get_tecs_pitch(); + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + if (pos_sp_curr.gliding_enabled) { + _ctrl_configuration_handler.setThrottleMin(0.0f); + _ctrl_configuration_handler.setThrottleMax(0.0f); + _ctrl_configuration_handler.setSpeedWeight(2.0f); + } } void -FixedwingPositionControl::control_auto_loiter(const float control_interval, const Vector2d &curr_pos, - const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr, +FixedWingModeManager::control_auto_loiter(const float control_interval, const Vector2d &curr_pos, + const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr, const position_setpoint_s &pos_sp_next) { + // current waypoint (the one currently heading for) + const Vector2d curr_wp = Vector2d(pos_sp_curr.lat, pos_sp_curr.lon); - Vector2d curr_wp{0, 0}; - Vector2d prev_wp{0, 0}; - - /* current waypoint (the one currently heading for) */ - curr_wp = Vector2d(pos_sp_curr.lat, pos_sp_curr.lon); - - if (_position_setpoint_previous_valid && pos_sp_prev.type != position_setpoint_s::SETPOINT_TYPE_TAKEOFF) { - prev_wp(0) = pos_sp_prev.lat; - prev_wp(1) = pos_sp_prev.lon; - - } else { - // No valid previous waypoint, go along the line between aircraft and current waypoint - prev_wp = curr_pos; - } - - float airspeed_sp = -1.f; - - if (PX4_ISFINITE(pos_sp_curr.cruising_speed) && - pos_sp_curr.cruising_speed > FLT_EPSILON) { - - airspeed_sp = pos_sp_curr.cruising_speed; - } - - float tecs_fw_thr_min; - float tecs_fw_thr_max; - - if (pos_sp_curr.gliding_enabled) { - /* enable gliding with this waypoint */ - _tecs.set_speed_weight(2.0f); - tecs_fw_thr_min = 0.0; - tecs_fw_thr_max = 0.0; - - } else { - tecs_fw_thr_min = _param_fw_thr_min.get(); - tecs_fw_thr_max = _param_fw_thr_max.get(); - } - - /* waypoint is a loiter waypoint */ float loiter_radius = pos_sp_curr.loiter_radius; if (fabsf(pos_sp_curr.loiter_radius) < FLT_EPSILON) { @@ -1275,41 +877,40 @@ FixedwingPositionControl::control_auto_loiter(const float control_interval, cons Vector2f curr_wp_local{_global_local_proj_ref.project(curr_wp(0), curr_wp(1))}; Vector2f vehicle_to_loiter_center{curr_wp_local - curr_pos_local}; - bool is_low_height = checkLowHeightConditions(); + const bool close_to_circle = vehicle_to_loiter_center.norm() < loiter_radius + _directional_guidance.switchDistance( + 500); - const bool close_to_circle = vehicle_to_loiter_center.norm() < loiter_radius + _npfg.switchDistance(500); + bool enforce_low_height{false}; + + float target_airspeed = pos_sp_curr.cruising_speed > FLT_EPSILON ? pos_sp_curr.cruising_speed : NAN; if (pos_sp_next.type == position_setpoint_s::SETPOINT_TYPE_LAND && _position_setpoint_next_valid && close_to_circle && _param_fw_lnd_earlycfg.get()) { // We're in a loiter directly before a landing WP. Enable our landing configuration (flaps, // landing airspeed and potentially tighter altitude control) already such that we don't // have to do this switch (which can cause significant altitude errors) close to the ground. + enforce_low_height = true; - // Just before landing, enforce low-height flight conditions for tighter altitude control - is_low_height = true; + if (_param_fw_lnd_airspd.get() > FLT_EPSILON) { + target_airspeed = _param_fw_lnd_airspd.get(); + } - airspeed_sp = (_param_fw_lnd_airspd.get() > FLT_EPSILON) ? _param_fw_lnd_airspd.get() : - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); _flaps_setpoint = _param_fw_flaps_lnd_scl.get(); _spoilers_setpoint = _param_fw_spoilers_lnd.get(); _new_landing_gear_position = landing_gear_s::GEAR_DOWN; } - float target_airspeed = adapt_airspeed_setpoint(control_interval, airspeed_sp, - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), - ground_speed); + const DirectionalGuidanceOutput sp = navigateLoiter(curr_wp_local, curr_pos_local, loiter_radius, + pos_sp_curr.loiter_direction_counter_clockwise, + ground_speed, + _wind_vel); - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateLoiter(curr_wp_local, curr_pos_local, loiter_radius, pos_sp_curr.loiter_direction_counter_clockwise, - ground_speed, - _wind_vel); - float roll_body = getCorrectedNpfgRollSetpoint(); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - - float alt_sp = pos_sp_curr.alt; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); if (_landing_abort_status) { if (pos_sp_curr.alt - _current_altitude < kClearanceAltitudeBuffer) { @@ -1318,47 +919,47 @@ FixedwingPositionControl::control_auto_loiter(const float control_interval, cons } else { // continue straight until vehicle has sufficient altitude - // keep flaps in landing configuration if the airspeed is below the min airspeed (keep deployed if airspeed not valid) - roll_body = 0.0f; + _ctrl_configuration_handler.setLateralAccelMax(0.0f); - if (!_airspeed_valid || _airspeed_eas < _performance_model.getMinimumCalibratedAirspeed()) { - _flaps_setpoint = _param_fw_flaps_lnd_scl.get(); + // keep flaps in landing configuration if the airspeed is below the min airspeed (keep deployed if airspeed not valid) + if (!_airspeed_valid || _airspeed_eas < _param_fw_airspd_min.get()) { + _flaps_setpoint = _param_fw_flaps_lnd_scl.get(); } else { _flaps_setpoint = 0.f; } } - is_low_height = true; // In low-height flight, TECS will control altitude tighter + enforce_low_height = true; } - tecs_update_pitch_throttle(control_interval, - alt_sp, - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - tecs_fw_thr_min, - tecs_fw_thr_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = pos_sp_curr.alt, + .height_rate = NAN, + .equivalent_airspeed = target_airspeed, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - const float pitch_body = get_tecs_pitch(); + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + if (pos_sp_curr.gliding_enabled) { + _ctrl_configuration_handler.setThrottleMin(0.0f); + _ctrl_configuration_handler.setThrottleMax(0.0f); + _ctrl_configuration_handler.setSpeedWeight(2.0f); + } + + _ctrl_configuration_handler.setEnforceLowHeightCondition(enforce_low_height); } #ifdef CONFIG_FIGURE_OF_EIGHT void -FixedwingPositionControl::controlAutoFigureEight(const float control_interval, const Vector2d &curr_pos, - const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr) +FixedWingModeManager::controlAutoFigureEight(const float control_interval, const Vector2d &curr_pos, + const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) { // airspeed settings - float target_airspeed = adapt_airspeed_setpoint(control_interval, pos_sp_curr.cruising_speed, - _performance_model.getMinimumCalibratedAirspeed(), ground_speed); - - // Lateral Control + const float target_airspeed = pos_sp_curr.cruising_speed > FLT_EPSILON ? pos_sp_curr.cruising_speed : NAN; Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; @@ -1369,50 +970,36 @@ FixedwingPositionControl::controlAutoFigureEight(const float control_interval, c params.loiter_orientation = pos_sp_curr.loiter_orientation; params.loiter_radius = pos_sp_curr.loiter_radius; - // Apply control - _figure_eight.updateSetpoint(curr_pos_local, ground_speed, params, target_airspeed); - float roll_body = _figure_eight.getRollSetpoint(); - target_airspeed = _figure_eight.getAirspeedSetpoint(); - _target_bearing = _figure_eight.getTargetBearing(); + const DirectionalGuidanceOutput sp = _figure_eight.updateSetpoint(curr_pos_local, ground_speed, params); + + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); + _closest_point_on_path = _figure_eight.getClosestPoint(); - // TECS - float tecs_fw_thr_min; - float tecs_fw_thr_max; + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = pos_sp_curr.alt, + .height_rate = NAN, + .equivalent_airspeed = target_airspeed, + .pitch_direct = NAN, + .throttle_direct = NAN + }; + + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); if (pos_sp_curr.gliding_enabled) { - /* enable gliding with this waypoint */ - _tecs.set_speed_weight(2.0f); - tecs_fw_thr_min = 0.0; - tecs_fw_thr_max = 0.0; - - } else { - tecs_fw_thr_min = _param_fw_thr_min.get(); - tecs_fw_thr_max = _param_fw_thr_max.get(); + _ctrl_configuration_handler.setThrottleMin(0.0f); + _ctrl_configuration_handler.setThrottleMax(0.0f); + _ctrl_configuration_handler.setSpeedWeight(2.0f); } - - const bool is_low_height = checkLowHeightConditions(); - - tecs_update_pitch_throttle(control_interval, - pos_sp_curr.alt, - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - tecs_fw_thr_min, - tecs_fw_thr_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height); - - // Yaw - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - const float pitch_body = get_tecs_pitch(); - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); } -void FixedwingPositionControl::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(); @@ -1429,67 +1016,48 @@ void FixedwingPositionControl::publishFigureEightStatus(const position_setpoint_ #endif // CONFIG_FIGURE_OF_EIGHT void -FixedwingPositionControl::control_auto_path(const float control_interval, const Vector2d &curr_pos, - const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) +FixedWingModeManager::control_auto_path(const float control_interval, const Vector2d &curr_pos, + const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) { - float tecs_fw_thr_min; - float tecs_fw_thr_max; - - if (pos_sp_curr.gliding_enabled) { - /* enable gliding with this waypoint */ - _tecs.set_speed_weight(2.0f); - tecs_fw_thr_min = 0.0; - tecs_fw_thr_max = 0.0; - - } else { - tecs_fw_thr_min = _param_fw_thr_min.get(); - tecs_fw_thr_max = _param_fw_thr_max.get(); - } - - // waypoint is a plain navigation waypoint - float target_airspeed = adapt_airspeed_setpoint(control_interval, pos_sp_curr.cruising_speed, - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), ground_speed); + const float target_airspeed = pos_sp_curr.cruising_speed > FLT_EPSILON ? pos_sp_curr.cruising_speed : NAN; Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; Vector2f curr_wp_local = _global_local_proj_ref.project(pos_sp_curr.lat, pos_sp_curr.lon); - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - // Navigate directly on position setpoint and path tangent - matrix::Vector2f velocity_2d(pos_sp_curr.vx, pos_sp_curr.vy); + const matrix::Vector2f velocity_2d(pos_sp_curr.vx, pos_sp_curr.vy); const float curvature = PX4_ISFINITE(_pos_sp_triplet.current.loiter_radius) ? 1 / _pos_sp_triplet.current.loiter_radius : 0.0f; - navigatePathTangent(curr_pos_local, curr_wp_local, velocity_2d.normalized(), ground_speed, _wind_vel, curvature); + const DirectionalGuidanceOutput sp = navigatePathTangent(curr_pos_local, curr_wp_local, velocity_2d.normalized(), + ground_speed, _wind_vel, curvature); - float roll_body = getCorrectedNpfgRollSetpoint(); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = pos_sp_curr.alt, + .height_rate = NAN, + .equivalent_airspeed = target_airspeed, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - const bool is_low_height = checkLowHeightConditions(); + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - tecs_update_pitch_throttle(control_interval, - pos_sp_curr.alt, - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - tecs_fw_thr_min, - tecs_fw_thr_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height); - - _att_sp.thrust_body[0] = min(get_tecs_thrust(), tecs_fw_thr_max); - const float pitch_body = get_tecs_pitch(); - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + if (pos_sp_curr.gliding_enabled) { + _ctrl_configuration_handler.setThrottleMin(0.0f); + _ctrl_configuration_handler.setThrottleMax(0.0f); + _ctrl_configuration_handler.setSpeedWeight(2.0f); + } } void -FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const float control_interval, +FixedWingModeManager::control_auto_takeoff(const hrt_abstime &now, const float control_interval, const Vector2d &global_position, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) { if (!_control_mode.flag_armed) { @@ -1504,27 +1072,18 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo // (navigator will accept the takeoff as complete once crossing the clearance altitude) const float altitude_setpoint_amsl = clearance_altitude_amsl + kClearanceAltitudeBuffer; - Vector2f local_2D_position{_local_pos.x, _local_pos.y}; + const Vector2f local_2D_position{_local_pos.x, _local_pos.y}; const float takeoff_airspeed = (_param_fw_tko_airspd.get() > FLT_EPSILON) ? _param_fw_tko_airspd.get() : - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); - - float adjusted_min_airspeed = _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); - - if (takeoff_airspeed < adjusted_min_airspeed) { - // adjust underspeed detection bounds for takeoff airspeed - _tecs.set_equivalent_airspeed_min(takeoff_airspeed); - adjusted_min_airspeed = takeoff_airspeed; - } - - const bool is_low_height = checkLowHeightConditions(); + _param_fw_airspd_min.get(); if (_runway_takeoff.runwayTakeoffEnabled()) { if (!_runway_takeoff.isInitialized()) { - _runway_takeoff.init(now, _yaw, global_position); + _runway_takeoff.init(now); + _takeoff_init_position = global_position; _takeoff_ground_alt = _current_altitude; _launch_current_yaw = _yaw; - _airspeed_slew_rate_controller.setForcedValue(takeoff_airspeed); + // _airspeed_slew_rate_controller.setForcedValue(takeoff_airspeed); // TODO events::send(events::ID("fixedwing_position_control_takeoff"), events::Log::Info, "Takeoff on runway"); } @@ -1536,22 +1095,7 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo _runway_takeoff.update(now, takeoff_airspeed, _airspeed_eas, _current_altitude - _takeoff_ground_alt, clearance_altitude_amsl - _takeoff_ground_alt); - // yaw control is disabled once in "taking off" state - _att_sp.fw_control_yaw_wheel = _runway_takeoff.controlYaw(); - - // XXX: hacky way to pass through manual nose-wheel incrementing. need to clean this interface. - if (_param_rwto_nudge.get()) { - _att_sp.yaw_sp_move_rate = _manual_control_setpoint.yaw; - } - - // tune up the lateral position control guidance when on the ground - if (_runway_takeoff.controlYaw()) { - _npfg.setPeriod(_param_rwto_npfg_period.get()); - - } - - const Vector2f start_pos_local = _global_local_proj_ref.project(_runway_takeoff.getStartPosition()(0), - _runway_takeoff.getStartPosition()(1)); + const Vector2f start_pos_local = _global_local_proj_ref.project(_takeoff_init_position(0), _takeoff_init_position(1)); const Vector2f takeoff_waypoint_local = _global_local_proj_ref.project(pos_sp_curr.lat, pos_sp_curr.lon); // by default set the takeoff bearing to the takeoff yaw, but override in a mission takeoff with bearing to takeoff WP @@ -1566,59 +1110,38 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo } } - float target_airspeed = adapt_airspeed_setpoint(control_interval, takeoff_airspeed, adjusted_min_airspeed, ground_speed, - true); + const DirectionalGuidanceOutput sp = navigateLine(start_pos_local, takeoff_bearing, local_2D_position, ground_speed, + _wind_vel); - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateLine(start_pos_local, takeoff_bearing, local_2D_position, ground_speed, _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; - float roll_body = _runway_takeoff.getRoll(getCorrectedNpfgRollSetpoint()); + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; + const float roll_wingtip_strike = getMaxRollAngleNearGround(_current_altitude, _takeoff_ground_alt); + _ctrl_configuration_handler.setLateralAccelMax(rollAngleToLateralAccel(roll_wingtip_strike)); - // use npfg's bearing to commanded course, controlled via yaw angle while on runway - const float bearing = _npfg.getBearing(); - - // heading hold mode will override this bearing setpoint - float yaw_body = _runway_takeoff.getYaw(bearing); - - // update tecs const float pitch_max = _runway_takeoff.getMaxPitch(math::radians(_param_fw_p_lim_max.get())); const float pitch_min = _runway_takeoff.getMinPitch(math::radians(_takeoff_pitch_min.get()), math::radians(_param_fw_p_lim_min.get())); - if (_runway_takeoff.resetIntegrators()) { - // reset integrals except yaw (which also counts for the wheel controller) - _att_sp.reset_integral = true; + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = altitude_setpoint_amsl, + .height_rate = NAN, + .equivalent_airspeed = takeoff_airspeed, + .pitch_direct = _runway_takeoff.getPitch(), + .throttle_direct = _runway_takeoff.getThrottle(_param_fw_thr_idle.get()) + }; - // throttle is open loop anyway during ground roll, no need to wind up the integrator - _tecs.resetIntegrals(); - } + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - const bool disable_underspeed_handling = true; - - tecs_update_pitch_throttle(control_interval, - altitude_setpoint_amsl, - target_airspeed, - pitch_min, - pitch_max, - _param_fw_thr_min.get(), - _param_fw_thr_max.get(), - _param_sinkrate_target.get(), - _performance_model.getMaximumClimbRate(_air_density), - is_low_height, - disable_underspeed_handling); - - _tecs.set_equivalent_airspeed_min(_performance_model.getMinimumCalibratedAirspeed()); // reset after TECS calculation - - const float pitch_body = _runway_takeoff.getPitch(get_tecs_pitch()); - _att_sp.thrust_body[0] = _runway_takeoff.getThrottle(_param_fw_thr_idle.get(), get_tecs_thrust()); - - roll_body = constrainRollNearGround(roll_body, _current_altitude, _takeoff_ground_alt); - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + _ctrl_configuration_handler.setPitchMin(pitch_min); + _ctrl_configuration_handler.setPitchMax(pitch_max); + _ctrl_configuration_handler.setClimbRateTarget(_param_fw_t_clmb_max.get()); + _ctrl_configuration_handler.setDisableUnderspeedProtection(true); _flaps_setpoint = _param_fw_flaps_to_scl.get(); @@ -1627,6 +1150,13 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo _new_landing_gear_position = landing_gear_s::GEAR_UP; } + fixed_wing_runway_control_s fw_runway_control{}; + fw_runway_control.timestamp = now; + fw_runway_control.wheel_steering_enabled = true; + fw_runway_control.wheel_steering_nudging_rate = _param_rwto_nudge.get() ? _manual_control_setpoint.yaw : 0.f; + + _fixed_wing_runway_control_pub.publish(fw_runway_control); + } else { /* Perform launch detection */ if (!_skipping_takeoff_detection && _param_fw_laun_detcn_on.get() && @@ -1646,14 +1176,14 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo if (!_launch_detected && _launchDetector.getLaunchDetected() > launch_detection_status_s::STATE_WAITING_FOR_LAUNCH) { _launch_detected = true; - _launch_global_position = global_position; + _takeoff_init_position = global_position; _takeoff_ground_alt = _current_altitude; _launch_current_yaw = _yaw; - _airspeed_slew_rate_controller.setForcedValue(takeoff_airspeed); + // _airspeed_slew_rate_controller.setForcedValue(takeoff_airspeed); // TODO } - const Vector2f launch_local_position = _global_local_proj_ref.project(_launch_global_position(0), - _launch_global_position(1)); + const Vector2f launch_local_position = _global_local_proj_ref.project(_takeoff_init_position(0), + _takeoff_init_position(1)); const Vector2f takeoff_waypoint_local = _global_local_proj_ref.project(pos_sp_curr.lat, pos_sp_curr.lon); // by default set the takeoff bearing to the takeoff yaw, but override in a mission takeoff with bearing to takeoff WP @@ -1672,61 +1202,52 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo if (_launchDetector.getLaunchDetected() > launch_detection_status_s::STATE_WAITING_FOR_LAUNCH) { /* Launch has been detected, hence we have to control the plane. */ - float target_airspeed = adapt_airspeed_setpoint(control_interval, takeoff_airspeed, adjusted_min_airspeed, ground_speed, - true); + const DirectionalGuidanceOutput sp = navigateLine(launch_local_position, takeoff_bearing, local_2D_position, + ground_speed, + _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateLine(launch_local_position, takeoff_bearing, local_2D_position, ground_speed, _wind_vel); - float roll_body = getCorrectedNpfgRollSetpoint(); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); + const float roll_wingtip_strike = getMaxRollAngleNearGround(_current_altitude, _takeoff_ground_alt); + _ctrl_configuration_handler.setLateralAccelMax(rollAngleToLateralAccel(roll_wingtip_strike)); const float max_takeoff_throttle = (_launchDetector.getLaunchDetected() < launch_detection_status_s::STATE_FLYING) ? - _param_fw_thr_idle.get() : _param_fw_thr_max.get(); - const bool disable_underspeed_handling = true; + _param_fw_thr_idle.get() : NAN; + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = altitude_setpoint_amsl, + .height_rate = NAN, + .equivalent_airspeed = takeoff_airspeed, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - tecs_update_pitch_throttle(control_interval, - altitude_setpoint_amsl, - target_airspeed, - radians(_takeoff_pitch_min.get()), - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - max_takeoff_throttle, - _param_sinkrate_target.get(), - _performance_model.getMaximumClimbRate(_air_density), - is_low_height, - disable_underspeed_handling); - if (_launchDetector.getLaunchDetected() < launch_detection_status_s::STATE_FLYING) { - // explicitly set idle throttle until motors are enabled - _att_sp.thrust_body[0] = _param_fw_thr_idle.get(); + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - } else { - _att_sp.thrust_body[0] = get_tecs_thrust(); - } + _ctrl_configuration_handler.setPitchMin(radians(_takeoff_pitch_min.get())); + _ctrl_configuration_handler.setThrottleMax(max_takeoff_throttle); + _ctrl_configuration_handler.setClimbRateTarget(_param_fw_t_clmb_max.get()); + _ctrl_configuration_handler.setDisableUnderspeedProtection(true); - float pitch_body = get_tecs_pitch(); - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - - roll_body = constrainRollNearGround(roll_body, _current_altitude, _takeoff_ground_alt); - - Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + //float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw } else { + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.lateral_acceleration = 0.f; /* Tell the attitude controller to stop integrating while we are waiting for the launch */ - _att_sp.reset_integral = true; - - /* Set default roll and pitch setpoints during detection phase */ - float roll_body = 0.0f; - float yaw_body = _yaw; - _att_sp.thrust_body[0] = _param_fw_thr_idle.get(); - float pitch_body = radians(_takeoff_pitch_min.get()); - roll_body = constrainRollNearGround(roll_body, _current_altitude, _takeoff_ground_alt); - Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); + fixed_wing_longitudinal_setpoint_s long_control_sp{empty_longitudinal_control_setpoint}; + long_control_sp.timestamp = now; + long_control_sp.pitch_direct = radians(_takeoff_pitch_min.get()); + long_control_sp.throttle_direct = _param_fw_thr_idle.get(); + _longitudinal_ctrl_sp_pub.publish(long_control_sp); } launch_detection_status_s launch_detection_status; @@ -1743,23 +1264,13 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo } void -FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, const float control_interval, +FixedWingModeManager::control_auto_landing_straight(const hrt_abstime &now, const float control_interval, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr) { - // first handle non-position things like airspeed and tecs settings const float airspeed_land = (_param_fw_lnd_airspd.get() > FLT_EPSILON) ? _param_fw_lnd_airspd.get() : - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); - float adjusted_min_airspeed = _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); - - if (airspeed_land < adjusted_min_airspeed) { - // adjust underspeed detection bounds for landing airspeed - _tecs.set_equivalent_airspeed_min(airspeed_land); - adjusted_min_airspeed = airspeed_land; - } - - float target_airspeed = adapt_airspeed_setpoint(control_interval, airspeed_land, adjusted_min_airspeed, - ground_speed); + _param_fw_airspd_min.get(); + _ctrl_configuration_handler.setEnforceLowHeightCondition(true); // now handle position const Vector2f local_position{_local_pos.x, _local_pos.y}; @@ -1807,8 +1318,6 @@ FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, // flare at the maximum of the altitude determined by the time before touchdown and a minimum flare altitude const float flare_rel_alt = math::max(_param_fw_lnd_fl_time.get() * _local_pos.vz, _param_fw_lnd_flalt.get()); - // During landing, enforce low-height flight conditions for tighter altitude control - const bool is_low_height = true; // the terrain estimate (if enabled) is always used to determine the flaring altitude if ((_current_altitude < terrain_alt + flare_rel_alt) || _flare_states.flaring) { @@ -1819,7 +1328,6 @@ FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, _flare_states.flaring = true; _flare_states.start_time = now; _flare_states.initial_height_rate_setpoint = -_local_pos.vz; - _flare_states.initial_throttle_setpoint = _att_sp.thrust_body[0]; events::send(events::ID("fixedwing_position_control_landing_flaring"), events::Log::Info, "Landing, flaring"); } @@ -1830,29 +1338,32 @@ FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, 1.0f); /* lateral guidance first, because npfg will adjust the airspeed setpoint if necessary */ - - // tune up the lateral position control guidance when on the ground - const float ground_roll_npfg_period = flare_ramp_interpolator * _param_rwto_npfg_period.get() + - (1.0f - flare_ramp_interpolator) * _param_npfg_period.get(); - _npfg.setPeriod(ground_roll_npfg_period); - const Vector2f local_approach_entrance = local_land_point - landing_approach_vector; - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateLine(local_approach_entrance, local_land_point, local_position, ground_speed, _wind_vel); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; - float roll_body = getCorrectedNpfgRollSetpoint(); + const DirectionalGuidanceOutput sp = navigateLine(local_approach_entrance, local_land_point, local_position, + ground_speed, + _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); - // use npfg's bearing to commanded course, controlled via yaw angle while on runway - float yaw_body = _npfg.getBearing(); + const float roll_wingtip_strike = getMaxRollAngleNearGround(_current_altitude, _takeoff_ground_alt); + _ctrl_configuration_handler.setLateralAccelMax(rollAngleToLateralAccel(roll_wingtip_strike)); /* longitudinal guidance */ const float flare_ramp_interpolator_sqrt = sqrtf(flare_ramp_interpolator); - const float height_rate_setpoint = flare_ramp_interpolator_sqrt * (-_param_fw_lnd_fl_sink.get()) + - (1.0f - flare_ramp_interpolator_sqrt) * _flare_states.initial_height_rate_setpoint; + // Use separate ramp for the altitude setpoint that's starting only when the other is finished + // to allow motor to be ramped down before height rate setpoint is adapted for flaring. + const float flare_hieght_rate_interpolator = math::constrain((seconds_since_flare_start - + _param_fw_lnd_fl_time.get()) / (_param_fw_lnd_fl_time.get()), 0.f, 1.f); + const float flare_hieght_rate_interpolator_sqrt = sqrt(flare_hieght_rate_interpolator); + + const float height_rate_setpoint = flare_hieght_rate_interpolator_sqrt * (-_param_fw_lnd_fl_sink.get()) + + (1.0f - flare_hieght_rate_interpolator_sqrt) * _flare_states.initial_height_rate_setpoint; float pitch_min_rad = flare_ramp_interpolator_sqrt * radians(_param_fw_lnd_fl_pmin.get()) + (1.0f - flare_ramp_interpolator_sqrt) * radians(_param_fw_p_lim_min.get()); @@ -1877,47 +1388,23 @@ FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, const float throttle_max = flare_ramp_interpolator_sqrt * _param_fw_thr_idle.get() + (1.0f - flare_ramp_interpolator_sqrt) * _param_fw_thr_max.get(); - const bool disable_underspeed_handling = true; - tecs_update_pitch_throttle(control_interval, - altitude_setpoint, - target_airspeed, - pitch_min_rad, - pitch_max_rad, - _param_fw_thr_idle.get(), - throttle_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - height_rate_setpoint); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = altitude_setpoint, + .height_rate = height_rate_setpoint, + .equivalent_airspeed = airspeed_land, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - /* set the attitude and throttle commands */ + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - // TECS has authority (though constrained) over pitch during flare, throttle is hard set to idle - float pitch_body = get_tecs_pitch(); - - roll_body = constrainRollNearGround(roll_body, _current_altitude, terrain_alt); - - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); - - // enable direct yaw control using rudder/wheel - _att_sp.fw_control_yaw_wheel = true; - - // XXX: hacky way to pass through manual nose-wheel incrementing. need to clean this interface. - if (_param_fw_lnd_nudge.get() > LandingNudgingOption::kNudgingDisabled) { - _att_sp.yaw_sp_move_rate = _manual_control_setpoint.yaw; - } - - // blend the height rate controlled throttle setpoints with initial throttle setting over the flare - // ramp time period to maintain throttle command continuity when switching from altitude to height rate - // control - const float blended_throttle = flare_ramp_interpolator * get_tecs_thrust() + (1.0f - flare_ramp_interpolator) * - _flare_states.initial_throttle_setpoint; - - _att_sp.thrust_body[0] = blended_throttle; + _ctrl_configuration_handler.setPitchMin(pitch_min_rad); + _ctrl_configuration_handler.setPitchMax(pitch_max_rad); + _ctrl_configuration_handler.setThrottleMax(throttle_max); + _ctrl_configuration_handler.setThrottleMin(_param_fw_thr_idle.get()); + _ctrl_configuration_handler.setDisableUnderspeedProtection(true); } else { @@ -1927,50 +1414,48 @@ FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, const Vector2f local_approach_entrance = local_land_point - landing_approach_vector; - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateLine(local_approach_entrance, local_land_point, local_position, ground_speed, _wind_vel); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; - float roll_body = getCorrectedNpfgRollSetpoint(); + const DirectionalGuidanceOutput sp = navigateLine(local_approach_entrance, local_land_point, local_position, + ground_speed, + _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); + + _ctrl_configuration_handler.setLateralAccelMax(rollAngleToLateralAccel(getMaxRollAngleNearGround(_current_altitude, + terrain_alt))); /* longitudinal guidance */ - // open the desired max sink rate to encompass the glide slope if within the aircraft's performance limits + // Open the desired max sink rate to encompass the glide slope. // x/sqrt(x^2+1) = sin(arctan(x)) const float glide_slope_sink_rate = airspeed_land * glide_slope / sqrtf(glide_slope * glide_slope + 1.0f); - const float desired_max_sinkrate = math::min(math::max(glide_slope_sink_rate, _param_sinkrate_target.get()), - _param_fw_t_sink_max.get()); + const float desired_max_sinkrate = math::max(glide_slope_sink_rate, _param_sinkrate_target.get()); - tecs_update_pitch_throttle(control_interval, - altitude_setpoint, - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - _param_fw_thr_max.get(), - desired_max_sinkrate, - _param_climbrate_target.get(), - is_low_height); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = altitude_setpoint, + .height_rate = NAN, + .equivalent_airspeed = airspeed_land, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - /* set the attitude and throttle commands */ + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - float pitch_body = get_tecs_pitch(); - - roll_body = constrainRollNearGround(roll_body, _current_altitude, terrain_alt); - - // yaw is not controlled in nominal flight - float yaw_body = _yaw; - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); - - // enable direct yaw control using rudder/wheel - _att_sp.fw_control_yaw_wheel = false; - - _att_sp.thrust_body[0] = (_landed) ? _param_fw_thr_idle.get() : get_tecs_thrust(); + _ctrl_configuration_handler.setThrottleMin(_param_fw_thr_idle.get()); + _ctrl_configuration_handler.setThrottleMax(_landed ? _param_fw_thr_idle.get() : NAN); + _ctrl_configuration_handler.setSinkRateTarget(desired_max_sinkrate); } - _tecs.set_equivalent_airspeed_min(_performance_model.getMinimumCalibratedAirspeed()); // reset after TECS calculation + fixed_wing_runway_control_s fw_runway_control{}; + fw_runway_control.timestamp = now; + fw_runway_control.wheel_steering_enabled = true; + fw_runway_control.wheel_steering_nudging_rate = _param_fw_lnd_nudge.get() > LandingNudgingOption::kNudgingDisabled ? + _manual_control_setpoint.yaw : 0.f; + + _fixed_wing_runway_control_pub.publish(fw_runway_control); _flaps_setpoint = _param_fw_flaps_lnd_scl.get(); _spoilers_setpoint = _param_fw_spoilers_lnd.get(); @@ -1986,22 +1471,13 @@ FixedwingPositionControl::control_auto_landing_straight(const hrt_abstime &now, } void -FixedwingPositionControl::control_auto_landing_circular(const hrt_abstime &now, const float control_interval, +FixedWingModeManager::control_auto_landing_circular(const hrt_abstime &now, const float control_interval, const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) { - // first handle non-position things like airspeed and tecs settings const float airspeed_land = (_param_fw_lnd_airspd.get() > FLT_EPSILON) ? _param_fw_lnd_airspd.get() : - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); - float adjusted_min_airspeed = _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()); + _param_fw_airspd_min.get(); - if (airspeed_land < adjusted_min_airspeed) { - // adjust underspeed detection bounds for landing airspeed - _tecs.set_equivalent_airspeed_min(airspeed_land); - adjusted_min_airspeed = airspeed_land; - } - - float target_airspeed = adapt_airspeed_setpoint(control_interval, airspeed_land, adjusted_min_airspeed, - ground_speed); + _ctrl_configuration_handler.setEnforceLowHeightCondition(true); const Vector2f local_position{_local_pos.x, _local_pos.y}; @@ -2026,14 +1502,6 @@ FixedwingPositionControl::control_auto_landing_circular(const hrt_abstime &now, loiter_radius = _param_nav_loiter_rad.get(); } - // During landing, enforce low-height flight conditions for tighter altitude control - const bool is_low_height = true; - - // the terrain estimate (if enabled) is always used to determine the flaring altitude - float roll_body; - float yaw_body; - float pitch_body; - if ((_current_altitude < terrain_alt + flare_rel_alt) || _flare_states.flaring) { // flare and land with minimal speed @@ -2042,7 +1510,6 @@ FixedwingPositionControl::control_auto_landing_circular(const hrt_abstime &now, _flare_states.flaring = true; _flare_states.start_time = now; _flare_states.initial_height_rate_setpoint = -_local_pos.vz; - _flare_states.initial_throttle_setpoint = _att_sp.thrust_body[0]; events::send(events::ID("fixedwing_position_control_landing_circle_flaring"), events::Log::Info, "Landing, flaring"); } @@ -2053,23 +1520,15 @@ FixedwingPositionControl::control_auto_landing_circular(const hrt_abstime &now, 1.0f); /* lateral guidance first, because npfg will adjust the airspeed setpoint if necessary */ + const DirectionalGuidanceOutput sp = navigateLoiter(local_landing_orbit_center, local_position, loiter_radius, + pos_sp_curr.loiter_direction_counter_clockwise, + ground_speed, _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; - // tune up the lateral position control guidance when on the ground - const float ground_roll_npfg_period = flare_ramp_interpolator * _param_rwto_npfg_period.get() + - (1.0f - flare_ramp_interpolator) * _param_npfg_period.get(); - - _npfg.setPeriod(ground_roll_npfg_period); - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - - navigateLoiter(local_landing_orbit_center, local_position, loiter_radius, - pos_sp_curr.loiter_direction_counter_clockwise, - ground_speed, _wind_vel); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; - roll_body = getCorrectedNpfgRollSetpoint(); - - yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); /* longitudinal guidance */ const float flare_ramp_interpolator_sqrt = sqrtf(flare_ramp_interpolator); @@ -2099,99 +1558,70 @@ FixedwingPositionControl::control_auto_landing_circular(const hrt_abstime &now, const float throttle_max = flare_ramp_interpolator_sqrt * _param_fw_thr_idle.get() + (1.0f - flare_ramp_interpolator_sqrt) * _param_fw_thr_max.get(); - const bool disable_underspeed_handling = true; + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = NAN, + .height_rate = height_rate_setpoint, + .equivalent_airspeed = airspeed_land, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - tecs_update_pitch_throttle(control_interval, - _current_altitude, // is not controlled, control descend rate - target_airspeed, - pitch_min_rad, - pitch_max_rad, - _param_fw_thr_idle.get(), - throttle_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - height_rate_setpoint); + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - /* set the attitude and throttle commands */ - - // TECS has authority (though constrained) over pitch during flare, throttle is hard set to idle - pitch_body = get_tecs_pitch(); - - // enable direct yaw control using rudder/wheel - _att_sp.fw_control_yaw_wheel = true; - - // XXX: hacky way to pass through manual nose-wheel incrementing. need to clean this interface. - if (_param_fw_lnd_nudge.get() > LandingNudgingOption::kNudgingDisabled) { - _att_sp.yaw_sp_move_rate = _manual_control_setpoint.yaw; - } - - // blend the height rate controlled throttle setpoints with initial throttle setting over the flare - // ramp time period to maintain throttle command continuity when switching from altitude to height rate - // control - const float blended_throttle = flare_ramp_interpolator * get_tecs_thrust() + (1.0f - flare_ramp_interpolator) * - _flare_states.initial_throttle_setpoint; - - _att_sp.thrust_body[0] = blended_throttle; + _ctrl_configuration_handler.setPitchMin(pitch_min_rad); + _ctrl_configuration_handler.setPitchMax(pitch_max_rad); + _ctrl_configuration_handler.setThrottleMax(throttle_max); + _ctrl_configuration_handler.setThrottleMin(_param_fw_thr_idle.get()); + _ctrl_configuration_handler.setDisableUnderspeedProtection(true); } else { // follow the glide slope + const DirectionalGuidanceOutput sp = navigateLoiter(local_landing_orbit_center, local_position, loiter_radius, + pos_sp_curr.loiter_direction_counter_clockwise, + ground_speed, _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; - /* lateral guidance */ - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - - navigateLoiter(local_landing_orbit_center, local_position, loiter_radius, - pos_sp_curr.loiter_direction_counter_clockwise, - ground_speed, _wind_vel); - target_airspeed = _npfg.getAirspeedRef() / _eas2tas; - roll_body = getCorrectedNpfgRollSetpoint(); + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); /* longitudinal guidance */ - // open the desired max sink rate to encompass the glide slope if within the aircraft's performance limits + // Open the desired max sink rate to encompass the glide slope. // x/sqrt(x^2+1) = sin(arctan(x)) const float glide_slope = math::radians(_param_fw_lnd_ang.get()); const float glide_slope_sink_rate = airspeed_land * glide_slope / sqrtf(glide_slope * glide_slope + 1.0f); - const float desired_max_sinkrate = math::min(math::max(glide_slope_sink_rate, _param_sinkrate_target.get()), - _param_fw_t_sink_max.get()); - const bool disable_underspeed_handling = false; + const float desired_max_sinkrate = math::max(glide_slope_sink_rate, _param_sinkrate_target.get()); - tecs_update_pitch_throttle(control_interval, - _current_altitude, // is not controlled, control descend rate - target_airspeed, - radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - _param_fw_thr_max.get(), - desired_max_sinkrate, - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - -glide_slope_sink_rate); // heightrate = -sinkrate + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = now, + .altitude = NAN, + .height_rate = -glide_slope_sink_rate, + .equivalent_airspeed = airspeed_land, + .pitch_direct = NAN, + .throttle_direct = NAN + }; - /* set the attitude and throttle commands */ + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - pitch_body = get_tecs_pitch(); - - // yaw is not controlled in nominal flight - yaw_body = _yaw; - - // enable direct yaw control using rudder/wheel - _att_sp.fw_control_yaw_wheel = false; - - _att_sp.thrust_body[0] = (_landed) ? _param_fw_thr_idle.get() : get_tecs_thrust(); + _ctrl_configuration_handler.setThrottleMin(_param_fw_thr_idle.get()); + _ctrl_configuration_handler.setThrottleMax(_landed ? _param_fw_thr_idle.get() : NAN); + _ctrl_configuration_handler.setSinkRateTarget(desired_max_sinkrate); } - _tecs.set_equivalent_airspeed_min(_performance_model.getMinimumCalibratedAirspeed()); // reset after TECS calculation + fixed_wing_runway_control_s fw_runway_control{}; + fw_runway_control.timestamp = now; + fw_runway_control.wheel_steering_enabled = true; + fw_runway_control.wheel_steering_nudging_rate = _param_fw_lnd_nudge.get() > LandingNudgingOption::kNudgingDisabled ? + _manual_control_setpoint.yaw : 0.f; - roll_body = constrainRollNearGround(roll_body, _current_altitude, terrain_alt); - - Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + _fixed_wing_runway_control_pub.publish(fw_runway_control); + _ctrl_configuration_handler.setLateralAccelMax(rollAngleToLateralAccel(getMaxRollAngleNearGround(_current_altitude, + terrain_alt))); _flaps_setpoint = _param_fw_flaps_lnd_scl.get(); _spoilers_setpoint = _param_fw_spoilers_lnd.get(); @@ -2205,71 +1635,63 @@ FixedwingPositionControl::control_auto_landing_circular(const hrt_abstime &now, } void -FixedwingPositionControl::control_manual_altitude(const float control_interval, const Vector2d &curr_pos, +FixedWingModeManager::control_manual_altitude(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed) { updateManualTakeoffStatus(); - const float calibrated_airspeed_sp = adapt_airspeed_setpoint(control_interval, get_manual_airspeed_setpoint(), - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), ground_speed, !_completed_manual_takeoff); const float height_rate_sp = getManualHeightRateSetpoint(); // TECS may try to pitch down to gain airspeed if we underspeed, constrain the pitch when underspeeding if we are // just passed launch - const float min_pitch = (_completed_manual_takeoff) ? radians(_param_fw_p_lim_min.get()) : + const float min_pitch = (_completed_manual_takeoff) ? NAN : MIN_PITCH_DURING_MANUAL_TAKEOFF; - float throttle_max = _param_fw_thr_max.get(); + float throttle_max = NAN; // enable the operator to kill the throttle on ground if (_landed && (_manual_control_setpoint_for_airspeed < THROTTLE_THRESH)) { throttle_max = 0.0f; } + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = NAN, + .height_rate = height_rate_sp, + .equivalent_airspeed = get_manual_airspeed_setpoint(), + .pitch_direct = NAN, + .throttle_direct = NAN + }; - const bool is_low_height = checkLowHeightConditions(); + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - const bool disable_underspeed_handling = false; + _ctrl_configuration_handler.setPitchMin(min_pitch); + _ctrl_configuration_handler.setThrottleMax(throttle_max); - tecs_update_pitch_throttle(control_interval, - _current_altitude, - calibrated_airspeed_sp, - min_pitch, - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - throttle_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - height_rate_sp); - - float roll_body = _manual_control_setpoint.roll * radians(_param_fw_r_lim.get()); - float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - - _att_sp.thrust_body[0] = min(get_tecs_thrust(), throttle_max); - const float pitch_body = get_tecs_pitch(); - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); + const float roll_body = _manual_control_setpoint.roll * radians(_param_fw_r_lim.get()); + const DirectionalGuidanceOutput sp = {.course_setpoint = NAN, .lateral_acceleration_feedforward = rollAngleToLateralAccel(roll_body)}; + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); } void -FixedwingPositionControl::control_manual_position(const float control_interval, const Vector2d &curr_pos, +FixedWingModeManager::control_manual_position(const hrt_abstime now, const float control_interval, + const Vector2d &curr_pos, const Vector2f &ground_speed) { updateManualTakeoffStatus(); - float calibrated_airspeed_sp = adapt_airspeed_setpoint(control_interval, get_manual_airspeed_setpoint(), - _performance_model.getMinimumCalibratedAirspeed(getLoadFactor()), ground_speed, !_completed_manual_takeoff); const float height_rate_sp = getManualHeightRateSetpoint(); // TECS may try to pitch down to gain airspeed if we underspeed, constrain the pitch when underspeeding if we are // just passed launch - const float min_pitch = (_completed_manual_takeoff) ? radians(_param_fw_p_lim_min.get()) : + const float min_pitch = (_completed_manual_takeoff) ? NAN : MIN_PITCH_DURING_MANUAL_TAKEOFF; - float throttle_max = _param_fw_thr_max.get(); + float throttle_max = NAN; // enable the operator to kill the throttle on ground if (_landed && (_manual_control_setpoint_for_airspeed < THROTTLE_THRESH)) { @@ -2277,14 +1699,9 @@ FixedwingPositionControl::control_manual_position(const float control_interval, } if (_local_pos.xy_reset_counter != _xy_reset_counter) { - _time_last_xy_reset = _local_pos.timestamp; + _time_last_xy_reset = now; } - Eulerf current_setpoint(Quatf(_att_sp.q_d)); - float yaw_body = current_setpoint.psi(); - float roll_body = current_setpoint.phi(); - float pitch_body = current_setpoint.theta(); - /* heading control */ // TODO: either make it course hold (easier) or a real heading hold (minus all the complexity here) if (fabsf(_manual_control_setpoint.roll) < HDG_HOLD_MAN_INPUT_THRESH && @@ -2306,7 +1723,7 @@ FixedwingPositionControl::control_manual_position(const float control_interval, if (_yaw_lock_engaged) { - Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; + const Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; if (!_hdg_hold_enabled) { // just switched back from non heading-hold to heading hold @@ -2318,37 +1735,34 @@ FixedwingPositionControl::control_manual_position(const float control_interval, // if there's a reset-by-fusion, the ekf needs some time to converge, // therefore we go into track holiding for 2 seconds - if (_local_pos.timestamp - _time_last_xy_reset < 2_s) { + if (now - _time_last_xy_reset < 2_s) { _hdg_hold_position = curr_pos_local; } - _npfg.setAirspeedNom(calibrated_airspeed_sp * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - navigateLine(_hdg_hold_position, _hdg_hold_yaw, curr_pos_local, ground_speed, _wind_vel); - roll_body = getCorrectedNpfgRollSetpoint(); - calibrated_airspeed_sp = _npfg.getAirspeedRef() / _eas2tas; + const DirectionalGuidanceOutput sp = navigateLine(_hdg_hold_position, _hdg_hold_yaw, curr_pos_local, ground_speed, + _wind_vel); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = now; + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; - yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); } } - const bool is_low_height = checkLowHeightConditions(); + const fixed_wing_longitudinal_setpoint_s fw_longitudinal_control_sp = { + .timestamp = hrt_absolute_time(), + .altitude = NAN, + .height_rate = height_rate_sp, + .equivalent_airspeed = get_manual_airspeed_setpoint(), + .pitch_direct = NAN, + .throttle_direct = NAN + }; - const bool disable_underspeed_handling = false; + _longitudinal_ctrl_sp_pub.publish(fw_longitudinal_control_sp); - - tecs_update_pitch_throttle(control_interval, - _current_altitude, // TODO: check if this is really what we want.. or if we want to lock the altitude. - calibrated_airspeed_sp, - min_pitch, - radians(_param_fw_p_lim_max.get()), - _param_fw_thr_min.get(), - throttle_max, - _param_sinkrate_target.get(), - _param_climbrate_target.get(), - is_low_height, - disable_underspeed_handling, - height_rate_sp); + _ctrl_configuration_handler.setPitchMin(min_pitch); + _ctrl_configuration_handler.setThrottleMax(throttle_max); if (!_yaw_lock_engaged || fabsf(_manual_control_setpoint.roll) >= HDG_HOLD_MAN_INPUT_THRESH || fabsf(_manual_control_setpoint.yaw) >= HDG_HOLD_MAN_INPUT_THRESH) { @@ -2356,105 +1770,58 @@ FixedwingPositionControl::control_manual_position(const float control_interval, _hdg_hold_enabled = false; _yaw_lock_engaged = false; - roll_body = _manual_control_setpoint.roll * radians(_param_fw_r_lim.get()); - yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw + const float roll_body = _manual_control_setpoint.roll * radians(_param_fw_r_lim.get()); + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.lateral_acceleration = rollAngleToLateralAccel(roll_body); + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); } - - _att_sp.thrust_body[0] = min(get_tecs_thrust(), throttle_max); - - pitch_body = get_tecs_pitch(); - - Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); } -void FixedwingPositionControl::control_backtransition_heading_hold() +float FixedWingModeManager::rollAngleToLateralAccel(float roll_body) const +{ + return tanf(roll_body) * CONSTANTS_ONE_G; +} + +void FixedWingModeManager::control_backtransition_heading_hold() { if (!PX4_ISFINITE(_backtrans_heading)) { _backtrans_heading = _local_pos.heading; } - float true_airspeed = _airspeed_eas * _eas2tas; - - if (!_airspeed_valid) { - true_airspeed = _performance_model.getCalibratedTrimAirspeed() * _eas2tas; - } - - // we can achieve heading control by setting airspeed and groundspeed vector equal - const Vector2f airspeed_vector = Vector2f(cosf(_local_pos.heading), sinf(_local_pos.heading)) * true_airspeed; - const Vector2f &ground_speed = airspeed_vector; - - _npfg.setAirspeedNom(_performance_model.getCalibratedTrimAirspeed() * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - - Vector2f virtual_target_point = Vector2f(cosf(_backtrans_heading), sinf(_backtrans_heading)) * HDG_HOLD_DIST_NEXT; - - navigateLine(Vector2f(0.f, 0.f), virtual_target_point, Vector2f(0.f, 0.f), ground_speed, Vector2f(0.f, 0.f)); - - const float roll_body = getCorrectedNpfgRollSetpoint(); - - const float yaw_body = _backtrans_heading; - - // these values are overriden by transition logic - _att_sp.thrust_body[0] = _param_fw_thr_min.get(); - const float pitch_body = 0.0f; - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); - + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.airspeed_direction = _backtrans_heading; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); } -void FixedwingPositionControl::control_backtransition_line_follow(const Vector2f &ground_speed, +void FixedWingModeManager::control_backtransition_line_follow(const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr) { Vector2f curr_pos_local{_local_pos.x, _local_pos.y}; Vector2f curr_wp_local = _global_local_proj_ref.project(pos_sp_curr.lat, pos_sp_curr.lon); - _npfg.setAirspeedNom(_performance_model.getCalibratedTrimAirspeed() * _eas2tas); - _npfg.setAirspeedMax(_performance_model.getMaximumCalibratedAirspeed() * _eas2tas); - // Set the position where the backtransition started the first ime we pass through here. // Will get reset if not in transition anymore. if (!_lpos_where_backtrans_started.isAllFinite()) { _lpos_where_backtrans_started = curr_pos_local; } - navigateLine(_lpos_where_backtrans_started, curr_wp_local, curr_pos_local, ground_speed, _wind_vel); - const float roll_body = getCorrectedNpfgRollSetpoint(); + DirectionalGuidanceOutput sp = {.course_setpoint = NAN, .lateral_acceleration_feedforward = 0.f}; - const float yaw_body = _yaw; // yaw is not controlled, so set setpoint to current yaw - - // these values are overriden by transition logic - _att_sp.thrust_body[0] = _param_fw_thr_min.get(); - const float pitch_body = 0.0f; - - const Quatf attitude_setpoint(Eulerf(roll_body, pitch_body, yaw_body)); - attitude_setpoint.copyTo(_att_sp.q_d); -} -float -FixedwingPositionControl::get_tecs_pitch() -{ - if (_tecs_is_running) { - return _tecs.get_pitch_setpoint() + radians(_param_fw_psp_off.get()); + if (_control_mode.flag_control_position_enabled) { + sp = navigateLine(_lpos_where_backtrans_started, curr_wp_local, curr_pos_local, ground_speed, _wind_vel); } - // return level flight pitch offset to prevent stale tecs state when it's not running - return radians(_param_fw_psp_off.get()); -} - -float -FixedwingPositionControl::get_tecs_thrust() -{ - if (_tecs_is_running) { - return min(_tecs.get_throttle_setpoint(), 1.f); - } - - // return 0 to prevent stale tecs state when it's not running - return 0.0f; + fixed_wing_lateral_setpoint_s fw_lateral_ctrl_sp{empty_lateral_control_setpoint}; + fw_lateral_ctrl_sp.timestamp = hrt_absolute_time(); + fw_lateral_ctrl_sp.course = sp.course_setpoint; + fw_lateral_ctrl_sp.lateral_acceleration = sp.lateral_acceleration_feedforward; + _lateral_ctrl_sp_pub.publish(fw_lateral_ctrl_sp); } void -FixedwingPositionControl::Run() +FixedWingModeManager::Run() { if (should_exit()) { _local_pos_sub.unregisterCallback(); @@ -2464,13 +1831,30 @@ FixedwingPositionControl::Run() perf_begin(_loop_perf); - /* only run controller if position changed */ + if (_vehicle_status_sub.updated()) { - if (_local_pos_sub.update(&_local_pos)) { + if (_vehicle_status_sub.update(&_vehicle_status)) { + _nav_state = _vehicle_status.nav_state; + } + } - const float control_interval = math::constrain((_local_pos.timestamp - _last_time_position_control_called) * 1e-6f, + /* only run controller if position changed and we are not running an external mode*/ + + const bool is_external_nav_state = (_nav_state >= vehicle_status_s::NAVIGATION_STATE_EXTERNAL1) + && (_nav_state <= vehicle_status_s::NAVIGATION_STATE_EXTERNAL8); + + if (is_external_nav_state) { + // this will cause the configuration handler to publish immediately the next time an internal flight + // mode is active + _ctrl_configuration_handler.resetLastPublishTime(); + + } else if (_local_pos_sub.update(&_local_pos)) { + + const hrt_abstime now = _local_pos.timestamp; + + const float control_interval = math::constrain((now - _last_time_position_control_called) * 1e-6f, MIN_AUTO_TIMESTEP, MAX_AUTO_TIMESTEP); - _last_time_position_control_called = _local_pos.timestamp; + _last_time_position_control_called = now; // check for parameter updates if (_parameter_update_sub.updated()) { @@ -2500,11 +1884,6 @@ FixedwingPositionControl::Run() // handle estimator reset events. we only adjust setpoins for manual modes if (_control_mode.flag_control_manual_enabled) { - if (_control_mode.flag_control_altitude_enabled && _local_pos.z_reset_counter != _z_reset_counter) { - // make TECS accept step in altitude and demanded altitude - _tecs.handle_alt_step(_current_altitude, -_local_pos.vz); - } - // adjust navigation waypoints in position control mode if (_control_mode.flag_control_altitude_enabled && _control_mode.flag_control_velocity_enabled && _local_pos.xy_reset_counter != _xy_reset_counter) { @@ -2612,15 +1991,7 @@ FixedwingPositionControl::Run() vehicle_attitude_poll(); vehicle_command_poll(); vehicle_control_mode_poll(); - wind_poll(); - - vehicle_air_data_s air_data; - - if (_vehicle_air_data_sub.update(&air_data)) { - _air_density = PX4_ISFINITE(air_data.rho) ? air_data.rho : _air_density; - _tecs.set_max_climb_rate(_performance_model.getMaximumClimbRate(_air_density)); - _tecs.set_min_sink_rate(_performance_model.getMinimumSinkRate(_air_density)); - } + wind_poll(now); if (_vehicle_land_detected_sub.updated()) { vehicle_land_detected_s vehicle_land_detected; @@ -2630,41 +2001,31 @@ FixedwingPositionControl::Run() } } - if (_vehicle_status_sub.update(&_vehicle_status)) { - if (!_vehicle_status.in_transition_mode) { - // reset position of backtransition start if not in transition - _lpos_where_backtrans_started = Vector2f(NAN, NAN); - _backtrans_heading = NAN; - } + if (!_vehicle_status.in_transition_mode) { + // reset position of backtransition start if not in transition + _lpos_where_backtrans_started = Vector2f(NAN, NAN); + _backtrans_heading = NAN; } + Vector2d curr_pos(_current_latitude, _current_longitude); Vector2f ground_speed(_local_pos.vx, _local_pos.vy); - set_control_mode_current(_local_pos.timestamp); + set_control_mode_current(now); - update_in_air_states(_local_pos.timestamp); + update_in_air_states(now); // restore nominal TECS parameters in case changed intermittently (e.g. in landing handling) - _tecs.set_speed_weight(_param_fw_t_spdweight.get()); // restore lateral-directional guidance parameters (changed in takeoff mode) - _npfg.setPeriod(_param_npfg_period.get()); - - _att_sp.reset_integral = false; + _directional_guidance.setPeriod(_param_npfg_period.get()); // by default no flaps/spoilers, is overwritten below in certain modes _flaps_setpoint = 0.f; _spoilers_setpoint = 0.f; - // reset flight phase estimate - _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_UNKNOWN; - - // by default we don't want yaw to be contoller directly with rudder - _att_sp.fw_control_yaw_wheel = false; - - // default to zero - is used (IN A HACKY WAY) to pass direct nose wheel steering via yaw stick to the actuators during auto takeoff - _att_sp.yaw_sp_move_rate = 0.0f; + // by default set speed weight to the param value, can be overwritten inside the methods below + _ctrl_configuration_handler.setSpeedWeight(_param_t_spdweight.get()); if (_control_mode_current != FW_POSCTRL_MODE_AUTO_LANDING_STRAIGHT && _control_mode_current != FW_POSCTRL_MODE_AUTO_LANDING_CIRCULAR) { @@ -2686,23 +2047,23 @@ FixedwingPositionControl::Run() } case FW_POSCTRL_MODE_AUTO_ALTITUDE: { - control_auto_fixed_bank_alt_hold(control_interval); + control_auto_fixed_bank_alt_hold(); break; } case FW_POSCTRL_MODE_AUTO_CLIMBRATE: { - control_auto_descend(control_interval); + control_auto_descend(); break; } case FW_POSCTRL_MODE_AUTO_LANDING_STRAIGHT: { - control_auto_landing_straight(_local_pos.timestamp, control_interval, ground_speed, _pos_sp_triplet.previous, + control_auto_landing_straight(now, control_interval, ground_speed, _pos_sp_triplet.previous, _pos_sp_triplet.current); break; } case FW_POSCTRL_MODE_AUTO_LANDING_CIRCULAR: { - control_auto_landing_circular(_local_pos.timestamp, control_interval, ground_speed, _pos_sp_triplet.current); + control_auto_landing_circular(now, control_interval, ground_speed, _pos_sp_triplet.current); break; } @@ -2712,12 +2073,12 @@ FixedwingPositionControl::Run() } case FW_POSCTRL_MODE_AUTO_TAKEOFF: { - control_auto_takeoff(_local_pos.timestamp, control_interval, curr_pos, ground_speed, _pos_sp_triplet.current); + control_auto_takeoff(now, control_interval, curr_pos, ground_speed, _pos_sp_triplet.current); break; } case FW_POSCTRL_MODE_MANUAL_POSITION: { - control_manual_position(control_interval, curr_pos, ground_speed); + control_manual_position(now, control_interval, curr_pos, ground_speed); break; } @@ -2727,7 +2088,6 @@ FixedwingPositionControl::Run() } case FW_POSCTRL_MODE_OTHER: { - _att_sp.thrust_body[0] = min(_att_sp.thrust_body[0], _param_fw_thr_max.get()); break; } @@ -2742,52 +2102,16 @@ FixedwingPositionControl::Run() } } - if (_control_mode_current != FW_POSCTRL_MODE_OTHER) { - Eulerf attitude_setpoint(Quatf(_att_sp.q_d)); - float roll_body = attitude_setpoint.phi(); - float pitch_body = attitude_setpoint.theta(); - float yaw_body = attitude_setpoint.psi(); - - if (_control_mode.flag_control_manual_enabled) { - roll_body = constrain(roll_body, -radians(_param_fw_r_lim.get()), - radians(_param_fw_r_lim.get())); - pitch_body = constrain(pitch_body, radians(_param_fw_p_lim_min.get()), - radians(_param_fw_p_lim_max.get())); - } - - if (_control_mode.flag_control_position_enabled || - _control_mode.flag_control_velocity_enabled || - _control_mode.flag_control_acceleration_enabled || - _control_mode.flag_control_altitude_enabled || - _control_mode.flag_control_climb_rate_enabled) { - - // roll slew rate - roll_body = _roll_slew_rate.update(roll_body, control_interval); - - const Quatf q(Eulerf(roll_body, pitch_body, yaw_body)); - q.copyTo(_att_sp.q_d); - - _att_sp.timestamp = hrt_absolute_time(); - _attitude_sp_pub.publish(_att_sp); - - // only publish status in full FW mode - if (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING - || _vehicle_status.in_transition_mode) { - status_publish(); - - } - } - - } else { - _roll_slew_rate.setForcedValue(_roll); + _ctrl_configuration_handler.update(now); } + // only publish status in full FW mode + if (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING + || _vehicle_status.in_transition_mode) { + publish_lateral_guidance_status(now); - - // Publish estimate of level flight - _flight_phase_estimation_pub.get().timestamp = hrt_absolute_time(); - _flight_phase_estimation_pub.update(); + } // if there's any change in landing gear setpoint publish it if (_new_landing_gear_position != old_landing_gear_position @@ -2795,7 +2119,7 @@ FixedwingPositionControl::Run() landing_gear_s landing_gear = {}; landing_gear.landing_gear = _new_landing_gear_position; - landing_gear.timestamp = hrt_absolute_time(); + landing_gear.timestamp = now; _landing_gear_pub.publish(landing_gear); } @@ -2804,16 +2128,15 @@ FixedwingPositionControl::Run() && _vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING) { normalized_unsigned_setpoint_s flaps_setpoint; flaps_setpoint.normalized_setpoint = _flaps_setpoint; - flaps_setpoint.timestamp = hrt_absolute_time(); + flaps_setpoint.timestamp = now; _flaps_setpoint_pub.publish(flaps_setpoint); normalized_unsigned_setpoint_s spoilers_setpoint; spoilers_setpoint.normalized_setpoint = _spoilers_setpoint; - spoilers_setpoint.timestamp = hrt_absolute_time(); + spoilers_setpoint.timestamp = now; _spoilers_setpoint_pub.publish(spoilers_setpoint); } - _z_reset_counter = _local_pos.z_reset_counter; _xy_reset_counter = _local_pos.xy_reset_counter; perf_end(_loop_perf); @@ -2821,7 +2144,7 @@ FixedwingPositionControl::Run() } void -FixedwingPositionControl::reset_takeoff_state() +FixedWingModeManager::reset_takeoff_state() { _runway_takeoff.reset(); @@ -2833,7 +2156,7 @@ FixedwingPositionControl::reset_takeoff_state() } void -FixedwingPositionControl::reset_landing_state() +FixedWingModeManager::reset_landing_state() { _time_started_landing = 0; @@ -2844,86 +2167,14 @@ FixedwingPositionControl::reset_landing_state() _last_time_terrain_alt_was_valid = 0; // reset abort land, unless loitering after an abort - if (_landing_abort_status && (_pos_sp_triplet.current.type != position_setpoint_s::SETPOINT_TYPE_LOITER)) { + if ((_landing_abort_status && (_pos_sp_triplet.current.type != position_setpoint_s::SETPOINT_TYPE_LOITER)) || + (_landing_abort_status && _param_fw_lnd_abort.get() == 0)) { updateLandingAbortStatus(position_controller_landing_status_s::NOT_ABORTED); } } -void -FixedwingPositionControl::tecs_update_pitch_throttle(const float control_interval, float alt_sp, float airspeed_sp, - float pitch_min_rad, float pitch_max_rad, float throttle_min, float throttle_max, - const float desired_max_sinkrate, const float desired_max_climbrate, const bool is_low_height, - bool disable_underspeed_detection, float hgt_rate_sp) -{ - // do not run TECS if vehicle is a VTOL and we are in rotary wing mode or in transition - if (_vehicle_status.is_vtol && (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING - || _vehicle_status.in_transition_mode)) { - _tecs_is_running = false; - return; - - } else { - _tecs_is_running = true; - } - - /* update TECS vehicle state estimates */ - const float throttle_trim_compensated = _performance_model.getTrimThrottle(throttle_min, - throttle_max, airspeed_sp, _air_density); - - /* No underspeed protection in landing mode */ - _tecs.set_detect_underspeed_enabled(!disable_underspeed_detection); - - updateTECSAltitudeTimeConstant(is_low_height, control_interval); - - // HOTFIX: the airspeed rate estimate using acceleration in body-forward direction has shown to lead to high biases - // when flying tight turns. It's in this case much safer to just set the estimated airspeed rate to 0. - const float airspeed_rate_estimate = 0.f; - - _tecs.update(_pitch - radians(_param_fw_psp_off.get()), - _current_altitude, - alt_sp, - airspeed_sp, - _airspeed_eas, - _eas2tas, - throttle_min, - throttle_max, - throttle_trim_compensated, - pitch_min_rad - radians(_param_fw_psp_off.get()), - pitch_max_rad - radians(_param_fw_psp_off.get()), - desired_max_climbrate, - desired_max_sinkrate, - airspeed_rate_estimate, - -_local_pos.vz, - hgt_rate_sp); - - tecs_status_publish(alt_sp, airspeed_sp, airspeed_rate_estimate, throttle_trim_compensated); - - if (_tecs_is_running && !_vehicle_status.in_transition_mode - && (_vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING)) { - const TECS::DebugOutput &tecs_output{_tecs.getStatus()}; - - // Check level flight: the height rate setpoint is not set or set to 0 and we are close to the target altitude and target altitude is not moving - if ((fabsf(tecs_output.height_rate_reference) < MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT) && - fabsf(_current_altitude - tecs_output.altitude_reference) < _param_nav_fw_alt_rad.get()) { - _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_LEVEL; - - } else if (((tecs_output.altitude_reference - _current_altitude) >= _param_nav_fw_alt_rad.get()) || - (tecs_output.height_rate_reference >= MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT)) { - _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_CLIMB; - - } else if (((_current_altitude - tecs_output.altitude_reference) >= _param_nav_fw_alt_rad.get()) || - (tecs_output.height_rate_reference <= -MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT)) { - _flight_phase_estimation_pub.get().flight_phase = flight_phase_estimation_s::FLIGHT_PHASE_DESCEND; - - } else { - //We can't infer the flight phase , do nothing, estimation is reset at each step - } - } -} - -float -FixedwingPositionControl::constrainRollNearGround(const float roll_setpoint, const float altitude, - const float terrain_altitude) const +float FixedWingModeManager::getMaxRollAngleNearGround(const float altitude, const float terrain_altitude) const { // we want the wings level when at the wing height above ground const float height_above_ground = math::max(altitude - (terrain_altitude + _param_fw_wing_height.get()), 0.0f); @@ -2933,13 +2184,14 @@ FixedwingPositionControl::constrainRollNearGround(const float roll_setpoint, con // d(roll strike)/d(height) = 2 / span / cos(2 * height / span) // d(roll strike)/d(height) (@height=0) = 2 / span // roll strike ~= 2 * height / span - const float roll_wingtip_strike = 2.0f * height_above_ground / _param_fw_wing_span.get(); - return math::constrain(roll_setpoint, -roll_wingtip_strike, roll_wingtip_strike); + return math::constrain(2.f * height_above_ground / _param_fw_wing_span.get(), 0.f, + math::radians(_param_fw_r_lim.get())); } + void -FixedwingPositionControl::initializeAutoLanding(const hrt_abstime &now, const position_setpoint_s &pos_sp_prev, +FixedWingModeManager::initializeAutoLanding(const hrt_abstime &now, const position_setpoint_s &pos_sp_prev, const float land_point_altitude, const Vector2f &local_position, const Vector2f &local_land_point) { if (_time_started_landing == 0) { @@ -2997,29 +2249,8 @@ FixedwingPositionControl::initializeAutoLanding(const hrt_abstime &now, const po } } -bool FixedwingPositionControl::checkLowHeightConditions() -{ - // Are conditions for low-height - return _param_fw_t_thr_low_hgt.get() >= 0.f && _local_pos.dist_bottom_valid - && _local_pos.dist_bottom < _param_fw_t_thr_low_hgt.get(); -} - -void FixedwingPositionControl::updateTECSAltitudeTimeConstant(const bool is_low_height, const float dt) -{ - // Target time constant for the TECS altitude tracker - float alt_tracking_tc = _param_fw_t_h_error_tc.get(); - - if (is_low_height) { - // If low-height conditions satisfied, compute target time constant for altitude tracking - alt_tracking_tc *= _param_fw_thrtc_sc.get(); - } - - _tecs_alt_time_const_slew_rate.update(alt_tracking_tc, dt); - _tecs.set_altitude_error_time_constant(_tecs_alt_time_const_slew_rate.getState()); -} - Vector2f -FixedwingPositionControl::calculateTouchdownPosition(const float control_interval, const Vector2f &local_land_position) +FixedWingModeManager::calculateTouchdownPosition(const float control_interval, const Vector2f &local_land_position) { if (fabsf(_manual_control_setpoint.yaw) > MANUAL_TOUCHDOWN_NUDGE_INPUT_DEADZONE && _param_fw_lnd_nudge.get() > LandingNudgingOption::kNudgingDisabled @@ -3030,8 +2261,8 @@ FixedwingPositionControl::calculateTouchdownPosition(const float control_interva _manual_control_setpoint.yaw); _lateral_touchdown_position_offset += (_manual_control_setpoint.yaw - signed_deadzone_threshold) * MAX_TOUCHDOWN_POSITION_NUDGE_RATE * control_interval; - _lateral_touchdown_position_offset = math::constrain(_lateral_touchdown_position_offset, -_param_fw_lnd_td_off.get(), - _param_fw_lnd_td_off.get()); + _lateral_touchdown_position_offset = math::constrain(_lateral_touchdown_position_offset, -_param_fw_lnd_td_off.get(), + _param_fw_lnd_td_off.get()); } const Vector2f approach_unit_vector = -_landing_approach_entrance_offset_vector.unit_or_zero(); @@ -3041,7 +2272,7 @@ FixedwingPositionControl::calculateTouchdownPosition(const float control_interva } Vector2f -FixedwingPositionControl::calculateLandingApproachVector() const +FixedWingModeManager::calculateLandingApproachVector() const { Vector2f landing_approach_vector = -_landing_approach_entrance_offset_vector; const Vector2f approach_unit_vector = landing_approach_vector.unit_or_zero(); @@ -3063,7 +2294,7 @@ FixedwingPositionControl::calculateLandingApproachVector() const } float -FixedwingPositionControl::getLandingTerrainAltitudeEstimate(const hrt_abstime &now, const float land_point_altitude, +FixedWingModeManager::getLandingTerrainAltitudeEstimate(const hrt_abstime &now, const float land_point_altitude, const bool abort_on_terrain_measurement_timeout, const bool abort_on_terrain_timeout) { if (_param_fw_lnd_useter.get() > TerrainEstimateUseOnLanding::kDisableTerrainEstimation) { @@ -3103,7 +2334,7 @@ FixedwingPositionControl::getLandingTerrainAltitudeEstimate(const hrt_abstime &n return land_point_altitude; } -bool FixedwingPositionControl::checkLandingAbortBitMask(const uint8_t automatic_abort_criteria_bitmask, +bool FixedWingModeManager::checkLandingAbortBitMask(const uint8_t automatic_abort_criteria_bitmask, uint8_t landing_abort_criterion) { // landing abort status contains a manual criterion at abort_status==1, need to subtract 2 to directly compare @@ -3117,7 +2348,7 @@ bool FixedwingPositionControl::checkLandingAbortBitMask(const uint8_t automatic_ return ((1 << landing_abort_criterion) & automatic_abort_criteria_bitmask) == (1 << landing_abort_criterion); } -void FixedwingPositionControl::publishLocalPositionSetpoint(const position_setpoint_s ¤t_waypoint) +void FixedWingModeManager::publishLocalPositionSetpoint(const position_setpoint_s ¤t_waypoint) { vehicle_local_position_setpoint_s local_position_setpoint{}; local_position_setpoint.timestamp = hrt_absolute_time(); @@ -3137,13 +2368,10 @@ void FixedwingPositionControl::publishLocalPositionSetpoint(const position_setpo local_position_setpoint.acceleration[0] = NAN; local_position_setpoint.acceleration[1] = NAN; local_position_setpoint.acceleration[2] = NAN; - local_position_setpoint.thrust[0] = _att_sp.thrust_body[0]; - local_position_setpoint.thrust[1] = _att_sp.thrust_body[1]; - local_position_setpoint.thrust[2] = _att_sp.thrust_body[2]; _local_pos_sp_pub.publish(local_position_setpoint); } -void FixedwingPositionControl::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(); @@ -3162,7 +2390,8 @@ void FixedwingPositionControl::publishOrbitStatus(const position_setpoint_s pos_ _orbit_status_pub.publish(orbit_status); } -void FixedwingPositionControl::navigateWaypoints(const Vector2f &start_waypoint, const Vector2f &end_waypoint, +DirectionalGuidanceOutput FixedWingModeManager::navigateWaypoints(const Vector2f &start_waypoint, + const Vector2f &end_waypoint, const Vector2f &vehicle_pos, const Vector2f &ground_vel, const Vector2f &wind_vel) { const Vector2f start_waypoint_to_end_waypoint = end_waypoint - start_waypoint; @@ -3172,15 +2401,13 @@ void FixedwingPositionControl::navigateWaypoints(const Vector2f &start_waypoint, if (start_waypoint_to_end_waypoint.norm() < FLT_EPSILON) { // degenerate case: the waypoints are on top of each other, this should only happen when someone uses this // method incorrectly. just as a safe guard, call the singular waypoint navigation method. - navigateWaypoint(end_waypoint, vehicle_pos, ground_vel, wind_vel); - return; + return navigateWaypoint(end_waypoint, vehicle_pos, ground_vel, wind_vel); } if ((start_waypoint_to_end_waypoint.dot(start_waypoint_to_vehicle) < -FLT_EPSILON) - && (start_waypoint_to_vehicle.norm() > _npfg.switchDistance(500.0f))) { + && (start_waypoint_to_vehicle.norm() > _directional_guidance.switchDistance(500.0f))) { // we are in front of the start waypoint, fly directly to it until we are within switch distance - navigateWaypoint(start_waypoint, vehicle_pos, ground_vel, wind_vel); - return; + return navigateWaypoint(start_waypoint, vehicle_pos, ground_vel, wind_vel); } if (start_waypoint_to_end_waypoint.dot(end_waypoint_to_vehicle) > FLT_EPSILON) { @@ -3189,42 +2416,43 @@ void FixedwingPositionControl::navigateWaypoints(const Vector2f &start_waypoint, // end waypoint. however this included here as a safety precaution if any navigator (module) switch condition // is missed for any reason. in the future this logic should all be handled in one place in a dedicated // flight mode state machine. - navigateWaypoint(end_waypoint, vehicle_pos, ground_vel, wind_vel); - return; + return navigateWaypoint(end_waypoint, vehicle_pos, ground_vel, wind_vel); } // follow the line segment between the start and end waypoints - navigateLine(start_waypoint, end_waypoint, vehicle_pos, ground_vel, wind_vel); + return navigateLine(start_waypoint, end_waypoint, vehicle_pos, ground_vel, wind_vel); } -void FixedwingPositionControl::navigateWaypoint(const Vector2f &waypoint_pos, const Vector2f &vehicle_pos, +DirectionalGuidanceOutput FixedWingModeManager::navigateWaypoint(const Vector2f &waypoint_pos, + const Vector2f &vehicle_pos, const Vector2f &ground_vel, const Vector2f &wind_vel) { const Vector2f vehicle_to_waypoint = waypoint_pos - vehicle_pos; if (vehicle_to_waypoint.norm() < FLT_EPSILON) { // degenerate case: the vehicle is on top of the single waypoint. (can happen). maintain the last npfg command. - return; + return DirectionalGuidanceOutput{}; } const Vector2f unit_path_tangent = vehicle_to_waypoint.normalized(); _closest_point_on_path = waypoint_pos; const float path_curvature = 0.f; - _npfg.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, _closest_point_on_path, path_curvature); + DirectionalGuidanceOutput sp = _directional_guidance.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, + _closest_point_on_path, path_curvature); - // for logging - note we are abusing path tangent vs bearing definitions here. npfg interfaces need to be refined. - _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); + return sp; } -void FixedwingPositionControl::navigateLine(const Vector2f &point_on_line_1, const Vector2f &point_on_line_2, +DirectionalGuidanceOutput FixedWingModeManager::navigateLine(const Vector2f &point_on_line_1, + const Vector2f &point_on_line_2, const Vector2f &vehicle_pos, const Vector2f &ground_vel, const Vector2f &wind_vel) { const Vector2f line_segment = point_on_line_2 - point_on_line_1; if (line_segment.norm() <= FLT_EPSILON) { // degenerate case: line segment has zero length. maintain the last npfg command. - return; + return DirectionalGuidanceOutput{}; } const Vector2f unit_path_tangent = line_segment.normalized(); @@ -3233,13 +2461,15 @@ void FixedwingPositionControl::navigateLine(const Vector2f &point_on_line_1, con _closest_point_on_path = point_on_line_1 + point_1_to_vehicle.dot(unit_path_tangent) * unit_path_tangent; const float path_curvature = 0.f; - _npfg.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, _closest_point_on_path, path_curvature); + const DirectionalGuidanceOutput sp = _directional_guidance.guideToPath(vehicle_pos, ground_vel, wind_vel, + unit_path_tangent, + _closest_point_on_path, path_curvature); - // for logging - note we are abusing path tangent vs bearing definitions here. npfg interfaces need to be refined. - _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); + return sp; } -void FixedwingPositionControl::navigateLine(const Vector2f &point_on_line, const float line_bearing, +DirectionalGuidanceOutput FixedWingModeManager::navigateLine(const Vector2f &point_on_line, + const float line_bearing, const Vector2f &vehicle_pos, const Vector2f &ground_vel, const Vector2f &wind_vel) { const Vector2f unit_path_tangent{cosf(line_bearing), sinf(line_bearing)}; @@ -3248,13 +2478,15 @@ void FixedwingPositionControl::navigateLine(const Vector2f &point_on_line, const _closest_point_on_path = point_on_line + point_on_line_to_vehicle.dot(unit_path_tangent) * unit_path_tangent; const float path_curvature = 0.f; - _npfg.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, _closest_point_on_path, path_curvature); + const DirectionalGuidanceOutput sp = _directional_guidance.guideToPath(vehicle_pos, ground_vel, wind_vel, + unit_path_tangent, + _closest_point_on_path, path_curvature); - // for logging - note we are abusing path tangent vs bearing definitions here. npfg interfaces need to be refined. - _target_bearing = line_bearing; + return sp; } -void FixedwingPositionControl::navigateLoiter(const Vector2f &loiter_center, const Vector2f &vehicle_pos, +DirectionalGuidanceOutput FixedWingModeManager::navigateLoiter(const Vector2f &loiter_center, + const Vector2f &vehicle_pos, float radius, bool loiter_direction_counter_clockwise, const Vector2f &ground_vel, const Vector2f &wind_vel) { const float loiter_direction_multiplier = loiter_direction_counter_clockwise ? -1.f : 1.f; @@ -3286,50 +2518,57 @@ void FixedwingPositionControl::navigateLoiter(const Vector2f &loiter_center, con // 90 deg clockwise rotation * loiter direction const Vector2f unit_path_tangent = loiter_direction_multiplier * Vector2f{-unit_vec_center_to_closest_pt(1), unit_vec_center_to_closest_pt(0)}; - float path_curvature = loiter_direction_multiplier / radius; - _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); + const float path_curvature = loiter_direction_multiplier / radius; _closest_point_on_path = unit_vec_center_to_closest_pt * radius + loiter_center; - _npfg.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, - loiter_center + unit_vec_center_to_closest_pt * radius, path_curvature); + return _directional_guidance.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, + loiter_center + unit_vec_center_to_closest_pt * radius, path_curvature); } -void FixedwingPositionControl::navigatePathTangent(const matrix::Vector2f &vehicle_pos, +DirectionalGuidanceOutput FixedWingModeManager::navigatePathTangent(const matrix::Vector2f &vehicle_pos, const matrix::Vector2f &position_setpoint, const matrix::Vector2f &tangent_setpoint, const matrix::Vector2f &ground_vel, const matrix::Vector2f &wind_vel, const float &curvature) { if (tangent_setpoint.norm() <= FLT_EPSILON) { // degenerate case: no direction. maintain the last npfg command. - return; + return DirectionalGuidanceOutput{}; } const Vector2f unit_path_tangent{tangent_setpoint.normalized()}; - _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); _closest_point_on_path = position_setpoint; - _npfg.guideToPath(vehicle_pos, ground_vel, wind_vel, tangent_setpoint.normalized(), position_setpoint, curvature); + return _directional_guidance.guideToPath(vehicle_pos, ground_vel, wind_vel, tangent_setpoint.normalized(), + position_setpoint, + curvature); } -void FixedwingPositionControl::navigateBearing(const matrix::Vector2f &vehicle_pos, float bearing, +DirectionalGuidanceOutput FixedWingModeManager::navigateBearing(const matrix::Vector2f &vehicle_pos, float bearing, const Vector2f &ground_vel, const Vector2f &wind_vel) { - const Vector2f unit_path_tangent = Vector2f{cosf(bearing), sinf(bearing)}; - _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); _closest_point_on_path = vehicle_pos; - _npfg.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, vehicle_pos, 0.0f); + return _directional_guidance.guideToPath(vehicle_pos, ground_vel, wind_vel, unit_path_tangent, vehicle_pos, 0.0f); } -int FixedwingPositionControl::task_spawn(int argc, char *argv[]) +void FixedWingModeManager::publish_lateral_guidance_status(const hrt_abstime now) { - bool vtol = false; + fixed_wing_lateral_guidance_status_s fixed_wing_lateral_guidance_status{}; - if (argc > 1) { - if (strcmp(argv[1], "vtol") == 0) { - vtol = true; - } - } + fixed_wing_lateral_guidance_status.timestamp = now; + fixed_wing_lateral_guidance_status.course_setpoint = _directional_guidance.getCourseSetpoint(); + fixed_wing_lateral_guidance_status.lateral_acceleration_ff = _directional_guidance.getLateralAccelerationSetpoint(); + fixed_wing_lateral_guidance_status.bearing_feas = _directional_guidance.getBearingFeasibility(); + fixed_wing_lateral_guidance_status.bearing_feas_on_track = _directional_guidance.getBearingFeasibilityOnTrack(); + fixed_wing_lateral_guidance_status.signed_track_error = _directional_guidance.getSignedTrackError(); + fixed_wing_lateral_guidance_status.track_error_bound = _directional_guidance.getTrackErrorBound(); + fixed_wing_lateral_guidance_status.adapted_period = _directional_guidance.getAdaptedPeriod(); + fixed_wing_lateral_guidance_status.wind_est_valid = _wind_valid; - FixedwingPositionControl *instance = new FixedwingPositionControl(vtol); + _fixed_wing_lateral_guidance_status_pub.publish(fixed_wing_lateral_guidance_status); +} + +int FixedWingModeManager::task_spawn(int argc, char *argv[]) +{ + FixedWingModeManager *instance = new FixedWingModeManager(); if (instance) { _object.store(instance); @@ -3350,12 +2589,12 @@ int FixedwingPositionControl::task_spawn(int argc, char *argv[]) return PX4_ERROR; } -int FixedwingPositionControl::custom_command(int argc, char *argv[]) +int FixedWingModeManager::custom_command(int argc, char *argv[]) { return print_usage("unknown command"); } -int FixedwingPositionControl::print_usage(const char *reason) +int FixedWingModeManager::print_usage(const char *reason) { if (reason) { PX4_WARN("%s\n", reason); @@ -3364,33 +2603,20 @@ int FixedwingPositionControl::print_usage(const char *reason) PRINT_MODULE_DESCRIPTION( R"DESCR_STR( ### Description -fw_pos_control is the fixed-wing position controller. +This implements the setpoint generation for all PX4-internal fixed-wing modes, height-rate control and higher. +It takes the current mode state of the vehicle as input and outputs setpoints consumed by the fixed-wing +lateral-longitudinal controller and and controllers below that (attitude, rate). )DESCR_STR"); - PRINT_MODULE_USAGE_NAME("fw_pos_control", "controller"); + PRINT_MODULE_USAGE_NAME("fw_mode_manager", "controller"); PRINT_MODULE_USAGE_COMMAND("start"); - PRINT_MODULE_USAGE_ARG("vtol", "VTOL mode", true); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); return 0; } -float FixedwingPositionControl::getLoadFactor() + +extern "C" __EXPORT int fw_mode_manager_main(int argc, char *argv[]) { - float load_factor_from_bank_angle = 1.0f; - - float roll_body = Eulerf(Quatf(_att_sp.q_d)).phi(); - - if (PX4_ISFINITE(roll_body)) { - load_factor_from_bank_angle = 1.0f / math::max(cosf(roll_body), FLT_EPSILON); - } - - return load_factor_from_bank_angle; - -} - - -extern "C" __EXPORT int fw_pos_control_main(int argc, char *argv[]) -{ - return FixedwingPositionControl::main(argc, argv); + return FixedWingModeManager::main(argc, argv); } diff --git a/src/modules/fw_pos_control/FixedwingPositionControl.hpp b/src/modules/fw_mode_manager/FixedWingModeManager.hpp similarity index 72% rename from src/modules/fw_pos_control/FixedwingPositionControl.hpp rename to src/modules/fw_mode_manager/FixedWingModeManager.hpp index e56263c5e3..81eed7d81f 100644 --- a/src/modules/fw_pos_control/FixedwingPositionControl.hpp +++ b/src/modules/fw_mode_manager/FixedWingModeManager.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2013-2022 PX4 Development Team. All rights reserved. + * 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 @@ -33,31 +33,22 @@ /** - * @file FixedwingPositionControl.hpp - * Implementation of various fixed-wing position level navigation/control modes. - * - * The implementation for the controllers is in a separate library. This class only - * interfaces to the library. - * - * @author Lorenz Meier - * @author Thomas Gubler - * @author Andreas Antener + * @file FixedWingModeManager.hpp + * Implementation of various fixed-wing control modes. */ -#ifndef FIXEDWINGPOSITIONCONTROL_HPP_ -#define FIXEDWINGPOSITIONCONTROL_HPP_ +#ifndef FIXEDWINGMODEMANAGER_HPP_ +#define FIXEDWINGMODEMANAGER_HPP_ #include "launchdetection/LaunchDetector.h" #include "runway_takeoff/RunwayTakeoff.h" -#include +#include "ControllerConfigurationHandler.hpp" #include - #include #include #include -#include -#include +#include #include #include #include @@ -67,24 +58,26 @@ #include #include #include +#include + #include #include #include #include #include -#include +#include +#include +#include +#include #include #include #include #include -#include #include #include #include #include -#include #include -#include #include #include #include @@ -97,12 +90,10 @@ #include #include #include -#include #ifdef CONFIG_FIGURE_OF_EIGHT #include "figure_eight/FigureEight.hpp" #include - #endif // CONFIG_FIGURE_OF_EIGHT using namespace launchdetection; @@ -115,12 +106,6 @@ using matrix::Vector2f; // [m] initial distance of waypoint in front of plane in heading hold mode static constexpr float HDG_HOLD_DIST_NEXT = 3000.0f; -// [m] distance (plane to waypoint in front) at which waypoints are reset in heading hold mode -static constexpr float HDG_HOLD_REACHED_DIST = 1000.0f; - -// [m] distance by which previous waypoint is set behind the plane -static constexpr float HDG_HOLD_SET_BACK_DIST = 100.0f; - // [rad/s] max yawrate at which plane locks yaw for heading hold mode static constexpr float HDG_HOLD_YAWRATE_THRESH = 0.15f; @@ -138,9 +123,6 @@ static constexpr hrt_abstime TERRAIN_ALT_FIRST_MEASUREMENT_TIMEOUT = 10_s; // [.] max throttle from user which will not lead to motors spinning up in altitude controlled modes static constexpr float THROTTLE_THRESH = -.9f; -// [m/s/s] slew rate limit for airspeed setpoint changes -static constexpr float ASPD_SP_SLEW_RATE = 1.f; - // [us] time after which the wind estimate is disabled if no longer updating static constexpr hrt_abstime WIND_EST_TIMEOUT = 10_s; @@ -166,24 +148,15 @@ static constexpr float MANUAL_TOUCHDOWN_NUDGE_INPUT_DEADZONE = 0.15f; // [s] time interval after touchdown for ramping in runway clamping constraints (touchdown is assumed at FW_LND_TD_TIME after start of flare) static constexpr float POST_TOUCHDOWN_CLAMP_TIME = 0.5f; -// [m/s] maximum reference altitude rate threshhold -static constexpr float MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT = 0.1f; +// [] Stick deadzon +static constexpr float kStickDeadBand = 0.06f; -// [s] Timeout that has to pass in roll-constraining failsafe before warning is triggered -static constexpr uint64_t ROLL_WARNING_TIMEOUT = 2_s; - -// [-] Can-run threshold needed to trigger the roll-constraining failsafe warning -static constexpr float ROLL_WARNING_CAN_RUN_THRESHOLD = 0.9f; - -// [s] slew rate with which we change altitude time constant -static constexpr float TECS_ALT_TIME_CONST_SLEW_RATE = 1.0f; - -class FixedwingPositionControl final : public ModuleBase, public ModuleParams, +class FixedWingModeManager final : public ModuleBase, public ModuleParams, public px4::WorkItem { public: - FixedwingPositionControl(bool vtol = false); - ~FixedwingPositionControl() override; + FixedWingModeManager(); + ~FixedWingModeManager() override; /** @see ModuleBase */ static int task_spawn(int argc, char *argv[]); @@ -210,33 +183,32 @@ private: uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; uORB::Subscription _pos_sp_triplet_sub{ORB_ID(position_setpoint_triplet)}; uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _vehicle_air_data_sub{ORB_ID(vehicle_air_data)}; uORB::Subscription _vehicle_angular_velocity_sub{ORB_ID(vehicle_angular_velocity)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _vehicle_command_sub{ORB_ID(vehicle_command)}; uORB::Subscription _vehicle_land_detected_sub{ORB_ID(vehicle_land_detected)}; uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; - uORB::Publication _attitude_sp_pub; uORB::Publication _local_pos_sp_pub{ORB_ID(vehicle_local_position_setpoint)}; - uORB::Publication _npfg_status_pub{ORB_ID(npfg_status)}; - uORB::Publication _pos_ctrl_status_pub{ORB_ID(position_controller_status)}; uORB::Publication _pos_ctrl_landing_status_pub{ORB_ID(position_controller_landing_status)}; - uORB::Publication _tecs_status_pub{ORB_ID(tecs_status)}; uORB::Publication _launch_detection_status_pub{ORB_ID(launch_detection_status)}; uORB::PublicationMulti _orbit_status_pub{ORB_ID(orbit_status)}; uORB::Publication _landing_gear_pub {ORB_ID(landing_gear)}; uORB::Publication _flaps_setpoint_pub{ORB_ID(flaps_setpoint)}; uORB::Publication _spoilers_setpoint_pub{ORB_ID(spoilers_setpoint)}; - uORB::PublicationData _flight_phase_estimation_pub{ORB_ID(flight_phase_estimation)}; + uORB::PublicationData _lateral_ctrl_sp_pub{ORB_ID(fixed_wing_lateral_setpoint)}; + uORB::PublicationData _longitudinal_ctrl_sp_pub{ORB_ID(fixed_wing_longitudinal_setpoint)}; + uORB::Publication _fixed_wing_lateral_guidance_status_pub{ORB_ID(fixed_wing_lateral_guidance_status)}; + uORB::Publication _fixed_wing_runway_control_pub{ORB_ID(fixed_wing_runway_control)}; manual_control_setpoint_s _manual_control_setpoint{}; position_setpoint_triplet_s _pos_sp_triplet{}; - vehicle_attitude_setpoint_s _att_sp{}; vehicle_control_mode_s _control_mode{}; vehicle_local_position_s _local_pos{}; vehicle_status_s _vehicle_status{}; + CombinedControllerConfigurationHandler _ctrl_configuration_handler; + Vector2f _lpos_where_backtrans_started; bool _position_setpoint_previous_valid{false}; @@ -272,12 +244,12 @@ private: // VEHICLE STATES + uint8_t _nav_state; + double _current_latitude{0}; double _current_longitude{0}; float _current_altitude{0.f}; - float _roll{0.f}; - float _pitch{0.0f}; float _yaw{0.0f}; float _yawrate{0.0f}; @@ -323,8 +295,8 @@ private: // true if a launch, specifically using the launch detector, has been detected bool _launch_detected{false}; - // [deg] global position of the vehicle at the time launch is detected (using launch detector) - Vector2d _launch_global_position{0, 0}; + // [deg] global position of the vehicle at the time launch is detected (using launch detector) or takeoff is started (runway) + Vector2d _takeoff_init_position{0, 0}; // [rad] current vehicle yaw at the time the launch is detected float _launch_current_yaw{0.f}; @@ -363,7 +335,6 @@ private: bool flaring{false}; hrt_abstime start_time{0}; // [us] float initial_height_rate_setpoint{0.0f}; // [m/s] - float initial_throttle_setpoint{0.0f}; } _flare_states; // [m] last terrain estimate which was valid @@ -381,9 +352,7 @@ private: // AIRSPEED float _airspeed_eas{0.f}; - float _eas2tas{1.f}; bool _airspeed_valid{false}; - float _air_density{atmosphere::kAirDensitySeaLevelStandardAtmos}; // [us] last time airspeed was received. used to detect timeouts. hrt_abstime _time_airspeed_last_valid{0}; @@ -397,24 +366,12 @@ private: hrt_abstime _time_wind_last_received{0}; // [us] - // TECS - - // total energy control system - airspeed / altitude control - TECS _tecs; - - bool _tecs_is_running{false}; - - // Smooths changes in the altitude tracking error time constant value - SlewRate _tecs_alt_time_const_slew_rate; - // VTOL / TRANSITION - bool _is_vtol_tailsitter{false}; matrix::Vector2d _transition_waypoint{(double)NAN, (double)NAN}; float _backtrans_heading{NAN}; // used to lock the initial heading for backtransition with no position control // ESTIMATOR RESET COUNTERS uint8_t _xy_reset_counter{0}; - uint8_t _z_reset_counter{0}; uint64_t _time_last_xy_reset{0}; // LATERAL-DIRECTIONAL GUIDANCE @@ -423,12 +380,7 @@ private: matrix::Vector2f _closest_point_on_path; // nonlinear path following guidance - lateral-directional position control - NPFG _npfg; - bool _need_report_npfg_uncertain_condition{false}; ///< boolean if reporting of uncertain npfg output condition is needed - hrt_abstime _time_since_first_reduced_roll{0U}; ///< absolute time since start when entering reduced roll angle for the first time - hrt_abstime _time_since_last_npfg_call{0U}; ///< absolute time since start when the npfg reduced roll angle calculations was last performed - - PerformanceModel _performance_model; + DirectionalGuidance _directional_guidance; // LANDING GEAR int8_t _new_landing_gear_position{landing_gear_s::GEAR_KEEP}; @@ -439,7 +391,6 @@ private: hrt_abstime _time_in_fixed_bank_loiter{0}; // [us] float _min_current_sp_distance_xy{FLT_MAX}; - float _target_bearing{0.0f}; // [rad] #ifdef CONFIG_FIGURE_OF_EIGHT /* Loitering */ @@ -451,11 +402,10 @@ private: * @param control_interval Time since last position control call [s] * @param curr_pos the current 2D absolute position of the vehicle in [deg]. * @param ground_speed the 2D ground speed of the vehicle in [m/s]. - * @param pos_sp_prev the previous position setpoint. * @param pos_sp_curr the current position setpoint. */ void controlAutoFigureEight(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed, - const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr); + const position_setpoint_s &pos_sp_curr); void publishFigureEightStatus(const position_setpoint_s pos_sp); #endif // CONFIG_FIGURE_OF_EIGHT @@ -465,27 +415,17 @@ private: // Update subscriptions void airspeed_poll(); - void control_update(); + void manual_control_setpoint_poll(); void vehicle_attitude_poll(); void vehicle_command_poll(); void vehicle_control_mode_poll(); - void vehicle_status_poll(); - void wind_poll(); - void status_publish(); + void wind_poll(const hrt_abstime now); + void landing_status_publish(); - void tecs_status_publish(float alt_sp, float equivalent_airspeed_sp, float true_airspeed_derivative_raw, - float throttle_trim); - void publishLocalPositionSetpoint(const position_setpoint_s ¤t_waypoint); - float getLoadFactor(); - /** - * @brief Get the NPFG roll setpoint with mitigation strategy if npfg is not certain about its output - * - * @return roll setpoint - */ - float getCorrectedNpfgRollSetpoint(); + void publishLocalPositionSetpoint(const position_setpoint_s ¤t_waypoint); /** * @brief Sets the landing abort status and publishes landing status. @@ -503,24 +443,6 @@ private: */ bool checkLandingAbortBitMask(const uint8_t automatic_abort_criteria_bitmask, uint8_t landing_abort_criterion); - /** - * @brief Get a new waypoint based on heading and distance from current position - * - * @param heading the heading to fly to - * @param distance the distance of the generated waypoint - * @param waypoint_prev the waypoint at the current position - * @param waypoint_next the waypoint in the heading direction - */ - void get_waypoint_heading_distance(float heading, position_setpoint_s &waypoint_prev, - position_setpoint_s &waypoint_next, bool flag_init); - - /** - * @brief Return the terrain estimate during takeoff or takeoff_alt if terrain estimate is not available - * - * @param takeoff_alt Altitude AMSL at launch or when runway takeoff is detected [m] - */ - float get_terrain_altitude_takeoff(float takeoff_alt); - /** * @brief Maps the manual control setpoint (pilot sticks) to height rate commands * @@ -535,13 +457,6 @@ private: */ void updateManualTakeoffStatus(); - /** - * @brief Update desired altitude base on user pitch stick input - * - * @param dt Time step - */ - void update_desired_altitude(float dt); - /** * @brief Updates timing information for landed and in-air states. * @@ -585,19 +500,15 @@ private: * @brief Controls altitude and airspeed for a fixed-bank loiter. * * Used as a failsafe mode after a lateral position estimate failure. - * - * @param control_interval Time since last position control call [s] */ - void control_auto_fixed_bank_alt_hold(const float control_interval); + void control_auto_fixed_bank_alt_hold(); /** * @brief Control airspeed with a fixed descent rate and roll angle. * * Used as a failsafe mode after a lateral position estimate failure. - * - * @param control_interval Time since last position control call [s] */ - void control_auto_descend(const float control_interval); + void control_auto_descend(); /** * @brief Vehicle control for position waypoints. @@ -617,12 +528,11 @@ private: * @param control_interval Time since last position control call [s] * @param curr_pos Current 2D local position vector of vehicle [m] * @param ground_speed Local 2D ground speed of vehicle [m/s] - * @param pos_sp_prev previous position setpoint * @param pos_sp_curr current position setpoint * @param pos_sp_next next position setpoint */ void control_auto_loiter(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed, - const position_setpoint_s &pos_sp_prev, const position_setpoint_s &pos_sp_curr, const position_setpoint_s &pos_sp_next); + const position_setpoint_s &pos_sp_curr, const position_setpoint_s &pos_sp_next); /** @@ -703,11 +613,13 @@ private: /** * @brief Controls user commanded altitude, airspeed, and bearing. * + * @param now Current system time [us] * @param control_interval Time since last position control call [s] * @param curr_pos Current 2D local position vector of vehicle [m] * @param ground_speed Local 2D ground speed of vehicle [m/s] */ - void control_manual_position(const float control_interval, const Vector2d &curr_pos, const Vector2f &ground_speed); + void control_manual_position(const hrt_abstime now, const float control_interval, const Vector2d &curr_pos, + const Vector2f &ground_speed); /** * @brief Holds the initial heading during the course of a transition to hover. Used when there is no local @@ -724,26 +636,8 @@ private: void control_backtransition_line_follow(const Vector2f &ground_speed, const position_setpoint_s &pos_sp_curr); - float get_tecs_pitch(); - float get_tecs_thrust(); - float get_manual_airspeed_setpoint(); - /** - * @brief Returns an adapted calibrated airspeed setpoint - * - * Adjusts the setpoint for wind, accelerated stall, and slew rates. - * - * @param control_interval Time since the last position control update [s] - * @param calibrated_airspeed_setpoint Calibrated airspeed septoint (generally from the position setpoint) [m/s] - * @param calibrated_min_airspeed Minimum calibrated airspeed [m/s] - * @param ground_speed Vehicle ground velocity vector (NE) [m/s] - * @param in_takeoff_situation Vehicle is currently in a takeoff situation - * @return Adjusted calibrated airspeed setpoint [m/s] - */ - float adapt_airspeed_setpoint(const float control_interval, float calibrated_airspeed_setpoint, - float calibrated_min_airspeed, const Vector2f &ground_speed, bool in_takeoff_situation = false); - void reset_takeoff_state(); void reset_landing_state(); @@ -758,39 +652,7 @@ private: void publishOrbitStatus(const position_setpoint_s pos_sp); - SlewRate _airspeed_slew_rate_controller; - SlewRate _roll_slew_rate; - - /** - * @brief A wrapper function to call the TECS implementation - * - * @param control_interval Time since the last position control update [s] - * @param alt_sp Altitude setpoint, AMSL [m] - * @param airspeed_sp Calibrated airspeed setpoint [m/s] - * @param pitch_min_rad Nominal pitch angle command minimum [rad] - * @param pitch_max_rad Nominal pitch angle command maximum [rad] - * @param throttle_min Minimum throttle command [0,1] - * @param throttle_max Maximum throttle command [0,1] - * @param desired_max_sink_rate The desired max sink rate commandable when altitude errors are large [m/s] - * @param desired_max_climb_rate The desired max climb rate commandable when altitude errors are large [m/s] - * @param is_low_height Define whether we are in low-height flight for tighter altitude tracking - * @param disable_underspeed_detection True if underspeed detection should be disabled - * @param hgt_rate_sp Height rate setpoint [m/s] - */ - void tecs_update_pitch_throttle(const float control_interval, float alt_sp, float airspeed_sp, float pitch_min_rad, - float pitch_max_rad, float throttle_min, float throttle_max, - const float desired_max_sink_rate, const float desired_max_climb_rate, const bool is_low_height, - bool disable_underspeed_detection = false, float hgt_rate_sp = NAN); - - /** - * @brief Constrains the roll angle setpoint near ground to avoid wingtip strike. - * - * @param roll_setpoint Unconstrained roll angle setpoint [rad] - * @param altitude Vehicle altitude (AMSL) [m] - * @param terrain_altitude Terrain altitude (AMSL) [m] - * @return Constrained roll angle setpoint [rad] - */ - float constrainRollNearGround(const float roll_setpoint, const float altitude, const float terrain_altitude) const; + float getMaxRollAngleNearGround(const float altitude, const float terrain_altitude) const; /** * @brief Calculates the touchdown position for landing with optional manual lateral adjustments. @@ -838,21 +700,6 @@ private: void initializeAutoLanding(const hrt_abstime &now, const position_setpoint_s &pos_sp_prev, const float land_point_alt, const Vector2f &local_position, const Vector2f &local_land_point); - /* - * Checks if the vehicle satisfies conditions for low-height flight - * - * @return bool True if conditions are satisfied, false otherwise - */ - bool checkLowHeightConditions(); - - /* - * Updates TECS altitude time constant according to the is_low_height parameter. - * - * @param is_low_height Boolean flag defining whether we are in low-height flight - * @param dt Update time step [s] - */ - void updateTECSAltitudeTimeConstant(const bool is_low_height, const float dt); - /* * Waypoint handling logic following closely to the ECL_L1_Pos_Controller * method of the same name. Takes two waypoints, steering the vehicle to track @@ -864,9 +711,10 @@ private: * @param[in] ground_vel Vehicle ground velocity vector [m/s] * @param[in] wind_vel Wind velocity vector [m/s] */ - void navigateWaypoints(const matrix::Vector2f &start_waypoint, const matrix::Vector2f &end_waypoint, - const matrix::Vector2f &vehicle_pos, const matrix::Vector2f &ground_vel, - const matrix::Vector2f &wind_vel); + DirectionalGuidanceOutput navigateWaypoints(const matrix::Vector2f &start_waypoint, + const matrix::Vector2f &end_waypoint, + const matrix::Vector2f &vehicle_pos, const matrix::Vector2f &ground_vel, + const matrix::Vector2f &wind_vel); /* * Takes one waypoint and steers the vehicle towards this. @@ -879,8 +727,8 @@ private: * @param[in] ground_vel Vehicle ground velocity vector [m/s] * @param[in] wind_vel Wind velocity vector [m/s] */ - void navigateWaypoint(const matrix::Vector2f &waypoint_pos, const matrix::Vector2f &vehicle_pos, - const matrix::Vector2f &ground_vel, const matrix::Vector2f &wind_vel); + DirectionalGuidanceOutput navigateWaypoint(const matrix::Vector2f &waypoint_pos, const matrix::Vector2f &vehicle_pos, + const matrix::Vector2f &ground_vel, const matrix::Vector2f &wind_vel); /* * Line (infinite) following logic. Two points on the line are used to define the @@ -893,8 +741,9 @@ private: * @param[in] ground_vel Vehicle ground velocity vector [m/s] * @param[in] wind_vel Wind velocity vector [m/s] */ - void navigateLine(const Vector2f &point_on_line_1, const Vector2f &point_on_line_2, const Vector2f &vehicle_pos, - const Vector2f &ground_vel, const Vector2f &wind_vel); + DirectionalGuidanceOutput navigateLine(const Vector2f &point_on_line_1, const Vector2f &point_on_line_2, + const Vector2f &vehicle_pos, + const Vector2f &ground_vel, const Vector2f &wind_vel); /* * Line (infinite) following logic. One point on the line and a line bearing are used to define @@ -907,8 +756,9 @@ private: * @param[in] ground_vel Vehicle ground velocity vector [m/s] * @param[in] wind_vel Wind velocity vector [m/s] */ - void navigateLine(const Vector2f &point_on_line, const float line_bearing, const Vector2f &vehicle_pos, - const Vector2f &ground_vel, const Vector2f &wind_vel); + DirectionalGuidanceOutput navigateLine(const Vector2f &point_on_line, const float line_bearing, + const Vector2f &vehicle_pos, + const Vector2f &ground_vel, const Vector2f &wind_vel); /* * Loitering (unlimited) logic. Takes loiter center, radius, and direction and @@ -922,9 +772,9 @@ private: * @param[in] ground_vel Vehicle ground velocity vector [m/s] * @param[in] wind_vel Wind velocity vector [m/s] */ - void navigateLoiter(const matrix::Vector2f &loiter_center, const matrix::Vector2f &vehicle_pos, - float radius, bool loiter_direction_counter_clockwise, const matrix::Vector2f &ground_vel, - const matrix::Vector2f &wind_vel); + DirectionalGuidanceOutput navigateLoiter(const matrix::Vector2f &loiter_center, const matrix::Vector2f &vehicle_pos, + float radius, bool loiter_direction_counter_clockwise, const matrix::Vector2f &ground_vel, + const matrix::Vector2f &wind_vel); /* * Path following logic. Takes poisiton, path tangent, curvature and @@ -939,9 +789,10 @@ private: * @param[in] wind_vel Wind velocity vector [m/s] * @param[in] curvature of the path setpoint [1/m] */ - void navigatePathTangent(const matrix::Vector2f &vehicle_pos, const matrix::Vector2f &position_setpoint, - const matrix::Vector2f &tangent_setpoint, - const matrix::Vector2f &ground_vel, const matrix::Vector2f &wind_vel, const float &curvature); + DirectionalGuidanceOutput navigatePathTangent(const matrix::Vector2f &vehicle_pos, + const matrix::Vector2f &position_setpoint, + const matrix::Vector2f &tangent_setpoint, + const matrix::Vector2f &ground_vel, const matrix::Vector2f &wind_vel, const float &curvature); /* * Navigate on a fixed bearing. @@ -954,23 +805,22 @@ private: * @param[in] ground_vel Vehicle ground velocity vector [m/s] * @param[in] wind_vel Wind velocity vector [m/s] */ - void navigateBearing(const matrix::Vector2f &vehicle_pos, float bearing, const matrix::Vector2f &ground_vel, - const matrix::Vector2f &wind_vel); + DirectionalGuidanceOutput navigateBearing(const matrix::Vector2f &vehicle_pos, float bearing, + const matrix::Vector2f &ground_vel, + const matrix::Vector2f &wind_vel); + + void control_idle(); + void publish_lateral_guidance_status(const hrt_abstime now); + + float rollAngleToLateralAccel(float roll_body) const; DEFINE_PARAMETERS( - (ParamFloat) _param_fw_gnd_spd_min, - - (ParamFloat) _param_fw_pn_r_slew_max, (ParamFloat) _param_fw_r_lim, (ParamFloat) _param_npfg_period, (ParamFloat) _param_npfg_damping, (ParamBool) _param_npfg_en_period_lb, (ParamBool) _param_npfg_en_period_ub, - (ParamBool) _param_npfg_en_track_keeping, - (ParamBool) _param_npfg_en_min_gsp, - (ParamBool) _param_npfg_en_wind_reg, - (ParamFloat) _param_npfg_track_keeping_gsp_max, (ParamFloat) _param_npfg_roll_time_const, (ParamFloat) _param_npfg_switch_distance_multiplier, (ParamFloat) _param_npfg_period_safety_factor, @@ -980,80 +830,46 @@ private: (ParamFloat) _param_fw_lnd_fl_pmax, (ParamFloat) _param_fw_lnd_fl_pmin, (ParamFloat) _param_fw_lnd_flalt, - (ParamFloat) _param_fw_thrtc_sc, - (ParamFloat) _param_fw_t_thr_low_hgt, (ParamBool) _param_fw_lnd_earlycfg, (ParamInt) _param_fw_lnd_useter, (ParamFloat) _param_fw_p_lim_max, (ParamFloat) _param_fw_p_lim_min, - - (ParamFloat) _param_fw_t_hrate_ff, - (ParamFloat) _param_fw_t_h_error_tc, - (ParamFloat) _param_fw_t_fast_alt_err, - (ParamFloat) _param_fw_t_thr_integ, - (ParamFloat) _param_fw_t_I_gain_pit, - (ParamFloat) _param_fw_t_ptch_damp, - (ParamFloat) _param_fw_t_rll2thr, - (ParamFloat) _param_fw_t_sink_max, - (ParamFloat) _param_fw_t_spdweight, - (ParamFloat) _param_fw_t_tas_error_tc, - (ParamFloat) _param_fw_t_thr_damping, - (ParamFloat) _param_fw_t_vert_acc, - (ParamFloat) _param_ste_rate_time_const, - (ParamFloat) _param_seb_rate_ff, (ParamFloat) _param_climbrate_target, (ParamFloat) _param_sinkrate_target, - (ParamFloat) _param_speed_standard_dev, - (ParamFloat) _param_speed_rate_standard_dev, - (ParamFloat) _param_process_noise_standard_dev, - (ParamFloat) _param_fw_thr_idle, (ParamFloat) _param_fw_thr_max, (ParamFloat) _param_fw_thr_min, - (ParamFloat) _param_fw_thr_slew_max, - (ParamFloat) _param_fw_flaps_lnd_scl, (ParamFloat) _param_fw_flaps_to_scl, (ParamFloat) _param_fw_spoilers_lnd, - (ParamInt) _param_fw_pos_stk_conf, - (ParamInt) _param_nav_gpsf_lt, (ParamFloat) _param_nav_gpsf_r, + (ParamFloat) _param_t_spdweight, // external parameters (ParamBool) _param_fw_use_airspd, - - (ParamFloat) _param_fw_psp_off, - (ParamFloat) _param_nav_loiter_rad, - (ParamFloat) _takeoff_pitch_min, - (ParamFloat) _param_nav_fw_alt_rad, - (ParamFloat) _param_fw_wing_span, (ParamFloat) _param_fw_wing_height, - - (ParamFloat) _param_rwto_npfg_period, (ParamBool) _param_rwto_nudge, - (ParamFloat) _param_fw_lnd_fl_time, (ParamFloat) _param_fw_lnd_fl_sink, (ParamFloat) _param_fw_lnd_td_time, (ParamFloat) _param_fw_lnd_td_off, (ParamInt) _param_fw_lnd_nudge, (ParamInt) _param_fw_lnd_abort, - - (ParamFloat) _param_fw_wind_arsp_sc, - (ParamFloat) _param_fw_tko_airspd, - (ParamFloat) _param_rwto_psp, - (ParamBool) _param_fw_laun_detcn_on + (ParamBool) _param_fw_laun_detcn_on, + (ParamFloat) _param_fw_airspd_max, + (ParamFloat) _param_fw_airspd_min, + (ParamFloat) _param_fw_airspd_trim, + (ParamFloat) _param_fw_t_clmb_max ) - }; -#endif // FIXEDWINGPOSITIONCONTROL_HPP_ +#endif // FIXEDWINGMODEMANAGER_HPP_ diff --git a/src/modules/fw_mode_manager/Kconfig b/src/modules/fw_mode_manager/Kconfig new file mode 100644 index 0000000000..b0c2689413 --- /dev/null +++ b/src/modules/fw_mode_manager/Kconfig @@ -0,0 +1,20 @@ +menuconfig MODULES_FW_MODE_MANAGER + bool "fw_mode_manager" + default n + ---help--- + Enable support for fw_mode_manager + +menuconfig USER_FW_MODE_MANAGER + bool "fw_mode_manager running as userspace module" + default n + depends on BOARD_PROTECTED && MODULES_FW_MODE_MANAGER + ---help--- + Put fw_mode_manager in userspace memory + +menuconfig FIGURE_OF_EIGHT + bool "fw_mode_manager figure of eight loiter support" + default n + depends on MODULES_FW_MODE_MANAGER + ---help--- + Enable support for the figure of eight loitering pattern in fixed wing. + NOTE: Enable Mavlink development support to get feedback message. diff --git a/src/modules/fw_pos_control/figure_eight/CMakeLists.txt b/src/modules/fw_mode_manager/figure_eight/CMakeLists.txt similarity index 100% rename from src/modules/fw_pos_control/figure_eight/CMakeLists.txt rename to src/modules/fw_mode_manager/figure_eight/CMakeLists.txt diff --git a/src/modules/fw_pos_control/figure_eight/FigureEight.cpp b/src/modules/fw_mode_manager/figure_eight/FigureEight.cpp similarity index 83% rename from src/modules/fw_pos_control/figure_eight/FigureEight.cpp rename to src/modules/fw_mode_manager/figure_eight/FigureEight.cpp index d0ce50a033..9ab672d964 100644 --- a/src/modules/fw_pos_control/figure_eight/FigureEight.cpp +++ b/src/modules/fw_mode_manager/figure_eight/FigureEight.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2022-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 @@ -48,11 +48,10 @@ static constexpr bool SOUTH_CIRCLE_IS_COUNTER_CLOCKWISE{true}; static constexpr float DEFAULT_MAJOR_TO_MINOR_AXIS_RATIO{2.5f}; static constexpr float MINIMAL_FEASIBLE_MAJOR_TO_MINOR_AXIS_RATIO{2.0f}; -FigureEight::FigureEight(NPFG &npfg, matrix::Vector2f &wind_vel, float &eas2tas) : +FigureEight::FigureEight(DirectionalGuidance &npfg, matrix::Vector2f &wind_vel) : ModuleParams(nullptr), - _npfg(npfg), - _wind_vel(wind_vel), - _eas2tas(eas2tas) + _directional_guidance(npfg), + _wind_vel(wind_vel) { } @@ -64,8 +63,9 @@ void FigureEight::resetPattern() _pos_passed_circle_center_along_major_axis = false; } -void FigureEight::updateSetpoint(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, - const FigureEightPatternParameters ¶meters, float target_airspeed) +DirectionalGuidanceOutput FigureEight::updateSetpoint(const matrix::Vector2f &curr_pos_local, + const matrix::Vector2f &ground_speed, + const FigureEightPatternParameters ¶meters) { // Sanitize inputs FigureEightPatternParameters valid_parameters{sanitizeParameters(parameters)}; @@ -81,7 +81,7 @@ void FigureEight::updateSetpoint(const matrix::Vector2f &curr_pos_local, const m updateSegment(curr_pos_local, valid_parameters, pattern_points); // Apply control logic based on segment - applyControl(curr_pos_local, ground_speed, valid_parameters, target_airspeed, pattern_points); + return applyControl(curr_pos_local, ground_speed, valid_parameters, pattern_points); } FigureEight::FigureEightPatternParameters FigureEight::sanitizeParameters(const FigureEightPatternParameters @@ -118,7 +118,8 @@ void FigureEight::initializePattern(const matrix::Vector2f &curr_pos_local, cons const bool north_is_closer = north_center_to_pos_local.norm() < south_center_to_pos_local.norm(); // Get the normalized switch distance. - float switch_distance_normalized = _npfg.switchDistance(FLT_MAX) * NORMALIZED_MAJOR_RADIUS / parameters.loiter_radius; + float switch_distance_normalized = _directional_guidance.switchDistance(FLT_MAX) * NORMALIZED_MAJOR_RADIUS / + parameters.loiter_radius; //Far away from current figure of eight. Fly towards closer circle @@ -194,7 +195,8 @@ void FigureEight::updateSegment(const matrix::Vector2f &curr_pos_local, const Fi calculatePositionToCenterNormalizedRotated(center_to_pos_local, curr_pos_local, parameters); // Get the normalized switch distance. - float switch_distance_normalized = _npfg.switchDistance(FLT_MAX) * NORMALIZED_MAJOR_RADIUS / parameters.loiter_radius; + float switch_distance_normalized = _directional_guidance.switchDistance(FLT_MAX) * NORMALIZED_MAJOR_RADIUS / + parameters.loiter_radius; // Update segment if segment exit condition has been reached switch (_current_segment) { @@ -275,56 +277,60 @@ void FigureEight::updateSegment(const matrix::Vector2f &curr_pos_local, const Fi } } -void FigureEight::applyControl(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, - const FigureEightPatternParameters ¶meters, float target_airspeed, - const FigureEightPatternPoints &pattern_points) +DirectionalGuidanceOutput FigureEight::applyControl(const matrix::Vector2f &curr_pos_local, + const matrix::Vector2f &ground_speed, + const FigureEightPatternParameters ¶meters, + const FigureEightPatternPoints &pattern_points) { Vector2f center_to_pos_local; calculatePositionToCenterNormalizedRotated(center_to_pos_local, curr_pos_local, parameters); switch (_current_segment) { case FigureEightSegment::SEGMENT_CIRCLE_NORTH: { - applyCircle(NORTH_CIRCLE_IS_COUNTER_CLOCKWISE, pattern_points.normalized_north_circle_offset, curr_pos_local, - ground_speed, parameters, target_airspeed); + return applyCircle(NORTH_CIRCLE_IS_COUNTER_CLOCKWISE, pattern_points.normalized_north_circle_offset, curr_pos_local, + ground_speed, parameters); } break; case FigureEightSegment::SEGMENT_NORTHEAST_SOUTHWEST: { // Follow path from north-east to south-west - applyLine(pattern_points.normalized_north_exit_offset, pattern_points.normalized_south_entry_offset, curr_pos_local, - ground_speed, parameters, target_airspeed); + return applyLine(pattern_points.normalized_north_exit_offset, pattern_points.normalized_south_entry_offset, + curr_pos_local, + ground_speed, parameters); } break; case FigureEightSegment::SEGMENT_CIRCLE_SOUTH: { - applyCircle(SOUTH_CIRCLE_IS_COUNTER_CLOCKWISE, pattern_points.normalized_south_circle_offset, curr_pos_local, - ground_speed, parameters, target_airspeed); + return applyCircle(SOUTH_CIRCLE_IS_COUNTER_CLOCKWISE, pattern_points.normalized_south_circle_offset, curr_pos_local, + ground_speed, parameters); } break; case FigureEightSegment::SEGMENT_SOUTHEAST_NORTHWEST: { // follow path from south-east to north-west - applyLine(pattern_points.normalized_south_exit_offset, pattern_points.normalized_north_entry_offset, curr_pos_local, - ground_speed, parameters, target_airspeed); + return applyLine(pattern_points.normalized_south_exit_offset, pattern_points.normalized_north_entry_offset, + curr_pos_local, + ground_speed, parameters); } break; case FigureEightSegment::SEGMENT_POINT_SOUTHWEST: { // Follow path from current position to south-west - applyLine(center_to_pos_local, pattern_points.normalized_south_entry_offset, curr_pos_local, - ground_speed, parameters, target_airspeed); + return applyLine(center_to_pos_local, pattern_points.normalized_south_entry_offset, curr_pos_local, + ground_speed, parameters); } break; case FigureEightSegment::SEGMENT_POINT_NORTHWEST: { // Follow path from current position to north-west - applyLine(center_to_pos_local, pattern_points.normalized_north_entry_offset, curr_pos_local, - ground_speed, parameters, target_airspeed); + return applyLine(center_to_pos_local, pattern_points.normalized_north_entry_offset, curr_pos_local, + ground_speed, parameters); } break; case FigureEightSegment::SEGMENT_UNDEFINED: default: + return DirectionalGuidanceOutput{}; break; } } @@ -356,9 +362,10 @@ float FigureEight::calculateRotationAngle(const FigureEightPatternParameters &pa return yaw_rotation; } -void FigureEight::applyCircle(bool loiter_direction_counter_clockwise, const matrix::Vector2f &normalized_circle_offset, - const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, - const FigureEightPatternParameters ¶meters, float target_airspeed) +DirectionalGuidanceOutput FigureEight::applyCircle(bool loiter_direction_counter_clockwise, + const matrix::Vector2f &normalized_circle_offset, + const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, + const FigureEightPatternParameters ¶meters) { const float loiter_direction_multiplier = loiter_direction_counter_clockwise ? -1.f : 1.f; @@ -366,8 +373,6 @@ void FigureEight::applyCircle(bool loiter_direction_counter_clockwise, const mat Vector2f circle_offset_rotated = Dcm2f(calculateRotationAngle(parameters)) * circle_offset; Vector2f circle_center = parameters.center_pos_local + circle_offset_rotated; - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_param_fw_airspd_max.get() * _eas2tas); const Vector2f vector_center_to_vehicle = curr_pos_local - circle_center; const float dist_to_center = vector_center_to_vehicle.norm(); @@ -392,16 +397,14 @@ void FigureEight::applyCircle(bool loiter_direction_counter_clockwise, const mat float path_curvature = loiter_direction_multiplier / parameters.loiter_minor_radius; _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); _closest_point_on_path = unit_vec_center_to_closest_pt * parameters.loiter_minor_radius + circle_center; - _npfg.guideToPath(curr_pos_local, ground_speed, _wind_vel, unit_path_tangent, - _closest_point_on_path, path_curvature); + return _directional_guidance.guideToPath(curr_pos_local, ground_speed, _wind_vel, unit_path_tangent, + _closest_point_on_path, path_curvature); - _roll_setpoint = _npfg.getRollSetpoint(); - _indicated_airspeed_setpoint = _npfg.getAirspeedRef() / _eas2tas; } -void FigureEight::applyLine(const matrix::Vector2f &normalized_line_start_offset, - const matrix::Vector2f &normalized_line_end_offset, const matrix::Vector2f &curr_pos_local, - const matrix::Vector2f &ground_speed, const FigureEightPatternParameters ¶meters, float target_airspeed) +DirectionalGuidanceOutput FigureEight::applyLine(const matrix::Vector2f &normalized_line_start_offset, + const matrix::Vector2f &normalized_line_end_offset, const matrix::Vector2f &curr_pos_local, + const matrix::Vector2f &ground_speed, const FigureEightPatternParameters ¶meters) { const Dcm2f rotation_matrix(calculateRotationAngle(parameters)); @@ -414,15 +417,12 @@ void FigureEight::applyLine(const matrix::Vector2f &normalized_line_start_offset const Vector2f end_offset_rotated = rotation_matrix * end_offset; const Vector2f line_segment_end_position = parameters.center_pos_local + end_offset_rotated; - _npfg.setAirspeedNom(target_airspeed * _eas2tas); - _npfg.setAirspeedMax(_param_fw_airspd_max.get() * _eas2tas); const Vector2f path_tangent = line_segment_end_position - line_segment_start_position; const Vector2f unit_path_tangent = path_tangent.normalized(); _target_bearing = atan2f(unit_path_tangent(1), unit_path_tangent(0)); const Vector2f vector_A_to_vehicle = curr_pos_local - line_segment_start_position; _closest_point_on_path = line_segment_start_position + vector_A_to_vehicle.dot(unit_path_tangent) * unit_path_tangent; - _npfg.guideToPath(curr_pos_local, ground_speed, _wind_vel, path_tangent.normalized(), line_segment_start_position, - 0.0f); - _roll_setpoint = _npfg.getRollSetpoint(); - _indicated_airspeed_setpoint = _npfg.getAirspeedRef() / _eas2tas; + return _directional_guidance.guideToPath(curr_pos_local, ground_speed, _wind_vel, path_tangent.normalized(), + line_segment_start_position, + 0.0f); } diff --git a/src/modules/fw_pos_control/figure_eight/FigureEight.hpp b/src/modules/fw_mode_manager/figure_eight/FigureEight.hpp similarity index 81% rename from src/modules/fw_pos_control/figure_eight/FigureEight.hpp rename to src/modules/fw_mode_manager/figure_eight/FigureEight.hpp index b3c55c840b..297e07942c 100644 --- a/src/modules/fw_pos_control/figure_eight/FigureEight.hpp +++ b/src/modules/fw_mode_manager/figure_eight/FigureEight.hpp @@ -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 @@ -45,7 +45,7 @@ #include #include -#include "lib/npfg/npfg.hpp" +#include "lib/npfg/DirectionalGuidance.hpp" class FigureEight : public ModuleParams { @@ -87,9 +87,8 @@ public: * * @param[in] npfg is the reference to the parent npfg object. * @param[in] wind_vel is the reference to the parent wind velocity [m/s]. - * @param[in] eas2tas is the reference to the parent indicated airspeed to true airspeed conversion. */ - FigureEight(NPFG &npfg, matrix::Vector2f &wind_vel, float &eas2tas); + FigureEight(DirectionalGuidance &directional_guidance, matrix::Vector2f &wind_vel); /** * @brief reset the figure eight pattern. @@ -100,27 +99,14 @@ public: void resetPattern(); /** - * @brief Update roll and airspeed setpoint. + * @brief Update roll setpoint * * @param[in] curr_pos_local is the current local position of the vehicle in [m]. * @param[in] ground_speed is the current ground speed of the vehicle in [m/s]. * @param[in] parameters is the parameter set defining the figure eight shape. - * @param[in] target_airspeed is the current targeted indicated airspeed [m/s]. */ - void updateSetpoint(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, - const FigureEightPatternParameters ¶meters, float target_airspeed); - /** - * @brief Get the roll setpoint - * - * @return the roll setpoint in [rad]. - */ - float getRollSetpoint() const {return _roll_setpoint;}; - /** - * @brief Get the indicated airspeed setpoint - * - * @return the indicated airspeed setpoint in [m/s]. - */ - float getAirspeedSetpoint() const {return _indicated_airspeed_setpoint;}; + DirectionalGuidanceOutput updateSetpoint(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, + const FigureEightPatternParameters ¶meters); /** * @brief Get the target bearing of current point on figure of eight * @@ -134,7 +120,6 @@ public: */ matrix::Vector2f getClosestPoint() const {return _closest_point_on_path;}; - private: /** * @brief @@ -172,12 +157,11 @@ private: * @param[in] curr_pos_local is the current local position of the vehicle in [m]. * @param[in] ground_speed is the current ground speed of the vehicle in [m/s]. * @param[in] parameters is the parameter set defining the figure eight shape. - * @param[in] target_airspeed is the current targeted indicated airspeed [m/s]. * @param[in] pattern_points are the relevant points defining the figure eight pattern. */ - void applyControl(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, - const FigureEightPatternParameters ¶meters, float target_airspeed, - const FigureEightPatternPoints &pattern_points); + DirectionalGuidanceOutput applyControl(const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, + const FigureEightPatternParameters ¶meters, + const FigureEightPatternPoints &pattern_points); /** * @brief Update active segment. * @@ -212,11 +196,11 @@ private: * @param[in] curr_pos_local is the current local position of the vehicle in [m]. * @param[in] ground_speed is the current ground speed of the vehicle in [m/s]. * @param[in] parameters is the parameter set defining the figure eight shape. - * @param[in] target_airspeed is the current targeted indicated airspeed [m/s]. */ - void applyCircle(bool loiter_direction_counter_clockwise, const matrix::Vector2f &normalized_circle_offset, - const matrix::Vector2f &curr_pos_local, - const matrix::Vector2f &ground_speed, const FigureEightPatternParameters ¶meters, float target_airspeed); + DirectionalGuidanceOutput applyCircle(bool loiter_direction_counter_clockwise, + const matrix::Vector2f &normalized_circle_offset, + const matrix::Vector2f &curr_pos_local, + const matrix::Vector2f &ground_speed, const FigureEightPatternParameters ¶meters); /** * @brief Apply path lateral control * @@ -225,18 +209,18 @@ private: * @param[in] curr_pos_local is the current local position of the vehicle in [m]. * @param[in] ground_speed is the current ground speed of the vehicle in [m/s]. * @param[in] parameters is the parameter set defining the figure eight shape. - * @param[in] target_airspeed is the current targeted indicated airspeed [m/s]. */ - void applyLine(const matrix::Vector2f &normalized_line_start_offset, const matrix::Vector2f &normalized_line_end_offset, - const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, - const FigureEightPatternParameters ¶meters, float target_airspeed); + DirectionalGuidanceOutput applyLine(const matrix::Vector2f &normalized_line_start_offset, + const matrix::Vector2f &normalized_line_end_offset, + const matrix::Vector2f &curr_pos_local, const matrix::Vector2f &ground_speed, + const FigureEightPatternParameters ¶meters); private: /** * @brief npfg lateral control object. * */ - NPFG &_npfg; + DirectionalGuidance &_directional_guidance; /** * @brief Wind velocity in [m/s]. @@ -244,24 +228,9 @@ private: */ const matrix::Vector2f &_wind_vel; /** - * @brief Conversion factor from indicated to true airspeed. - * - */ - const float &_eas2tas; - /** - * @brief Roll setpoint in [rad]. - * - */ - float _roll_setpoint; - /** - * @brief Indicated airspeed setpoint in [m/s]. - * - */ - float _indicated_airspeed_setpoint; - /** - * @brief active figure eight position setpoint. - * - */ + * @brief active figure eight position setpoint. + * + */ FigureEightPatternParameters _active_parameters; /** diff --git a/src/modules/fw_pos_control/fw_path_navigation_params.c b/src/modules/fw_mode_manager/fw_mode_manager_params.c similarity index 67% rename from src/modules/fw_pos_control/fw_path_navigation_params.c rename to src/modules/fw_mode_manager/fw_mode_manager_params.c index 2e2005997a..2269ba79f1 100644 --- a/src/modules/fw_pos_control/fw_path_navigation_params.c +++ b/src/modules/fw_mode_manager/fw_mode_manager_params.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2013-2023 PX4 Development Team. All rights reserved. + * 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 @@ -31,20 +31,6 @@ * ****************************************************************************/ -/** - * 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 Path Control - */ -PARAM_DEFINE_FLOAT(FW_PN_R_SLEW_MAX, 90.0f); - /** * NPFG period * @@ -93,48 +79,6 @@ PARAM_DEFINE_INT32(NPFG_LB_PERIOD, 1); */ PARAM_DEFINE_INT32(NPFG_UB_PERIOD, 1); -/** - * Enable track keeping excess wind handling logic. - * - * @boolean - * @group FW NPFG Control - */ -PARAM_DEFINE_INT32(NPFG_TRACK_KEEP, 1); - -/** - * Enable minimum forward ground speed maintaining excess wind handling logic - * - * @boolean - * @group FW NPFG Control - */ -PARAM_DEFINE_INT32(NPFG_EN_MIN_GSP, 1); - -/** - * Enable wind excess regulation. - * - * Disabling this parameter further disables all other airspeed incrementation options. - * - * @boolean - * @group FW NPFG Control - */ -PARAM_DEFINE_INT32(NPFG_WIND_REG, 1); - -/** - * Maximum, minimum forward ground speed for track keeping in excess wind - * - * The maximum value of the minimum forward ground speed that may be commanded - * by the track keeping excess wind handling logic. Commanded in full at the normalized - * track error fraction of the track error boundary and reduced to zero on track. - * - * @unit m/s - * @min 0.0 - * @max 10.0 - * @decimal 1 - * @increment 0.5 - * @group FW NPFG Control - */ -PARAM_DEFINE_FLOAT(NPFG_GSP_MAX_TK, 5.0f); - /** * Roll time constant * @@ -179,19 +123,6 @@ PARAM_DEFINE_FLOAT(NPFG_SW_DST_MLT, 0.32f); PARAM_DEFINE_FLOAT(NPFG_PERIOD_SF, 1.5f); -/** - * Throttle max slew rate - * - * Maximum slew rate for the commanded throttle - * - * @min 0.0 - * @max 1.0 - * @decimal 2 - * @increment 0.01 - * @group FW TECS - */ -PARAM_DEFINE_FLOAT(FW_THR_SLEW_MAX, 0.0f); - /** * Minimum pitch angle setpoint * @@ -202,7 +133,7 @@ PARAM_DEFINE_FLOAT(FW_THR_SLEW_MAX, 0.0f); * @max 0.0 * @decimal 1 * @increment 0.5 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_P_LIM_MIN, -30.0f); @@ -216,7 +147,7 @@ PARAM_DEFINE_FLOAT(FW_P_LIM_MIN, -30.0f); * @max 60.0 * @decimal 1 * @increment 0.5 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_P_LIM_MAX, 30.0f); @@ -230,7 +161,7 @@ PARAM_DEFINE_FLOAT(FW_P_LIM_MAX, 30.0f); * @max 65.0 * @decimal 1 * @increment 0.5 - * @group FW Path Control + * @group FW General */ PARAM_DEFINE_FLOAT(FW_R_LIM, 50.0f); @@ -245,7 +176,7 @@ PARAM_DEFINE_FLOAT(FW_R_LIM, 50.0f); * @max 1.0 * @decimal 2 * @increment 0.01 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_THR_MAX, 1.0f); @@ -261,7 +192,7 @@ PARAM_DEFINE_FLOAT(FW_THR_MAX, 1.0f); * @max 1.0 * @decimal 2 * @increment 0.01 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_THR_MIN, 0.0f); @@ -275,7 +206,7 @@ PARAM_DEFINE_FLOAT(FW_THR_MIN, 0.0f); * @max 0.4 * @decimal 2 * @increment 0.01 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_THR_IDLE, 0.0f); @@ -302,7 +233,7 @@ PARAM_DEFINE_FLOAT(FW_LND_ANG, 5.0f); * @max 30.0 * @decimal 1 * @increment 0.5 - * @group FW Path Control + * @group FW Auto Takeoff */ PARAM_DEFINE_FLOAT(FW_TKO_PITCH_MIN, 10.0f); @@ -317,7 +248,7 @@ PARAM_DEFINE_FLOAT(FW_TKO_PITCH_MIN, 10.0f); * @min -1.0 * @decimal 1 * @increment 0.1 - * @group FW TECS + * @group FW Auto Takeoff */ PARAM_DEFINE_FLOAT(FW_TKO_AIRSPD, -1.0f); @@ -423,157 +354,6 @@ PARAM_DEFINE_FLOAT(FW_LND_AIRSPD, -1.f); */ PARAM_DEFINE_FLOAT(FW_LND_THRTC_SC, 1.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 TECS - */ -PARAM_DEFINE_FLOAT(FW_T_THR_LOW_HGT, -1.f); - -/* - * TECS parameters - * - */ - -/** - * Maximum descent rate - * - * @unit m/s - * @min 1.0 - * @max 15.0 - * @decimal 1 - * @increment 0.5 - * @group FW TECS - */ -PARAM_DEFINE_FLOAT(FW_T_SINK_MAX, 5.0f); - -/** - * 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 TECS - */ -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 TECS - */ -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 TECS - */ -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 TECS - */ -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 TECS - */ -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 TECS - */ -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 TECS - */ -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 TECS - */ -PARAM_DEFINE_FLOAT(FW_T_RLL2THR, 15.0f); - /** * Speed <--> Altitude weight * @@ -586,79 +366,10 @@ PARAM_DEFINE_FLOAT(FW_T_RLL2THR, 15.0f); * @max 2.0 * @decimal 1 * @increment 1.0 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_T_SPDWEIGHT, 1.0f); -/** - * Pitch damping gain - * - * @min 0.0 - * @max 2.0 - * @decimal 2 - * @increment 0.1 - * @group FW TECS - */ -PARAM_DEFINE_FLOAT(FW_T_PTCH_DAMP, 0.1f); - -/** - * Altitude error time constant. - * - * @min 2.0 - * @decimal 2 - * @increment 0.5 - * @group FW TECS - */ -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 TECS - */ -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 TECS - */ -PARAM_DEFINE_FLOAT(FW_T_HRATE_FF, 0.3f); - -/** - * True airspeed error time constant. - * - * @min 2.0 - * @decimal 2 - * @increment 0.5 - * @group FW TECS - */ -PARAM_DEFINE_FLOAT(FW_T_TAS_TC, 5.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 TECS - */ -PARAM_DEFINE_FLOAT(FW_GND_SPD_MIN, 5.0f); - /** * Custom stick configuration * @@ -668,35 +379,10 @@ PARAM_DEFINE_FLOAT(FW_GND_SPD_MIN, 5.0f); * @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 Path Control + * @group FW General */ PARAM_DEFINE_INT32(FW_POS_STK_CONF, 2); -/** - * 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 TECS - */ -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 TECS - */ -PARAM_DEFINE_FLOAT(FW_T_SEB_R_FF, 1.0f); - /** * Default target climbrate. * @@ -708,7 +394,7 @@ PARAM_DEFINE_FLOAT(FW_T_SEB_R_FF, 1.0f); * @max 15 * @decimal 2 * @increment 0.01 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_T_CLMB_R_SP, 3.0f); @@ -723,7 +409,7 @@ PARAM_DEFINE_FLOAT(FW_T_CLMB_R_SP, 3.0f); * @max 15 * @decimal 2 * @increment 0.01 - * @group FW TECS + * @group FW General */ PARAM_DEFINE_FLOAT(FW_T_SINK_R_SP, 2.0f); @@ -737,7 +423,7 @@ PARAM_DEFINE_FLOAT(FW_T_SINK_R_SP, 2.0f); * @unit s * @min 0 * @max 3600 - * @group Mission + * @group FW General */ PARAM_DEFINE_INT32(FW_GPSF_LT, 30); @@ -751,7 +437,7 @@ PARAM_DEFINE_INT32(FW_GPSF_LT, 30); * @max 30.0 * @decimal 1 * @increment 0.5 - * @group Mission + * @group FW General */ PARAM_DEFINE_FLOAT(FW_GPSF_R, 15.0f); @@ -765,7 +451,7 @@ PARAM_DEFINE_FLOAT(FW_GPSF_R, 15.0f); * @min 0.1 * @decimal 1 * @increment 0.1 - * @group FW Geometry + * @group FW General */ PARAM_DEFINE_FLOAT(FW_WING_SPAN, 3.0); @@ -779,7 +465,7 @@ PARAM_DEFINE_FLOAT(FW_WING_SPAN, 3.0); * @min 0.0 * @decimal 1 * @increment 1 - * @group FW Geometry + * @group FW General */ PARAM_DEFINE_FLOAT(FW_WING_HEIGHT, 0.5); @@ -886,20 +572,6 @@ PARAM_DEFINE_INT32(FW_LND_NUDGE, 2); */ PARAM_DEFINE_INT32(FW_LND_ABORT, 3); -/** - * 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 TECS - */ -PARAM_DEFINE_FLOAT(FW_WIND_ARSP_SC, 0.f); - /** * Fixed-wing launch detection * @@ -907,7 +579,7 @@ PARAM_DEFINE_FLOAT(FW_WIND_ARSP_SC, 0.f); * Not compatible with runway takeoff. * * @boolean - * @group FW Launch detection + * @group FW Auto Takeoff */ PARAM_DEFINE_INT32(FW_LAUN_DETCN_ON, 0); @@ -922,7 +594,7 @@ PARAM_DEFINE_INT32(FW_LAUN_DETCN_ON, 0); * @max 1.0 * @decimal 2 * @increment 0.01 - * @group FW Rate Control + * @group FW Auto Takeoff */ PARAM_DEFINE_FLOAT(FW_FLAPS_TO_SCL, 0.0f); @@ -937,7 +609,7 @@ PARAM_DEFINE_FLOAT(FW_FLAPS_TO_SCL, 0.0f); * @max 1.0 * @decimal 2 * @increment 0.01 - * @group FW Rate Control + * @group FW Auto Landing */ PARAM_DEFINE_FLOAT(FW_FLAPS_LND_SCL, 1.0f); @@ -949,6 +621,6 @@ PARAM_DEFINE_FLOAT(FW_FLAPS_LND_SCL, 1.0f); * @max 1.0 * @decimal 2 * @increment 0.01 - * @group FW Attitude Control + * @group FW Auto Landing */ PARAM_DEFINE_FLOAT(FW_SPOILERS_LND, 0.f); diff --git a/src/modules/fw_pos_control/launchdetection/CMakeLists.txt b/src/modules/fw_mode_manager/launchdetection/CMakeLists.txt similarity index 100% rename from src/modules/fw_pos_control/launchdetection/CMakeLists.txt rename to src/modules/fw_mode_manager/launchdetection/CMakeLists.txt diff --git a/src/modules/fw_pos_control/launchdetection/LaunchDetector.cpp b/src/modules/fw_mode_manager/launchdetection/LaunchDetector.cpp similarity index 100% rename from src/modules/fw_pos_control/launchdetection/LaunchDetector.cpp rename to src/modules/fw_mode_manager/launchdetection/LaunchDetector.cpp diff --git a/src/modules/fw_pos_control/launchdetection/LaunchDetector.h b/src/modules/fw_mode_manager/launchdetection/LaunchDetector.h similarity index 100% rename from src/modules/fw_pos_control/launchdetection/LaunchDetector.h rename to src/modules/fw_mode_manager/launchdetection/LaunchDetector.h diff --git a/src/modules/fw_pos_control/launchdetection/launchdetection_params.c b/src/modules/fw_mode_manager/launchdetection/launchdetection_params.c similarity index 96% rename from src/modules/fw_pos_control/launchdetection/launchdetection_params.c rename to src/modules/fw_mode_manager/launchdetection/launchdetection_params.c index 63e14bedbd..eee3d7ccef 100644 --- a/src/modules/fw_pos_control/launchdetection/launchdetection_params.c +++ b/src/modules/fw_mode_manager/launchdetection/launchdetection_params.c @@ -48,7 +48,7 @@ * @min 0 * @decimal 1 * @increment 0.5 - * @group FW Launch detection + * @group FW Auto Takeoff */ PARAM_DEFINE_FLOAT(FW_LAUN_AC_THLD, 30.0f); @@ -62,7 +62,7 @@ PARAM_DEFINE_FLOAT(FW_LAUN_AC_THLD, 30.0f); * @max 5.0 * @decimal 2 * @increment 0.05 - * @group FW Launch detection + * @group FW Auto Takeoff */ PARAM_DEFINE_FLOAT(FW_LAUN_AC_T, 0.05f); @@ -76,6 +76,6 @@ PARAM_DEFINE_FLOAT(FW_LAUN_AC_T, 0.05f); * @max 10.0 * @decimal 1 * @increment 0.5 - * @group FW Launch detection + * @group FW Auto Takeoff */ PARAM_DEFINE_FLOAT(FW_LAUN_MOT_DEL, 0.0f); diff --git a/src/modules/fw_pos_control/runway_takeoff/CMakeLists.txt b/src/modules/fw_mode_manager/runway_takeoff/CMakeLists.txt similarity index 100% rename from src/modules/fw_pos_control/runway_takeoff/CMakeLists.txt rename to src/modules/fw_mode_manager/runway_takeoff/CMakeLists.txt diff --git a/src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.cpp b/src/modules/fw_mode_manager/runway_takeoff/RunwayTakeoff.cpp similarity index 82% rename from src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.cpp rename to src/modules/fw_mode_manager/runway_takeoff/RunwayTakeoff.cpp index 7cfc23b438..498a5332b1 100644 --- a/src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.cpp +++ b/src/modules/fw_mode_manager/runway_takeoff/RunwayTakeoff.cpp @@ -51,10 +51,8 @@ using namespace time_literals; namespace runwaytakeoff { -void RunwayTakeoff::init(const hrt_abstime &time_now, const float initial_yaw, const matrix::Vector2d &start_pos_global) +void RunwayTakeoff::init(const hrt_abstime &time_now) { - initial_yaw_ = initial_yaw; - start_pos_global_ = start_pos_global; takeoff_state_ = RunwayTakeoffState::THROTTLE_RAMP; initialized_ = true; time_initialized_ = time_now; @@ -99,42 +97,26 @@ void RunwayTakeoff::update(const hrt_abstime &time_now, const float takeoff_airs } } -bool RunwayTakeoff::controlYaw() -{ - // keep controlling yaw directly until we start navigation - return takeoff_state_ < RunwayTakeoffState::CLIMBOUT; -} - -float RunwayTakeoff::getPitch(float external_pitch_setpoint) +float RunwayTakeoff::getPitch() { if (takeoff_state_ <= RunwayTakeoffState::CLAMPED_TO_RUNWAY) { return math::radians(param_rwto_psp_.get()); } - return external_pitch_setpoint; + return NAN; } -float RunwayTakeoff::getRoll(float external_roll_setpoint) +float RunwayTakeoff::getRoll() { // until we have enough ground clearance, set roll to 0 if (takeoff_state_ < RunwayTakeoffState::CLIMBOUT) { return 0.0f; } - return external_roll_setpoint; + return NAN; } -float RunwayTakeoff::getYaw(float external_yaw_setpoint) -{ - if (param_rwto_hdg_.get() == 0 && takeoff_state_ < RunwayTakeoffState::CLIMBOUT) { - return initial_yaw_; - - } else { - return external_yaw_setpoint; - } -} - -float RunwayTakeoff::getThrottle(const float idle_throttle, const float external_throttle_setpoint) const +float RunwayTakeoff::getThrottle(const float idle_throttle) const { float throttle = idle_throttle; @@ -147,30 +129,18 @@ float RunwayTakeoff::getThrottle(const float idle_throttle, const float external break; case RunwayTakeoffState::CLAMPED_TO_RUNWAY: + case RunwayTakeoffState::CLIMBOUT: throttle = param_rwto_max_thr_.get(); break; - case RunwayTakeoffState::CLIMBOUT: - // ramp in throttle setpoint over takeoff rotation transition time - throttle = interpolateValuesOverAbsoluteTime(param_rwto_max_thr_.get(), external_throttle_setpoint, takeoff_time_, - param_rwto_rot_time_.get()); - - break; - case RunwayTakeoffState::FLY: - throttle = external_throttle_setpoint; + throttle = NAN; } return throttle; } -bool RunwayTakeoff::resetIntegrators() -{ - // reset integrators if we're still on runway - return takeoff_state_ < RunwayTakeoffState::CLIMBOUT; -} - float RunwayTakeoff::getMinPitch(float min_pitch_in_climbout, float min_pitch) const { if (takeoff_state_ < RunwayTakeoffState::CLIMBOUT) { diff --git a/src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.h b/src/modules/fw_mode_manager/runway_takeoff/RunwayTakeoff.h similarity index 72% rename from src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.h rename to src/modules/fw_mode_manager/runway_takeoff/RunwayTakeoff.h index 35e463077e..22fa8a51ec 100644 --- a/src/modules/fw_pos_control/runway_takeoff/RunwayTakeoff.h +++ b/src/modules/fw_mode_manager/runway_takeoff/RunwayTakeoff.h @@ -70,10 +70,8 @@ public: * @brief Initializes the state machine. * * @param time_now Absolute time since system boot [us] - * @param initial_yaw Vehicle yaw angle at time of initialization [us] - * @param start_pos_global Vehicle global (lat, lon) position at time of initialization [deg] */ - void init(const hrt_abstime &time_now, const float initial_yaw, const matrix::Vector2d &start_pos_global); + void init(const hrt_abstime &time_now); /** * @brief Updates the state machine based on the current vehicle condition. @@ -103,37 +101,14 @@ public: bool runwayTakeoffEnabled() { return param_rwto_tkoff_.get(); } /** - * @return Initial vehicle yaw angle [rad] - */ - float getInitYaw() { return initial_yaw_; } - - /** - * @return The vehicle should control yaw via rudder or nose gear - */ - bool controlYaw(); - - /** - * @param external_pitch_setpoint Externally commanded pitch angle setpoint (usually from TECS) [rad] * @return Pitch angle setpoint (limited while plane is on runway) [rad] */ - float getPitch(float external_pitch_setpoint); + float getPitch(); /** - * @param external_roll_setpoint Externally commanded roll angle setpoint (usually from path navigation) [rad] * @return Roll angle setpoint [rad] */ - float getRoll(float external_roll_setpoint); - - /** - * @brief Returns the appropriate yaw angle setpoint. - * - * In heading hold mode (_heading_mode == 0), it returns initial yaw as long as it's on the runway. - * When it has enough ground clearance we start navigation towards WP. - * - * @param external_yaw_setpoint Externally commanded yaw angle setpoint [rad] - * @return Yaw angle setpoint [rad] - */ - float getYaw(float external_yaw_setpoint); + float getRoll(); /** * @brief Returns the throttle setpoint. @@ -142,10 +117,9 @@ public: * ramps from RWTO_MAX_THR to the externally defined throttle setting over the takeoff rotation time * * @param idle_throttle normalized [0,1] - * @param external_throttle_setpoint Externally commanded throttle setpoint (usually from TECS), normalized [0,1] * @return Throttle setpoint, normalized [0,1] */ - float getThrottle(const float idle_throttle, const float external_throttle_setpoint) const; + float getThrottle(const float idle_throttle) const; /** * @param min_pitch_in_climbout Minimum pitch angle during climbout [rad] @@ -160,20 +134,9 @@ public: */ float getMaxPitch(const float max_pitch) const; - /** - * @return Runway takeoff starting position in global frame (lat, lon) [deg] - */ - const matrix::Vector2d &getStartPosition() const { return start_pos_global_; }; - // NOTE: this is only to be used for mistaken mode transitions to takeoff while already in air void forceSetFlyState() { takeoff_state_ = RunwayTakeoffState::FLY; } - /** - * @return If the attitude / rate control integrators should be continually reset. - * This is the case during ground roll. - */ - bool resetIntegrators(); - /** * @brief Reset the state machine. */ @@ -212,22 +175,8 @@ private: */ hrt_abstime takeoff_time_{0}; - /** - * Initial yaw of the vehicle on first pass through the runway takeoff state machine. - * used for heading hold mode. [rad] - */ - float initial_yaw_{0.f}; - - /** - * The global (lat, lon) position of the vehicle on first pass through the runway takeoff state machine. The - * takeoff path emanates from this point to correct for any GNSS uncertainty from the planned takeoff point. The - * vehicle should accordingly be set on the center of the runway before engaging the mission. [deg] - */ - matrix::Vector2d start_pos_global_{}; - DEFINE_PARAMETERS( (ParamBool) param_rwto_tkoff_, - (ParamInt) param_rwto_hdg_, (ParamFloat) param_rwto_max_thr_, (ParamFloat) param_rwto_psp_, (ParamFloat) param_rwto_ramp_time_, diff --git a/src/modules/fw_pos_control/runway_takeoff/runway_takeoff_params.c b/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.c similarity index 85% rename from src/modules/fw_pos_control/runway_takeoff/runway_takeoff_params.c rename to src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.c index 766cd8f54e..68afdeffa1 100644 --- a/src/modules/fw_pos_control/runway_takeoff/runway_takeoff_params.c +++ b/src/modules/fw_mode_manager/runway_takeoff/runway_takeoff_params.c @@ -48,22 +48,7 @@ PARAM_DEFINE_INT32(RWTO_TKOFF, 0); /** - * Specifies which heading should be held during the runway takeoff ground roll. - * - * 0: airframe heading when takeoff is initiated - * 1: position control along runway direction (bearing defined from vehicle position on takeoff initiation to MAV_CMD_TAKEOFF - * position defined by operator) - * - * @value 0 Airframe - * @value 1 Runway - * @min 0 - * @max 1 - * @group Runway Takeoff - */ -PARAM_DEFINE_INT32(RWTO_HDG, 0); - -/** - * Max throttle during runway takeoff. + * Throttle during runway takeoff. * * @unit norm * @min 0.0 @@ -102,18 +87,6 @@ PARAM_DEFINE_FLOAT(RWTO_PSP, 0.0); */ PARAM_DEFINE_FLOAT(RWTO_RAMP_TIME, 2.0f); -/** - * NPFG period while steering on runway - * - * @unit s - * @min 1.0 - * @max 100.0 - * @decimal 1 - * @increment 0.1 - * @group Runway Takeoff - */ -PARAM_DEFINE_FLOAT(RWTO_NPFG_PERIOD, 5.0f); - /** * Enable use of yaw stick for nudging the wheel during runway ground roll * diff --git a/src/modules/fw_pos_control/Kconfig b/src/modules/fw_pos_control/Kconfig deleted file mode 100644 index d0bffb8dd8..0000000000 --- a/src/modules/fw_pos_control/Kconfig +++ /dev/null @@ -1,20 +0,0 @@ -menuconfig MODULES_FW_POS_CONTROL - bool "fw_pos_control" - default n - ---help--- - Enable support for fw_pos_control - -menuconfig USER_FW_POS_CONTROL - bool "fw_pos_control running as userspace module" - default n - depends on BOARD_PROTECTED && MODULES_FW_POS_CONTROL - ---help--- - Put fw_pos_control in userspace memory - -menuconfig FIGURE_OF_EIGHT - bool "fw_pos_control figure of eight loiter support" - default n - depends on MODULES_FW_POS_CONTROL - ---help--- - Enable support for the figure of eight loitering pattern in fixed wing. - NOTE: Enable Mavlink development support to get feedback message. diff --git a/src/modules/fw_rate_control/FixedwingRateControl.cpp b/src/modules/fw_rate_control/FixedwingRateControl.cpp index 32ac785cda..d7de4e4741 100644 --- a/src/modules/fw_rate_control/FixedwingRateControl.cpp +++ b/src/modules/fw_rate_control/FixedwingRateControl.cpp @@ -44,8 +44,8 @@ FixedwingRateControl::FixedwingRateControl(bool vtol) : ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers), _actuator_controls_status_pub(vtol ? ORB_ID(actuator_controls_status_1) : ORB_ID(actuator_controls_status_0)), - _vehicle_torque_setpoint_pub(vtol ? ORB_ID(vehicle_torque_setpoint_virtual_fw) : ORB_ID(vehicle_torque_setpoint)), _vehicle_thrust_setpoint_pub(vtol ? ORB_ID(vehicle_thrust_setpoint_virtual_fw) : ORB_ID(vehicle_thrust_setpoint)), + _vehicle_torque_setpoint_pub(vtol ? ORB_ID(vehicle_torque_setpoint_virtual_fw) : ORB_ID(vehicle_torque_setpoint)), _loop_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")) { _handle_param_vt_fw_difthr_en = param_find("VT_FW_DIFTHR_EN"); diff --git a/src/modules/fw_rate_control/FixedwingRateControl.hpp b/src/modules/fw_rate_control/FixedwingRateControl.hpp index ec3b7e1c9e..2d87e86d8a 100644 --- a/src/modules/fw_rate_control/FixedwingRateControl.hpp +++ b/src/modules/fw_rate_control/FixedwingRateControl.hpp @@ -116,8 +116,8 @@ private: uORB::Publication _actuator_controls_status_pub; uORB::Publication _rate_sp_pub{ORB_ID(vehicle_rates_setpoint)}; uORB::PublicationMulti _rate_ctrl_status_pub{ORB_ID(rate_ctrl_status)}; - uORB::Publication _vehicle_torque_setpoint_pub; uORB::Publication _vehicle_thrust_setpoint_pub; + uORB::Publication _vehicle_torque_setpoint_pub; uORB::Publication _flaps_setpoint_pub{ORB_ID(flaps_setpoint)}; uORB::Publication _spoilers_setpoint_pub{ORB_ID(spoilers_setpoint)}; diff --git a/src/modules/internal_combustion_engine_control/InternalCombustionEngineControl.cpp b/src/modules/internal_combustion_engine_control/InternalCombustionEngineControl.cpp index 1e8a1b1a35..33ab49eb32 100644 --- a/src/modules/internal_combustion_engine_control/InternalCombustionEngineControl.cpp +++ b/src/modules/internal_combustion_engine_control/InternalCombustionEngineControl.cpp @@ -217,7 +217,6 @@ void InternalCombustionEngineControl::Run() case State::Fault: { - // do nothing if (user_request == UserOnOffRequest::Off) { _state = State::Stopped; _starting_retry_cycle = 0; @@ -292,7 +291,7 @@ void InternalCombustionEngineControl::controlEngineStop() _ignition_on = false; _choke_control = _param_ice_stop_choke.get() ? 1.f : 0.f; _starter_engine_control = 0.f; - _throttle_control = 0.f; + _throttle_control = NAN; // this will set it to the DISARMED value } void InternalCombustionEngineControl::controlEngineFault() @@ -355,7 +354,7 @@ int InternalCombustionEngineControl::print_usage(const char *reason) PRINT_MODULE_DESCRIPTION( R"DESCR_STR( ### Description - + The module controls internal combustion engine (ICE) features including: ignition (on/off), throttle and choke level, starter engine delay, and user request. @@ -389,18 +388,21 @@ The ICE is implemented with a (4) state machine: ![Architecture](../../assets/hardware/ice/ice_control_state_machine.png) The state machine: - + - Checks if [Rpm.msg](../msg_docs/Rpm.md) is updated to know if the engine is running - Allows for user inputs from: - - AUX{N} + - Manual control AUX - Arming state in [VehicleStatus.msg](../msg_docs/VehicleStatus.md) +- In the state "Stopped" the throttle is set to NAN, which by definition will set the + throttle output to the disarmed value configured for the specific output. + The module publishes [InternalCombustionEngineControl.msg](../msg_docs/InternalCombustionEngineControl.md). - + The architecture is as shown below: ![Architecture](../../assets/hardware/ice/ice_control_diagram.png) - + )DESCR_STR"); diff --git a/src/modules/logger/logged_topics.cpp b/src/modules/logger/logged_topics.cpp index 544ecae871..faaf26dace 100644 --- a/src/modules/logger/logged_topics.cpp +++ b/src/modules/logger/logged_topics.cpp @@ -94,7 +94,6 @@ void LoggedTopics::add_default_topics() add_topic("mission_result"); add_topic("navigator_mission_item"); add_topic("navigator_status"); - add_topic("npfg_status", 100); add_topic("offboard_control_mode", 100); add_topic("onboard_computer_status", 10); add_topic("parameter_update"); @@ -149,6 +148,13 @@ void LoggedTopics::add_default_topics() add_topic("vehicle_status"); add_optional_topic("vtol_vehicle_status", 200); add_topic("wind", 1000); + add_topic("fixed_wing_lateral_setpoint"); + add_topic("fixed_wing_longitudinal_setpoint"); + add_topic("longitudinal_control_configuration"); + add_topic("lateral_control_configuration"); + 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); // multi topics add_optional_topic_multi("actuator_outputs", 100, 3); @@ -357,6 +363,14 @@ void LoggedTopics::add_system_identification_topics() add_topic("actuator_motors"); } +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); +} + void LoggedTopics::add_mavlink_tunnel() { add_topic("mavlink_tunnel"); @@ -572,4 +586,8 @@ void LoggedTopics::initialize_configured_topics(SDLogProfileMask profile) if (profile & SDLogProfileMask::MAVLINK_TUNNEL) { add_mavlink_tunnel(); } + + if (profile & SDLogProfileMask::HIGH_RATE_SENSORS) { + add_high_rate_sensors_topics(); + } } diff --git a/src/modules/logger/logged_topics.h b/src/modules/logger/logged_topics.h index de27574ce8..e7eb7676b6 100644 --- a/src/modules/logger/logged_topics.h +++ b/src/modules/logger/logged_topics.h @@ -54,7 +54,8 @@ enum class SDLogProfileMask : int32_t { VISION_AND_AVOIDANCE = 1 << 7, RAW_IMU_GYRO_FIFO = 1 << 8, RAW_IMU_ACCEL_FIFO = 1 << 9, - MAVLINK_TUNNEL = 1 << 10 + MAVLINK_TUNNEL = 1 << 10, + HIGH_RATE_SENSORS = 1 << 11 }; enum class MissionLogType : int32_t { @@ -175,6 +176,7 @@ private: void add_raw_imu_gyro_fifo(); void add_raw_imu_accel_fifo(); void add_mavlink_tunnel(); + void add_high_rate_sensors_topics(); /** * add a logged topic (called by add_topic() above). diff --git a/src/modules/logger/params.c b/src/modules/logger/params.c index e1bbd5145f..cb734ac1af 100644 --- a/src/modules/logger/params.c +++ b/src/modules/logger/params.c @@ -129,7 +129,7 @@ PARAM_DEFINE_INT32(SDLOG_MISSION, 0); * 10: Logging of mavlink tunnel message (useful for payload communication debugging) * * @min 0 - * @max 2047 + * @max 4095 * @bit 0 Default set (general log analysis) * @bit 1 Estimator replay (EKF2) * @bit 2 Thermal calibration @@ -141,6 +141,7 @@ PARAM_DEFINE_INT32(SDLOG_MISSION, 0); * @bit 8 Raw FIFO high-rate IMU (Gyro) * @bit 9 Raw FIFO high-rate IMU (Accel) * @bit 10 Mavlink tunnel message logging + * @bit 11 High rate sensors * @reboot_required true * @group SD Logging */ diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index 36d4453344..c24796b19d 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -1527,6 +1527,11 @@ MavlinkMissionManager::parse_mavlink_mission_item(const mavlink_mission_item_t * mission_item->nav_cmd = (NAV_CMD)mavlink_mission_item->command; break; + case MAV_CMD_COMPONENT_ARM_DISARM: + mission_item->nav_cmd = (NAV_CMD)mavlink_mission_item->command; + mission_item->params[0] = (uint16_t)mavlink_mission_item->param1; + break; + default: mission_item->nav_cmd = NAV_CMD_INVALID; PX4_DEBUG("Unsupported command %d", mavlink_mission_item->command); @@ -1616,6 +1621,7 @@ MavlinkMissionManager::parse_mavlink_mission_item(const mavlink_mission_item_t * case MAV_CMD_CONDITION_DELAY: case MAV_CMD_CONDITION_DISTANCE: case MAV_CMD_DO_SET_ACTUATOR: + case MAV_CMD_COMPONENT_ARM_DISARM: mission_item->nav_cmd = (NAV_CMD)mavlink_mission_item->command; break; diff --git a/src/modules/mc_att_control/mc_att_control_params.c b/src/modules/mc_att_control/mc_att_control_params.c index 1d7fe08bc4..a503900cff 100644 --- a/src/modules/mc_att_control/mc_att_control_params.c +++ b/src/modules/mc_att_control/mc_att_control_params.c @@ -50,7 +50,7 @@ * @increment 0.1 * @group Multicopter Attitude Control */ -PARAM_DEFINE_FLOAT(MC_ROLL_P, 6.5f); +PARAM_DEFINE_FLOAT(MC_ROLL_P, 4.0f); /** * Pitch P gain @@ -63,7 +63,7 @@ PARAM_DEFINE_FLOAT(MC_ROLL_P, 6.5f); * @increment 0.1 * @group Multicopter Attitude Control */ -PARAM_DEFINE_FLOAT(MC_PITCH_P, 6.5f); +PARAM_DEFINE_FLOAT(MC_PITCH_P, 4.0f); /** * Yaw P gain diff --git a/src/modules/mc_pos_control/PositionControl/PositionControlTest.cpp b/src/modules/mc_pos_control/PositionControl/PositionControlTest.cpp index 9c1e72b1a5..253f80960f 100644 --- a/src/modules/mc_pos_control/PositionControl/PositionControlTest.cpp +++ b/src/modules/mc_pos_control/PositionControl/PositionControlTest.cpp @@ -63,8 +63,6 @@ TEST(PositionControlTest, EmptySetpoint) EXPECT_FLOAT_EQ(attitude.yaw_sp_move_rate, 0.f); EXPECT_EQ(Quatf(attitude.q_d), Quatf(1.f, 0.f, 0.f, 0.f)); EXPECT_EQ(Vector3f(attitude.thrust_body), Vector3f(0.f, 0.f, 0.f)); - EXPECT_EQ(attitude.reset_integral, false); - EXPECT_EQ(attitude.fw_control_yaw_wheel, false); } class PositionControlBasicTest : public ::testing::Test diff --git a/src/modules/mc_pos_control/multicopter_autonomous_params.c b/src/modules/mc_pos_control/multicopter_autonomous_params.c index e2e453d975..4237c02a77 100644 --- a/src/modules/mc_pos_control/multicopter_autonomous_params.c +++ b/src/modules/mc_pos_control/multicopter_autonomous_params.c @@ -145,7 +145,7 @@ PARAM_DEFINE_FLOAT(MPC_XY_ERR_MAX, 2.f); * @increment 5 * @group Multicopter Attitude Control */ -PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_MAX, 45.f); +PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_MAX, 60.f); /** * Maximum yaw acceleration in autonomous modes @@ -160,7 +160,7 @@ PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_MAX, 45.f); * @increment 5 * @group Multicopter Attitude Control */ -PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_ACC, 60.f); +PARAM_DEFINE_FLOAT(MPC_YAWRAUTO_ACC, 20.f); /** * Heading behavior in autonomous modes diff --git a/src/modules/mc_rate_control/MulticopterRateControl.cpp b/src/modules/mc_rate_control/MulticopterRateControl.cpp index 3931125289..a7a8ed4212 100644 --- a/src/modules/mc_rate_control/MulticopterRateControl.cpp +++ b/src/modules/mc_rate_control/MulticopterRateControl.cpp @@ -46,8 +46,8 @@ using math::radians; MulticopterRateControl::MulticopterRateControl(bool vtol) : ModuleParams(nullptr), WorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl), - _vehicle_torque_setpoint_pub(vtol ? ORB_ID(vehicle_torque_setpoint_virtual_mc) : ORB_ID(vehicle_torque_setpoint)), _vehicle_thrust_setpoint_pub(vtol ? ORB_ID(vehicle_thrust_setpoint_virtual_mc) : ORB_ID(vehicle_thrust_setpoint)), + _vehicle_torque_setpoint_pub(vtol ? ORB_ID(vehicle_torque_setpoint_virtual_mc) : ORB_ID(vehicle_torque_setpoint)), _loop_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")) { _vehicle_status.vehicle_type = vehicle_status_s::VEHICLE_TYPE_ROTARY_WING; diff --git a/src/modules/mc_rate_control/MulticopterRateControl.hpp b/src/modules/mc_rate_control/MulticopterRateControl.hpp index 1a2427da18..76e488305a 100644 --- a/src/modules/mc_rate_control/MulticopterRateControl.hpp +++ b/src/modules/mc_rate_control/MulticopterRateControl.hpp @@ -107,8 +107,8 @@ private: uORB::Publication _actuator_controls_status_pub{ORB_ID(actuator_controls_status_0)}; uORB::PublicationMulti _controller_status_pub{ORB_ID(rate_ctrl_status)}; uORB::Publication _vehicle_rates_setpoint_pub{ORB_ID(vehicle_rates_setpoint)}; - uORB::Publication _vehicle_torque_setpoint_pub; uORB::Publication _vehicle_thrust_setpoint_pub; + uORB::Publication _vehicle_torque_setpoint_pub; vehicle_control_mode_s _vehicle_control_mode{}; vehicle_status_s _vehicle_status{}; diff --git a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp index c35d2c1bde..713eb151b7 100644 --- a/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp +++ b/src/modules/navigator/MissionFeasibility/FeasibilityChecker.cpp @@ -263,6 +263,7 @@ bool FeasibilityChecker::checkMissionItemValidity(mission_item_s &mission_item, mission_item.nav_cmd != NAV_CMD_DO_LAND_START && mission_item.nav_cmd != NAV_CMD_DO_TRIGGER_CONTROL && mission_item.nav_cmd != NAV_CMD_DO_DIGICAM_CONTROL && + mission_item.nav_cmd != NAV_CMD_COMPONENT_ARM_DISARM && mission_item.nav_cmd != NAV_CMD_IMAGE_START_CAPTURE && mission_item.nav_cmd != NAV_CMD_IMAGE_STOP_CAPTURE && mission_item.nav_cmd != NAV_CMD_VIDEO_START_CAPTURE && diff --git a/src/modules/navigator/mission_block.cpp b/src/modules/navigator/mission_block.cpp index 3f2c621baa..3f8bfd3a52 100644 --- a/src/modules/navigator/mission_block.cpp +++ b/src/modules/navigator/mission_block.cpp @@ -82,6 +82,7 @@ MissionBlock::is_mission_item_reached_or_completed() case NAV_CMD_DO_MOUNT_CONFIGURE: case NAV_CMD_DO_MOUNT_CONTROL: case NAV_CMD_DO_GIMBAL_MANAGER_CONFIGURE: + case NAV_CMD_COMPONENT_ARM_DISARM: case NAV_CMD_DO_SET_ROI: case NAV_CMD_DO_SET_ROI_LOCATION: case NAV_CMD_DO_SET_ROI_WPNEXT_OFFSET: @@ -95,6 +96,7 @@ MissionBlock::is_mission_item_reached_or_completed() case NAV_CMD_SET_CAMERA_FOCUS: case NAV_CMD_DO_CHANGE_SPEED: case NAV_CMD_DO_SET_HOME: + return true; // Indefinite Waypoints diff --git a/src/modules/navigator/navigation.h b/src/modules/navigator/navigation.h index 2d31866581..1c32f3042e 100644 --- a/src/modules/navigator/navigation.h +++ b/src/modules/navigator/navigation.h @@ -76,6 +76,7 @@ enum NAV_CMD { NAV_CMD_DO_SET_CAM_TRIGG_INTERVAL = 214, NAV_CMD_DO_SET_CAM_TRIGG_DIST = 206, NAV_CMD_OBLIQUE_SURVEY = 260, + NAV_CMD_COMPONENT_ARM_DISARM = 400, NAV_CMD_SET_CAMERA_MODE = 530, NAV_CMD_SET_CAMERA_SOURCE = 534, NAV_CMD_SET_CAMERA_ZOOM = 531, diff --git a/src/modules/navigator/rtl_mission_fast_reverse.cpp b/src/modules/navigator/rtl_mission_fast_reverse.cpp index c27cd38b56..6abf4cf10f 100644 --- a/src/modules/navigator/rtl_mission_fast_reverse.cpp +++ b/src/modules/navigator/rtl_mission_fast_reverse.cpp @@ -251,6 +251,11 @@ void RtlMissionFastReverse::handleLanding(WorkItemType &new_work_item_type) _mission_item.lon = _home_pos_sub.get().lon; _mission_item.yaw = NAN; + // make previous and next setpoints invalid, such that there will be no line following. + // If the vehicle drifted off the path during back-transition it should just go straight to the landing point. + _navigator->reset_position_setpoint(pos_sp_triplet->previous); + _navigator->reset_position_setpoint(pos_sp_triplet->next); + if ((_vehicle_status_sub.get().vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) && do_need_move_to_item()) { new_work_item_type = WorkItemType::WORK_ITEM_TYPE_MOVE_TO_LAND; @@ -261,15 +266,9 @@ void RtlMissionFastReverse::handleLanding(WorkItemType &new_work_item_type) _mission_item.autocontinue = true; _mission_item.time_inside = 0.0f; - // make previous setpoint invalid, such that there will be no prev-current line following. - // if the vehicle drifted off the path during back-transition it should just go straight to the landing point - _navigator->reset_position_setpoint(pos_sp_triplet->previous); - } else { _mission_item.altitude = _home_pos_sub.get().alt; _mission_item.altitude_is_relative = false; - _navigator->reset_position_setpoint(pos_sp_triplet->previous); - _navigator->reset_position_setpoint(pos_sp_triplet->next); _mission_item.land_precision = _param_rtl_pld_md.get(); diff --git a/src/modules/rover_ackermann/AckermannActControl/AckermannActControl.cpp b/src/modules/rover_ackermann/AckermannActControl/AckermannActControl.cpp new file mode 100644 index 0000000000..b448d09396 --- /dev/null +++ b/src/modules/rover_ackermann/AckermannActControl/AckermannActControl.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "AckermannActControl.hpp" + +using namespace time_literals; + +AckermannActControl::AckermannActControl(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); +} + +void AckermannActControl::updateParams() +{ + ModuleParams::updateParams(); + + if (_param_ra_str_rate_limit.get() > FLT_EPSILON && _param_ra_max_str_ang.get() > FLT_EPSILON) { + _servo_setpoint.setSlewRate((M_DEG_TO_RAD_F * _param_ra_str_rate_limit.get()) / _param_ra_max_str_ang.get()); + } + + if (_param_ro_accel_limit.get() > FLT_EPSILON && _param_ro_max_thr_speed.get() > FLT_EPSILON) { + _motor_setpoint.setSlewRate(_param_ro_accel_limit.get() / _param_ro_max_thr_speed.get()); + } +} + +void AckermannActControl::updateActControl() +{ + const hrt_abstime timestamp_prev = _timestamp; + _timestamp = hrt_absolute_time(); + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; + + // Motor control + if (_rover_throttle_setpoint_sub.updated()) { + rover_throttle_setpoint_s rover_throttle_setpoint{}; + _rover_throttle_setpoint_sub.copy(&rover_throttle_setpoint); + _throttle_setpoint = rover_throttle_setpoint.throttle_body_x; + } + + if (PX4_ISFINITE(_throttle_setpoint)) { + actuator_motors_s actuator_motors_sub{}; + _actuator_motors_sub.copy(&actuator_motors_sub); + actuator_motors_s actuator_motors{}; + actuator_motors.reversible_flags = _param_r_rev.get(); + actuator_motors.control[0] = RoverControl::throttleControl(_motor_setpoint, + _throttle_setpoint, actuator_motors_sub.control[0], _param_ro_accel_limit.get(), + _param_ro_decel_limit.get(), _param_ro_max_thr_speed.get(), dt); + actuator_motors.timestamp = _timestamp; + _actuator_motors_pub.publish(actuator_motors); + + } + + // Servo control + if (_rover_steering_setpoint_sub.updated()) { + rover_steering_setpoint_s rover_steering_setpoint{}; + _rover_steering_setpoint_sub.copy(&rover_steering_setpoint); + _steering_setpoint = rover_steering_setpoint.normalized_steering_angle; + } + + if (PX4_ISFINITE(_steering_setpoint)) { + actuator_servos_s actuator_servos_sub{}; + _actuator_servos_sub.copy(&actuator_servos_sub); + + if (_param_ra_str_rate_limit.get() > FLT_EPSILON + && _param_ra_max_str_ang.get() > FLT_EPSILON) { // Apply slew rate if configured + if (fabsf(_servo_setpoint.getState() - actuator_servos_sub.control[0]) > fabsf( + _steering_setpoint - + actuator_servos_sub.control[0])) { + _servo_setpoint.setForcedValue(actuator_servos_sub.control[0]); + } + + _servo_setpoint.update(_steering_setpoint, dt); + + } else { + _servo_setpoint.setForcedValue(_steering_setpoint); + } + + actuator_servos_s actuator_servos{}; + actuator_servos.control[0] = _servo_setpoint.getState(); + actuator_servos.timestamp = _timestamp; + _actuator_servos_pub.publish(actuator_servos); + } +} + +void AckermannActControl::stopVehicle() +{ + actuator_motors_s actuator_motors{}; + actuator_motors.reversible_flags = _param_r_rev.get(); + actuator_motors.control[0] = 0.f; + actuator_motors.timestamp = _timestamp; + _actuator_motors_pub.publish(actuator_motors); + actuator_servos_s actuator_servos{}; + actuator_servos.control[0] = 0.f; + actuator_servos.timestamp = _timestamp; + _actuator_servos_pub.publish(actuator_servos); +} diff --git a/src/modules/rover_ackermann/AckermannActControl/AckermannActControl.hpp b/src/modules/rover_ackermann/AckermannActControl/AckermannActControl.hpp new file mode 100644 index 0000000000..fb3630c13c --- /dev/null +++ b/src/modules/rover_ackermann/AckermannActControl/AckermannActControl.hpp @@ -0,0 +1,111 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include + +/** + * @brief Class for ackermann actuator control. + */ +class AckermannActControl : public ModuleParams +{ +public: + /** + * @brief Constructor for AckermannActControl. + * @param parent The parent ModuleParams object. + */ + AckermannActControl(ModuleParams *parent); + ~AckermannActControl() = default; + + /** + * @brief Generate and publish actuatorMotors/actuatorServos setpoints from roverThrottleSetpoint/roverSteeringSetpoint. + */ + void updateActControl(); + + /** + * @brief Stop the vehicle by sending 0 commands to motors and servos. + */ + void stopVehicle(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + + // uORB subscriptions + uORB::Subscription _actuator_servos_sub{ORB_ID(actuator_servos)}; + uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; + uORB::Subscription _rover_steering_setpoint_sub{ORB_ID(rover_steering_setpoint)}; + uORB::Subscription _rover_throttle_setpoint_sub{ORB_ID(rover_throttle_setpoint)}; + + // uORB publications + uORB::Publication _actuator_motors_pub{ORB_ID(actuator_motors)}; + uORB::Publication _actuator_servos_pub{ORB_ID(actuator_servos)}; + + // Variables + hrt_abstime _timestamp{0}; + float _throttle_setpoint{NAN}; + float _steering_setpoint{NAN}; + + // Controllers + SlewRate _servo_setpoint{0.f}; + SlewRate _motor_setpoint{0.f}; + + // Parameters + DEFINE_PARAMETERS( + (ParamInt) _param_r_rev, + (ParamFloat) _param_ra_str_rate_limit, + (ParamFloat) _param_ra_max_str_ang, + (ParamFloat) _param_ro_accel_limit, + (ParamFloat) _param_ro_decel_limit, + (ParamFloat) _param_ro_max_thr_speed + ) +}; diff --git a/src/modules/rover_ackermann/AckermannActControl/CMakeLists.txt b/src/modules/rover_ackermann/AckermannActControl/CMakeLists.txt new file mode 100644 index 0000000000..59c168320c --- /dev/null +++ b/src/modules/rover_ackermann/AckermannActControl/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(AckermannActControl + AckermannActControl.cpp +) + +target_include_directories(AckermannActControl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.cpp b/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.cpp index 9c07a3ab3b..55f4e733c3 100644 --- a/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.cpp +++ b/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.cpp @@ -38,8 +38,6 @@ using namespace time_literals; AckermannAttControl::AckermannAttControl(ModuleParams *parent) : ModuleParams(parent) { _rover_rate_setpoint_pub.advertise(); - _rover_throttle_setpoint_pub.advertise(); - _rover_attitude_setpoint_pub.advertise(); _rover_attitude_status_pub.advertise(); updateParams(); } @@ -52,47 +50,37 @@ void AckermannAttControl::updateParams() _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; } + // Set up PID controller _pid_yaw.setGains(_param_ro_yaw_p.get(), 0.f, 0.f); _pid_yaw.setIntegralLimit(0.f); _pid_yaw.setOutputLimit(_max_yaw_rate); + + // Set up slew rate _adjusted_yaw_setpoint.setSlewRate(_max_yaw_rate); } void AckermannAttControl::updateAttControl() { + updateSubscriptions(); + hrt_abstime timestamp_prev = _timestamp; _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } + if (PX4_ISFINITE(_yaw_setpoint)) { + // Calculate yaw rate limit for slew rate + float max_possible_yaw_rate = fabsf(_estimated_speed_body_x) * tanf(_param_ra_max_str_ang.get()) / + _param_ra_wheel_base.get(); // Maximum possible yaw rate at current velocity + float yaw_slew_rate = math::min(max_possible_yaw_rate, _max_yaw_rate); - if (_vehicle_attitude_sub.updated()) { - vehicle_attitude_s vehicle_attitude{}; - _vehicle_attitude_sub.copy(&vehicle_attitude); - matrix::Quatf vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); - _vehicle_yaw = matrix::Eulerf(vehicle_attitude_quaternion).psi(); - } + float yaw_rate_setpoint = RoverControl::attitudeControl(_adjusted_yaw_setpoint, _pid_yaw, yaw_slew_rate, + _vehicle_yaw, _yaw_setpoint, dt); - if (_vehicle_control_mode.flag_control_attitude_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) { - // Estimate forward speed based on throttle - if (_actuator_motors_sub.updated()) { - actuator_motors_s actuator_motors; - _actuator_motors_sub.copy(&actuator_motors); - _estimated_speed_body_x = math::interpolate (actuator_motors.control[0], -1.f, 1.f, - -_param_ro_max_thr_speed.get(), _param_ro_max_thr_speed.get()); - } + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = _timestamp; + rover_rate_setpoint.yaw_rate_setpoint = math::constrain(yaw_rate_setpoint, -_max_yaw_rate, _max_yaw_rate); + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); - if (_vehicle_control_mode.flag_control_manual_enabled) { - generateAttitudeAndThrottleSetpoint(); - } - - generateRateSetpoint(); - - } else { // Reset pid and slew rate when attitude control is not active - _pid_yaw.resetIntegral(); - _adjusted_yaw_setpoint.setForcedValue(0.f); } // Publish attitude controller status (logging only) @@ -104,82 +92,28 @@ void AckermannAttControl::updateAttControl() } -void AckermannAttControl::generateAttitudeAndThrottleSetpoint() +void AckermannAttControl::updateSubscriptions() { - const bool stab_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled - && !_vehicle_control_mode.flag_control_position_enabled && _vehicle_control_mode.flag_control_attitude_enabled; - - if (stab_mode_enabled && _manual_control_setpoint_sub.updated()) { // Stab Mode - manual_control_setpoint_s manual_control_setpoint{}; - - if (_manual_control_setpoint_sub.update(&manual_control_setpoint)) { - - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - - const float yaw_delta = math::interpolate(math::deadzone(manual_control_setpoint.roll, - _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate / _param_ro_yaw_p.get(), - _max_yaw_rate / _param_ro_yaw_p.get()); - - if (fabsf(yaw_delta) > FLT_EPSILON - || fabsf(rover_throttle_setpoint.throttle_body_x) < FLT_EPSILON) { // Closed loop yaw rate control - _stab_yaw_ctl = false; - const float yaw_setpoint = matrix::wrap_pi(_vehicle_yaw + matrix::sign(manual_control_setpoint.throttle) * yaw_delta); - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = yaw_setpoint; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - - } else { // Closed loop yaw control if the yaw rate input is zero (keep current yaw) - if (!_stab_yaw_ctl) { - _stab_yaw_setpoint = _vehicle_yaw; - _stab_yaw_ctl = true; - } - - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = _stab_yaw_setpoint; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - } - - - } - + if (_vehicle_attitude_sub.updated()) { + vehicle_attitude_s vehicle_attitude{}; + _vehicle_attitude_sub.copy(&vehicle_attitude); + matrix::Quatf vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(vehicle_attitude_quaternion).psi(); + } + + // Estimate forward speed based on throttle + if (_actuator_motors_sub.updated()) { + actuator_motors_s actuator_motors; + _actuator_motors_sub.copy(&actuator_motors); + _estimated_speed_body_x = math::interpolate (actuator_motors.control[0], -1.f, 1.f, + -_param_ro_max_thr_speed.get(), _param_ro_max_thr_speed.get()); } -} -void AckermannAttControl::generateRateSetpoint() -{ if (_rover_attitude_setpoint_sub.updated()) { - _rover_attitude_setpoint_sub.copy(&_rover_attitude_setpoint); + rover_attitude_setpoint_s rover_attitude_setpoint{}; + _rover_attitude_setpoint_sub.copy(&rover_attitude_setpoint); + _yaw_setpoint = rover_attitude_setpoint.yaw_setpoint; } - - if (_rover_rate_setpoint_sub.updated()) { - _rover_rate_setpoint_sub.copy(&_rover_rate_setpoint); - } - - // Check if a new rate setpoint was already published from somewhere else - if (_rover_rate_setpoint.timestamp > _last_rate_setpoint_update - && _rover_rate_setpoint.timestamp > _rover_attitude_setpoint.timestamp) { - return; - } - - // Calculate yaw rate limit for slew rate - float max_possible_yaw_rate = fabsf(_estimated_speed_body_x) * tanf(_param_ra_max_str_ang.get()) / - _param_ra_wheel_base.get(); // Maximum possible yaw rate at current velocity - float yaw_slew_rate = math::min(max_possible_yaw_rate, _max_yaw_rate); - - float yaw_rate_setpoint = RoverControl::attitudeControl(_adjusted_yaw_setpoint, _pid_yaw, yaw_slew_rate, - _vehicle_yaw, _rover_attitude_setpoint.yaw_setpoint, _dt); - - _last_rate_setpoint_update = _timestamp; - rover_rate_setpoint_s rover_rate_setpoint{}; - rover_rate_setpoint.timestamp = _timestamp; - rover_rate_setpoint.yaw_rate_setpoint = math::constrain(yaw_rate_setpoint, -_max_yaw_rate, _max_yaw_rate); - _rover_rate_setpoint_pub.publish(rover_rate_setpoint); } bool AckermannAttControl::runSanityChecks() diff --git a/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.hpp b/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.hpp index 93d17928be..2d58bae4ce 100644 --- a/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.hpp +++ b/src/modules/rover_ackermann/AckermannAttControl/AckermannAttControl.hpp @@ -47,9 +47,6 @@ #include #include #include -#include -#include -#include #include #include #include @@ -69,10 +66,21 @@ public: ~AckermannAttControl() = default; /** - * @brief Update attitude controller. + * @brief Generate and publish roverRateSetpoint from roverAttitudeSetpoint. */ void updateAttControl(); + /** + * @brief Reset attitude controller. + */ + void reset() {_pid_yaw.resetIntegral(); _yaw_setpoint = NAN;}; + + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + protected: /** * @brief Update the parameters of the module. @@ -81,48 +89,26 @@ protected: private: /** - * @brief Generate and publish roverAttitudeSetpoint and roverThrottleSetpoint from manualControlSetpoint (Stab Mode). + * @brief Update uORB subscriptions used in attitude controller. */ - void generateAttitudeAndThrottleSetpoint(); - - /** - * @brief Generate and publish roverRateSetpoint from roverAttitudeSetpoint. - */ - void generateRateSetpoint(); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); + void updateSubscriptions(); // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; uORB::Subscription _rover_attitude_setpoint_sub{ORB_ID(rover_attitude_setpoint)}; - uORB::Subscription _rover_rate_setpoint_sub{ORB_ID(rover_rate_setpoint)}; - vehicle_control_mode_s _vehicle_control_mode{}; - rover_attitude_setpoint_s _rover_attitude_setpoint{}; - rover_rate_setpoint_s _rover_rate_setpoint{}; // uORB publications - uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; - uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; - uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; - uORB::Publication _rover_attitude_status_pub{ORB_ID(rover_attitude_status)}; + uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; + uORB::Publication _rover_attitude_status_pub{ORB_ID(rover_attitude_status)}; // Variables float _vehicle_yaw{0.f}; hrt_abstime _timestamp{0}; - hrt_abstime _last_rate_setpoint_update{0}; - float _dt{0.f}; float _max_yaw_rate{0.f}; float _estimated_speed_body_x{0.f}; /*Vehicle speed estimated by interpolating [actuatorMotorSetpoint, _estimated_speed_body_x] between [0, 0] and [1, _param_ro_max_thr_speed].*/ - float _stab_yaw_setpoint{0.f}; // Yaw setpoint if rover is doing yaw control in stab mode - bool _stab_yaw_ctl{false}; // Indicates if rover is doing yaw control in stab mode + float _yaw_setpoint{NAN}; // Controllers PID _pid_yaw; diff --git a/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.cpp b/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.cpp index 077760b8c4..026406c57d 100644 --- a/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.cpp +++ b/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.cpp @@ -38,13 +38,8 @@ using namespace time_literals; AckermannPosControl::AckermannPosControl(ModuleParams *parent) : ModuleParams(parent) { _pure_pursuit_status_pub.advertise(); - _rover_position_setpoint_pub.advertise(); _rover_velocity_setpoint_pub.advertise(); - // Initially set to NaN to indicate that the rover has no position setpoint - _rover_position_setpoint.position_ned[0] = NAN; - _rover_position_setpoint.position_ned[1] = NAN; - updateParams(); } @@ -53,35 +48,62 @@ void AckermannPosControl::updateParams() ModuleParams::updateParams(); _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; - if (_param_ra_wheel_base.get() > FLT_EPSILON && _max_yaw_rate > FLT_EPSILON - && _param_ra_max_str_ang.get() > FLT_EPSILON) { - _min_speed = _param_ra_wheel_base.get() * _max_yaw_rate / tanf(_param_ra_max_str_ang.get()); - } } void AckermannPosControl::updatePosControl() { - const hrt_abstime timestamp_prev = _timestamp; - _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - updateSubscriptions(); - if (_vehicle_control_mode.flag_control_position_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) { - if (_vehicle_control_mode.flag_control_offboard_enabled) { - generatePositionSetpoint(); + hrt_abstime timestamp = hrt_absolute_time(); + + const Vector2f target_waypoint_ned(_rover_position_setpoint.position_ned[0], _rover_position_setpoint.position_ned[1]); + + if (target_waypoint_ned.isAllFinite()) { + float distance_to_target = (target_waypoint_ned - _curr_pos_ned).norm(); + + if (distance_to_target > _acceptance_radius) { + float arrival_speed = PX4_ISFINITE(_rover_position_setpoint.arrival_speed) ? _rover_position_setpoint.arrival_speed : + 0.f; + const float distance = arrival_speed > 0.f + FLT_EPSILON ? distance_to_target - _acceptance_radius : distance_to_target; + float speed_setpoint = math::trajectory::computeMaxSpeedFromDistance(_param_ro_jerk_limit.get(), + _param_ro_decel_limit.get(), distance, fabsf(arrival_speed)); + speed_setpoint = math::min(speed_setpoint, _param_ro_speed_limit.get()); + + if (PX4_ISFINITE(_rover_position_setpoint.cruising_speed)) { + speed_setpoint = sign(_rover_position_setpoint.cruising_speed) * math::min(speed_setpoint, + fabsf(_rover_position_setpoint.cruising_speed)); + } + + pure_pursuit_status_s pure_pursuit_status{}; + pure_pursuit_status.timestamp = timestamp; + + const float bearing_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), + _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), target_waypoint_ned, _start_ned, + _curr_pos_ned, fabsf(speed_setpoint)); + _pure_pursuit_status_pub.publish(pure_pursuit_status); + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = timestamp; + rover_velocity_setpoint.speed = speed_setpoint; + rover_velocity_setpoint.bearing = speed_setpoint > -FLT_EPSILON ? bearing_setpoint : matrix::wrap_pi( + bearing_setpoint + M_PI_F); + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); + + } else { + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = timestamp; + rover_velocity_setpoint.speed = 0.f; + rover_velocity_setpoint.bearing = _vehicle_yaw; + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); } - - generateVelocitySetpoint(); - } - } void AckermannPosControl::updateSubscriptions() { - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); + if (_position_controller_status_sub.updated()) { + position_controller_status_s position_controller_status{}; + _position_controller_status_sub.copy(&position_controller_status); + _acceptance_radius = position_controller_status.acceptance_radius; } if (_vehicle_attitude_sub.updated()) { @@ -104,311 +126,21 @@ void AckermannPosControl::updateSubscriptions() _curr_pos_ned = Vector2f(vehicle_local_position.x, vehicle_local_position.y); } -} - -void AckermannPosControl::generatePositionSetpoint() -{ - if (_offboard_control_mode_sub.updated()) { - _offboard_control_mode_sub.copy(&_offboard_control_mode); + if (_rover_position_setpoint_sub.updated()) { + _rover_position_setpoint_sub.copy(&_rover_position_setpoint); + _start_ned = Vector2f(_rover_position_setpoint.start_ned[0], _rover_position_setpoint.start_ned[1]); + _start_ned = _start_ned.isAllFinite() ? _start_ned : _curr_pos_ned; } - if (!_offboard_control_mode.position) { - return; - } - - trajectory_setpoint_s trajectory_setpoint{}; - _trajectory_setpoint_sub.copy(&trajectory_setpoint); - - // Translate trajectory setpoint to rover position setpoint - rover_position_setpoint_s rover_position_setpoint{}; - rover_position_setpoint.timestamp = _timestamp; - rover_position_setpoint.position_ned[0] = trajectory_setpoint.position[0]; - rover_position_setpoint.position_ned[1] = trajectory_setpoint.position[1]; - rover_position_setpoint.cruising_speed = _param_ro_speed_limit.get(); - rover_position_setpoint.yaw = NAN; - _rover_position_setpoint_pub.publish(rover_position_setpoint); - -} - -void AckermannPosControl::generateVelocitySetpoint() -{ - // Manual Position Mode - if (_vehicle_control_mode.flag_control_manual_enabled && _vehicle_control_mode.flag_control_position_enabled) { - manualPositionMode(); - return; - } - - // Auto Mode - if (_vehicle_control_mode.flag_control_auto_enabled) { - autoPositionMode(); - return; - } - - // Rover Position Setpoint - if (_rover_position_setpoint_sub.copy(&_rover_position_setpoint) - && PX4_ISFINITE(_rover_position_setpoint.position_ned[0]) && PX4_ISFINITE(_rover_position_setpoint.position_ned[1])) { - goToPositionMode(); - return; - } - -} - -void AckermannPosControl::manualPositionMode() -{ - manual_control_setpoint_s manual_control_setpoint{}; - _manual_control_setpoint_sub.copy(&manual_control_setpoint); - - const float speed_setpoint = math::interpolate(manual_control_setpoint.throttle, - -1.f, 1.f, -_param_ro_speed_limit.get(), _param_ro_speed_limit.get()); - const float yaw_delta = math::interpolate(math::deadzone(manual_control_setpoint.roll, - _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate / _param_ro_yaw_p.get(), - _max_yaw_rate / _param_ro_yaw_p.get()); - - if (fabsf(yaw_delta) > FLT_EPSILON - || fabsf(speed_setpoint) < FLT_EPSILON) { // Closed loop yaw rate control - _course_control = false; - const float yaw_setpoint = matrix::wrap_pi(_vehicle_yaw + sign(speed_setpoint) * yaw_delta); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = yaw_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else { // Course control if the steering input is zero (keep driving on a straight line) - if (!_course_control) { - _pos_ctl_course_direction = Vector2f(cos(_vehicle_yaw), sin(_vehicle_yaw)); - _pos_ctl_start_position_ned = _curr_pos_ned; - _course_control = true; - } - - // Construct a 'target waypoint' for course control s.t. it is never within the maximum lookahead of the rover - const Vector2f start_to_curr_pos = _curr_pos_ned - _pos_ctl_start_position_ned; - const float vector_scaling = fabsf(start_to_curr_pos * _pos_ctl_course_direction) + _param_pp_lookahd_max.get(); - const Vector2f target_waypoint_ned = _pos_ctl_start_position_ned + sign(speed_setpoint) * - vector_scaling * _pos_ctl_course_direction; - pure_pursuit_status_s pure_pursuit_status{}; - pure_pursuit_status.timestamp = _timestamp; - const float bearing_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), - _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), target_waypoint_ned, _pos_ctl_start_position_ned, - _curr_pos_ned, fabsf(speed_setpoint)); - _pure_pursuit_status_pub.publish(pure_pursuit_status); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = speed_setpoint > -FLT_EPSILON ? bearing_setpoint : matrix::wrap_pi( - bearing_setpoint + M_PI_F); - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } -} - -void AckermannPosControl::autoPositionMode() -{ - if (_position_setpoint_triplet_sub.updated()) { - updateWaypointsAndAcceptanceRadius(); - } - - // Distances to waypoints - const float distance_to_prev_wp = sqrt(powf(_curr_pos_ned(0) - _prev_wp_ned(0), - 2) + powf(_curr_pos_ned(1) - _prev_wp_ned(1), 2)); - const float distance_to_curr_wp = sqrt(powf(_curr_pos_ned(0) - _curr_wp_ned(0), - 2) + powf(_curr_pos_ned(1) - _curr_wp_ned(1), 2)); - - // Check stopping conditions - bool auto_stop{false}; - - if (_curr_wp_type == position_setpoint_s::SETPOINT_TYPE_LAND - || _curr_wp_type == position_setpoint_s::SETPOINT_TYPE_IDLE - || !_next_wp_ned.isAllFinite()) { - auto_stop = distance_to_curr_wp < _param_nav_acc_rad.get(); - } - - if (auto_stop) { - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = 0.f; - rover_velocity_setpoint.bearing = _vehicle_yaw; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else { // Regular guidance algorithm - const float speed_setpoint = calcSpeedSetpoint(_cruising_speed, _min_speed, distance_to_prev_wp, - distance_to_curr_wp, _acceptance_radius, _prev_acceptance_radius, _param_ro_decel_limit.get(), - _param_ro_jerk_limit.get(), _curr_wp_type, _waypoint_transition_angle, _prev_waypoint_transition_angle, - _param_ro_speed_limit.get()); - pure_pursuit_status_s pure_pursuit_status{}; - pure_pursuit_status.timestamp = _timestamp; - const float yaw_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), - _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), _curr_wp_ned, _prev_wp_ned, _curr_pos_ned, - fabsf(speed_setpoint)); - _pure_pursuit_status_pub.publish(pure_pursuit_status); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = yaw_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } -} - -void AckermannPosControl::updateWaypointsAndAcceptanceRadius() -{ - position_setpoint_triplet_s position_setpoint_triplet{}; - _position_setpoint_triplet_sub.copy(&position_setpoint_triplet); - _curr_wp_type = position_setpoint_triplet.current.type; - - RoverControl::globalToLocalSetpointTriplet(_curr_wp_ned, _prev_wp_ned, _next_wp_ned, position_setpoint_triplet, - _curr_pos_ned, _global_ned_proj_ref); - - _prev_waypoint_transition_angle = _waypoint_transition_angle; - _waypoint_transition_angle = RoverControl::calcWaypointTransitionAngle(_prev_wp_ned, _curr_wp_ned, _next_wp_ned); - - // Update acceptance radius - _prev_acceptance_radius = _acceptance_radius; - - if (_param_ra_acc_rad_max.get() >= _param_nav_acc_rad.get()) { - _acceptance_radius = updateAcceptanceRadius(_waypoint_transition_angle, _param_nav_acc_rad.get(), - _param_ra_acc_rad_gain.get(), _param_ra_acc_rad_max.get(), _param_ra_wheel_base.get(), _param_ra_max_str_ang.get()); - - } else { - _acceptance_radius = _param_nav_acc_rad.get(); - } - - // Waypoint cruising speed - _cruising_speed = position_setpoint_triplet.current.cruising_speed > 0.f ? math::constrain( - position_setpoint_triplet.current.cruising_speed, 0.f, _param_ro_speed_limit.get()) : _param_ro_speed_limit.get(); -} - -float AckermannPosControl::updateAcceptanceRadius(const float waypoint_transition_angle, - const float default_acceptance_radius, const float acceptance_radius_gain, - const float acceptance_radius_max, const float wheel_base, const float max_steer_angle) -{ - // Calculate acceptance radius s.t. the rover cuts the corner tangential to the current and next line segment - float acceptance_radius = default_acceptance_radius; - - if (PX4_ISFINITE(_waypoint_transition_angle)) { - const float theta = waypoint_transition_angle / 2.f; - const float min_turning_radius = wheel_base / sinf(max_steer_angle); - const float acceptance_radius_temp = min_turning_radius / tanf(theta); - const float acceptance_radius_temp_scaled = acceptance_radius_gain * - acceptance_radius_temp; // Scale geometric ideal acceptance radius to account for kinematic and dynamic effects - acceptance_radius = math::constrain(acceptance_radius_temp_scaled, default_acceptance_radius, - acceptance_radius_max); - } - - // Publish updated acceptance radius - position_controller_status_s pos_ctrl_status{}; - pos_ctrl_status.acceptance_radius = acceptance_radius; - pos_ctrl_status.timestamp = _timestamp; - _position_controller_status_pub.publish(pos_ctrl_status); - return acceptance_radius; -} - -float AckermannPosControl::calcSpeedSetpoint(const float cruising_speed, const float miss_speed_min, - const float distance_to_prev_wp, const float distance_to_curr_wp, const float acc_rad, - const float prev_acc_rad, const float max_decel, const float max_jerk, const int curr_wp_type, - const float waypoint_transition_angle, const float prev_waypoint_transition_angle, const float max_speed) -{ - // Catch improper values - if (miss_speed_min < -FLT_EPSILON || miss_speed_min > cruising_speed) { - return cruising_speed; - } - - // Upcoming stop - if (max_decel > FLT_EPSILON && max_jerk > FLT_EPSILON && (!PX4_ISFINITE(waypoint_transition_angle) - || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_LAND - || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_IDLE)) { - const float straight_line_speed = math::trajectory::computeMaxSpeedFromDistance(max_jerk, - max_decel, distance_to_curr_wp, 0.f); - return math::min(straight_line_speed, cruising_speed); - } - - // Cornering slow down effect - if (distance_to_prev_wp <= prev_acc_rad && prev_acc_rad > FLT_EPSILON && PX4_ISFINITE(prev_waypoint_transition_angle)) { - const float turning_circle = prev_acc_rad * tanf(prev_waypoint_transition_angle / 2.f); - const float cornering_speed = _max_yaw_rate * turning_circle; - return math::constrain(cornering_speed, miss_speed_min, cruising_speed); - - } - - if (distance_to_curr_wp <= acc_rad && acc_rad > FLT_EPSILON && PX4_ISFINITE(waypoint_transition_angle)) { - const float turning_circle = acc_rad * tanf(waypoint_transition_angle / 2.f); - const float cornering_speed = _max_yaw_rate * turning_circle; - return math::constrain(cornering_speed, miss_speed_min, cruising_speed); - - } - - // Straight line speed - if (max_decel > FLT_EPSILON && max_jerk > FLT_EPSILON && acc_rad > FLT_EPSILON) { - const float turning_circle = acc_rad * tanf(waypoint_transition_angle / 2.f); - float cornering_speed = _max_yaw_rate * turning_circle; - cornering_speed = math::constrain(cornering_speed, miss_speed_min, cruising_speed); - const float straight_line_speed = math::trajectory::computeMaxSpeedFromDistance(max_jerk, - max_decel, distance_to_curr_wp - acc_rad, cornering_speed); - return math::min(straight_line_speed, cruising_speed); - - } - - return cruising_speed; // Fallthrough - -} - -void AckermannPosControl::goToPositionMode() -{ - const Vector2f target_waypoint_ned(_rover_position_setpoint.position_ned[0], _rover_position_setpoint.position_ned[1]); - const float distance_to_target = (target_waypoint_ned - _curr_pos_ned).norm(); - - if (distance_to_target > _param_nav_acc_rad.get()) { - float speed_setpoint = math::trajectory::computeMaxSpeedFromDistance(_param_ro_jerk_limit.get(), - _param_ro_decel_limit.get(), distance_to_target, 0.f); - const float max_speed = PX4_ISFINITE(_rover_position_setpoint.cruising_speed) ? - _rover_position_setpoint.cruising_speed : - _param_ro_speed_limit.get(); - speed_setpoint = math::min(speed_setpoint, max_speed); - pure_pursuit_status_s pure_pursuit_status{}; - pure_pursuit_status.timestamp = _timestamp; - const float yaw_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), - _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), target_waypoint_ned, _curr_pos_ned, - _curr_pos_ned, fabsf(speed_setpoint)); - _pure_pursuit_status_pub.publish(pure_pursuit_status); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = yaw_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else { - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = 0.f; - rover_velocity_setpoint.bearing = _vehicle_yaw; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - } } bool AckermannPosControl::runSanityChecks() { bool ret = true; - if (_param_ro_max_thr_speed.get() < FLT_EPSILON) { - ret = false; - } - - if (_param_ra_wheel_base.get() < FLT_EPSILON) { - ret = false; - } - - if (_param_ra_max_str_ang.get() < FLT_EPSILON) { - ret = false; - } - if (_param_ro_speed_limit.get() < FLT_EPSILON) { ret = false; } - if (_param_ro_yaw_p.get() < FLT_EPSILON) { - ret = false; - } - - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.hpp b/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.hpp index 8f9e37eb65..af2d7581b0 100644 --- a/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.hpp +++ b/src/modules/rover_ackermann/AckermannPosControl/AckermannPosControl.hpp @@ -38,26 +38,17 @@ #include // Library includes -#include -#include #include -#include #include -#include #include +#include // uORB includes #include #include #include #include -#include -#include -#include #include -#include -#include -#include #include #include #include @@ -78,10 +69,16 @@ public: ~AckermannPosControl() = default; /** - * @brief Update position controller. + * @brief Generate and publish roverVelocitySetpoint from roverPositionSetpoint. */ void updatePosControl(); + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + protected: /** * @brief Update the parameters of the module. @@ -94,143 +91,35 @@ private: */ void updateSubscriptions(); - /** - * @brief Generate and publish roverPositionSetpoint from position of trajectorySetpoint. - */ - void generatePositionSetpoint(); - - /** - * @brief Generate and publish roverVelocitySetpoint from manualControlSetpoint (Position Mode) or - * positionSetpointTriplet (Auto Mode) or roverPositionSetpoint. - */ - void generateVelocitySetpoint(); - - /** - * @brief Generate and publish roverVelocitySetpoint from manualControlSetpoint. - */ - void manualPositionMode(); - - /** - * @brief Generate and publish roverVelocitySetpoint from positionSetpointTriplet. - */ - void autoPositionMode(); - - /** - * @brief Generate and publish roverVelocitySetpoint from roverPositionSetpoint. - */ - void goToPositionMode(); - - /** - * @brief Update global/NED waypoint coordinates and acceptance radius. - */ - void updateWaypointsAndAcceptanceRadius(); - - /** - * @brief Publish the acceptance radius for current waypoint based on the angle between a line segment - * from the previous to the current waypoint/current to the next waypoint and maximum steer angle of the vehicle. - * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] - * @param default_acceptance_radius Default acceptance radius for waypoints [m]. - * @param acceptance_radius_gain Tuning parameter that scales the geometric optimal acceptance radius for the corner cutting [-]. - * @param acceptance_radius_max Maximum value for the acceptance radius [m]. - * @param wheel_base Rover wheelbase [m]. - * @param max_steer_angle Rover maximum steer angle [rad]. - * @return Updated acceptance radius [m]. - */ - float updateAcceptanceRadius(float waypoint_transition_angle, float default_acceptance_radius, - float acceptance_radius_gain, float acceptance_radius_max, float wheel_base, float max_steer_angle); - - /** - * @brief Calculate the speed setpoint. During cornering the speed is restricted based on the radius of the corner. - * On straight lines it is based on a speed trajectory such that the rover will arrive at the next corner with the - * desired cornering speed under consideration of the maximum deceleration and jerk. - * @param cruising_speed Cruising speed [m/s]. - * @param miss_speed_min Minimum speed setpoint [m/s]. - * @param distance_to_prev_wp Distance to the previous waypoint [m]. - * @param distance_to_curr_wp Distance to the current waypoint [m]. - * @param acc_rad Acceptance radius of the current waypoint [m]. - * @param prev_acc_rad Acceptance radius of the previous waypoint [m]. - * @param max_decel Maximum allowed deceleration [m/s^2]. - * @param max_jerk Maximum allowed jerk [m/s^3]. - * @param curr_wp_type Type of the current waypoint. - * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] - * @param prev_waypoint_transition_angle Previous angle between the prevWP-currWP and currWP-nextWP line segments [rad] - * @param max_speed Maximum speed setpoint [m/s] - * @return Speed setpoint [m/s]. - */ - float calcSpeedSetpoint(float cruising_speed, float miss_speed_min, float distance_to_prev_wp, - float distance_to_curr_wp, float acc_rad, float prev_acc_rad, float max_decel, float max_jerk, int curr_wp_type, - float waypoint_transition_angle, float prev_waypoint_transition_angle, float max_speed); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); - // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; - uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; - uORB::Subscription _position_setpoint_triplet_sub{ORB_ID(position_setpoint_triplet)}; uORB::Subscription _rover_position_setpoint_sub{ORB_ID(rover_position_setpoint)}; - vehicle_control_mode_s _vehicle_control_mode{}; - offboard_control_mode_s _offboard_control_mode{}; + uORB::Subscription _position_controller_status_sub{ORB_ID(position_controller_status)}; rover_position_setpoint_s _rover_position_setpoint{}; // uORB publications - uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; - uORB::Publication _position_controller_status_pub{ORB_ID(position_controller_status)}; - uORB::Publication _pure_pursuit_status_pub{ORB_ID(pure_pursuit_status)}; - uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; + uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; + uORB::Publication _pure_pursuit_status_pub{ORB_ID(pure_pursuit_status)}; // Variables - hrt_abstime _timestamp{0}; Quatf _vehicle_attitude_quaternion{}; Vector2f _curr_pos_ned{}; - Vector2f _pos_ctl_course_direction{}; - Vector2f _pos_ctl_start_position_ned{}; + Vector2f _start_ned{}; float _vehicle_yaw{0.f}; float _max_yaw_rate{0.f}; - float _min_speed{0.f}; // Speed at which the maximum yaw rate limit is enforced given the maximum steer angle and wheel base. - float _dt{0.f}; - int _curr_wp_type{position_setpoint_s::SETPOINT_TYPE_IDLE}; - bool _course_control{false}; // Indicates if the rover is doing course control in manual position mode. - bool _prev_param_check_passed{true}; - - // Waypoint variables - Vector2f _curr_wp_ned{}; - Vector2f _prev_wp_ned{}; - Vector2f _next_wp_ned{}; - float _acceptance_radius{0.5f}; - float _prev_acceptance_radius{0.5f}; - float _cruising_speed{0.f}; - float _waypoint_transition_angle{0.f}; // Angle between the prevWP-currWP and currWP-nextWP line segments [rad] - float _prev_waypoint_transition_angle{0.f}; // Previous Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + float _acceptance_radius{0.f}; // Acceptance radius for the waypoint. // Class Instances MapProjection _global_ned_proj_ref{}; // Transform global to NED coordinates DEFINE_PARAMETERS( - (ParamFloat) _param_ro_max_thr_speed, - (ParamFloat) _param_ro_yaw_stick_dz, - (ParamFloat) _param_ro_accel_limit, (ParamFloat) _param_ro_decel_limit, (ParamFloat) _param_ro_jerk_limit, (ParamFloat) _param_ro_speed_limit, - (ParamFloat) _param_ro_speed_th, (ParamFloat) _param_pp_lookahd_gain, (ParamFloat) _param_pp_lookahd_max, (ParamFloat) _param_pp_lookahd_min, - (ParamFloat) _param_ro_yaw_rate_limit, - (ParamFloat) _param_ro_yaw_p, - (ParamFloat) _param_ra_acc_rad_max, - (ParamFloat) _param_ra_acc_rad_gain, - (ParamFloat) _param_ra_max_str_ang, - (ParamFloat) _param_ra_wheel_base, - (ParamFloat) _param_nav_acc_rad - + (ParamFloat) _param_ro_yaw_rate_limit ) }; diff --git a/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.cpp b/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.cpp index f27f6127c2..30cb26510b 100644 --- a/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.cpp +++ b/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.cpp @@ -37,8 +37,6 @@ using namespace time_literals; AckermannRateControl::AckermannRateControl(ModuleParams *parent) : ModuleParams(parent) { - _rover_rate_setpoint_pub.advertise(); - _rover_throttle_setpoint_pub.advertise(); _rover_steering_setpoint_pub.advertise(); _rover_rate_status_pub.advertise(); updateParams(); @@ -48,22 +46,82 @@ void AckermannRateControl::updateParams() { ModuleParams::updateParams(); _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; + + // Set up PID controller _pid_yaw_rate.setGains(_param_ro_yaw_rate_p.get(), _param_ro_yaw_rate_i.get(), 0.f); _pid_yaw_rate.setIntegralLimit(1.f); _pid_yaw_rate.setOutputLimit(1.f); - _yaw_rate_setpoint.setSlewRate(_param_ro_yaw_accel_limit.get() * M_DEG_TO_RAD_F); + + // Set up slew rate + _adjusted_yaw_rate_setpoint.setSlewRate(_param_ro_yaw_accel_limit.get() * M_DEG_TO_RAD_F); } void AckermannRateControl::updateRateControl() { + updateSubscriptions(); + hrt_abstime timestamp_prev = _timestamp; _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); + if (PX4_ISFINITE(_yaw_rate_setpoint)) { + if (fabsf(_estimated_speed) > FLT_EPSILON) { + // Set up feasible yaw rate setpoint + float steering_setpoint{0.f}; + float max_possible_yaw_rate = fabsf(_estimated_speed) * tanf(_param_ra_max_str_ang.get()) / + _param_ra_wheel_base.get(); // Maximum possible yaw rate at current velocity + float yaw_rate_limit = math::min(max_possible_yaw_rate, _max_yaw_rate); + float constrained_yaw_rate = math::constrain(_yaw_rate_setpoint, -yaw_rate_limit, yaw_rate_limit); + + if (_param_ro_yaw_accel_limit.get() > FLT_EPSILON) { // Apply slew rate if configured + if (fabsf(_adjusted_yaw_rate_setpoint.getState() - _vehicle_yaw_rate) > fabsf(constrained_yaw_rate - + _vehicle_yaw_rate)) { + _adjusted_yaw_rate_setpoint.setForcedValue(_vehicle_yaw_rate); + } + + _adjusted_yaw_rate_setpoint.update(constrained_yaw_rate, dt); + + } else { + _adjusted_yaw_rate_setpoint.setForcedValue(constrained_yaw_rate); + } + + // Feed forward + steering_setpoint = atanf(_adjusted_yaw_rate_setpoint.getState() * _param_ra_wheel_base.get() / _estimated_speed); + + // Feedback (Only when driving forwards because backwards driving is NMP and can introduce instability) + if (_estimated_speed > FLT_EPSILON) { + _pid_yaw_rate.setSetpoint(_adjusted_yaw_rate_setpoint.getState()); + steering_setpoint += _pid_yaw_rate.update(_vehicle_yaw_rate, dt); + } + + rover_steering_setpoint_s rover_steering_setpoint{}; + rover_steering_setpoint.timestamp = _timestamp; + rover_steering_setpoint.normalized_steering_angle = math::interpolate(steering_setpoint, + -_param_ra_max_str_ang.get(), _param_ra_max_str_ang.get(), -1.f, 1.f); // Normalize steering setpoint + _rover_steering_setpoint_pub.publish(rover_steering_setpoint); + + } else { + _pid_yaw_rate.resetIntegral(); + rover_steering_setpoint_s rover_steering_setpoint{}; + rover_steering_setpoint.timestamp = _timestamp; + rover_steering_setpoint.normalized_steering_angle = 0.f; + _rover_steering_setpoint_pub.publish(rover_steering_setpoint); + } } + + // Publish rate controller status (logging only) + rover_rate_status_s rover_rate_status; + rover_rate_status.timestamp = _timestamp; + rover_rate_status.measured_yaw_rate = _vehicle_yaw_rate; + rover_rate_status.adjusted_yaw_rate_setpoint = _adjusted_yaw_rate_setpoint.getState(); + rover_rate_status.pid_yaw_rate_integral = _pid_yaw_rate.getIntegral(); + _rover_rate_status_pub.publish(rover_rate_status); + +} + +void AckermannRateControl::updateSubscriptions() +{ if (_vehicle_angular_velocity_sub.updated()) { vehicle_angular_velocity_s vehicle_angular_velocity{}; _vehicle_angular_velocity_sub.copy(&vehicle_angular_velocity); @@ -71,107 +129,20 @@ void AckermannRateControl::updateRateControl() vehicle_angular_velocity.xyz[2] : 0.f; } - if (_vehicle_control_mode.flag_control_rates_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) { - // Estimate forward speed based on throttle - if (_actuator_motors_sub.updated()) { - actuator_motors_s actuator_motors; - _actuator_motors_sub.copy(&actuator_motors); - _estimated_speed_body_x = math::interpolate(actuator_motors.control[0], -1.f, 1.f, - -_param_ro_max_thr_speed.get(), _param_ro_max_thr_speed.get()); - _estimated_speed_body_x = fabsf(_estimated_speed_body_x) > _param_ro_speed_th.get() ? _estimated_speed_body_x : 0.f; - } - - if (_vehicle_control_mode.flag_control_manual_enabled) { - generateRateAndThrottleSetpoint(); - } - - generateSteeringSetpoint(); - - } else { // Reset controller and slew rate when rate control is not active - _pid_yaw_rate.resetIntegral(); - _yaw_rate_setpoint.setForcedValue(0.f); + // Estimate forward speed based on throttle + if (_actuator_motors_sub.updated()) { + actuator_motors_s actuator_motors; + _actuator_motors_sub.copy(&actuator_motors); + _estimated_speed = math::interpolate(actuator_motors.control[0], -1.f, 1.f, + -_param_ro_max_thr_speed.get(), _param_ro_max_thr_speed.get()); + _estimated_speed = fabsf(_estimated_speed) > _param_ro_speed_th.get() ? _estimated_speed : 0.f; } - // Publish rate controller status (logging only) - rover_rate_status_s rover_rate_status; - rover_rate_status.timestamp = _timestamp; - rover_rate_status.measured_yaw_rate = _vehicle_yaw_rate; - rover_rate_status.adjusted_yaw_rate_setpoint = _yaw_rate_setpoint.getState(); - rover_rate_status.pid_yaw_rate_integral = _pid_yaw_rate.getIntegral(); - _rover_rate_status_pub.publish(rover_rate_status); - -} - -void AckermannRateControl::generateRateAndThrottleSetpoint() -{ - const bool acro_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled - && !_vehicle_control_mode.flag_control_position_enabled && !_vehicle_control_mode.flag_control_attitude_enabled; - - if (acro_mode_enabled && _manual_control_setpoint_sub.updated()) { // Acro Mode - manual_control_setpoint_s manual_control_setpoint{}; - - if (_manual_control_setpoint_sub.update(&manual_control_setpoint)) { - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - rover_rate_setpoint_s rover_rate_setpoint{}; - rover_rate_setpoint.timestamp = _timestamp; - rover_rate_setpoint.yaw_rate_setpoint = matrix::sign(_estimated_speed_body_x) * math::interpolate - (manual_control_setpoint.roll, -1.f, 1.f, -_max_yaw_rate, _max_yaw_rate); - _rover_rate_setpoint_pub.publish(rover_rate_setpoint); - } - - } -} - -void AckermannRateControl::generateSteeringSetpoint() -{ if (_rover_rate_setpoint_sub.updated()) { - _rover_rate_setpoint_sub.copy(&_rover_rate_setpoint); - + rover_rate_setpoint_s rover_rate_setpoint{}; + _rover_rate_setpoint_sub.copy(&rover_rate_setpoint); + _yaw_rate_setpoint = rover_rate_setpoint.yaw_rate_setpoint; } - - float steering_setpoint{0.f}; - - if (fabsf(_estimated_speed_body_x) > FLT_EPSILON) { - // Set up feasible yaw rate setpoint - float max_possible_yaw_rate = fabsf(_estimated_speed_body_x) * tanf(_param_ra_max_str_ang.get()) / - _param_ra_wheel_base.get(); // Maximum possible yaw rate at current velocity - float yaw_rate_limit = math::min(max_possible_yaw_rate, _max_yaw_rate); - float constrained_yaw_rate = math::constrain(_rover_rate_setpoint.yaw_rate_setpoint, -yaw_rate_limit, yaw_rate_limit); - - if (_param_ro_yaw_accel_limit.get() > FLT_EPSILON) { // Apply slew rate if configured - if (fabsf(_yaw_rate_setpoint.getState() - _vehicle_yaw_rate) > fabsf(constrained_yaw_rate - - _vehicle_yaw_rate)) { - _yaw_rate_setpoint.setForcedValue(_vehicle_yaw_rate); - } - - _yaw_rate_setpoint.update(constrained_yaw_rate, _dt); - - } else { - _yaw_rate_setpoint.setForcedValue(constrained_yaw_rate); - } - - // Feed forward - steering_setpoint = atanf(_yaw_rate_setpoint.getState() * _param_ra_wheel_base.get() / _estimated_speed_body_x); - - // Feedback (Only when driving forwards because backwards driving is NMP and can introduce instability) - if (_estimated_speed_body_x > FLT_EPSILON) { - _pid_yaw_rate.setSetpoint(_yaw_rate_setpoint.getState()); - steering_setpoint += _pid_yaw_rate.update(_vehicle_yaw_rate, _dt); - } - - } else { - _pid_yaw_rate.resetIntegral(); - } - - rover_steering_setpoint_s rover_steering_setpoint{}; - rover_steering_setpoint.timestamp = _timestamp; - rover_steering_setpoint.normalized_steering_angle = math::interpolate(steering_setpoint, - -_param_ra_max_str_ang.get(), _param_ra_max_str_ang.get(), -1.f, 1.f); // Normalize steering setpoint - _rover_steering_setpoint_pub.publish(rover_steering_setpoint); } bool AckermannRateControl::runSanityChecks() @@ -180,44 +151,31 @@ bool AckermannRateControl::runSanityChecks() if (_param_ro_max_thr_speed.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("ackermann_rate_control_conf_invalid_max_thr_speed"), events::Log::Error, - "Invalid configuration of necessary parameter RO_MAX_THR_SPEED", _param_ro_max_thr_speed.get()); - } + events::send(events::ID("ackermann_rate_control_conf_invalid_max_thr_speed"), events::Log::Error, + "Invalid configuration of necessary parameter RO_MAX_THR_SPEED", _param_ro_max_thr_speed.get()); } if (_param_ra_wheel_base.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("ackermann_rate_control_conf_invalid_wheel_base"), events::Log::Error, - "Invalid configuration of necessary parameter RA_WHEEL_BASE", _param_ra_wheel_base.get()); - } + events::send(events::ID("ackermann_rate_control_conf_invalid_wheel_base"), events::Log::Error, + "Invalid configuration of necessary parameter RA_WHEEL_BASE", _param_ra_wheel_base.get()); } if (_param_ra_max_str_ang.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("ackermann_rate_control_conf_invalid_max_str_ang"), events::Log::Error, - "Invalid configuration of necessary parameter RA_MAX_STR_ANG", _param_ra_max_str_ang.get()); - } + events::send(events::ID("ackermann_rate_control_conf_invalid_max_str_ang"), events::Log::Error, + "Invalid configuration of necessary parameter RA_MAX_STR_ANG", _param_ra_max_str_ang.get()); } if (_param_ro_yaw_rate_limit.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("ackermann_rate_control_conf_invalid_yaw_rate_lim"), events::Log::Error, - "Invalid configuration of necessary parameter RO_YAW_RATE_LIM", _param_ro_yaw_rate_limit.get()); - } + events::send(events::ID("ackermann_rate_control_conf_invalid_yaw_rate_lim"), events::Log::Error, + "Invalid configuration of necessary parameter RO_YAW_RATE_LIM", _param_ro_yaw_rate_limit.get()); } - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.hpp b/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.hpp index 8f0891cb48..d5014a4306 100644 --- a/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.hpp +++ b/src/modules/rover_ackermann/AckermannRateControl/AckermannRateControl.hpp @@ -47,9 +47,6 @@ #include #include #include -#include -#include -#include #include #include #include @@ -69,10 +66,21 @@ public: ~AckermannRateControl() = default; /** - * @brief Update rate controller. + * @brief Generate and publish roverSteeringSetpoint from roverRateSetpoint. */ void updateRateControl(); + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + + /** + * @brief Reset rate controller. + */ + void reset() {_pid_yaw_rate.resetIntegral(); _yaw_rate_setpoint = NAN;}; + protected: /** * @brief Update the parameters of the module. @@ -80,50 +88,31 @@ protected: void updateParams() override; private: - /** - * @brief Generate and publish roverRateSetpoint and roverThrottleSetpoint from manualControlSetpoint (Acro Mode). + * @brief Update uORB subscriptions used in rate controller. */ - void generateRateAndThrottleSetpoint(); - - /** - * @brief Generate and publish roverSteeringSetpoint from RoverRateSetpoint. - */ - void generateSteeringSetpoint(); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); + void updateSubscriptions(); // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; uORB::Subscription _rover_rate_setpoint_sub{ORB_ID(rover_rate_setpoint)}; uORB::Subscription _vehicle_angular_velocity_sub{ORB_ID(vehicle_angular_velocity)}; uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; - vehicle_control_mode_s _vehicle_control_mode{}; - rover_rate_setpoint_s _rover_rate_setpoint{}; // uORB publications - uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; - uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; uORB::Publication _rover_steering_setpoint_pub{ORB_ID(rover_steering_setpoint)}; - uORB::Publication _rover_rate_status_pub{ORB_ID(rover_rate_status)}; + uORB::Publication _rover_rate_status_pub{ORB_ID(rover_rate_status)}; // Variables - float _estimated_speed_body_x{0.f}; /*Vehicle speed estimated by interpolating [actuatorMotorSetpoint, _estimated_speed_body_x] + float _estimated_speed{0.f}; /*Vehicle speed estimated by interpolating [actuatorMotorSetpoint, _estimated_speed] between [0, 0] and [1, _param_ro_max_thr_speed].*/ float _max_yaw_rate{0.f}; float _vehicle_yaw_rate{0.f}; + float _yaw_rate_setpoint{NAN}; hrt_abstime _timestamp{0}; - float _dt{0.f}; // Time since last update [s]. - bool _prev_param_check_passed{true}; // Controllers PID _pid_yaw_rate; - SlewRate _yaw_rate_setpoint{0.f}; + SlewRate _adjusted_yaw_rate_setpoint{0.f}; DEFINE_PARAMETERS( (ParamFloat) _param_ro_max_thr_speed, diff --git a/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.cpp b/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.cpp index 8d9bf88e8b..dffbf87758 100644 --- a/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.cpp +++ b/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.cpp @@ -38,50 +38,62 @@ using namespace time_literals; AckermannVelControl::AckermannVelControl(ModuleParams *parent) : ModuleParams(parent) { _rover_throttle_setpoint_pub.advertise(); - _rover_velocity_status_pub.advertise(); - _rover_velocity_setpoint_pub.advertise(); _rover_attitude_setpoint_pub.advertise(); + _rover_velocity_status_pub.advertise(); updateParams(); } void AckermannVelControl::updateParams() { ModuleParams::updateParams(); + + // Set up PID controller _pid_speed.setGains(_param_ro_speed_p.get(), _param_ro_speed_i.get(), 0.f); _pid_speed.setIntegralLimit(1.f); _pid_speed.setOutputLimit(1.f); + // Set up slew rate if (_param_ro_accel_limit.get() > FLT_EPSILON) { - _speed_setpoint.setSlewRate(_param_ro_accel_limit.get()); + _adjusted_speed_setpoint.setSlewRate(_param_ro_accel_limit.get()); } } void AckermannVelControl::updateVelControl() { - const hrt_abstime timestamp_prev = _timestamp; - _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - updateSubscriptions(); - if ((_vehicle_control_mode.flag_control_velocity_enabled) && _vehicle_control_mode.flag_armed && runSanityChecks()) { - if (_vehicle_control_mode.flag_control_offboard_enabled) { // Offboard Velocity Control - generateVelocitySetpoint(); - } + const hrt_abstime timestamp_prev = _timestamp; + _timestamp = hrt_absolute_time(); + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - generateAttitudeAndThrottleSetpoint(); + // Attitude Setpoint + if (PX4_ISFINITE(_bearing_setpoint)) { + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = _timestamp; + rover_attitude_setpoint.yaw_setpoint = _bearing_setpoint; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + } + + // Throttle Setpoint + if (PX4_ISFINITE(_speed_setpoint)) { + const float speed_setpoint = math::constrain(_speed_setpoint, -_param_ro_speed_limit.get(), + _param_ro_speed_limit.get()); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = _timestamp; + rover_throttle_setpoint.throttle_body_x = RoverControl::speedControl(_adjusted_speed_setpoint, _pid_speed, + speed_setpoint, _vehicle_speed, _param_ro_accel_limit.get(), _param_ro_decel_limit.get(), + _param_ro_max_thr_speed.get(), dt); + rover_throttle_setpoint.throttle_body_y = NAN; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - } else { // Reset controller and slew rate when position control is not active - _pid_speed.resetIntegral(); - _speed_setpoint.setForcedValue(0.f); } // Publish position controller status (logging only) rover_velocity_status_s rover_velocity_status; rover_velocity_status.timestamp = _timestamp; rover_velocity_status.measured_speed_body_x = _vehicle_speed; - rover_velocity_status.adjusted_speed_body_x_setpoint = _speed_setpoint.getState(); + rover_velocity_status.adjusted_speed_body_x_setpoint = _adjusted_speed_setpoint.getState(); rover_velocity_status.pid_throttle_body_x_integral = _pid_speed.getIntegral(); rover_velocity_status.measured_speed_body_y = NAN; rover_velocity_status.adjusted_speed_body_y_setpoint = NAN; @@ -91,10 +103,6 @@ void AckermannVelControl::updateVelControl() void AckermannVelControl::updateSubscriptions() { - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } - if (_vehicle_attitude_sub.updated()) { vehicle_attitude_s vehicle_attitude{}; _vehicle_attitude_sub.copy(&vehicle_attitude); @@ -105,68 +113,18 @@ void AckermannVelControl::updateSubscriptions() if (_vehicle_local_position_sub.updated()) { vehicle_local_position_s vehicle_local_position{}; _vehicle_local_position_sub.copy(&vehicle_local_position); - Vector3f velocity_ned(vehicle_local_position.vx, vehicle_local_position.vy, vehicle_local_position.vz); Vector3f velocity_xyz = _vehicle_attitude_quaternion.rotateVectorInverse(velocity_ned); Vector2f velocity_2d = Vector2f(velocity_xyz(0), velocity_xyz(1)); _vehicle_speed = velocity_2d.norm() > _param_ro_speed_th.get() ? sign(velocity_2d(0)) * velocity_2d.norm() : 0.f; } -} - -void AckermannVelControl::generateVelocitySetpoint() -{ - trajectory_setpoint_s trajectory_setpoint{}; - _trajectory_setpoint_sub.copy(&trajectory_setpoint); - - if (_offboard_control_mode_sub.updated()) { - _offboard_control_mode_sub.copy(&_offboard_control_mode); - } - - const bool offboard_vel_control = _offboard_control_mode.velocity && !_offboard_control_mode.position; - - const Vector2f velocity_in_local_frame(trajectory_setpoint.velocity[0], trajectory_setpoint.velocity[1]); - - if (offboard_vel_control && velocity_in_local_frame.isAllFinite()) { - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = velocity_in_local_frame.norm(); - rover_velocity_setpoint.bearing = atan2f(velocity_in_local_frame(1), velocity_in_local_frame(0)); - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - } -} - -void AckermannVelControl::generateAttitudeAndThrottleSetpoint() -{ if (_rover_velocity_setpoint_sub.updated()) { - _rover_velocity_setpoint_sub.copy(&_rover_velocity_setpoint); + rover_velocity_setpoint_s rover_velocity_setpoint; + _rover_velocity_setpoint_sub.copy(&rover_velocity_setpoint); + _speed_setpoint = rover_velocity_setpoint.speed; + _bearing_setpoint = rover_velocity_setpoint.bearing; } - - // Attitude Setpoint - if (fabsf(_rover_velocity_setpoint.speed) < FLT_EPSILON) { - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = _vehicle_yaw; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - - } else if (PX4_ISFINITE(_rover_velocity_setpoint.bearing)) { - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = _rover_velocity_setpoint.bearing; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - } - - // Throttle Setpoint - const float speed_setpoint = math::constrain(_rover_velocity_setpoint.speed, -_param_ro_speed_limit.get(), - _param_ro_speed_limit.get()); - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = RoverControl::speedControl(_speed_setpoint, _pid_speed, - speed_setpoint, _vehicle_speed, _param_ro_accel_limit.get(), _param_ro_decel_limit.get(), - _param_ro_max_thr_speed.get(), _dt); - rover_throttle_setpoint.throttle_body_y = NAN; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - } bool AckermannVelControl::runSanityChecks() @@ -179,14 +137,10 @@ bool AckermannVelControl::runSanityChecks() if (_param_ro_speed_limit.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("ackermann_vel_control_conf_invalid_speed_lim"), events::Log::Error, - "Invalid configuration of necessary parameter RO_SPEED_LIM", _param_ro_speed_limit.get()); - } + events::send(events::ID("ackermann_vel_control_conf_invalid_speed_lim"), events::Log::Error, + "Invalid configuration of necessary parameter RO_SPEED_LIM", _param_ro_speed_limit.get()); } - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.hpp b/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.hpp index 74dea1693c..42f437293c 100644 --- a/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.hpp +++ b/src/modules/rover_ackermann/AckermannVelControl/AckermannVelControl.hpp @@ -51,10 +51,7 @@ #include #include #include -#include -#include #include -#include #include using namespace matrix; @@ -73,10 +70,21 @@ public: ~AckermannVelControl() = default; /** - * @brief Update velocity controller. + * @brief Generate and publish roverAttitudeSetpoint and RoverThrottleSetpoint from roverVelocitySetpoint. */ void updateVelControl(); + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + + /** + * @brief Reset velocity controller. + */ + void reset() {_pid_speed.resetIntegral(); _speed_setpoint = NAN; _bearing_setpoint = NAN; _adjusted_speed_setpoint.setForcedValue(0.f);}; + protected: /** * @brief Update the parameters of the module. @@ -85,55 +93,32 @@ protected: private: /** - * @brief Update uORB subscriptions used in velocity controller. + * @brief Update uORB subscriptions used in position controller. */ void updateSubscriptions(); - /** - * @brief Generate and publish roverVelocitySetpoint from velocity of trajectorySetpoint. - */ - void generateVelocitySetpoint(); - - /** - * @brief Generate and publish roverAttitudeSetpoint and roverThrottleSetpoint - * from roverVelocitySetpoint. - */ - void generateAttitudeAndThrottleSetpoint(); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); - // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; uORB::Subscription _rover_velocity_setpoint_sub{ORB_ID(rover_velocity_setpoint)}; - vehicle_control_mode_s _vehicle_control_mode{}; - offboard_control_mode_s _offboard_control_mode{}; // uORB publications uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; uORB::Publication _rover_velocity_status_pub{ORB_ID(rover_velocity_status)}; uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; - rover_velocity_setpoint_s _rover_velocity_setpoint{}; // Variables hrt_abstime _timestamp{0}; Quatf _vehicle_attitude_quaternion{}; float _vehicle_speed{0.f}; // [m/s] Positiv: Forwards, Negativ: Backwards float _vehicle_yaw{0.f}; - float _dt{0.f}; - bool _prev_param_check_passed{true}; + float _speed_setpoint{NAN}; + float _bearing_setpoint{NAN}; // Controllers PID _pid_speed; - SlewRate _speed_setpoint; + SlewRate _adjusted_speed_setpoint; DEFINE_PARAMETERS( (ParamFloat) _param_ro_max_thr_speed, diff --git a/src/modules/rover_ackermann/CMakeLists.txt b/src/modules/rover_ackermann/CMakeLists.txt index 957f56d74b..d2d25280a1 100644 --- a/src/modules/rover_ackermann/CMakeLists.txt +++ b/src/modules/rover_ackermann/CMakeLists.txt @@ -31,10 +31,12 @@ # ############################################################################ +add_subdirectory(AckermannActControl) add_subdirectory(AckermannRateControl) add_subdirectory(AckermannAttControl) add_subdirectory(AckermannVelControl) add_subdirectory(AckermannPosControl) +add_subdirectory(DriveModes) px4_add_module( MODULE modules__rover_ackermann @@ -43,10 +45,14 @@ px4_add_module( RoverAckermann.cpp RoverAckermann.hpp DEPENDS + AckermannActControl AckermannRateControl AckermannAttControl AckermannVelControl AckermannPosControl + AutoMode + ManualMode + OffboardMode px4_work_queue rover_control pure_pursuit diff --git a/src/modules/rover_ackermann/DriveModes/AutoMode/AutoMode.cpp b/src/modules/rover_ackermann/DriveModes/AutoMode/AutoMode.cpp new file mode 100644 index 0000000000..53ab04dcd9 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/AutoMode/AutoMode.cpp @@ -0,0 +1,196 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "AutoMode.hpp" + +using namespace time_literals; + +AutoMode::AutoMode(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); + _rover_position_setpoint_pub.advertise(); +} + +void AutoMode::updateParams() +{ + ModuleParams::updateParams(); + _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; + + if (_param_ra_wheel_base.get() > FLT_EPSILON && _max_yaw_rate > FLT_EPSILON + && _param_ra_max_str_ang.get() > FLT_EPSILON) { + _min_speed = _param_ra_wheel_base.get() * _max_yaw_rate / tanf(_param_ra_max_str_ang.get()); + } +} + +void AutoMode::autoControl() +{ + if (_vehicle_attitude_sub.updated()) { + vehicle_attitude_s vehicle_attitude{}; + _vehicle_attitude_sub.copy(&vehicle_attitude); + _vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(_vehicle_attitude_quaternion).psi(); + } + + if (_vehicle_local_position_sub.updated()) { + vehicle_local_position_s vehicle_local_position{}; + _vehicle_local_position_sub.copy(&vehicle_local_position); + + if (!_global_ned_proj_ref.isInitialized() + || (_global_ned_proj_ref.getProjectionReferenceTimestamp() != vehicle_local_position.ref_timestamp)) { + _global_ned_proj_ref.initReference(vehicle_local_position.ref_lat, vehicle_local_position.ref_lon, + vehicle_local_position.ref_timestamp); + } + + _curr_pos_ned = Vector2f(vehicle_local_position.x, vehicle_local_position.y); + } + + if (_position_setpoint_triplet_sub.updated()) { + updateWaypointsAndAcceptanceRadius(); + } + + // Distances to waypoints + const float distance_to_prev_wp = sqrt(powf(_curr_pos_ned(0) - _prev_wp_ned(0), + 2) + powf(_curr_pos_ned(1) - _prev_wp_ned(1), 2)); + const float distance_to_curr_wp = sqrt(powf(_curr_pos_ned(0) - _curr_wp_ned(0), + 2) + powf(_curr_pos_ned(1) - _curr_wp_ned(1), 2)); + + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = _curr_wp_ned(0); + rover_position_setpoint.position_ned[1] = _curr_wp_ned(1); + rover_position_setpoint.start_ned[0] = _prev_wp_ned(0); + rover_position_setpoint.start_ned[1] = _prev_wp_ned(1); + rover_position_setpoint.arrival_speed = arrivalSpeed(_cruising_speed, _min_speed, _acceptance_radius, _curr_wp_type, + _waypoint_transition_angle, _max_yaw_rate); + rover_position_setpoint.cruising_speed = cruisingSpeed(_cruising_speed, _min_speed, distance_to_prev_wp, + distance_to_curr_wp, _acceptance_radius, _prev_acceptance_radius, _waypoint_transition_angle, + _prev_waypoint_transition_angle, _max_yaw_rate); + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); +} + +void AutoMode::updateWaypointsAndAcceptanceRadius() +{ + position_setpoint_triplet_s position_setpoint_triplet{}; + _position_setpoint_triplet_sub.copy(&position_setpoint_triplet); + _curr_wp_type = position_setpoint_triplet.current.type; + + RoverControl::globalToLocalSetpointTriplet(_curr_wp_ned, _prev_wp_ned, _next_wp_ned, position_setpoint_triplet, + _curr_pos_ned, _global_ned_proj_ref); + + _prev_waypoint_transition_angle = _waypoint_transition_angle; + _waypoint_transition_angle = RoverControl::calcWaypointTransitionAngle(_prev_wp_ned, _curr_wp_ned, _next_wp_ned); + + // Update acceptance radius + _prev_acceptance_radius = _acceptance_radius; + + if (_param_ra_acc_rad_max.get() >= _param_nav_acc_rad.get()) { + _acceptance_radius = updateAcceptanceRadius(_waypoint_transition_angle, _param_nav_acc_rad.get(), + _param_ra_acc_rad_gain.get(), _param_ra_acc_rad_max.get(), _param_ra_wheel_base.get(), _param_ra_max_str_ang.get()); + + } else { + _acceptance_radius = _param_nav_acc_rad.get(); + } + + // Waypoint cruising speed + _cruising_speed = position_setpoint_triplet.current.cruising_speed > 0.f ? math::constrain( + position_setpoint_triplet.current.cruising_speed, 0.f, _param_ro_speed_limit.get()) : _param_ro_speed_limit.get(); +} + +float AutoMode::updateAcceptanceRadius(const float waypoint_transition_angle, + const float default_acceptance_radius, const float acceptance_radius_gain, + const float acceptance_radius_max, const float wheel_base, const float max_steer_angle) +{ + // Calculate acceptance radius s.t. the rover cuts the corner tangential to the current and next line segment + float acceptance_radius = default_acceptance_radius; + + if (PX4_ISFINITE(_waypoint_transition_angle)) { + const float theta = waypoint_transition_angle / 2.f; + const float min_turning_radius = wheel_base / sinf(max_steer_angle); + const float acceptance_radius_temp = min_turning_radius / tanf(theta); + const float acceptance_radius_temp_scaled = acceptance_radius_gain * + acceptance_radius_temp; // Scale geometric ideal acceptance radius to account for kinematic and dynamic effects + acceptance_radius = math::constrain(acceptance_radius_temp_scaled, default_acceptance_radius, + acceptance_radius_max); + } + + // Publish updated acceptance radius + position_controller_status_s pos_ctrl_status{}; + pos_ctrl_status.acceptance_radius = acceptance_radius; + pos_ctrl_status.timestamp = hrt_absolute_time(); + _position_controller_status_pub.publish(pos_ctrl_status); + return acceptance_radius; +} + +float AutoMode::arrivalSpeed(const float cruising_speed, const float miss_speed_min, const float acc_rad, + const int curr_wp_type, const float waypoint_transition_angle, const float max_yaw_rate) +{ + if (!PX4_ISFINITE(waypoint_transition_angle) + || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_LAND + || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_IDLE) { + return 0.f; // Stop at the waypoint + + } else { + const float turning_circle = acc_rad * tanf(waypoint_transition_angle / 2.f); + const float cornering_speed = max_yaw_rate * turning_circle; + return math::constrain(cornering_speed, miss_speed_min, cruising_speed); // Slow down for cornering + } +} + +float AutoMode::cruisingSpeed(const float cruising_speed, const float miss_speed_min, + const float distance_to_prev_wp, const float distance_to_curr_wp, const float acc_rad, const float prev_acc_rad, + const float waypoint_transition_angle, const float prev_waypoint_transition_angle, const float max_yaw_rate) +{ + // Catch improper values + if (miss_speed_min < -FLT_EPSILON || miss_speed_min > cruising_speed) { + return cruising_speed; + } + + // Cornering slow down effect + if (distance_to_prev_wp <= prev_acc_rad && prev_acc_rad > FLT_EPSILON && PX4_ISFINITE(prev_waypoint_transition_angle)) { + const float turning_circle = prev_acc_rad * tanf(prev_waypoint_transition_angle / 2.f); + const float cornering_speed = max_yaw_rate * turning_circle; + return math::constrain(cornering_speed, miss_speed_min, cruising_speed); + + } + + if (distance_to_curr_wp <= acc_rad && acc_rad > FLT_EPSILON && PX4_ISFINITE(waypoint_transition_angle)) { + const float turning_circle = acc_rad * tanf(waypoint_transition_angle / 2.f); + const float cornering_speed = max_yaw_rate * turning_circle; + return math::constrain(cornering_speed, miss_speed_min, cruising_speed); + + } + + return cruising_speed; // Fallthrough + +} diff --git a/src/modules/rover_ackermann/DriveModes/AutoMode/AutoMode.hpp b/src/modules/rover_ackermann/DriveModes/AutoMode/AutoMode.hpp new file mode 100644 index 0000000000..c20a7c006f --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/AutoMode/AutoMode.hpp @@ -0,0 +1,161 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include +#include + +/** + * @brief Class for ackermann auto mode. + */ +class AutoMode : public ModuleParams +{ +public: + /** + * @brief Constructor for auto mode. + * @param parent The parent ModuleParams object. + */ + AutoMode(ModuleParams *parent); + ~AutoMode() = default; + + /** + * @brief Generate and publish roverPositionSetpoint from positionSetpointTriplet. + */ + void autoControl(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + /** + * @brief Update global/NED waypoint coordinates and acceptance radius. + */ + void updateWaypointsAndAcceptanceRadius(); + + /** + * @brief Publish the acceptance radius for current waypoint based on the angle between a line segment + * from the previous to the current waypoint/current to the next waypoint and maximum steer angle of the vehicle. + * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + * @param default_acceptance_radius Default acceptance radius for waypoints [m]. + * @param acceptance_radius_gain Tuning parameter that scales the geometric optimal acceptance radius for the corner cutting [-]. + * @param acceptance_radius_max Maximum value for the acceptance radius [m]. + * @param wheel_base Rover wheelbase [m]. + * @param max_steer_angle Rover maximum steer angle [rad]. + * @return Updated acceptance radius [m]. + */ + float updateAcceptanceRadius(float waypoint_transition_angle, float default_acceptance_radius, + float acceptance_radius_gain, float acceptance_radius_max, float wheel_base, float max_steer_angle); + + /** + * @brief Calculate the speed at which the rover should arrive at the current waypoint based on the upcoming corner. + * @param cruising_speed Cruising speed [m/s]. + * @param miss_speed_min Minimum speed setpoint [m/s]. + * @param acc_rad Acceptance radius of the current waypoint [m]. + * @param curr_wp_type Type of the current waypoint. + * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + * @param max_yaw_rate Maximum yaw rate setpoint [rad/s] + * @return Speed setpoint [m/s]. + */ + float arrivalSpeed(float cruising_speed, float miss_speed_min, float acc_rad, int curr_wp_type, + float waypoint_transition_angle, float max_yaw_rate); + + /** + * @brief Calculate the cruising speed setpoint. During cornering the speed is restricted based on the radius of the corner. + * @param cruising_speed Cruising speed [m/s]. + * @param miss_speed_min Minimum speed setpoint [m/s]. + * @param distance_to_prev_wp Distance to the previous waypoint [m]. + * @param distance_to_curr_wp Distance to the current waypoint [m]. + * @param acc_rad Acceptance radius of the current waypoint [m]. + * @param prev_acc_rad Acceptance radius of the previous waypoint [m]. + * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + * @param prev_waypoint_transition_angle Previous angle between the prevWP-currWP and currWP-nextWP line segments [rad] + * @param max_yaw_rate Maximum yaw rate setpoint [rad/s] + * @return Speed setpoint [m/s]. + */ + float cruisingSpeed(float cruising_speed, float miss_speed_min, float distance_to_prev_wp, + float distance_to_curr_wp, float acc_rad, float prev_acc_rad, float waypoint_transition_angle, + float prev_waypoint_transition_angle, float max_yaw_rate); + + // uORB subscriptions + uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; + uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; + uORB::Subscription _position_setpoint_triplet_sub{ORB_ID(position_setpoint_triplet)}; + + // uORB publications + uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; + uORB::Publication _position_controller_status_pub{ORB_ID(position_controller_status)}; + + // Variables + MapProjection _global_ned_proj_ref{}; // Transform global to NED coordinates + Quatf _vehicle_attitude_quaternion{}; + Vector2f _curr_wp_ned{NAN, NAN}; + Vector2f _prev_wp_ned{NAN, NAN}; + Vector2f _next_wp_ned{NAN, NAN}; + Vector2f _curr_pos_ned{NAN, NAN}; + float _acceptance_radius{0.5f}; + float _prev_acceptance_radius{0.5f}; + float _cruising_speed{0.f}; + float _waypoint_transition_angle{0.f}; // Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + float _prev_waypoint_transition_angle{0.f}; // Previous Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + float _max_yaw_rate{NAN}; + float _vehicle_yaw{NAN}; + float _min_speed{NAN}; // Speed at which the maximum yaw rate limit is enforced given the maximum steer angle and wheel base. + int _curr_wp_type{position_setpoint_s::SETPOINT_TYPE_IDLE}; + + DEFINE_PARAMETERS( + (ParamFloat) _param_ro_yaw_rate_limit, + (ParamFloat) _param_ro_speed_limit, + (ParamFloat) _param_ra_wheel_base, + (ParamFloat) _param_ra_max_str_ang, + (ParamFloat) _param_nav_acc_rad, + (ParamFloat) _param_ra_acc_rad_max, + (ParamFloat) _param_ra_acc_rad_gain + ) +}; diff --git a/src/modules/rover_ackermann/DriveModes/AutoMode/CMakeLists.txt b/src/modules/rover_ackermann/DriveModes/AutoMode/CMakeLists.txt new file mode 100644 index 0000000000..6f68333be1 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/AutoMode/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(AutoMode + AutoMode.cpp +) + +target_include_directories(AutoMode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_ackermann/DriveModes/CMakeLists.txt b/src/modules/rover_ackermann/DriveModes/CMakeLists.txt new file mode 100644 index 0000000000..1918b9644e --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/CMakeLists.txt @@ -0,0 +1,36 @@ +############################################################################ +# +# 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. +# +############################################################################ + +add_subdirectory(AutoMode) +add_subdirectory(ManualMode) +add_subdirectory(OffboardMode) diff --git a/src/modules/rover_ackermann/DriveModes/ManualMode/CMakeLists.txt b/src/modules/rover_ackermann/DriveModes/ManualMode/CMakeLists.txt new file mode 100644 index 0000000000..827489ad9f --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/ManualMode/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(ManualMode + ManualMode.cpp +) + +target_include_directories(ManualMode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_ackermann/DriveModes/ManualMode/ManualMode.cpp b/src/modules/rover_ackermann/DriveModes/ManualMode/ManualMode.cpp new file mode 100644 index 0000000000..cdedb950c2 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/ManualMode/ManualMode.cpp @@ -0,0 +1,226 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "ManualMode.hpp" + +using namespace time_literals; + +ManualMode::ManualMode(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); + _rover_throttle_setpoint_pub.advertise(); + _rover_steering_setpoint_pub.advertise(); + _rover_rate_setpoint_pub.advertise(); + _rover_attitude_setpoint_pub.advertise(); + _rover_velocity_setpoint_pub.advertise(); + _rover_position_setpoint_pub.advertise(); +} + +void ManualMode::updateParams() +{ + ModuleParams::updateParams(); + _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; +} + +void ManualMode::manual() +{ + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + rover_steering_setpoint_s rover_steering_setpoint{}; + rover_steering_setpoint.timestamp = hrt_absolute_time(); + rover_steering_setpoint.normalized_steering_angle = manual_control_setpoint.roll; + _rover_steering_setpoint_pub.publish(rover_steering_setpoint); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = hrt_absolute_time(); + rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); +} + +void ManualMode::acro() +{ + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = hrt_absolute_time(); + rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = matrix::sign(manual_control_setpoint.throttle) * math::interpolate + (manual_control_setpoint.roll, -1.f, 1.f, -_max_yaw_rate, _max_yaw_rate); + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); +} + +void ManualMode::stab() +{ + if (_vehicle_attitude_sub.updated()) { + vehicle_attitude_s vehicle_attitude{}; + _vehicle_attitude_sub.copy(&vehicle_attitude); + _vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(_vehicle_attitude_quaternion).psi(); + } + + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = hrt_absolute_time(); + rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); + + if (fabsf(manual_control_setpoint.roll) > FLT_EPSILON + || fabsf(rover_throttle_setpoint.throttle_body_x) < FLT_EPSILON) { + _stab_yaw_setpoint = NAN; + + // Rate control + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = math::interpolate(math::deadzone(manual_control_setpoint.roll, + _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate, _max_yaw_rate);; + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); + + // Set uncontrolled setpoint invalid + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = NAN; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + + } else { // Heading control + if (!PX4_ISFINITE(_stab_yaw_setpoint)) { + _stab_yaw_setpoint = _vehicle_yaw; + } + + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = _stab_yaw_setpoint; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + } +} + +void ManualMode::position() +{ + if (_vehicle_attitude_sub.updated()) { + vehicle_attitude_s vehicle_attitude{}; + _vehicle_attitude_sub.copy(&vehicle_attitude); + _vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(_vehicle_attitude_quaternion).psi(); + } + + if (_vehicle_local_position_sub.updated()) { + vehicle_local_position_s vehicle_local_position{}; + _vehicle_local_position_sub.copy(&vehicle_local_position); + + if (!_global_ned_proj_ref.isInitialized() + || (_global_ned_proj_ref.getProjectionReferenceTimestamp() != vehicle_local_position.ref_timestamp)) { + _global_ned_proj_ref.initReference(vehicle_local_position.ref_lat, vehicle_local_position.ref_lon, + vehicle_local_position.ref_timestamp); + } + + _curr_pos_ned = Vector2f(vehicle_local_position.x, vehicle_local_position.y); + } + + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + + const float speed_setpoint = math::interpolate(manual_control_setpoint.throttle, + -1.f, 1.f, -_param_ro_speed_limit.get(), _param_ro_speed_limit.get()); + + if (fabsf(manual_control_setpoint.roll) > FLT_EPSILON + || fabsf(speed_setpoint) < FLT_EPSILON) { + _pos_ctl_course_direction = Vector2f(NAN, NAN); + + // Speed control + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = hrt_absolute_time(); + rover_velocity_setpoint.speed = speed_setpoint; + rover_velocity_setpoint.bearing = NAN; + rover_velocity_setpoint.yaw = NAN; + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); + + // Rate control + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = math::interpolate(math::deadzone(manual_control_setpoint.roll, + _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate, _max_yaw_rate);; + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); + + // Set uncontrolled setpoints invalid + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = NAN; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = NAN; + rover_position_setpoint.position_ned[1] = NAN; + rover_position_setpoint.start_ned[0] = NAN; + rover_position_setpoint.start_ned[1] = NAN; + rover_position_setpoint.arrival_speed = NAN; + rover_position_setpoint.cruising_speed = NAN; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + + } else { // Course control + if (!_pos_ctl_course_direction.isAllFinite()) { + _pos_ctl_course_direction = Vector2f(cos(_vehicle_yaw), sin(_vehicle_yaw)); + _pos_ctl_start_position_ned = _curr_pos_ned; + } + + // Construct a 'target waypoint' for course control s.t. it is never within the maximum lookahead of the rover + const Vector2f start_to_curr_pos = _curr_pos_ned - _pos_ctl_start_position_ned; + const float vector_scaling = fabsf(start_to_curr_pos * _pos_ctl_course_direction) + _param_pp_lookahd_max.get(); + const Vector2f target_waypoint_ned = _pos_ctl_start_position_ned + sign(speed_setpoint) * + vector_scaling * _pos_ctl_course_direction; + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = target_waypoint_ned(0); + rover_position_setpoint.position_ned[1] = target_waypoint_ned(1); + rover_position_setpoint.start_ned[0] = _pos_ctl_start_position_ned(0); + rover_position_setpoint.start_ned[1] = _pos_ctl_start_position_ned(1); + rover_position_setpoint.arrival_speed = NAN; + rover_position_setpoint.cruising_speed = speed_setpoint; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + } +} + +void ManualMode::reset() +{ + _stab_yaw_setpoint = NAN; + _pos_ctl_course_direction = Vector2f(NAN, NAN); + _pos_ctl_start_position_ned = Vector2f(NAN, NAN); + _curr_pos_ned = Vector2f(NAN, NAN); +} diff --git a/src/modules/rover_ackermann/DriveModes/ManualMode/ManualMode.hpp b/src/modules/rover_ackermann/DriveModes/ManualMode/ManualMode.hpp new file mode 100644 index 0000000000..4f6c4a0506 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/ManualMode/ManualMode.hpp @@ -0,0 +1,132 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * @brief Class for ackermann manual mode. + */ +class ManualMode : public ModuleParams +{ +public: + /** + * @brief Constructor for ManualMode. + * @param parent The parent ModuleParams object. + */ + ManualMode(ModuleParams *parent); + ~ManualMode() = default; + + /** + * @brief Publish roverThrottleSetpoint and roverSteeringSetpoint from manualControlSetpoint. + */ + void manual(); + + /** + * @brief Generate and publish roverThrottleSetpoint and RoverRateSetpoint from manualControlSetpoint. + */ + void acro(); + + /** + * @brief Generate and publish roverThrottleSetpoint and RoverAttitudeSetpoint from manualControlSetpoint. + */ + void stab(); + + /** + * @brief Generate and publish roverVelocitySetpoint from manualControlSetpoint. + */ + void position(); + + /** + * @brief Reset manual mode variables. + */ + void reset(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + // uORB subscriptions + uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; + uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; + uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; + + // uORB publications + uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; + uORB::Publication _rover_steering_setpoint_pub{ORB_ID(rover_steering_setpoint)}; + uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; + uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; + uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; + uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; + + // Variables + MapProjection _global_ned_proj_ref{}; // Transform global to NED coordinates + Quatf _vehicle_attitude_quaternion{}; + Vector2f _pos_ctl_course_direction{NAN, NAN}; + Vector2f _pos_ctl_start_position_ned{NAN, NAN}; + Vector2f _curr_pos_ned{NAN, NAN}; + float _stab_yaw_setpoint{NAN}; + float _vehicle_yaw{NAN}; + float _max_yaw_rate{NAN}; + + DEFINE_PARAMETERS( + (ParamFloat) _param_ro_yaw_rate_limit, + (ParamFloat) _param_ro_yaw_p, + (ParamFloat) _param_ro_yaw_stick_dz, + (ParamFloat) _param_pp_lookahd_max, + (ParamFloat) _param_ro_speed_limit + ) +}; diff --git a/src/modules/rover_ackermann/DriveModes/OffboardMode/CMakeLists.txt b/src/modules/rover_ackermann/DriveModes/OffboardMode/CMakeLists.txt new file mode 100644 index 0000000000..a73b2dedd8 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/OffboardMode/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(OffboardMode + OffboardMode.cpp +) + +target_include_directories(OffboardMode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_ackermann/DriveModes/OffboardMode/OffboardMode.cpp b/src/modules/rover_ackermann/DriveModes/OffboardMode/OffboardMode.cpp new file mode 100644 index 0000000000..dfd12cddb0 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/OffboardMode/OffboardMode.cpp @@ -0,0 +1,79 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "OffboardMode.hpp" + +using namespace time_literals; + +OffboardMode::OffboardMode(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); + _rover_velocity_setpoint_pub.advertise(); + _rover_position_setpoint_pub.advertise(); +} + +void OffboardMode::updateParams() +{ + ModuleParams::updateParams(); +} + +void OffboardMode::offboardControl() +{ + offboard_control_mode_s offboard_control_mode{}; + _offboard_control_mode_sub.copy(&offboard_control_mode); + + trajectory_setpoint_s trajectory_setpoint{}; + _trajectory_setpoint_sub.copy(&trajectory_setpoint); + + if (offboard_control_mode.position) { + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = trajectory_setpoint.position[0]; + rover_position_setpoint.position_ned[1] = trajectory_setpoint.position[1]; + rover_position_setpoint.start_ned[0] = NAN; + rover_position_setpoint.start_ned[1] = NAN; + rover_position_setpoint.cruising_speed = NAN; + rover_position_setpoint.arrival_speed = NAN; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + + } else if (offboard_control_mode.velocity) { + const Vector2f velocity_ned(trajectory_setpoint.velocity[0], trajectory_setpoint.velocity[1]); + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = hrt_absolute_time(); + rover_velocity_setpoint.speed = velocity_ned.norm(); + rover_velocity_setpoint.bearing = atan2f(velocity_ned(1), velocity_ned(0)); + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); + + } +} diff --git a/src/modules/rover_ackermann/DriveModes/OffboardMode/OffboardMode.hpp b/src/modules/rover_ackermann/DriveModes/OffboardMode/OffboardMode.hpp new file mode 100644 index 0000000000..331df5e907 --- /dev/null +++ b/src/modules/rover_ackermann/DriveModes/OffboardMode/OffboardMode.hpp @@ -0,0 +1,85 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include + +using namespace matrix; + +/** + * @brief Class for ackermann manual mode. + */ +class OffboardMode : public ModuleParams +{ +public: + /** + * @brief Constructor for OffboardMode. + * @param parent The parent ModuleParams object. + */ + OffboardMode(ModuleParams *parent); + ~OffboardMode() = default; + + /** + * @brief Generate and publish roverSetpoints from trajectorySetpoint. + */ + void offboardControl(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + // uORB subscriptions + uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; + uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; + + // uORB publications + uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; + uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; +}; diff --git a/src/modules/rover_ackermann/RoverAckermann.cpp b/src/modules/rover_ackermann/RoverAckermann.cpp index c586741e25..f22676e3fa 100644 --- a/src/modules/rover_ackermann/RoverAckermann.cpp +++ b/src/modules/rover_ackermann/RoverAckermann.cpp @@ -39,8 +39,6 @@ RoverAckermann::RoverAckermann() : ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl) { - _rover_throttle_setpoint_pub.advertise(); - _rover_steering_setpoint_pub.advertise(); updateParams(); } @@ -53,115 +51,135 @@ bool RoverAckermann::init() void RoverAckermann::updateParams() { ModuleParams::updateParams(); - - if (_param_ra_str_rate_limit.get() > FLT_EPSILON && _param_ra_max_str_ang.get() > FLT_EPSILON) { - _servo_setpoint.setSlewRate((M_DEG_TO_RAD_F * _param_ra_str_rate_limit.get()) / _param_ra_max_str_ang.get()); - } - - if (_param_ro_accel_limit.get() > FLT_EPSILON && _param_ro_max_thr_speed.get() > FLT_EPSILON) { - _motor_setpoint.setSlewRate(_param_ro_accel_limit.get() / _param_ro_max_thr_speed.get()); - } } void RoverAckermann::Run() { if (_parameter_update_sub.updated()) { + parameter_update_s param_update{}; + _parameter_update_sub.copy(¶m_update); updateParams(); + runSanityChecks(); } - const hrt_abstime timestamp_prev = _timestamp; - _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - - _ackermann_pos_control.updatePosControl(); - _ackermann_vel_control.updateVelControl(); - _ackermann_att_control.updateAttControl(); - _ackermann_rate_control.updateRateControl(); - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } + vehicle_control_mode_s vehicle_control_mode{}; + _vehicle_control_mode_sub.copy(&vehicle_control_mode); - const bool full_manual_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled - && !_vehicle_control_mode.flag_control_position_enabled && !_vehicle_control_mode.flag_control_attitude_enabled - && !_vehicle_control_mode.flag_control_rates_enabled; + // Run sanity checks if the control mode changes (Note: This has to be done this way, because the topic is periodically updated at 2 Hz) + if (_vehicle_control_mode.flag_control_manual_enabled != vehicle_control_mode.flag_control_manual_enabled || + _vehicle_control_mode.flag_control_auto_enabled != vehicle_control_mode.flag_control_auto_enabled || + _vehicle_control_mode.flag_control_offboard_enabled != vehicle_control_mode.flag_control_offboard_enabled || + _vehicle_control_mode.flag_control_position_enabled != vehicle_control_mode.flag_control_position_enabled || + _vehicle_control_mode.flag_control_velocity_enabled != vehicle_control_mode.flag_control_velocity_enabled || + _vehicle_control_mode.flag_control_attitude_enabled != vehicle_control_mode.flag_control_attitude_enabled || + _vehicle_control_mode.flag_control_rates_enabled != vehicle_control_mode.flag_control_rates_enabled || + _vehicle_control_mode.flag_control_allocation_enabled != vehicle_control_mode.flag_control_allocation_enabled) { + _vehicle_control_mode = vehicle_control_mode; + runSanityChecks(); + reset(); - if (full_manual_mode_enabled) { // Manual mode - generateSteeringAndThrottleSetpoint(); - } - - generateActuatorSetpoint(); - -} - -void RoverAckermann::generateSteeringAndThrottleSetpoint() -{ - manual_control_setpoint_s manual_control_setpoint{}; - - if (_manual_control_setpoint_sub.update(&manual_control_setpoint)) { - rover_steering_setpoint_s rover_steering_setpoint{}; - rover_steering_setpoint.timestamp = _timestamp; - rover_steering_setpoint.normalized_steering_angle = manual_control_setpoint.roll; - _rover_steering_setpoint_pub.publish(rover_steering_setpoint); - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - } -} - -void RoverAckermann::generateActuatorSetpoint() -{ - if (_rover_throttle_setpoint_sub.updated()) { - _rover_throttle_setpoint_sub.copy(&_rover_throttle_setpoint); - } - - if (_actuator_motors_sub.updated()) { - actuator_motors_s actuator_motors{}; - _actuator_motors_sub.copy(&actuator_motors); - _current_motor_setpoint = actuator_motors.control[0]; - } - - if (_vehicle_control_mode.flag_armed) { - actuator_motors_s actuator_motors{}; - actuator_motors.reversible_flags = _param_r_rev.get(); - actuator_motors.control[0] = RoverControl::throttleControl(_motor_setpoint, - _rover_throttle_setpoint.throttle_body_x, _current_motor_setpoint, _param_ro_accel_limit.get(), - _param_ro_decel_limit.get(), - _param_ro_max_thr_speed.get(), _dt); - actuator_motors.timestamp = _timestamp; - _actuator_motors_pub.publish(actuator_motors); - } - - if (_rover_steering_setpoint_sub.updated()) { - _rover_steering_setpoint_sub.copy(&_rover_steering_setpoint); - } - - if (_actuator_servos_sub.updated()) { - actuator_servos_s actuator_servos{}; - _actuator_servos_sub.copy(&actuator_servos); - _current_servo_setpoint = actuator_servos.control[0]; - } - - if (_param_ra_str_rate_limit.get() > FLT_EPSILON - && _param_ra_max_str_ang.get() > FLT_EPSILON) { // Apply slew rate if configured - if (fabsf(_servo_setpoint.getState() - _current_servo_setpoint) > fabsf( - _rover_steering_setpoint.normalized_steering_angle - - _current_servo_setpoint)) { - _servo_setpoint.setForcedValue(_current_servo_setpoint); + } else { + _vehicle_control_mode = vehicle_control_mode; } - _servo_setpoint.update(_rover_steering_setpoint.normalized_steering_angle, _dt); - - } else { - _servo_setpoint.setForcedValue(_rover_steering_setpoint.normalized_steering_angle); } - actuator_servos_s actuator_servos{}; - actuator_servos.control[0] = _servo_setpoint.getState(); - actuator_servos.timestamp = _timestamp; - _actuator_servos_pub.publish(actuator_servos); + if (_vehicle_control_mode.flag_armed && _sanity_checks_passed) { + + _was_armed = true; + + // Generate setpoints + if (_vehicle_control_mode.flag_control_manual_enabled) { + manualControl(); + + } else if (_vehicle_control_mode.flag_control_auto_enabled) { + _auto_mode.autoControl(); + + } else if (_vehicle_control_mode.flag_control_offboard_enabled) { + _offboard_mode.offboardControl(); + } + + updateControllers(); + + } else if (_was_armed) { // Reset all controllers and stop the vehicle + reset(); + _ackermann_act_control.stopVehicle(); + _was_armed = false; + } + +} + +void RoverAckermann::manualControl() +{ + if (_vehicle_control_mode.flag_control_position_enabled) { + _manual_mode.position(); + + } else if (_vehicle_control_mode.flag_control_attitude_enabled) { + _manual_mode.stab(); + + } else if (_vehicle_control_mode.flag_control_rates_enabled) { + _manual_mode.acro(); + + } else if (_vehicle_control_mode.flag_control_allocation_enabled) { + _manual_mode.manual(); + } +} + +void RoverAckermann::updateControllers() +{ + if (_vehicle_control_mode.flag_control_position_enabled) { + _ackermann_pos_control.updatePosControl(); + } + + if (_vehicle_control_mode.flag_control_velocity_enabled) { + _ackermann_vel_control.updateVelControl(); + } + + if (_vehicle_control_mode.flag_control_attitude_enabled) { + _ackermann_att_control.updateAttControl(); + } + + if (_vehicle_control_mode.flag_control_rates_enabled) { + _ackermann_rate_control.updateRateControl(); + } + + if (_vehicle_control_mode.flag_control_allocation_enabled) { + _ackermann_act_control.updateActControl(); + } +} + +void RoverAckermann::runSanityChecks() +{ + if (_vehicle_control_mode.flag_control_rates_enabled && !_ackermann_rate_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + if (_vehicle_control_mode.flag_control_attitude_enabled && !_ackermann_att_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + if (_vehicle_control_mode.flag_control_velocity_enabled && !_ackermann_vel_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + if (_vehicle_control_mode.flag_control_position_enabled && !_ackermann_pos_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + _sanity_checks_passed = true; +} + +void RoverAckermann::reset() +{ + _ackermann_vel_control.reset(); + _ackermann_att_control.reset(); + _ackermann_rate_control.reset(); + _manual_mode.reset(); } int RoverAckermann::task_spawn(int argc, char *argv[]) diff --git a/src/modules/rover_ackermann/RoverAckermann.hpp b/src/modules/rover_ackermann/RoverAckermann.hpp index 1a1cd0c987..a0232b4b45 100644 --- a/src/modules/rover_ackermann/RoverAckermann.hpp +++ b/src/modules/rover_ackermann/RoverAckermann.hpp @@ -40,28 +40,24 @@ #include #include -// Libraries -#include -#include -#include +// Library includes +#include // uORB includes #include #include -#include #include -#include -#include -#include -#include #include -#include // Local includes +#include "AckermannActControl/AckermannActControl.hpp" #include "AckermannRateControl/AckermannRateControl.hpp" #include "AckermannAttControl/AckermannAttControl.hpp" #include "AckermannVelControl/AckermannVelControl.hpp" #include "AckermannPosControl/AckermannPosControl.hpp" +#include "DriveModes/AutoMode/AutoMode.hpp" +#include "DriveModes/ManualMode/ManualMode.hpp" +#include "DriveModes/OffboardMode/OffboardMode.hpp" class RoverAckermann : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem @@ -94,56 +90,45 @@ private: void Run() override; /** - * @brief Generate and publish roverSteeringSetpoint and roverThrottleSetpoint from manualControlSetpoint (Manual Mode). + * @brief Generate and publish roverSetpoints from manualControlSetpoints. */ - void generateSteeringAndThrottleSetpoint(); + void manualControl(); /** - * @brief Generate and publish actuatorMotors/actuatorServos setpoints from roverThrottleSetpoint/roverSteeringSetpoint. + * @brief Update the active controllers. */ - void generateActuatorSetpoint(); + void updateControllers(); + + /** + * @brief Check proper parameter setup for the controllers + * + * Modifies: + * + * - _sanity_checks_passed: true if checks for all active controllers pass + */ + void runSanityChecks(); + + /** + * @brief Reset controllers and manual mode variables. + */ + void reset(); // uORB subscriptions uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)}; - uORB::Subscription _rover_steering_setpoint_sub{ORB_ID(rover_steering_setpoint)}; - uORB::Subscription _rover_throttle_setpoint_sub{ORB_ID(rover_throttle_setpoint)}; uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; - uORB::Subscription _actuator_servos_sub{ORB_ID(actuator_servos)}; - uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; vehicle_control_mode_s _vehicle_control_mode{}; - rover_steering_setpoint_s _rover_steering_setpoint{}; - rover_throttle_setpoint_s _rover_throttle_setpoint{}; - - // uORB publications - uORB::PublicationMulti _actuator_motors_pub{ORB_ID(actuator_motors)}; - uORB::Publication _actuator_servos_pub{ORB_ID(actuator_servos)}; - uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; - uORB::Publication _rover_steering_setpoint_pub{ORB_ID(rover_steering_setpoint)}; // Class instances + AckermannActControl _ackermann_act_control{this}; AckermannRateControl _ackermann_rate_control{this}; AckermannAttControl _ackermann_att_control{this}; AckermannVelControl _ackermann_vel_control{this}; AckermannPosControl _ackermann_pos_control{this}; + AutoMode _auto_mode{this}; + ManualMode _manual_mode{this}; + OffboardMode _offboard_mode{this}; // Variables - hrt_abstime _timestamp{0}; - float _dt{0.f}; - float _current_servo_setpoint{0.f}; - float _current_motor_setpoint{0.f}; - - // Controllers - SlewRate _servo_setpoint{0.f}; - SlewRate _motor_setpoint{0.f}; - - // Parameters - DEFINE_PARAMETERS( - (ParamInt) _param_r_rev, - (ParamFloat) _param_ra_str_rate_limit, - (ParamFloat) _param_ra_max_str_ang, - (ParamFloat) _param_ro_accel_limit, - (ParamFloat) _param_ro_decel_limit, - (ParamFloat) _param_ro_max_thr_speed - ) + bool _sanity_checks_passed{true}; // True if checks for all active controllers pass + bool _was_armed{false}; // True if the vehicle was armed before the last reset }; diff --git a/src/modules/rover_differential/CMakeLists.txt b/src/modules/rover_differential/CMakeLists.txt index a850e5949c..05aef49cfe 100644 --- a/src/modules/rover_differential/CMakeLists.txt +++ b/src/modules/rover_differential/CMakeLists.txt @@ -31,10 +31,12 @@ # ############################################################################ +add_subdirectory(DifferentialActControl) add_subdirectory(DifferentialRateControl) add_subdirectory(DifferentialAttControl) add_subdirectory(DifferentialVelControl) add_subdirectory(DifferentialPosControl) +add_subdirectory(DifferentialDriveModes) px4_add_module( MODULE modules__rover_differential @@ -43,10 +45,14 @@ px4_add_module( RoverDifferential.cpp RoverDifferential.hpp DEPENDS + DifferentialActControl DifferentialRateControl DifferentialAttControl DifferentialVelControl DifferentialPosControl + DifferentialAutoMode + DifferentialManualMode + DifferentialOffboardMode px4_work_queue rover_control pure_pursuit diff --git a/src/modules/rover_differential/DifferentialActControl/CMakeLists.txt b/src/modules/rover_differential/DifferentialActControl/CMakeLists.txt new file mode 100644 index 0000000000..b3ab8187bd --- /dev/null +++ b/src/modules/rover_differential/DifferentialActControl/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(DifferentialActControl + DifferentialActControl.cpp +) + +target_include_directories(DifferentialActControl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_differential/DifferentialActControl/DifferentialActControl.cpp b/src/modules/rover_differential/DifferentialActControl/DifferentialActControl.cpp new file mode 100644 index 0000000000..c9b67b0b6c --- /dev/null +++ b/src/modules/rover_differential/DifferentialActControl/DifferentialActControl.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "DifferentialActControl.hpp" + +using namespace time_literals; + +DifferentialActControl::DifferentialActControl(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); +} + +void DifferentialActControl::updateParams() +{ + ModuleParams::updateParams(); + + if (_param_ro_accel_limit.get() > FLT_EPSILON && _param_ro_max_thr_speed.get() > FLT_EPSILON) { + _adjusted_throttle_setpoint.setSlewRate(_param_ro_accel_limit.get() / _param_ro_max_thr_speed.get()); + } +} + +void DifferentialActControl::updateActControl() +{ + const hrt_abstime timestamp_prev = _timestamp; + _timestamp = hrt_absolute_time(); + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; + + // Motor control + if (_rover_throttle_setpoint_sub.updated()) { + rover_throttle_setpoint_s rover_throttle_setpoint{}; + _rover_throttle_setpoint_sub.copy(&rover_throttle_setpoint); + _throttle_setpoint = rover_throttle_setpoint.throttle_body_x; + } + + if (_rover_steering_setpoint_sub.updated()) { + rover_steering_setpoint_s rover_steering_setpoint{}; + _rover_steering_setpoint_sub.copy(&rover_steering_setpoint); + _speed_diff_setpoint = rover_steering_setpoint.normalized_speed_diff; + } + + if (PX4_ISFINITE(_throttle_setpoint) && PX4_ISFINITE(_speed_diff_setpoint)) { + actuator_motors_s actuator_motors_sub{}; + _actuator_motors_sub.copy(&actuator_motors_sub); + const float current_throttle = (actuator_motors_sub.control[0] + actuator_motors_sub.control[1]) / 2.f; + const float adjusted_throttle_setpoint = RoverControl::throttleControl(_adjusted_throttle_setpoint, + _throttle_setpoint, current_throttle, _param_ro_accel_limit.get(), + _param_ro_decel_limit.get(), _param_ro_max_thr_speed.get(), dt); + actuator_motors_s actuator_motors{}; + actuator_motors.reversible_flags = _param_r_rev.get(); + computeInverseKinematics(adjusted_throttle_setpoint, _speed_diff_setpoint).copyTo(actuator_motors.control); + actuator_motors.timestamp = _timestamp; + _actuator_motors_pub.publish(actuator_motors); + + } + +} + +Vector2f DifferentialActControl::computeInverseKinematics(float throttle, const float speed_diff_normalized) +{ + float max_motor_command = fabsf(throttle) + fabsf(speed_diff_normalized); + + if (max_motor_command > 1.0f) { // Prioritize yaw rate if a normalized motor command exceeds limit of 1 + float excess = fabsf(max_motor_command - 1.0f); + throttle -= sign(throttle) * excess; + } + + // Calculate the left and right wheel speeds + return Vector2f(throttle - speed_diff_normalized, + throttle + speed_diff_normalized); +} + +void DifferentialActControl::stopVehicle() +{ + actuator_motors_s actuator_motors{}; + actuator_motors.reversible_flags = _param_r_rev.get(); + actuator_motors.control[0] = 0.f; + actuator_motors.control[1] = 0.f; + actuator_motors.timestamp = _timestamp; + _actuator_motors_pub.publish(actuator_motors); +} diff --git a/src/modules/rover_differential/DifferentialActControl/DifferentialActControl.hpp b/src/modules/rover_differential/DifferentialActControl/DifferentialActControl.hpp new file mode 100644 index 0000000000..2076542e4a --- /dev/null +++ b/src/modules/rover_differential/DifferentialActControl/DifferentialActControl.hpp @@ -0,0 +1,113 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include + +/** + * @brief Class for differential actuator control. + */ +class DifferentialActControl : public ModuleParams +{ +public: + /** + * @brief Constructor for DifferentialActControl. + * @param parent The parent ModuleParams object. + */ + DifferentialActControl(ModuleParams *parent); + ~DifferentialActControl() = default; + + /** + * @brief Generate and publish actuatorMotors setpoints from roverThrottleSetpoint/roverSteeringSetpoint. + */ + void updateActControl(); + + /** + * @brief Stop the vehicle by sending 0 commands to motors and servos. + */ + void stopVehicle(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + /** + * @brief Compute normalized motor commands based on normalized setpoints. + * @param throttle Normalized speed in body x direction [-1, 1]. + * @param speed_diff_normalized Speed difference between left and right wheels [-1, 1]. + * @return Motor speeds for the right and left motors [-1, 1]. + */ + Vector2f computeInverseKinematics(float throttle, float speed_diff_normalized); + + // uORB subscriptions + uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; + uORB::Subscription _rover_steering_setpoint_sub{ORB_ID(rover_steering_setpoint)}; + uORB::Subscription _rover_throttle_setpoint_sub{ORB_ID(rover_throttle_setpoint)}; + + // uORB publications + uORB::Publication _actuator_motors_pub{ORB_ID(actuator_motors)}; + + // Variables + hrt_abstime _timestamp{0}; + float _throttle_setpoint{NAN}; + float _speed_diff_setpoint{NAN}; + + // Controllers + SlewRate _adjusted_throttle_setpoint{0.f}; + + // Parameters + DEFINE_PARAMETERS( + (ParamInt) _param_r_rev, + (ParamFloat) _param_ro_accel_limit, + (ParamFloat) _param_ro_decel_limit, + (ParamFloat) _param_ro_max_thr_speed + ) +}; diff --git a/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.cpp b/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.cpp index 5bc9ab380a..99217341d7 100644 --- a/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.cpp +++ b/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.cpp @@ -38,8 +38,6 @@ using namespace time_literals; DifferentialAttControl::DifferentialAttControl(ModuleParams *parent) : ModuleParams(parent) { _rover_rate_setpoint_pub.advertise(); - _rover_throttle_setpoint_pub.advertise(); - _rover_attitude_setpoint_pub.advertise(); _rover_attitude_status_pub.advertise(); updateParams(); } @@ -52,21 +50,20 @@ void DifferentialAttControl::updateParams() _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; } + // Set up PID controller _pid_yaw.setGains(_param_ro_yaw_p.get(), 0.f, 0.f); _pid_yaw.setIntegralLimit(_max_yaw_rate); _pid_yaw.setOutputLimit(_max_yaw_rate); + + // Set up slew rate _adjusted_yaw_setpoint.setSlewRate(_max_yaw_rate); } void DifferentialAttControl::updateAttControl() { - const hrt_abstime timestamp_prev = _timestamp; + hrt_abstime timestamp_prev = _timestamp; _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; if (_vehicle_attitude_sub.updated()) { vehicle_attitude_s vehicle_attitude{}; @@ -75,17 +72,20 @@ void DifferentialAttControl::updateAttControl() _vehicle_yaw = matrix::Eulerf(vehicle_attitude_quaternion).psi(); } - if (_vehicle_control_mode.flag_control_attitude_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) { + if (_rover_attitude_setpoint_sub.updated()) { + rover_attitude_setpoint_s rover_attitude_setpoint{}; + _rover_attitude_setpoint_sub.copy(&rover_attitude_setpoint); + _yaw_setpoint = rover_attitude_setpoint.yaw_setpoint; + } - if (_vehicle_control_mode.flag_control_manual_enabled || _vehicle_control_mode.flag_control_offboard_enabled) { - generateAttitudeAndThrottleSetpoint(); - } + if (PX4_ISFINITE(_yaw_setpoint)) { + const float yaw_rate_setpoint = RoverControl::attitudeControl(_adjusted_yaw_setpoint, _pid_yaw, _max_yaw_rate, + _vehicle_yaw, _yaw_setpoint, dt); + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = _timestamp; + rover_rate_setpoint.yaw_rate_setpoint = math::constrain(yaw_rate_setpoint, -_max_yaw_rate, _max_yaw_rate); + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); - generateRateSetpoint(); - - } else { // Reset pid and slew rate when attitude control is not active - _pid_yaw.resetIntegral(); - _adjusted_yaw_setpoint.setForcedValue(0.f); } // Publish attitude controller status (logging only) @@ -97,96 +97,6 @@ void DifferentialAttControl::updateAttControl() } -void DifferentialAttControl::generateAttitudeAndThrottleSetpoint() -{ - const bool stab_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled - && !_vehicle_control_mode.flag_control_position_enabled && _vehicle_control_mode.flag_control_attitude_enabled; - - if (stab_mode_enabled && _manual_control_setpoint_sub.updated()) { // Stab Mode - manual_control_setpoint_s manual_control_setpoint{}; - - if (_manual_control_setpoint_sub.update(&manual_control_setpoint)) { - - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - - const float yaw_delta = math::interpolate(math::deadzone(manual_control_setpoint.roll, - _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate / _param_ro_yaw_p.get(), - _max_yaw_rate / _param_ro_yaw_p.get()); - - if (fabsf(yaw_delta) > FLT_EPSILON - || fabsf(rover_throttle_setpoint.throttle_body_x) < FLT_EPSILON) { // Closed loop yaw rate control - _stab_yaw_ctl = false; - const float yaw_setpoint = matrix::wrap_pi(_vehicle_yaw + yaw_delta); - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = yaw_setpoint; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - - } else { // Closed loop yaw control if the yaw rate input is zero (keep current yaw) - if (!_stab_yaw_ctl) { - _stab_yaw_setpoint = _vehicle_yaw; - _stab_yaw_ctl = true; - } - - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = _stab_yaw_setpoint; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - } - - - } - - } else if (_vehicle_control_mode.flag_control_offboard_enabled) { // Offboard attitude control - trajectory_setpoint_s trajectory_setpoint{}; - _trajectory_setpoint_sub.copy(&trajectory_setpoint); - - if (_offboard_control_mode_sub.updated()) { - _offboard_control_mode_sub.copy(&_offboard_control_mode); - } - - const bool offboard_att_control = _offboard_control_mode.attitude && !_offboard_control_mode.position - && !_offboard_control_mode.velocity; - - if (offboard_att_control && PX4_ISFINITE(trajectory_setpoint.yaw)) { - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = trajectory_setpoint.yaw; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - } - } -} - -void DifferentialAttControl::generateRateSetpoint() -{ - if (_rover_attitude_setpoint_sub.updated()) { - _rover_attitude_setpoint_sub.copy(&_rover_attitude_setpoint); - } - - if (_rover_rate_setpoint_sub.updated()) { - _rover_rate_setpoint_sub.copy(&_rover_rate_setpoint); - } - - // Check if a new rate setpoint was already published from somewhere else - if (_rover_rate_setpoint.timestamp > _last_rate_setpoint_update - && _rover_rate_setpoint.timestamp > _rover_attitude_setpoint.timestamp) { - return; - } - - const float yaw_rate_setpoint = RoverControl::attitudeControl(_adjusted_yaw_setpoint, _pid_yaw, _max_yaw_rate, - _vehicle_yaw, _rover_attitude_setpoint.yaw_setpoint, _dt); - - _last_rate_setpoint_update = _timestamp; - rover_rate_setpoint_s rover_rate_setpoint{}; - rover_rate_setpoint.timestamp = _timestamp; - rover_rate_setpoint.yaw_rate_setpoint = math::constrain(yaw_rate_setpoint, -_max_yaw_rate, _max_yaw_rate); - _rover_rate_setpoint_pub.publish(rover_rate_setpoint); -} - bool DifferentialAttControl::runSanityChecks() { bool ret = true; @@ -197,13 +107,9 @@ bool DifferentialAttControl::runSanityChecks() if (_param_ro_yaw_p.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("differential_att_control_conf_invalid_yaw_p"), events::Log::Error, - "Invalid configuration of necessary parameter RO_YAW_P", _param_ro_yaw_p.get()); - } + events::send(events::ID("differential_att_control_conf_invalid_yaw_p"), events::Log::Error, + "Invalid configuration of necessary parameter RO_YAW_P", _param_ro_yaw_p.get()); } - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.hpp b/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.hpp index 82087f8278..205d1d3d0e 100644 --- a/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.hpp +++ b/src/modules/rover_differential/DifferentialAttControl/DifferentialAttControl.hpp @@ -48,15 +48,9 @@ #include #include #include -#include -#include -#include +#include #include #include -#include -#include -#include -#include /** * @brief Class for differential attitude control. @@ -72,10 +66,21 @@ public: ~DifferentialAttControl() = default; /** - * @brief Update attitude controller. + * @brief Generate and publish roverRateSetpoint from roverAttitudeSetpoint. */ void updateAttControl(); + /** + * @brief Reset attitude controller. + */ + void reset() {_pid_yaw.resetIntegral(); _yaw_setpoint = NAN;}; + + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + protected: /** * @brief Update the parameters of the module. @@ -83,52 +88,19 @@ protected: void updateParams() override; private: - /** - * @brief Generate and publish roverAttitudeSetpoint and roverThrottleSetpoint from manualControlSetpoint (Stab Mode) - * or trajectorySetpoint (Offboard attitude control). - */ - void generateAttitudeAndThrottleSetpoint(); - - /** - * @brief Generate and publish roverRateSetpoint from roverAttitudeSetpoint. - */ - void generateRateSetpoint(); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); - // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; - uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; - uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; uORB::Subscription _rover_attitude_setpoint_sub{ORB_ID(rover_attitude_setpoint)}; - uORB::Subscription _rover_rate_setpoint_sub{ORB_ID(rover_rate_setpoint)}; - vehicle_control_mode_s _vehicle_control_mode{}; - rover_attitude_setpoint_s _rover_attitude_setpoint{}; - rover_rate_setpoint_s _rover_rate_setpoint{}; - offboard_control_mode_s _offboard_control_mode{}; // uORB publications - uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; - uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; - uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; - uORB::Publication _rover_attitude_status_pub{ORB_ID(rover_attitude_status)}; + uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; + uORB::Publication _rover_attitude_status_pub{ORB_ID(rover_attitude_status)}; // Variables - hrt_abstime _timestamp{0}; - hrt_abstime _last_rate_setpoint_update{0}; float _vehicle_yaw{0.f}; - float _dt{0.f}; + hrt_abstime _timestamp{0}; float _max_yaw_rate{0.f}; - float _stab_yaw_setpoint{0.f}; // Yaw setpoint if rover is doing yaw control in stab mode - bool _stab_yaw_ctl{false}; // Indicates if rover is doing yaw control in stab mode - bool _prev_param_check_passed{true}; + float _yaw_setpoint{NAN}; // Controllers PID _pid_yaw; diff --git a/src/modules/rover_differential/DifferentialDriveModes/CMakeLists.txt b/src/modules/rover_differential/DifferentialDriveModes/CMakeLists.txt new file mode 100644 index 0000000000..66fcb084b0 --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/CMakeLists.txt @@ -0,0 +1,36 @@ +############################################################################ +# +# 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. +# +############################################################################ + +add_subdirectory(DifferentialAutoMode) +add_subdirectory(DifferentialManualMode) +add_subdirectory(DifferentialOffboardMode) diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/CMakeLists.txt b/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/CMakeLists.txt new file mode 100644 index 0000000000..cce9baecc3 --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(DifferentialAutoMode +DifferentialAutoMode.cpp +) + +target_include_directories(DifferentialAutoMode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.cpp b/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.cpp new file mode 100644 index 0000000000..bf3e4bf98b --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.cpp @@ -0,0 +1,113 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "DifferentialAutoMode.hpp" + +using namespace time_literals; + +DifferentialAutoMode::DifferentialAutoMode(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); + _rover_position_setpoint_pub.advertise(); +} + +void DifferentialAutoMode::updateParams() +{ + ModuleParams::updateParams(); +} + +void DifferentialAutoMode::autoControl() +{ + if (_position_setpoint_triplet_sub.updated()) { + position_setpoint_triplet_s position_setpoint_triplet{}; + _position_setpoint_triplet_sub.copy(&position_setpoint_triplet); + int curr_wp_type = position_setpoint_triplet.current.type; + + vehicle_local_position_s vehicle_local_position{}; + _vehicle_local_position_sub.copy(&vehicle_local_position); + + MapProjection global_ned_proj_ref{}; + + if (!global_ned_proj_ref.isInitialized() + || (global_ned_proj_ref.getProjectionReferenceTimestamp() != vehicle_local_position.ref_timestamp)) { + global_ned_proj_ref.initReference(vehicle_local_position.ref_lat, vehicle_local_position.ref_lon, + vehicle_local_position.ref_timestamp); + } + + Vector2f curr_pos_ned = Vector2f(vehicle_local_position.x, vehicle_local_position.y); + Vector2f curr_wp_ned{NAN, NAN}; + Vector2f prev_wp_ned{NAN, NAN}; + Vector2f next_wp_ned{NAN, NAN}; + + RoverControl::globalToLocalSetpointTriplet(curr_wp_ned, prev_wp_ned, next_wp_ned, position_setpoint_triplet, + curr_pos_ned, global_ned_proj_ref); + + float waypoint_transition_angle = RoverControl::calcWaypointTransitionAngle(prev_wp_ned, curr_wp_ned, next_wp_ned); + + // Waypoint cruising speed + float cruising_speed = position_setpoint_triplet.current.cruising_speed > 0.f ? math::constrain( + position_setpoint_triplet.current.cruising_speed, 0.f, _param_ro_speed_limit.get()) : _param_ro_speed_limit.get(); + + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = curr_wp_ned(0); + rover_position_setpoint.position_ned[1] = curr_wp_ned(1); + rover_position_setpoint.start_ned[0] = prev_wp_ned(0); + rover_position_setpoint.start_ned[1] = prev_wp_ned(1); + rover_position_setpoint.arrival_speed = arrivalSpeed(cruising_speed, waypoint_transition_angle, + _param_ro_speed_limit.get(), _param_rd_trans_drv_trn.get(), _param_rd_miss_spd_gain.get(), curr_wp_type); + rover_position_setpoint.cruising_speed = cruising_speed; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + } +} + +float DifferentialAutoMode::arrivalSpeed(const float cruising_speed, const float waypoint_transition_angle, + const float max_speed, const float trans_drv_trn, const float miss_spd_gain, int curr_wp_type) +{ + // Upcoming stop + if (!PX4_ISFINITE(waypoint_transition_angle) || waypoint_transition_angle < M_PI_F - trans_drv_trn + || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_LAND || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_IDLE) { + return 0.f; + } + + // Straight line speed + if (miss_spd_gain > FLT_EPSILON) { + const float speed_reduction = math::constrain(miss_spd_gain * math::interpolate(M_PI_F - waypoint_transition_angle, + 0.f, M_PI_F, 0.f, 1.f), 0.f, 1.f); + return max_speed * (1.f - speed_reduction); + } + + return cruising_speed; // Fallthrough + +} diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.hpp b/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.hpp new file mode 100644 index 0000000000..72e5259cb2 --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.hpp @@ -0,0 +1,101 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include + +// uORB includes +#include +#include +#include +#include +#include + +/** + * @brief Class for differential auto mode. + */ +class DifferentialAutoMode : public ModuleParams +{ +public: + /** + * @brief Constructor for auto mode. + * @param parent The parent ModuleParams object. + */ + DifferentialAutoMode(ModuleParams *parent); + ~DifferentialAutoMode() = default; + + /** + * @brief Generate and publish roverPositionSetpoint from positionSetpointTriplet. + */ + void autoControl(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + /** + * @brief Calculate the speed at which the rover should arrive at the current waypoint. During waypoint transition the speed is restricted to + * Maximum_speed * (1 - normalized_transition_angle * RM_MISS_VEL_GAIN). + * @param cruising_speed Cruising speed [m/s]. + * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] + * @param max_speed Maximum speed setpoint [m/s] + * @param trans_drv_trn Heading error threshold to switch from driving to turning [rad]. + * @param miss_spd_gain Tuning parameter for the speed reduction during waypoint transition. + * @param curr_wp_type Type of the current waypoint. + * @return Speed setpoint [m/s]. + */ + float arrivalSpeed(const float cruising_speed, const float waypoint_transition_angle, const float max_speed, + const float trans_drv_trn, const float miss_spd_gain, int curr_wp_type); + + // uORB subscriptions + uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; + uORB::Subscription _position_setpoint_triplet_sub{ORB_ID(position_setpoint_triplet)}; + + // uORB publications + uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; + + DEFINE_PARAMETERS( + (ParamFloat) _param_ro_speed_limit, + (ParamFloat) _param_rd_trans_drv_trn, + (ParamFloat) _param_rd_miss_spd_gain + ) +}; diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/CMakeLists.txt b/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/CMakeLists.txt new file mode 100644 index 0000000000..b5323230ff --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(DifferentialManualMode + DifferentialManualMode.cpp +) + +target_include_directories(DifferentialManualMode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.cpp b/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.cpp new file mode 100644 index 0000000000..99f8f8e2d0 --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.cpp @@ -0,0 +1,219 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "DifferentialManualMode.hpp" + +using namespace time_literals; + +DifferentialManualMode::DifferentialManualMode(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); + _rover_throttle_setpoint_pub.advertise(); + _rover_steering_setpoint_pub.advertise(); + _rover_rate_setpoint_pub.advertise(); + _rover_attitude_setpoint_pub.advertise(); + _rover_velocity_setpoint_pub.advertise(); + _rover_position_setpoint_pub.advertise(); +} + +void DifferentialManualMode::updateParams() +{ + ModuleParams::updateParams(); + _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; +} + +void DifferentialManualMode::manual() +{ + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + rover_steering_setpoint_s rover_steering_setpoint{}; + rover_steering_setpoint.timestamp = hrt_absolute_time(); + rover_steering_setpoint.normalized_speed_diff = manual_control_setpoint.roll; + _rover_steering_setpoint_pub.publish(rover_steering_setpoint); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = hrt_absolute_time(); + rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); +} + +void DifferentialManualMode::acro() +{ + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = hrt_absolute_time(); + rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = math::interpolate(manual_control_setpoint.roll, -1.f, 1.f, + -_max_yaw_rate, _max_yaw_rate); + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); +} + +void DifferentialManualMode::stab() +{ + if (_vehicle_attitude_sub.updated()) { + vehicle_attitude_s vehicle_attitude{}; + _vehicle_attitude_sub.copy(&vehicle_attitude); + matrix::Quatf vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(vehicle_attitude_quaternion).psi(); + } + + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = hrt_absolute_time(); + rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); + + if (fabsf(manual_control_setpoint.roll) > FLT_EPSILON + || fabsf(rover_throttle_setpoint.throttle_body_x) < FLT_EPSILON) { + _stab_yaw_setpoint = NAN; + + // Rate control + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = math::interpolate(math::deadzone(manual_control_setpoint.roll, + _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate, _max_yaw_rate);; + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); + + // Set uncontrolled setpoint invalid + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = NAN; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + + } else { // Heading control + if (!PX4_ISFINITE(_stab_yaw_setpoint)) { + _stab_yaw_setpoint = _vehicle_yaw; + } + + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = _stab_yaw_setpoint; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + } +} + +void DifferentialManualMode::position() +{ + if (_vehicle_attitude_sub.updated()) { + vehicle_attitude_s vehicle_attitude{}; + _vehicle_attitude_sub.copy(&vehicle_attitude); + matrix::Quatf vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(vehicle_attitude_quaternion).psi(); + } + + if (_vehicle_local_position_sub.updated()) { + vehicle_local_position_s vehicle_local_position{}; + _vehicle_local_position_sub.copy(&vehicle_local_position); + _curr_pos_ned = Vector2f(vehicle_local_position.x, vehicle_local_position.y); + } + + manual_control_setpoint_s manual_control_setpoint{}; + _manual_control_setpoint_sub.copy(&manual_control_setpoint); + + const float speed_setpoint = math::interpolate(manual_control_setpoint.throttle, + -1.f, 1.f, -_param_ro_speed_limit.get(), _param_ro_speed_limit.get()); + + if (fabsf(manual_control_setpoint.roll) > FLT_EPSILON + || fabsf(speed_setpoint) < FLT_EPSILON) { + _pos_ctl_course_direction = Vector2f(NAN, NAN); + + // Speed control + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = hrt_absolute_time(); + rover_velocity_setpoint.speed = speed_setpoint; + rover_velocity_setpoint.bearing = NAN; + rover_velocity_setpoint.yaw = NAN; + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); + + // Rate control + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = math::interpolate(math::deadzone(manual_control_setpoint.roll, + _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -_max_yaw_rate, _max_yaw_rate);; + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); + + // Set uncontrolled setpoints invalid + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = NAN; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = NAN; + rover_position_setpoint.position_ned[1] = NAN; + rover_position_setpoint.start_ned[0] = NAN; + rover_position_setpoint.start_ned[1] = NAN; + rover_position_setpoint.arrival_speed = NAN; + rover_position_setpoint.cruising_speed = NAN; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + + } else { // Course control + if (!_pos_ctl_course_direction.isAllFinite()) { + _pos_ctl_course_direction = Vector2f(cos(_vehicle_yaw), sin(_vehicle_yaw)); + _pos_ctl_start_position_ned = _curr_pos_ned; + } + + // Construct a 'target waypoint' for course control s.t. it is never within the maximum lookahead of the rover + const Vector2f start_to_curr_pos = _curr_pos_ned - _pos_ctl_start_position_ned; + const float vector_scaling = fabsf(start_to_curr_pos * _pos_ctl_course_direction) + _param_pp_lookahd_max.get(); + const Vector2f target_waypoint_ned = _pos_ctl_start_position_ned + sign(speed_setpoint) * + vector_scaling * _pos_ctl_course_direction; + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = target_waypoint_ned(0); + rover_position_setpoint.position_ned[1] = target_waypoint_ned(1); + rover_position_setpoint.start_ned[0] = _pos_ctl_start_position_ned(0); + rover_position_setpoint.start_ned[1] = _pos_ctl_start_position_ned(1); + rover_position_setpoint.arrival_speed = NAN; + rover_position_setpoint.cruising_speed = speed_setpoint; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + } +} + +void DifferentialManualMode::reset() +{ + _stab_yaw_setpoint = NAN; + _pos_ctl_course_direction = Vector2f(NAN, NAN); + _pos_ctl_start_position_ned = Vector2f(NAN, NAN); + _curr_pos_ned = Vector2f(NAN, NAN); +} diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.hpp b/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.hpp new file mode 100644 index 0000000000..bce5d36ea5 --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.hpp @@ -0,0 +1,130 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace matrix; + +/** + * @brief Class for differential manual mode. + */ +class DifferentialManualMode : public ModuleParams +{ +public: + /** + * @brief Constructor for DifferentialManualMode. + * @param parent The parent ModuleParams object. + */ + DifferentialManualMode(ModuleParams *parent); + ~DifferentialManualMode() = default; + + /** + * @brief Publish roverThrottleSetpoint and roverSteeringSetpoint from manualControlSetpoint. + */ + void manual(); + + /** + * @brief Generate and publish roverThrottleSetpoint/RoverRateSetpoint from manualControlSetpoint. + */ + void acro(); + + /** + * @brief Generate and publish roverSetpoints from manualControlSetpoint. + */ + void stab(); + + /** + * @brief Generate and publish roverSetpoints from manualControlSetpoint. + */ + void position(); + + /** + * @brief Reset manual mode variables. + */ + void reset(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + // uORB subscriptions + uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; + uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; + uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; + + // uORB publications + uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; + uORB::Publication _rover_steering_setpoint_pub{ORB_ID(rover_steering_setpoint)}; + uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; + uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; + uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; + uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; + + // Variables + Vector2f _pos_ctl_course_direction{NAN, NAN}; + Vector2f _pos_ctl_start_position_ned{NAN, NAN}; + Vector2f _curr_pos_ned{NAN, NAN}; + float _stab_yaw_setpoint{NAN}; + float _vehicle_yaw{NAN}; + float _max_yaw_rate{NAN}; + + DEFINE_PARAMETERS( + (ParamFloat) _param_ro_yaw_rate_limit, + (ParamFloat) _param_ro_yaw_stick_dz, + (ParamFloat) _param_pp_lookahd_max, + (ParamFloat) _param_ro_speed_limit + ) +}; diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/CMakeLists.txt b/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/CMakeLists.txt new file mode 100644 index 0000000000..8e782323bd --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/CMakeLists.txt @@ -0,0 +1,38 @@ +############################################################################ +# +# 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. +# +############################################################################ + +px4_add_library(DifferentialOffboardMode + DifferentialOffboardMode.cpp +) + +target_include_directories(DifferentialOffboardMode PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.cpp b/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.cpp new file mode 100644 index 0000000000..eca17e18ff --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#include "DifferentialOffboardMode.hpp" + +using namespace time_literals; + +DifferentialOffboardMode::DifferentialOffboardMode(ModuleParams *parent) : ModuleParams(parent) +{ + updateParams(); + _rover_rate_setpoint_pub.advertise(); + _rover_attitude_setpoint_pub.advertise(); + _rover_velocity_setpoint_pub.advertise(); + _rover_position_setpoint_pub.advertise(); +} + +void DifferentialOffboardMode::updateParams() +{ + ModuleParams::updateParams(); +} + +void DifferentialOffboardMode::offboardControl() +{ + offboard_control_mode_s offboard_control_mode{}; + _offboard_control_mode_sub.copy(&offboard_control_mode); + + trajectory_setpoint_s trajectory_setpoint{}; + _trajectory_setpoint_sub.copy(&trajectory_setpoint); + + if (offboard_control_mode.position) { + rover_position_setpoint_s rover_position_setpoint{}; + rover_position_setpoint.timestamp = hrt_absolute_time(); + rover_position_setpoint.position_ned[0] = trajectory_setpoint.position[0]; + rover_position_setpoint.position_ned[1] = trajectory_setpoint.position[1]; + rover_position_setpoint.start_ned[0] = NAN; + rover_position_setpoint.start_ned[1] = NAN; + rover_position_setpoint.cruising_speed = NAN; + rover_position_setpoint.arrival_speed = NAN; + rover_position_setpoint.yaw = NAN; + _rover_position_setpoint_pub.publish(rover_position_setpoint); + + } else if (offboard_control_mode.velocity) { + const Vector2f velocity_ned(trajectory_setpoint.velocity[0], trajectory_setpoint.velocity[1]); + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = hrt_absolute_time(); + rover_velocity_setpoint.speed = velocity_ned.norm(); + rover_velocity_setpoint.bearing = atan2f(velocity_ned(1), velocity_ned(0)); + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); + + } else if (offboard_control_mode.attitude) { + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = hrt_absolute_time(); + rover_attitude_setpoint.yaw_setpoint = trajectory_setpoint.yaw; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + + } else if (offboard_control_mode.body_rate) { + rover_rate_setpoint_s rover_rate_setpoint{}; + rover_rate_setpoint.timestamp = hrt_absolute_time(); + rover_rate_setpoint.yaw_rate_setpoint = trajectory_setpoint.yawspeed; + _rover_rate_setpoint_pub.publish(rover_rate_setpoint); + } +} diff --git a/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.hpp b/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.hpp new file mode 100644 index 0000000000..ebdeef0112 --- /dev/null +++ b/src/modules/rover_differential/DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.hpp @@ -0,0 +1,89 @@ +/**************************************************************************** + * + * 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. + * + ****************************************************************************/ + +#pragma once + +// PX4 includes +#include + +// Libraries +#include +#include + +// uORB includes +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace matrix; + +/** + * @brief Class for differential manual mode. + */ +class DifferentialOffboardMode : public ModuleParams +{ +public: + /** + * @brief Constructor for DifferentialOffboardMode. + * @param parent The parent ModuleParams object. + */ + DifferentialOffboardMode(ModuleParams *parent); + ~DifferentialOffboardMode() = default; + + /** + * @brief Generate and publish roverSetpoints from trajectorySetpoint. + */ + void offboardControl(); + +protected: + /** + * @brief Update the parameters of the module. + */ + void updateParams() override; + +private: + // uORB subscriptions + uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; + uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; + + // uORB publications + uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; + uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; + uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; + uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; +}; diff --git a/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.cpp b/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.cpp index f2f37d0a0a..52a5a00eeb 100644 --- a/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.cpp +++ b/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.cpp @@ -37,13 +37,8 @@ using namespace time_literals; DifferentialPosControl::DifferentialPosControl(ModuleParams *parent) : ModuleParams(parent) { - _rover_velocity_setpoint_pub.advertise(); - _rover_position_setpoint_pub.advertise(); _pure_pursuit_status_pub.advertise(); - - // Initially set to NaN to indicate that the rover has no position setpoint - _rover_position_setpoint.position_ned[0] = NAN; - _rover_position_setpoint.position_ned[1] = NAN; + _rover_velocity_setpoint_pub.advertise(); updateParams(); } @@ -51,284 +46,88 @@ DifferentialPosControl::DifferentialPosControl(ModuleParams *parent) : ModulePar void DifferentialPosControl::updateParams() { ModuleParams::updateParams(); - _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; } void DifferentialPosControl::updatePosControl() { - const hrt_abstime timestamp_prev = _timestamp; - _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - updateSubscriptions(); - if (_vehicle_control_mode.flag_control_position_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) { - if (_vehicle_control_mode.flag_control_offboard_enabled) { - generatePositionSetpoint(); + hrt_abstime timestamp = hrt_absolute_time(); + + if (_rover_position_setpoint_sub.updated()) { + _rover_position_setpoint_sub.copy(&_rover_position_setpoint); + _start_ned = Vector2f(_rover_position_setpoint.start_ned[0], _rover_position_setpoint.start_ned[1]); + _start_ned = _start_ned.isAllFinite() ? _start_ned : _curr_pos_ned; + } + + const Vector2f target_waypoint_ned(_rover_position_setpoint.position_ned[0], _rover_position_setpoint.position_ned[1]); + + if (target_waypoint_ned.isAllFinite()) { + float distance_to_target = (target_waypoint_ned - _curr_pos_ned).norm(); + + if (distance_to_target > _param_nav_acc_rad.get()) { + float arrival_speed = PX4_ISFINITE(_rover_position_setpoint.arrival_speed) ? _rover_position_setpoint.arrival_speed : + 0.f; + const float distance = arrival_speed > 0.f + FLT_EPSILON ? distance_to_target - _param_nav_acc_rad.get() : + distance_to_target; + float speed_setpoint = math::trajectory::computeMaxSpeedFromDistance(_param_ro_jerk_limit.get(), + _param_ro_decel_limit.get(), distance, fabsf(arrival_speed)); + speed_setpoint = math::min(speed_setpoint, _param_ro_speed_limit.get()); + + if (PX4_ISFINITE(_rover_position_setpoint.cruising_speed)) { + speed_setpoint = sign(_rover_position_setpoint.cruising_speed) * math::min(speed_setpoint, + fabsf(_rover_position_setpoint.cruising_speed)); + } + + pure_pursuit_status_s pure_pursuit_status{}; + pure_pursuit_status.timestamp = timestamp; + + const float yaw_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), + _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), target_waypoint_ned, _start_ned, + _curr_pos_ned, fabsf(speed_setpoint)); + _pure_pursuit_status_pub.publish(pure_pursuit_status); + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = timestamp; + rover_velocity_setpoint.speed = speed_setpoint; + rover_velocity_setpoint.bearing = speed_setpoint > -FLT_EPSILON ? yaw_setpoint : matrix::wrap_pi( + yaw_setpoint + M_PI_F); + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); + + } else { + rover_velocity_setpoint_s rover_velocity_setpoint{}; + rover_velocity_setpoint.timestamp = timestamp; + rover_velocity_setpoint.speed = 0.f; + rover_velocity_setpoint.bearing = _vehicle_yaw; + _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); } - - generateVelocitySetpoint(); - } } void DifferentialPosControl::updateSubscriptions() { - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } - if (_vehicle_attitude_sub.updated()) { vehicle_attitude_s vehicle_attitude{}; _vehicle_attitude_sub.copy(&vehicle_attitude); - _vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); - _vehicle_yaw = matrix::Eulerf(_vehicle_attitude_quaternion).psi(); + matrix::Quatf vehicle_attitude_quaternion = matrix::Quatf(vehicle_attitude.q); + _vehicle_yaw = matrix::Eulerf(vehicle_attitude_quaternion).psi(); } if (_vehicle_local_position_sub.updated()) { vehicle_local_position_s vehicle_local_position{}; _vehicle_local_position_sub.copy(&vehicle_local_position); - - if (!_global_ned_proj_ref.isInitialized() - || (_global_ned_proj_ref.getProjectionReferenceTimestamp() != vehicle_local_position.ref_timestamp)) { - _global_ned_proj_ref.initReference(vehicle_local_position.ref_lat, vehicle_local_position.ref_lon, - vehicle_local_position.ref_timestamp); - } - _curr_pos_ned = Vector2f(vehicle_local_position.x, vehicle_local_position.y); - Vector3f velocity_ned(vehicle_local_position.vx, vehicle_local_position.vy, vehicle_local_position.vz); - Vector3f velocity_xyz = _vehicle_attitude_quaternion.rotateVectorInverse(velocity_ned); - Vector2f velocity_2d = Vector2f(velocity_xyz(0), velocity_xyz(1)); - _vehicle_speed = velocity_2d.norm() > _param_ro_speed_th.get() ? sign(velocity_2d(0)) * velocity_2d.norm() : 0.f; } } -void DifferentialPosControl::generatePositionSetpoint() -{ - if (_offboard_control_mode_sub.updated()) { - _offboard_control_mode_sub.copy(&_offboard_control_mode); - } - - if (!_offboard_control_mode.position) { - return; - } - - trajectory_setpoint_s trajectory_setpoint{}; - _trajectory_setpoint_sub.copy(&trajectory_setpoint); - - // Translate trajectory setpoint to rover position setpoint - rover_position_setpoint_s rover_position_setpoint{}; - rover_position_setpoint.timestamp = _timestamp; - rover_position_setpoint.position_ned[0] = trajectory_setpoint.position[0]; - rover_position_setpoint.position_ned[1] = trajectory_setpoint.position[1]; - rover_position_setpoint.cruising_speed = _param_ro_speed_limit.get(); - rover_position_setpoint.yaw = NAN; - _rover_position_setpoint_pub.publish(rover_position_setpoint); - -} - -void DifferentialPosControl::generateVelocitySetpoint() -{ - if (_vehicle_control_mode.flag_control_manual_enabled && _vehicle_control_mode.flag_control_position_enabled) { - manualPositionMode(); - - } else if (_vehicle_control_mode.flag_control_auto_enabled) { - autoPositionMode(); - - } else if (_rover_position_setpoint_sub.copy(&_rover_position_setpoint) - && PX4_ISFINITE(_rover_position_setpoint.position_ned[0]) && PX4_ISFINITE(_rover_position_setpoint.position_ned[1])) { - goToPositionMode(); - } - -} - -void DifferentialPosControl::manualPositionMode() -{ - manual_control_setpoint_s manual_control_setpoint{}; - _manual_control_setpoint_sub.copy(&manual_control_setpoint); - - const float speed_setpoint = math::interpolate(manual_control_setpoint.throttle, - -1.f, 1.f, -_param_ro_speed_limit.get(), _param_ro_speed_limit.get()); - const float bearing_scaling = math::min(_max_yaw_rate / _param_ro_yaw_p.get(), - _param_rd_trans_drv_trn.get() - FLT_EPSILON); - const float bearing_delta = math::interpolate(math::deadzone(manual_control_setpoint.roll, - _param_ro_yaw_stick_dz.get()), -1.f, 1.f, -bearing_scaling, bearing_scaling); - - if (fabsf(speed_setpoint) < FLT_EPSILON) { // Turn on spot - _course_control = false; - const float bearing_setpoint = matrix::wrap_pi(_vehicle_yaw + bearing_delta); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = 0.f; - rover_velocity_setpoint.bearing = bearing_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else if (fabsf(bearing_delta) > FLT_EPSILON) { // Closed loop yaw rate control - _course_control = false; - const float bearing_setpoint = matrix::wrap_pi(_vehicle_yaw + bearing_delta); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = bearing_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else { // Course control if the steering input is zero (keep driving on a straight line) - if (!_course_control) { - _pos_ctl_course_direction = Vector2f(cos(_vehicle_yaw), sin(_vehicle_yaw)); - _pos_ctl_start_position_ned = _curr_pos_ned; - _course_control = true; - } - - // Construct a 'target waypoint' for course control s.t. it is never within the maximum lookahead of the rover - const Vector2f start_to_curr_pos = _curr_pos_ned - _pos_ctl_start_position_ned; - const float vector_scaling = fabsf(start_to_curr_pos * _pos_ctl_course_direction) + _param_pp_lookahd_max.get(); - const Vector2f target_waypoint_ned = _pos_ctl_start_position_ned + sign(speed_setpoint) * - vector_scaling * _pos_ctl_course_direction; - pure_pursuit_status_s pure_pursuit_status{}; - pure_pursuit_status.timestamp = _timestamp; - const float bearing_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), - _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), target_waypoint_ned, _pos_ctl_start_position_ned, - _curr_pos_ned, fabsf(speed_setpoint)); - _pure_pursuit_status_pub.publish(pure_pursuit_status); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = speed_setpoint > -FLT_EPSILON ? bearing_setpoint : matrix::wrap_pi( - bearing_setpoint + M_PI_F); - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - } -} - -void DifferentialPosControl::autoPositionMode() -{ - if (_position_setpoint_triplet_sub.updated()) { - position_setpoint_triplet_s position_setpoint_triplet{}; - _position_setpoint_triplet_sub.copy(&position_setpoint_triplet); - _curr_wp_type = position_setpoint_triplet.current.type; - - RoverControl::globalToLocalSetpointTriplet(_curr_wp_ned, _prev_wp_ned, _next_wp_ned, position_setpoint_triplet, - _curr_pos_ned, _global_ned_proj_ref); - - _waypoint_transition_angle = RoverControl::calcWaypointTransitionAngle(_prev_wp_ned, _curr_wp_ned, _next_wp_ned); - - // Waypoint cruising speed - _cruising_speed = position_setpoint_triplet.current.cruising_speed > 0.f ? math::constrain( - position_setpoint_triplet.current.cruising_speed, 0.f, _param_ro_speed_limit.get()) : _param_ro_speed_limit.get(); - } - - // Distances to waypoints - const float distance_to_curr_wp = sqrt(powf(_curr_pos_ned(0) - _curr_wp_ned(0), - 2) + powf(_curr_pos_ned(1) - _curr_wp_ned(1), 2)); - - // Check stopping conditions - bool auto_stop{false}; - - if (_curr_wp_type == position_setpoint_s::SETPOINT_TYPE_LAND - || _curr_wp_type == position_setpoint_s::SETPOINT_TYPE_IDLE - || !_next_wp_ned.isAllFinite()) { // Check stopping conditions - auto_stop = distance_to_curr_wp < _param_nav_acc_rad.get(); - } - - if (auto_stop) { - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = 0.f; - rover_velocity_setpoint.bearing = _vehicle_yaw; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else { - const float speed_setpoint = calcSpeedSetpoint(_cruising_speed, distance_to_curr_wp, _param_ro_decel_limit.get(), - _param_ro_jerk_limit.get(), _waypoint_transition_angle, _param_ro_speed_limit.get(), _param_rd_trans_drv_trn.get(), - _param_rd_miss_spd_gain.get(), _curr_wp_type); - pure_pursuit_status_s pure_pursuit_status{}; - pure_pursuit_status.timestamp = _timestamp; - const float bearing_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), - _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), _curr_wp_ned, _prev_wp_ned, _curr_pos_ned, - fabsf(speed_setpoint)); - _pure_pursuit_status_pub.publish(pure_pursuit_status); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = bearing_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - } - -} - -float DifferentialPosControl::calcSpeedSetpoint(const float cruising_speed, const float distance_to_curr_wp, - const float max_decel, const float max_jerk, const float waypoint_transition_angle, const float max_speed, - const float trans_drv_trn, const float miss_spd_gain, int curr_wp_type) -{ - // Upcoming stop - if (max_decel > FLT_EPSILON && max_jerk > FLT_EPSILON && (!PX4_ISFINITE(waypoint_transition_angle) - || _waypoint_transition_angle < M_PI_F - trans_drv_trn || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_LAND - || curr_wp_type == position_setpoint_s::SETPOINT_TYPE_IDLE)) { - const float straight_line_speed = math::trajectory::computeMaxSpeedFromDistance(max_jerk, - max_decel, distance_to_curr_wp, 0.f); - return math::min(straight_line_speed, cruising_speed); - } - - // Straight line speed - if (max_jerk > FLT_EPSILON && max_decel > FLT_EPSILON && miss_spd_gain > FLT_EPSILON) { - const float speed_reduction = math::constrain(miss_spd_gain * math::interpolate(M_PI_F - _waypoint_transition_angle, - 0.f, M_PI_F, 0.f, 1.f), 0.f, 1.f); - const float straight_line_speed = math::trajectory::computeMaxSpeedFromDistance(max_jerk, max_decel, - distance_to_curr_wp, - max_speed * (1.f - speed_reduction)); - return math::min(straight_line_speed, cruising_speed); - } - - return cruising_speed; // Fallthrough - -} - -void DifferentialPosControl::goToPositionMode() -{ - const Vector2f target_waypoint_ned(_rover_position_setpoint.position_ned[0], _rover_position_setpoint.position_ned[1]); - const float distance_to_target = (target_waypoint_ned - _curr_pos_ned).norm(); - - if (distance_to_target > _param_nav_acc_rad.get()) { - float speed_setpoint = math::trajectory::computeMaxSpeedFromDistance(_param_ro_jerk_limit.get(), - _param_ro_decel_limit.get(), distance_to_target, 0.f); - const float max_speed = PX4_ISFINITE(_rover_position_setpoint.cruising_speed) ? - _rover_position_setpoint.cruising_speed : - _param_ro_speed_limit.get(); - speed_setpoint = math::min(speed_setpoint, max_speed); - pure_pursuit_status_s pure_pursuit_status{}; - pure_pursuit_status.timestamp = _timestamp; - const float bearing_setpoint = PurePursuit::calcTargetBearing(pure_pursuit_status, _param_pp_lookahd_gain.get(), - _param_pp_lookahd_max.get(), _param_pp_lookahd_min.get(), target_waypoint_ned, _curr_pos_ned, - _curr_pos_ned, fabsf(speed_setpoint)); - _pure_pursuit_status_pub.publish(pure_pursuit_status); - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = speed_setpoint; - rover_velocity_setpoint.bearing = bearing_setpoint; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - - } else { - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = 0.f; - rover_velocity_setpoint.bearing = _vehicle_yaw; - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - } -} - bool DifferentialPosControl::runSanityChecks() { bool ret = true; - if (_param_ro_yaw_rate_limit.get() < FLT_EPSILON) { - ret = false; - } - if (_param_ro_speed_limit.get() < FLT_EPSILON) { ret = false; } - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.hpp b/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.hpp index 4cf34ac7f3..52c5253ef7 100644 --- a/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.hpp +++ b/src/modules/rover_differential/DifferentialPosControl/DifferentialPosControl.hpp @@ -41,7 +41,6 @@ #include #include #include -#include #include // uORB includes @@ -50,14 +49,7 @@ #include #include #include -#include -#include -#include -#include #include -#include -#include -#include #include using namespace matrix; @@ -76,10 +68,16 @@ public: ~DifferentialPosControl() = default; /** - * @brief Update position controller. + * @brief Generate and publish roverVelocitySetpoint from roverPositionSetpoint. */ void updatePosControl(); + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + protected: /** * @brief Update the parameters of the module. @@ -92,117 +90,28 @@ private: */ void updateSubscriptions(); - /** - * @brief Generate and publish roverPositionSetpoint from position of trajectorySetpoint. - */ - void generatePositionSetpoint(); - - /** - * @brief Generate and publish roverVelocitySetpoint from manualControlSetpoint (Position Mode) or - * positionSetpointTriplet (Auto Mode) or roverPositionSetpoint. - */ - void generateVelocitySetpoint(); - - /** - * @brief Generate and publish roverVelocitySetpoint from manualControlSetpoint. - */ - void manualPositionMode(); - - /** - * @brief Generate and publish roverVelocitySetpoint from positionSetpointTriplet. - */ - void autoPositionMode(); - - /** - * @brief Generate and publish roverVelocitySetpoint from roverPositionSetpoint. - */ - void goToPositionMode(); - - /** - * @brief Calculate the speed setpoint. During waypoint transition the speed is restricted to - * Maximum_speed * (1 - normalized_transition_angle * RM_MISS_VEL_GAIN). - * On straight lines it is based on a speed trajectory such that the rover will arrive at the next waypoint transition - * with the desired waypoiny transition speed under consideration of the maximum deceleration and jerk. - * @param cruising_speed Cruising speed [m/s]. - * @param distance_to_curr_wp Distance to the current waypoint [m]. - * @param max_decel Maximum allowed deceleration [m/s^2]. - * @param max_jerk Maximum allowed jerk [m/s^3]. - * @param waypoint_transition_angle Angle between the prevWP-currWP and currWP-nextWP line segments [rad] - * @param max_speed Maximum speed setpoint [m/s] - * @param trans_drv_trn Heading error threshold to switch from driving to turning [rad]. - * @param miss_spd_gain Tuning parameter for the speed reduction during waypoint transition. - * @param curr_wp_type Type of the current waypoint. - * @return Speed setpoint [m/s]. - */ - float calcSpeedSetpoint(float cruising_speed, float distance_to_curr_wp, float max_decel, float max_jerk, - float waypoint_transition_angle, float max_speed, float trans_drv_trn, float miss_spd_gain, int curr_wp_type); - - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); - // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; - uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; - uORB::Subscription _position_setpoint_triplet_sub{ORB_ID(position_setpoint_triplet)}; - uORB::Subscription _rover_velocity_setpoint_sub{ORB_ID(rover_velocity_setpoint)}; uORB::Subscription _rover_position_setpoint_sub{ORB_ID(rover_position_setpoint)}; - vehicle_control_mode_s _vehicle_control_mode{}; - offboard_control_mode_s _offboard_control_mode{}; rover_position_setpoint_s _rover_position_setpoint{}; - // uORB publications - uORB::Publication _rover_velocity_status_pub{ORB_ID(rover_velocity_status)}; uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; uORB::Publication _pure_pursuit_status_pub{ORB_ID(pure_pursuit_status)}; - uORB::Publication _rover_position_setpoint_pub{ORB_ID(rover_position_setpoint)}; // Variables - hrt_abstime _timestamp{0}; - Quatf _vehicle_attitude_quaternion{}; Vector2f _curr_pos_ned{}; - Vector2f _pos_ctl_course_direction{}; - Vector2f _pos_ctl_start_position_ned{}; - float _vehicle_speed{0.f}; // [m/s] Positiv: Forwards, Negativ: Backwards + Vector2f _start_ned{}; float _vehicle_yaw{0.f}; - float _max_yaw_rate{0.f}; - float _dt{0.f}; - int _curr_wp_type{position_setpoint_s::SETPOINT_TYPE_IDLE}; - bool _course_control{false}; // Indicates if the rover is doing course control in manual position mode. - bool _prev_param_check_passed{true}; - - // Waypoint variables - Vector2f _curr_wp_ned{}; - Vector2f _prev_wp_ned{}; - Vector2f _next_wp_ned{}; - float _cruising_speed{0.f}; - float _waypoint_transition_angle{0.f}; // Angle between the prevWP-currWP and currWP-nextWP line segments [rad] - - // Class Instances - MapProjection _global_ned_proj_ref{}; // Transform global to NED coordinates DEFINE_PARAMETERS( - (ParamFloat) _param_rd_trans_drv_trn, - (ParamFloat) _param_rd_miss_spd_gain, - (ParamFloat) _param_ro_max_thr_speed, - (ParamFloat) _param_ro_yaw_stick_dz, (ParamFloat) _param_ro_decel_limit, (ParamFloat) _param_ro_jerk_limit, (ParamFloat) _param_ro_speed_limit, - (ParamFloat) _param_ro_speed_th, - (ParamFloat) _param_ro_yaw_p, (ParamFloat) _param_pp_lookahd_gain, (ParamFloat) _param_pp_lookahd_max, (ParamFloat) _param_pp_lookahd_min, - (ParamFloat) _param_ro_yaw_rate_limit, (ParamFloat) _param_nav_acc_rad ) }; diff --git a/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.cpp b/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.cpp index 8b8e7005a1..045d992157 100644 --- a/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.cpp +++ b/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.cpp @@ -37,8 +37,6 @@ using namespace time_literals; DifferentialRateControl::DifferentialRateControl(ModuleParams *parent) : ModuleParams(parent) { - _rover_rate_setpoint_pub.advertise(); - _rover_throttle_setpoint_pub.advertise(); _rover_steering_setpoint_pub.advertise(); _rover_rate_status_pub.advertise(); updateParams(); @@ -47,24 +45,21 @@ DifferentialRateControl::DifferentialRateControl(ModuleParams *parent) : ModuleP void DifferentialRateControl::updateParams() { ModuleParams::updateParams(); - _max_yaw_rate = _param_ro_yaw_rate_limit.get() * M_DEG_TO_RAD_F; - _max_yaw_accel = _param_ro_yaw_accel_limit.get() * M_DEG_TO_RAD_F; - _max_yaw_decel = _param_ro_yaw_decel_limit.get() * M_DEG_TO_RAD_F; + + // Set up PID controller _pid_yaw_rate.setGains(_param_ro_yaw_rate_p.get(), _param_ro_yaw_rate_i.get(), 0.f); _pid_yaw_rate.setIntegralLimit(1.f); _pid_yaw_rate.setOutputLimit(1.f); - _adjusted_yaw_rate_setpoint.setSlewRate(_max_yaw_accel); + + // Set up slew rate + _adjusted_yaw_rate_setpoint.setSlewRate(_param_ro_yaw_accel_limit.get() * M_DEG_TO_RAD_F); } void DifferentialRateControl::updateRateControl() { - const hrt_abstime timestamp_prev = _timestamp; + hrt_abstime timestamp_prev = _timestamp; _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; if (_vehicle_angular_velocity_sub.updated()) { vehicle_angular_velocity_s vehicle_angular_velocity{}; @@ -73,16 +68,25 @@ void DifferentialRateControl::updateRateControl() vehicle_angular_velocity.xyz[2] : 0.f; } - if (_vehicle_control_mode.flag_control_rates_enabled && _vehicle_control_mode.flag_armed && runSanityChecks()) { - if (_vehicle_control_mode.flag_control_manual_enabled || _vehicle_control_mode.flag_control_offboard_enabled) { - generateRateAndThrottleSetpoint(); - } + if (_rover_rate_setpoint_sub.updated()) { + rover_rate_setpoint_s rover_rate_setpoint{}; + _rover_rate_setpoint_sub.copy(&rover_rate_setpoint); + _yaw_rate_setpoint = rover_rate_setpoint.yaw_rate_setpoint; + } - generateSteeringSetpoint(); + if (PX4_ISFINITE(_yaw_rate_setpoint)) { + const float yaw_rate_setpoint = fabsf(_yaw_rate_setpoint) > _param_ro_yaw_rate_th.get() * M_DEG_TO_RAD_F ? + _yaw_rate_setpoint : 0.f; + const float speed_diff_normalized = RoverControl::rateControl(_adjusted_yaw_rate_setpoint, _pid_yaw_rate, + yaw_rate_setpoint, _vehicle_yaw_rate, _param_rd_max_thr_yaw_r.get(), _param_ro_yaw_accel_limit.get() * M_DEG_TO_RAD_F, + _param_ro_yaw_decel_limit.get() * M_DEG_TO_RAD_F, _param_rd_wheel_track.get(), dt); + rover_steering_setpoint_s rover_steering_setpoint{}; + rover_steering_setpoint.timestamp = _timestamp; + rover_steering_setpoint.normalized_speed_diff = speed_diff_normalized; + _rover_steering_setpoint_pub.publish(rover_steering_setpoint); - } else { // Reset controller and slew rate when rate control is not active + } else { _pid_yaw_rate.resetIntegral(); - _adjusted_yaw_rate_setpoint.setForcedValue(0.f); } // Publish rate controller status (logging only) @@ -95,96 +99,17 @@ void DifferentialRateControl::updateRateControl() } -void DifferentialRateControl::generateRateAndThrottleSetpoint() -{ - const bool acro_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled - && !_vehicle_control_mode.flag_control_position_enabled && !_vehicle_control_mode.flag_control_attitude_enabled; - - if (acro_mode_enabled && _manual_control_setpoint_sub.updated()) { // Acro Mode - manual_control_setpoint_s manual_control_setpoint{}; - - if (_manual_control_setpoint_sub.update(&manual_control_setpoint)) { - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - rover_rate_setpoint_s rover_rate_setpoint{}; - rover_rate_setpoint.timestamp = _timestamp; - rover_rate_setpoint.yaw_rate_setpoint = math::interpolate (manual_control_setpoint.roll, -1.f, 1.f, - -_max_yaw_rate, _max_yaw_rate); - _rover_rate_setpoint_pub.publish(rover_rate_setpoint); - } - - } else if (_vehicle_control_mode.flag_control_offboard_enabled) { // Offboard rate control - trajectory_setpoint_s trajectory_setpoint{}; - _trajectory_setpoint_sub.copy(&trajectory_setpoint); - - if (_offboard_control_mode_sub.updated()) { - _offboard_control_mode_sub.copy(&_offboard_control_mode); - } - - const bool offboard_rate_control = _offboard_control_mode.body_rate && !_offboard_control_mode.position - && !_offboard_control_mode.velocity && !_offboard_control_mode.attitude; - - if (offboard_rate_control && PX4_ISFINITE(trajectory_setpoint.yawspeed)) { - rover_rate_setpoint_s rover_rate_setpoint{}; - rover_rate_setpoint.timestamp = _timestamp; - rover_rate_setpoint.yaw_rate_setpoint = trajectory_setpoint.yawspeed; - _rover_rate_setpoint_pub.publish(rover_rate_setpoint); - } - } -} - -void DifferentialRateControl::generateSteeringSetpoint() -{ - if (_rover_rate_setpoint_sub.updated()) { - _rover_rate_setpoint_sub.copy(&_rover_rate_setpoint); - - } - - float speed_diff_normalized{0.f}; - - if (PX4_ISFINITE(_rover_rate_setpoint.yaw_rate_setpoint) && PX4_ISFINITE(_vehicle_yaw_rate)) { - const float yaw_rate_setpoint = fabsf(_rover_rate_setpoint.yaw_rate_setpoint) > _param_ro_yaw_rate_th.get() * - M_DEG_TO_RAD_F ? - _rover_rate_setpoint.yaw_rate_setpoint : 0.f; - speed_diff_normalized = RoverControl::rateControl(_adjusted_yaw_rate_setpoint, _pid_yaw_rate, - yaw_rate_setpoint, _vehicle_yaw_rate, _param_rd_max_thr_yaw_r.get(), _max_yaw_accel, - _max_yaw_decel, _param_rd_wheel_track.get(), _dt); - } - - rover_steering_setpoint_s rover_steering_setpoint{}; - rover_steering_setpoint.timestamp = _timestamp; - rover_steering_setpoint.normalized_speed_diff = speed_diff_normalized; - _rover_steering_setpoint_pub.publish(rover_steering_setpoint); -} - bool DifferentialRateControl::runSanityChecks() { bool ret = true; - if (_param_ro_yaw_rate_limit.get() < FLT_EPSILON) { - ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("differential_rate_control_conf_invalid_yaw_rate_lim"), events::Log::Error, - "Invalid configuration of necessary parameter RO_YAW_RATE_LIM", _param_ro_yaw_rate_limit.get()); - } - - } - if ((_param_rd_wheel_track.get() < FLT_EPSILON || _param_rd_max_thr_yaw_r.get() < FLT_EPSILON) && _param_ro_yaw_rate_p.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("differential_rate_control_conf_invalid_rate_control"), events::Log::Error, - "Invalid configuration for rate control: Neither feed forward nor feedback is setup", _param_rd_wheel_track.get(), - _param_rd_max_thr_yaw_r.get(), _param_ro_yaw_rate_p.get()); - } + events::send(events::ID("differential_rate_control_conf_invalid_rate_control"), events::Log::Error, + "Invalid configuration for rate control: Neither feed forward nor feedback is setup", _param_rd_wheel_track.get(), + _param_rd_max_thr_yaw_r.get(), _param_ro_yaw_rate_p.get()); } - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.hpp b/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.hpp index da9b682f15..a58908fc9e 100644 --- a/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.hpp +++ b/src/modules/rover_differential/DifferentialRateControl/DifferentialRateControl.hpp @@ -47,15 +47,9 @@ #include #include #include -#include -#include -#include -#include #include #include -#include -#include -#include +#include /** * @brief Class for differential rate control. @@ -71,10 +65,21 @@ public: ~DifferentialRateControl() = default; /** - * @brief Update rate controller. + * @brief Generate and publish roverSteeringSetpoint from roverRateSetpoint. */ void updateRateControl(); + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + + /** + * @brief Reset rate controller. + */ + void reset() {_pid_yaw_rate.resetIntegral(); _yaw_rate_setpoint = NAN;}; + protected: /** * @brief Update the parameters of the module. @@ -83,48 +88,18 @@ protected: private: - /** - * @brief Generate and publish roverRateSetpoint and roverThrottleSetpoint from manualControlSetpoint (Acro Mode). - */ - void generateRateAndThrottleSetpoint(); - - /** - * @brief Generate and publish roverSteeringSetpoint from RoverRateSetpoint. - */ - void generateSteeringSetpoint(); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); - // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; - uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; uORB::Subscription _rover_rate_setpoint_sub{ORB_ID(rover_rate_setpoint)}; uORB::Subscription _vehicle_angular_velocity_sub{ORB_ID(vehicle_angular_velocity)}; - uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; - vehicle_control_mode_s _vehicle_control_mode{}; - offboard_control_mode_s _offboard_control_mode{}; - rover_rate_setpoint_s _rover_rate_setpoint{}; // uORB publications - uORB::Publication _rover_rate_setpoint_pub{ORB_ID(rover_rate_setpoint)}; - uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; uORB::Publication _rover_steering_setpoint_pub{ORB_ID(rover_steering_setpoint)}; uORB::Publication _rover_rate_status_pub{ORB_ID(rover_rate_status)}; // Variables - hrt_abstime _timestamp{0}; - float _max_yaw_rate{0.f}; - float _max_yaw_accel{0.f}; - float _max_yaw_decel{0.f}; float _vehicle_yaw_rate{0.f}; - float _dt{0.f}; // Time since last update [s]. - bool _prev_param_check_passed{true}; + float _yaw_rate_setpoint{NAN}; + hrt_abstime _timestamp{0}; // Controllers PID _pid_yaw_rate; @@ -133,7 +108,6 @@ private: DEFINE_PARAMETERS( (ParamFloat) _param_rd_wheel_track, (ParamFloat) _param_rd_max_thr_yaw_r, - (ParamFloat) _param_ro_yaw_rate_limit, (ParamFloat) _param_ro_yaw_rate_th, (ParamFloat) _param_ro_yaw_rate_p, (ParamFloat) _param_ro_yaw_rate_i, diff --git a/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.cpp b/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.cpp index 2f8e3c8885..83d9542865 100644 --- a/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.cpp +++ b/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.cpp @@ -39,7 +39,6 @@ DifferentialVelControl::DifferentialVelControl(ModuleParams *parent) : ModulePar { _rover_throttle_setpoint_pub.advertise(); _rover_attitude_setpoint_pub.advertise(); - _rover_velocity_setpoint_pub.advertise(); _rover_velocity_status_pub.advertise(); updateParams(); } @@ -47,12 +46,15 @@ DifferentialVelControl::DifferentialVelControl(ModuleParams *parent) : ModulePar void DifferentialVelControl::updateParams() { ModuleParams::updateParams(); + + // Set up PID controller _pid_speed.setGains(_param_ro_speed_p.get(), _param_ro_speed_i.get(), 0.f); _pid_speed.setIntegralLimit(1.f); _pid_speed.setOutputLimit(1.f); + // Set up slew rate if (_param_ro_accel_limit.get() > FLT_EPSILON) { - _speed_setpoint.setSlewRate(_param_ro_accel_limit.get()); + _adjusted_speed_setpoint.setSlewRate(_param_ro_accel_limit.get()); } } @@ -60,39 +62,45 @@ void DifferentialVelControl::updateVelControl() { const hrt_abstime timestamp_prev = _timestamp; _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; + const float dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; updateSubscriptions(); - if ((_vehicle_control_mode.flag_control_velocity_enabled) && _vehicle_control_mode.flag_armed && runSanityChecks()) { - if (_vehicle_control_mode.flag_control_offboard_enabled) { // Offboard Velocity Control - generateVelocitySetpoint(); - } + // Attitude Setpoint + if (PX4_ISFINITE(_bearing_setpoint)) { + rover_attitude_setpoint_s rover_attitude_setpoint{}; + rover_attitude_setpoint.timestamp = _timestamp; + rover_attitude_setpoint.yaw_setpoint = _bearing_setpoint; + _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); + } - generateAttitudeAndThrottleSetpoint(); + // Throttle Setpoint + if (PX4_ISFINITE(_speed_setpoint)) { + const float speed_setpoint = calcSpeedSetpoint(); + rover_throttle_setpoint_s rover_throttle_setpoint{}; + rover_throttle_setpoint.timestamp = _timestamp; + rover_throttle_setpoint.throttle_body_x = RoverControl::speedControl(_adjusted_speed_setpoint, _pid_speed, + speed_setpoint, _vehicle_speed, _param_ro_accel_limit.get(), _param_ro_decel_limit.get(), + _param_ro_max_thr_speed.get(), dt); + rover_throttle_setpoint.throttle_body_y = 0.f; + _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - } else { // Reset controller and slew rate when velocity control is not active - _pid_speed.resetIntegral(); - _speed_setpoint.setForcedValue(0.f); } // Publish velocity controller status (logging only) rover_velocity_status_s rover_velocity_status; rover_velocity_status.timestamp = _timestamp; rover_velocity_status.measured_speed_body_x = _vehicle_speed; - rover_velocity_status.adjusted_speed_body_x_setpoint = _speed_setpoint.getState(); + rover_velocity_status.adjusted_speed_body_x_setpoint = _adjusted_speed_setpoint.getState(); rover_velocity_status.pid_throttle_body_x_integral = _pid_speed.getIntegral(); rover_velocity_status.measured_speed_body_y = NAN; rover_velocity_status.adjusted_speed_body_y_setpoint = NAN; rover_velocity_status.pid_throttle_body_y_integral = NAN; _rover_velocity_status_pub.publish(rover_velocity_status); } + void DifferentialVelControl::updateSubscriptions() { - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); - } - if (_vehicle_attitude_sub.updated()) { vehicle_attitude_s vehicle_attitude{}; _vehicle_attitude_sub.copy(&vehicle_attitude); @@ -109,46 +117,18 @@ void DifferentialVelControl::updateSubscriptions() _vehicle_speed = velocity_2d.norm() > _param_ro_speed_th.get() ? sign(velocity_2d(0)) * velocity_2d.norm() : 0.f; } -} - -void DifferentialVelControl::generateVelocitySetpoint() -{ - trajectory_setpoint_s trajectory_setpoint{}; - _trajectory_setpoint_sub.copy(&trajectory_setpoint); - - if (_offboard_control_mode_sub.updated()) { - _offboard_control_mode_sub.copy(&_offboard_control_mode); - } - - const bool offboard_vel_control = _offboard_control_mode.velocity && !_offboard_control_mode.position; - - const Vector2f velocity_in_local_frame(trajectory_setpoint.velocity[0], trajectory_setpoint.velocity[1]); - - if (offboard_vel_control && velocity_in_local_frame.isAllFinite()) { - rover_velocity_setpoint_s rover_velocity_setpoint{}; - rover_velocity_setpoint.timestamp = _timestamp; - rover_velocity_setpoint.speed = velocity_in_local_frame.norm(); - rover_velocity_setpoint.bearing = atan2f(velocity_in_local_frame(1), velocity_in_local_frame(0)); - _rover_velocity_setpoint_pub.publish(rover_velocity_setpoint); - } -} - -void DifferentialVelControl::generateAttitudeAndThrottleSetpoint() -{ if (_rover_velocity_setpoint_sub.updated()) { - _rover_velocity_setpoint_sub.copy(&_rover_velocity_setpoint); + rover_velocity_setpoint_s rover_velocity_setpoint; + _rover_velocity_setpoint_sub.copy(&rover_velocity_setpoint); + _speed_setpoint = rover_velocity_setpoint.speed; + _bearing_setpoint = rover_velocity_setpoint.bearing; } - // Attitude Setpoint - if (PX4_ISFINITE(_rover_velocity_setpoint.bearing)) { - rover_attitude_setpoint_s rover_attitude_setpoint{}; - rover_attitude_setpoint.timestamp = _timestamp; - rover_attitude_setpoint.yaw_setpoint = _rover_velocity_setpoint.bearing; - _rover_attitude_setpoint_pub.publish(rover_attitude_setpoint); - } +} - // Throttle Setpoint - const float heading_error = matrix::wrap_pi(_rover_velocity_setpoint.bearing - _vehicle_yaw); +float DifferentialVelControl::calcSpeedSetpoint() +{ + const float heading_error = matrix::wrap_pi(_bearing_setpoint - _vehicle_yaw); if (_current_state == DrivingState::DRIVING && fabsf(heading_error) > _param_rd_trans_drv_trn.get()) { _current_state = DrivingState::SPOT_TURNING; @@ -160,32 +140,27 @@ void DifferentialVelControl::generateAttitudeAndThrottleSetpoint() float speed_setpoint = 0.f; if (_current_state == DrivingState::DRIVING) { - speed_setpoint = math::constrain(_rover_velocity_setpoint.speed, -_param_ro_speed_limit.get(), + speed_setpoint = math::constrain(_speed_setpoint, -_param_ro_speed_limit.get(), _param_ro_speed_limit.get()); const float speed_setpoint_normalized = math::interpolate(speed_setpoint, -_param_ro_max_thr_speed.get(), _param_ro_max_thr_speed.get(), -1.f, 1.f); if (_rover_steering_setpoint_sub.updated()) { - _rover_steering_setpoint_sub.copy(&_rover_steering_setpoint); + rover_steering_setpoint_s rover_steering_setpoint{}; + _rover_steering_setpoint_sub.copy(&rover_steering_setpoint); + _normalized_speed_diff = rover_steering_setpoint.normalized_speed_diff; } if (fabsf(speed_setpoint_normalized) > 1.f - fabsf( - _rover_steering_setpoint.normalized_speed_diff)) { // Adjust speed setpoint if it is infeasible due to the desired speed difference of the left/right wheels - speed_setpoint = math::interpolate(sign(speed_setpoint_normalized) * (1.f - fabsf( - _rover_steering_setpoint.normalized_speed_diff)), -1.f, 1.f, + _normalized_speed_diff)) { // Adjust speed setpoint if it is infeasible due to the desired speed difference of the left/right wheels + speed_setpoint = math::interpolate(sign(speed_setpoint_normalized) * (1.f - fabsf(_normalized_speed_diff)), -1.f, + 1.f, - _param_ro_max_thr_speed.get(), _param_ro_max_thr_speed.get()); } } - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = RoverControl::speedControl(_speed_setpoint, _pid_speed, - speed_setpoint, _vehicle_speed, _param_ro_accel_limit.get(), _param_ro_decel_limit.get(), - _param_ro_max_thr_speed.get(), _dt); - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); - + return speed_setpoint; } bool DifferentialVelControl::runSanityChecks() @@ -194,25 +169,16 @@ bool DifferentialVelControl::runSanityChecks() if (_param_ro_speed_limit.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("differential_posVel_control_conf_invalid_speed_lim"), events::Log::Error, - "Invalid configuration of necessary parameter RO_SPEED_LIM", _param_ro_speed_limit.get()); - } - + events::send(events::ID("differential_posVel_control_conf_invalid_speed_lim"), events::Log::Error, + "Invalid configuration of necessary parameter RO_SPEED_LIM", _param_ro_speed_limit.get()); } if (_param_ro_max_thr_speed.get() < FLT_EPSILON && _param_ro_speed_p.get() < FLT_EPSILON) { ret = false; - - if (_prev_param_check_passed) { - events::send(events::ID("differential_posVel_control_conf_invalid_speed_control"), events::Log::Error, - "Invalid configuration for speed control: Neither feed forward (RO_MAX_THR_SPEED) nor feedback (RO_SPEED_P) is setup", - _param_ro_max_thr_speed.get(), - _param_ro_speed_p.get()); - } + events::send(events::ID("differential_posVel_control_conf_invalid_speed_control"), events::Log::Error, + "Invalid configuration for speed control: Neither feed forward (RO_MAX_THR_SPEED) nor feedback (RO_SPEED_P) is setup", + _param_ro_max_thr_speed.get(), _param_ro_speed_p.get()); } - _prev_param_check_passed = ret; return ret; } diff --git a/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.hpp b/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.hpp index c962382653..6a7a3c9689 100644 --- a/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.hpp +++ b/src/modules/rover_differential/DifferentialVelControl/DifferentialVelControl.hpp @@ -47,15 +47,12 @@ // uORB includes #include #include -#include #include #include #include #include -#include -#include +#include #include -#include #include using namespace matrix; @@ -82,10 +79,21 @@ public: ~DifferentialVelControl() = default; /** - * @brief Update velocity controller. + * @brief Generate and publish roverAttitudeSetpoint/RoverThrottleSetpoint from roverVelocitySetpoint. */ void updateVelControl(); + /** + * @brief Check if the necessary parameters are set. + * @return True if all checks pass. + */ + bool runSanityChecks(); + + /** + * @brief Reset velocity controller. + */ + void reset() {_pid_speed.resetIntegral(); _speed_setpoint = NAN; _bearing_setpoint = NAN; _adjusted_speed_setpoint.setForcedValue(0.f);}; + protected: /** * @brief Update the parameters of the module. @@ -99,54 +107,35 @@ private: void updateSubscriptions(); /** - * @brief Generate and publish roverVelocitySetpoint from velocity of trajectorySetpoint. + * @brief Calculate the speed setpoint based on the current state. + * @return Speed setpoint. */ - void generateVelocitySetpoint(); - - /** - * @brief Generate and publish roverAttitudeSetpoint and roverThrottleSetpoint - * from roverVelocitySetpoint. - */ - void generateAttitudeAndThrottleSetpoint(); - - /** - * @brief Check if the necessary parameters are set. - * @return True if all checks pass. - */ - bool runSanityChecks(); + float calcSpeedSetpoint(); // uORB subscriptions - uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _trajectory_setpoint_sub{ORB_ID(trajectory_setpoint)}; - uORB::Subscription _offboard_control_mode_sub{ORB_ID(offboard_control_mode)}; uORB::Subscription _vehicle_attitude_sub{ORB_ID(vehicle_attitude)}; uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position)}; uORB::Subscription _rover_velocity_setpoint_sub{ORB_ID(rover_velocity_setpoint)}; uORB::Subscription _rover_steering_setpoint_sub{ORB_ID(rover_steering_setpoint)}; - vehicle_control_mode_s _vehicle_control_mode{}; - offboard_control_mode_s _offboard_control_mode{}; - rover_steering_setpoint_s _rover_steering_setpoint{}; // uORB publications uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; uORB::Publication _rover_attitude_setpoint_pub{ORB_ID(rover_attitude_setpoint)}; uORB::Publication _rover_velocity_status_pub{ORB_ID(rover_velocity_status)}; - uORB::Publication _rover_velocity_setpoint_pub{ORB_ID(rover_velocity_setpoint)}; - rover_velocity_setpoint_s _rover_velocity_setpoint{}; // Variables hrt_abstime _timestamp{0}; Quatf _vehicle_attitude_quaternion{}; float _vehicle_speed{0.f}; // [m/s] Positiv: Forwards, Negativ: Backwards float _vehicle_yaw{0.f}; - float _dt{0.f}; - bool _prev_param_check_passed{false}; + float _speed_setpoint{NAN}; + float _bearing_setpoint{NAN}; + float _normalized_speed_diff{NAN}; DrivingState _current_state{DrivingState::DRIVING}; - // Controllers PID _pid_speed; - SlewRate _speed_setpoint; + SlewRate _adjusted_speed_setpoint; DEFINE_PARAMETERS( (ParamFloat) _param_rd_trans_trn_drv, diff --git a/src/modules/rover_differential/RoverDifferential.cpp b/src/modules/rover_differential/RoverDifferential.cpp index 9a2a71646a..4ab2d47187 100644 --- a/src/modules/rover_differential/RoverDifferential.cpp +++ b/src/modules/rover_differential/RoverDifferential.cpp @@ -39,8 +39,6 @@ RoverDifferential::RoverDifferential() : ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl) { - _rover_throttle_setpoint_pub.advertise(); - _rover_steering_setpoint_pub.advertise(); updateParams(); } @@ -53,102 +51,135 @@ bool RoverDifferential::init() void RoverDifferential::updateParams() { ModuleParams::updateParams(); - - if (_param_ro_accel_limit.get() > FLT_EPSILON && _param_ro_max_thr_speed.get() > FLT_EPSILON) { - _throttle_body_x_setpoint.setSlewRate(_param_ro_accel_limit.get() / _param_ro_max_thr_speed.get()); - } } void RoverDifferential::Run() { if (_parameter_update_sub.updated()) { + parameter_update_s param_update{}; + _parameter_update_sub.copy(¶m_update); updateParams(); + runSanityChecks(); } - const hrt_abstime timestamp_prev = _timestamp; - _timestamp = hrt_absolute_time(); - _dt = math::constrain(_timestamp - timestamp_prev, 1_ms, 5000_ms) * 1e-6f; - - _differential_pos_control.updatePosControl(); - _differential_vel_control.updateVelControl(); - _differential_att_control.updateAttControl(); - _differential_rate_control.updateRateControl(); - if (_vehicle_control_mode_sub.updated()) { - _vehicle_control_mode_sub.copy(&_vehicle_control_mode); + vehicle_control_mode_s vehicle_control_mode{}; + _vehicle_control_mode_sub.copy(&vehicle_control_mode); + + // Run sanity checks if the control mode changes (Note: This has to be done this way, because the topic is periodically updated at 2 Hz) + if (_vehicle_control_mode.flag_control_manual_enabled != vehicle_control_mode.flag_control_manual_enabled || + _vehicle_control_mode.flag_control_auto_enabled != vehicle_control_mode.flag_control_auto_enabled || + _vehicle_control_mode.flag_control_offboard_enabled != vehicle_control_mode.flag_control_offboard_enabled || + _vehicle_control_mode.flag_control_position_enabled != vehicle_control_mode.flag_control_position_enabled || + _vehicle_control_mode.flag_control_velocity_enabled != vehicle_control_mode.flag_control_velocity_enabled || + _vehicle_control_mode.flag_control_attitude_enabled != vehicle_control_mode.flag_control_attitude_enabled || + _vehicle_control_mode.flag_control_rates_enabled != vehicle_control_mode.flag_control_rates_enabled || + _vehicle_control_mode.flag_control_allocation_enabled != vehicle_control_mode.flag_control_allocation_enabled) { + _vehicle_control_mode = vehicle_control_mode; + runSanityChecks(); + reset(); + + } else { + _vehicle_control_mode = vehicle_control_mode; + } + } - const bool full_manual_mode_enabled = _vehicle_control_mode.flag_control_manual_enabled - && !_vehicle_control_mode.flag_control_position_enabled && !_vehicle_control_mode.flag_control_attitude_enabled - && !_vehicle_control_mode.flag_control_rates_enabled; + if (_vehicle_control_mode.flag_armed && _sanity_checks_passed) { - if (full_manual_mode_enabled) { // Manual mode - generateSteeringAndThrottleSetpoint(); - } + _was_armed = true; - if (_vehicle_control_mode.flag_armed) { - generateActuatorSetpoint(); + // Generate setpoints + if (_vehicle_control_mode.flag_control_manual_enabled) { + manualControl(); + } else if (_vehicle_control_mode.flag_control_auto_enabled) { + _auto_mode.autoControl(); + + } else if (_vehicle_control_mode.flag_control_offboard_enabled) { + _offboard_mode.offboardControl(); + } + + updateControllers(); + + } else if (_was_armed) { // Reset all controllers and stop the vehicle + reset(); + _differential_act_control.stopVehicle(); + _was_armed = false; } } -void RoverDifferential::generateSteeringAndThrottleSetpoint() +void RoverDifferential::manualControl() { - manual_control_setpoint_s manual_control_setpoint{}; + if (_vehicle_control_mode.flag_control_position_enabled) { + _manual_mode.position(); - if (_manual_control_setpoint_sub.update(&manual_control_setpoint)) { - rover_steering_setpoint_s rover_steering_setpoint{}; - rover_steering_setpoint.timestamp = _timestamp; - rover_steering_setpoint.normalized_speed_diff = manual_control_setpoint.roll; - _rover_steering_setpoint_pub.publish(rover_steering_setpoint); - rover_throttle_setpoint_s rover_throttle_setpoint{}; - rover_throttle_setpoint.timestamp = _timestamp; - rover_throttle_setpoint.throttle_body_x = manual_control_setpoint.throttle; - rover_throttle_setpoint.throttle_body_y = 0.f; - _rover_throttle_setpoint_pub.publish(rover_throttle_setpoint); + } else if (_vehicle_control_mode.flag_control_attitude_enabled) { + _manual_mode.stab(); + + } else if (_vehicle_control_mode.flag_control_rates_enabled) { + _manual_mode.acro(); + + } else if (_vehicle_control_mode.flag_control_allocation_enabled) { + _manual_mode.manual(); } } -void RoverDifferential::generateActuatorSetpoint() +void RoverDifferential::updateControllers() { - if (_rover_throttle_setpoint_sub.updated()) { - _rover_throttle_setpoint_sub.copy(&_rover_throttle_setpoint); + if (_vehicle_control_mode.flag_control_position_enabled) { + _differential_pos_control.updatePosControl(); } - if (_actuator_motors_sub.updated()) { - actuator_motors_s actuator_motors{}; - _actuator_motors_sub.copy(&actuator_motors); - _current_throttle_body_x = (actuator_motors.control[0] + actuator_motors.control[1]) / 2.f; + if (_vehicle_control_mode.flag_control_velocity_enabled) { + _differential_vel_control.updateVelControl(); } - if (_rover_steering_setpoint_sub.updated()) { - _rover_steering_setpoint_sub.copy(&_rover_steering_setpoint); + if (_vehicle_control_mode.flag_control_attitude_enabled) { + _differential_att_control.updateAttControl(); } - const float throttle_body_x = RoverControl::throttleControl(_throttle_body_x_setpoint, - _rover_throttle_setpoint.throttle_body_x, _current_throttle_body_x, _param_ro_accel_limit.get(), - _param_ro_decel_limit.get(), _param_ro_max_thr_speed.get(), _dt); - actuator_motors_s actuator_motors{}; - actuator_motors.reversible_flags = _param_r_rev.get(); - computeInverseKinematics(throttle_body_x, - _rover_steering_setpoint.normalized_speed_diff).copyTo(actuator_motors.control); - actuator_motors.timestamp = _timestamp; - _actuator_motors_pub.publish(actuator_motors); + if (_vehicle_control_mode.flag_control_rates_enabled) { + _differential_rate_control.updateRateControl(); + } + + if (_vehicle_control_mode.flag_control_allocation_enabled) { + _differential_act_control.updateActControl(); + } } -Vector2f RoverDifferential::computeInverseKinematics(float throttle_body_x, const float speed_diff_normalized) +void RoverDifferential::runSanityChecks() { - float max_motor_command = fabsf(throttle_body_x) + fabsf(speed_diff_normalized); - - if (max_motor_command > 1.0f) { // Prioritize yaw rate if a normalized motor command exceeds limit of 1 - float excess = fabsf(max_motor_command - 1.0f); - throttle_body_x -= sign(throttle_body_x) * excess; + if (_vehicle_control_mode.flag_control_rates_enabled && !_differential_rate_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; } - // Calculate the left and right wheel speeds - return Vector2f(throttle_body_x - speed_diff_normalized, - throttle_body_x + speed_diff_normalized); + if (_vehicle_control_mode.flag_control_attitude_enabled && !_differential_att_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + if (_vehicle_control_mode.flag_control_velocity_enabled && !_differential_vel_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + if (_vehicle_control_mode.flag_control_position_enabled && !_differential_pos_control.runSanityChecks()) { + _sanity_checks_passed = false; + return; + } + + _sanity_checks_passed = true; +} + +void RoverDifferential::reset() +{ + _differential_vel_control.reset(); + _differential_att_control.reset(); + _differential_rate_control.reset(); + _manual_mode.reset(); } int RoverDifferential::task_spawn(int argc, char *argv[]) diff --git a/src/modules/rover_differential/RoverDifferential.hpp b/src/modules/rover_differential/RoverDifferential.hpp index 5a98ef7d3c..39ac21d2a8 100644 --- a/src/modules/rover_differential/RoverDifferential.hpp +++ b/src/modules/rover_differential/RoverDifferential.hpp @@ -40,26 +40,23 @@ #include #include -// Libraries -#include -#include +// Library includes +#include // uORB includes #include -#include -#include #include -#include -#include -#include #include -#include // Local includes +#include "DifferentialActControl/DifferentialActControl.hpp" #include "DifferentialRateControl/DifferentialRateControl.hpp" #include "DifferentialAttControl/DifferentialAttControl.hpp" #include "DifferentialVelControl/DifferentialVelControl.hpp" #include "DifferentialPosControl/DifferentialPosControl.hpp" +#include "DifferentialDriveModes/DifferentialAutoMode/DifferentialAutoMode.hpp" +#include "DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.hpp" +#include "DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.hpp" class RoverDifferential : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem @@ -92,58 +89,45 @@ private: void Run() override; /** - * @brief Generate and publish roverSteeringSetpoint and roverThrottleSetpoint from manualControlSetpoint (Manual Mode). + * @brief Handle manual control */ - void generateSteeringAndThrottleSetpoint(); + void manualControl(); /** - * @brief Generate and publish actuatorMotors setpoints from roverThrottleSetpoint/roverSteeringSetpoint. + * @brief Update the controllers */ - void generateActuatorSetpoint(); + void updateControllers(); /** - * @brief Compute normalized motor commands based on normalized setpoints. - * @param throttle_body_x Normalized speed in body x direction [-1, 1]. - * @param speed_diff_normalized Speed difference between left and right wheels [-1, 1]. - * @return Motor speeds for the right and left motors [-1, 1]. + * @brief Check proper parameter setup for the controllers + * + * Modifies: + * + * - _sanity_checks_passed: true if checks for all active controllers pass */ - Vector2f computeInverseKinematics(float throttle_body_x, float speed_diff_normalized); + void runSanityChecks(); + + /** + * @brief Reset controllers and manual mode variables. + */ + void reset(); // uORB subscriptions uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)}; - uORB::Subscription _rover_steering_setpoint_sub{ORB_ID(rover_steering_setpoint)}; - uORB::Subscription _rover_throttle_setpoint_sub{ORB_ID(rover_throttle_setpoint)}; uORB::Subscription _vehicle_control_mode_sub{ORB_ID(vehicle_control_mode)}; - uORB::Subscription _manual_control_setpoint_sub{ORB_ID(manual_control_setpoint)}; - uORB::Subscription _actuator_motors_sub{ORB_ID(actuator_motors)}; vehicle_control_mode_s _vehicle_control_mode{}; - rover_steering_setpoint_s _rover_steering_setpoint{}; - rover_throttle_setpoint_s _rover_throttle_setpoint{}; - - // uORB publications - uORB::PublicationMulti _actuator_motors_pub{ORB_ID(actuator_motors)}; - uORB::Publication _rover_throttle_setpoint_pub{ORB_ID(rover_throttle_setpoint)}; - uORB::Publication _rover_steering_setpoint_pub{ORB_ID(rover_steering_setpoint)}; // Class instances - DifferentialRateControl _differential_rate_control{this}; - DifferentialAttControl _differential_att_control{this}; - DifferentialVelControl _differential_vel_control{this}; - DifferentialPosControl _differential_pos_control{this}; + DifferentialActControl _differential_act_control{this}; + DifferentialRateControl _differential_rate_control{this}; + DifferentialAttControl _differential_att_control{this}; + DifferentialVelControl _differential_vel_control{this}; + DifferentialPosControl _differential_pos_control{this}; + DifferentialAutoMode _auto_mode{this}; + DifferentialManualMode _manual_mode{this}; + DifferentialOffboardMode _offboard_mode{this}; // Variables - hrt_abstime _timestamp{0}; - float _dt{0.f}; - float _current_throttle_body_x{0.f}; - - // Controllers - SlewRate _throttle_body_x_setpoint{0.f}; - - // Parameters - DEFINE_PARAMETERS( - (ParamInt) _param_r_rev, - (ParamFloat) _param_ro_accel_limit, - (ParamFloat) _param_ro_decel_limit, - (ParamFloat) _param_ro_max_thr_speed - ) + bool _sanity_checks_passed{true}; // True if checks for all active controllers pass + bool _was_armed{false}; // True if the vehicle was armed before the last reset }; diff --git a/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp b/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp index 49bbbcc90a..916f4802d5 100644 --- a/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp +++ b/src/modules/sensors/vehicle_air_data/VehicleAirData.cpp @@ -256,6 +256,9 @@ void VehicleAirData::Run() if (!_relative_calibration_done) { _relative_calibration_done = UpdateRelativeCalibrations(time_now_us); + + } else if (!_baro_gnss_calibration_done && _param_sens_baro_autocal.get()) { + _baro_gnss_calibration_done = BaroGNSSAltitudeOffset(); } // Publish @@ -336,7 +339,7 @@ bool VehicleAirData::UpdateRelativeCalibrations(const hrt_abstime time_now_us) _calibration_t_first = time_now_us; } - if (time_now_us - _calibration_t_first > 1_s) { + if (time_now_us - _calibration_t_first > 1_s && _data_sum_count[_selected_sensor_sub_index] > 0) { const float pressure_primary = _data_sum[_selected_sensor_sub_index] / _data_sum_count[_selected_sensor_sub_index]; for (int instance = 0; instance < MAX_SENSOR_COUNT; ++instance) { @@ -469,4 +472,93 @@ void VehicleAirData::PrintStatus() } } +bool VehicleAirData::BaroGNSSAltitudeOffset() +{ + static constexpr float kEpvReq = 8.f; + static constexpr float kDeltaOffsetTolerance = 4.f; + static constexpr uint64_t kLpfWindow = 2_s; + static constexpr float kLpfTimeConstant = static_cast(kLpfWindow) * 1.e-6f; + + sensor_gps_s gps_pos; + + if (!_vehicle_gps_position_sub.update(&gps_pos)) { + return false; + } + + const float pressure_sealevel = _param_sens_baro_qnh.get() * 100.0f; + const float baro_pressure = _data_sum[_selected_sensor_sub_index] / _data_sum_count[_selected_sensor_sub_index]; + const float target_altitude = static_cast(gps_pos.altitude_msl_m); + + const float delta_alt = getAltitudeFromPressure(baro_pressure, pressure_sealevel) - target_altitude; + bool gnss_baro_offset_stable = false; + + if (gps_pos.epv > kEpvReq || _t_first_gnss_sample == 0) { + _calibration_t_first = 0; + _t_first_gnss_sample = gps_pos.timestamp; + return false; + } + + if (_calibration_t_first == 0) { + _calibration_t_first = gps_pos.timestamp; + const float dt = (_calibration_t_first - _t_first_gnss_sample) * 1.e-6f; + _delta_baro_gnss_lpf.setParameters(dt, kLpfTimeConstant); + _delta_baro_gnss_lpf.reset(delta_alt); + + } else { + _delta_baro_gnss_lpf.update(delta_alt); + } + + if (gps_pos.timestamp - _calibration_t_first > kLpfWindow && !PX4_ISFINITE(_baro_gnss_offset_t1)) { + _baro_gnss_offset_t1 = _delta_baro_gnss_lpf.getState(); + + } else if (gps_pos.timestamp - _calibration_t_first > 2 * kLpfWindow && PX4_ISFINITE(_baro_gnss_offset_t1)) { + if (fabsf(_delta_baro_gnss_lpf.getState() - _baro_gnss_offset_t1) > kDeltaOffsetTolerance) { + _baro_gnss_offset_t1 = NAN; + _calibration_t_first = 0; + _t_first_gnss_sample = 0; + + } else { + gnss_baro_offset_stable = true; + } + } + + if (!gnss_baro_offset_stable) { + return false; + } + + // Binary search + float low = -10000.0f; + float high = 10000.0f; + float offset = NAN; + static constexpr float kTolerance = 0.1f; + static constexpr int kIterations = 100; + + for (int i = 0; i < kIterations; ++i) { + float mid = low + (high - low) / 2.0f; + float calibrated_altitude = getAltitudeFromPressure(baro_pressure - mid, pressure_sealevel); + + if (calibrated_altitude > target_altitude + kTolerance) { + high = mid; + + } else if (calibrated_altitude < target_altitude - kTolerance) { + low = mid; + + } else { + offset = mid; + break; + } + } + + // add new offset to existing relative offsets + for (int instance = 0; instance < MAX_SENSOR_COUNT; ++instance) { + if (_calibration[instance].device_id() != 0 && _data_sum_count[instance] > 0) { + _calibration[instance].set_offset(_calibration[instance].offset() + offset); + _calibration[instance].ParametersSave(instance); + param_notify_changes(); + } + } + + return true; +} + }; // namespace sensors diff --git a/src/modules/sensors/vehicle_air_data/VehicleAirData.hpp b/src/modules/sensors/vehicle_air_data/VehicleAirData.hpp index 431e0867bb..d7620d48d0 100644 --- a/src/modules/sensors/vehicle_air_data/VehicleAirData.hpp +++ b/src/modules/sensors/vehicle_air_data/VehicleAirData.hpp @@ -36,6 +36,7 @@ #include "data_validator/DataValidatorGroup.hpp" #include +#include #include #include #include @@ -55,6 +56,7 @@ #include #include #include +#include using namespace time_literals; @@ -86,6 +88,7 @@ private: bool ParametersUpdate(bool force = false); void UpdateStatus(); bool UpdateRelativeCalibrations(hrt_abstime time_now_us); + bool BaroGNSSAltitudeOffset(); static constexpr int MAX_SENSOR_COUNT = 4; @@ -106,6 +109,8 @@ private: {this, ORB_ID(sensor_baro), 3}, }; + uORB::Subscription _vehicle_gps_position_sub{ORB_ID(vehicle_gps_position)}; + calibration::Barometer _calibration[MAX_SENSOR_COUNT]; perf_counter_t _cycle_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")}; @@ -134,11 +139,16 @@ private: bool _last_status_baro_fault{false}; bool _relative_calibration_done{false}; + bool _baro_gnss_calibration_done{false}; uint64_t _calibration_t_first{0}; + AlphaFilter _delta_baro_gnss_lpf{}; + float _baro_gnss_offset_t1{NAN}; + uint64_t _t_first_gnss_sample{0}; DEFINE_PARAMETERS( (ParamFloat) _param_sens_baro_qnh, - (ParamFloat) _param_sens_baro_rate + (ParamFloat) _param_sens_baro_rate, + (ParamBool) _param_sens_baro_autocal ) }; }; // namespace sensors diff --git a/src/modules/sensors/vehicle_air_data/params.c b/src/modules/sensors/vehicle_air_data/params.c index fee8ac6263..0f32fee2f1 100644 --- a/src/modules/sensors/vehicle_air_data/params.c +++ b/src/modules/sensors/vehicle_air_data/params.c @@ -53,3 +53,15 @@ PARAM_DEFINE_FLOAT(SENS_BARO_QNH, 1013.25f); * @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, 0); diff --git a/src/modules/simulation/simulator_sih/CMakeLists.txt b/src/modules/simulation/simulator_sih/CMakeLists.txt index 7ae8483c51..0be8db3c1b 100644 --- a/src/modules/simulation/simulator_sih/CMakeLists.txt +++ b/src/modules/simulation/simulator_sih/CMakeLists.txt @@ -54,6 +54,7 @@ if(PX4_PLATFORM MATCHES "posix") quadx xvert standard_vtol + hex ) # find corresponding airframes diff --git a/src/modules/simulation/simulator_sih/sih.cpp b/src/modules/simulation/simulator_sih/sih.cpp index 30ac027d6f..32b973c3f8 100644 --- a/src/modules/simulation/simulator_sih/sih.cpp +++ b/src/modules/simulation/simulator_sih/sih.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2019-2022 PX4 Development Team. All rights reserved. + * Copyright (c) 2019-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 @@ -75,8 +75,9 @@ void Sih::run() _last_run = task_start; _airspeed_time = task_start; _dist_snsr_time = task_start; - _vehicle = (VehicleType)constrain(_sih_vtype.get(), static_cast(0), - static_cast(3)); + _vehicle = static_cast(constrain(_sih_vtype.get(), + static_cast(VehicleType::First), + static_cast(VehicleType::Last))); _actuator_out_sub = uORB::Subscription{ORB_ID(actuator_outputs_sim)}; @@ -319,7 +320,7 @@ void Sih::read_motors(const float dt) void Sih::generate_force_and_torques() { - if (_vehicle == VehicleType::Multicopter) { + 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]), @@ -327,6 +328,21 @@ void Sih::generate_force_and_torques() _Fa_E = -_KDV * _v_E; // first order drag to slow down the aircraft _Ma_B = -_KDW * _w_B; // first order angular damper + } else if (_vehicle == VehicleType::Hexacopter) { + /* m5 m0 ┬ + \ / √3/2 + m4 -- + -- m1 ┴ + / \ + 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 + _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 @@ -429,7 +445,8 @@ void Sih::equations_of_motion(const float dt) Vector3f ground_force_E; if ((_lla.altitude() - _lpos_ref_alt) < 0.f && force_down > 0.f) { - if (_vehicle == VehicleType::Multicopter + if (_vehicle == VehicleType::Quadcopter + || _vehicle == VehicleType::Hexacopter || _vehicle == VehicleType::TailsitterVTOL || _vehicle == VehicleType::StandardVTOL) { ground_force_E = -sum_of_forces_E; @@ -715,20 +732,23 @@ int Sih::print_status() PX4_INFO("Achieved speedup: %.2fX", (double)_achieved_speedup); #endif - if (_vehicle == VehicleType::Multicopter) { - PX4_INFO("Running MultiCopter"); + if (_vehicle == VehicleType::Quadcopter) { + PX4_INFO("Quadcopter"); + + } else if (_vehicle == VehicleType::Hexacopter) { + PX4_INFO("Hexacopter"); } else if (_vehicle == VehicleType::FixedWing) { - PX4_INFO("Running Fixed-Wing"); + PX4_INFO("Fixed-Wing"); } else if (_vehicle == VehicleType::TailsitterVTOL) { - PX4_INFO("Running TailSitter"); + PX4_INFO("TailSitter"); 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("Running Standard VTOL"); + PX4_INFO("Standard VTOL"); } PX4_INFO("vehicle landed: %d", _grounded); diff --git a/src/modules/simulation/simulator_sih/sih.hpp b/src/modules/simulation/simulator_sih/sih.hpp index 557ec2b16c..4bcc5a281a 100644 --- a/src/modules/simulation/simulator_sih/sih.hpp +++ b/src/modules/simulation/simulator_sih/sih.hpp @@ -1,6 +1,6 @@ /**************************************************************************** * -* Copyright (c) 2019-2022 PX4 Development Team. All rights reserved. +* Copyright (c) 2019-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 @@ -218,11 +218,10 @@ private: matrix::Vector3f _v_E_dot{}; matrix::Dcmf _R_N2E; // local navigation to ECEF frame rotation matrix - float _u[NUM_ACTUATORS_MAX] {}; // thruster signals + float _u[NUM_ACTUATORS_MAX] {}; // thruster signals - enum class VehicleType {Multicopter, FixedWing, TailsitterVTOL, StandardVTOL}; - - VehicleType _vehicle = VehicleType::Multicopter; + enum class VehicleType {Quadcopter, FixedWing, TailsitterVTOL, StandardVTOL, Hexacopter, First = Quadcopter, Last = Hexacopter}; // numbering dependent on parameter SIH_VEHICLE_TYPE + VehicleType _vehicle = VehicleType::Quadcopter; // aerodynamic segments for the fixedwing AeroSeg _wing_l = AeroSeg(SPAN / 2.0f, MAC, -4.0f, matrix::Vector3f(0.0f, -SPAN / 4.0f, 0.0f), 3.0f, diff --git a/src/modules/simulation/simulator_sih/sih_params.c b/src/modules/simulation/simulator_sih/sih_params.c index f9e053a5eb..c3112ca598 100644 --- a/src/modules/simulation/simulator_sih/sih_params.c +++ b/src/modules/simulation/simulator_sih/sih_params.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2013-2022 PX4 Development Team. All rights reserved. + * 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 @@ -33,7 +33,7 @@ /** * @file sih_params.c - * Parameters for quadcopter X simulator in hardware. + * Parameters for simulator in hardware. * * @author Romain Chiappinelli * February 2019 @@ -329,10 +329,11 @@ PARAM_DEFINE_FLOAT(SIH_T_TAU, 0.05f); /** * Vehicle type * - * @value 0 Multicopter + * @value 0 Quadcopter * @value 1 Fixed-Wing * @value 2 Tailsitter * @value 3 Standard VTOL + * @value 4 Hexacopter * @reboot_required true * @group Simulation In Hardware */ diff --git a/src/modules/uxrce_dds_client/dds_topics.h.em b/src/modules/uxrce_dds_client/dds_topics.h.em index deba362668..7ff7605ccd 100644 --- a/src/modules/uxrce_dds_client/dds_topics.h.em +++ b/src/modules/uxrce_dds_client/dds_topics.h.em @@ -30,7 +30,7 @@ import os #include @[end for]@ -#define UXRCE_DEFAULT_POLL_RATE 10 +#define UXRCE_DEFAULT_POLL_INTERVAL_MS 10 typedef bool (*UcdrSerializeMethod)(const void* data, ucdrBuffer& buf, int64_t time_offset); @@ -66,6 +66,7 @@ struct SendSubscription { uint32_t message_version; uint32_t topic_size; UcdrSerializeMethod ucdr_serialize_method; + uint64_t publish_interval_ms; }; // Subscribers for messages to send @@ -79,6 +80,7 @@ struct SendTopicsSubs { get_message_version<@(pub['simple_base_type'])_s>(), ucdr_topic_size_@(pub['simple_base_type'])(), &ucdr_serialize_@(pub['simple_base_type']), + static_cast((@(pub.get('rate_limit', 0)) > 0) ? (1e3 / @(pub.get('rate_limit', 1e3))) : UXRCE_DEFAULT_POLL_INTERVAL_MS), }, @[ end for]@ }; @@ -98,7 +100,7 @@ bool SendTopicsSubs::init(uxrSession *session, uxrStreamId reliable_out_stream_i if (fds[idx].events == 0) { fds[idx].fd = orb_subscribe(send_subscriptions[idx].orb_meta); fds[idx].events = POLLIN; - orb_set_interval(fds[idx].fd, UXRCE_DEFAULT_POLL_RATE); + orb_set_interval(fds[idx].fd, send_subscriptions[idx].publish_interval_ms); } if (!create_data_writer(session, reliable_out_stream_id, participant_id, static_cast(send_subscriptions[idx].orb_meta->o_id), client_namespace, send_subscriptions[idx].topic, diff --git a/src/modules/uxrce_dds_client/dds_topics.yaml b/src/modules/uxrce_dds_client/dds_topics.yaml index 24c30d8850..23cb5082dd 100644 --- a/src/modules/uxrce_dds_client/dds_topics.yaml +++ b/src/modules/uxrce_dds_client/dds_topics.yaml @@ -10,75 +10,92 @@ publications: - topic: /fmu/out/arming_check_request type: px4_msgs::msg::ArmingCheckRequest + rate_limit: 5. - topic: /fmu/out/mode_completed type: px4_msgs::msg::ModeCompleted + rate_limit: 50. - topic: /fmu/out/battery_status type: px4_msgs::msg::BatteryStatus + rate_limit: 1. - topic: /fmu/out/collision_constraints type: px4_msgs::msg::CollisionConstraints + rate_limit: 50. - topic: /fmu/out/estimator_status_flags type: px4_msgs::msg::EstimatorStatusFlags + rate_limit: 5. - topic: /fmu/out/failsafe_flags type: px4_msgs::msg::FailsafeFlags + rate_limit: 5. - topic: /fmu/out/manual_control_setpoint type: px4_msgs::msg::ManualControlSetpoint + rate_limit: 25. - topic: /fmu/out/message_format_response type: px4_msgs::msg::MessageFormatResponse - topic: /fmu/out/position_setpoint_triplet type: px4_msgs::msg::PositionSetpointTriplet + rate_limit: 5. - topic: /fmu/out/sensor_combined type: px4_msgs::msg::SensorCombined - topic: /fmu/out/timesync_status type: px4_msgs::msg::TimesyncStatus + rate_limit: 10. # - topic: /fmu/out/vehicle_angular_velocity # type: px4_msgs::msg::VehicleAngularVelocity - topic: /fmu/out/vehicle_land_detected type: px4_msgs::msg::VehicleLandDetected + rate_limit: 5. - topic: /fmu/out/vehicle_attitude type: px4_msgs::msg::VehicleAttitude - topic: /fmu/out/vehicle_control_mode type: px4_msgs::msg::VehicleControlMode + rate_limit: 50. - topic: /fmu/out/vehicle_command_ack type: px4_msgs::msg::VehicleCommandAck - topic: /fmu/out/vehicle_global_position type: px4_msgs::msg::VehicleGlobalPosition + rate_limit: 50. - topic: /fmu/out/vehicle_gps_position type: px4_msgs::msg::SensorGps + rate_limit: 50. - topic: /fmu/out/vehicle_local_position type: px4_msgs::msg::VehicleLocalPosition + rate_limit: 50. - topic: /fmu/out/vehicle_odometry type: px4_msgs::msg::VehicleOdometry - topic: /fmu/out/vehicle_status type: px4_msgs::msg::VehicleStatus + rate_limit: 5. - topic: /fmu/out/airspeed_validated type: px4_msgs::msg::AirspeedValidated + rate_limit: 50. - topic: /fmu/out/vtol_vehicle_status type: px4_msgs::msg::VtolVehicleStatus - topic: /fmu/out/home_position type: px4_msgs::msg::HomePosition + rate_limit: 5. # Create uORB::Publication subscriptions: @@ -163,5 +180,17 @@ subscriptions: - topic: /fmu/in/aux_global_position type: px4_msgs::msg::VehicleGlobalPosition + - topic: /fmu/in/fixed_wing_longitudinal_setpoint + type: px4_msgs::msg::FixedWingLongitudinalSetpoint + + - topic: /fmu/in/fixed_wing_lateral_setpoint + type: px4_msgs::msg::FixedWingLateralSetpoint + + - topic: /fmu/in/longitudinal_control_configuration + type: px4_msgs::msg::LongitudinalControlConfiguration + + - topic: /fmu/in/lateral_control_configuration + type: px4_msgs::msg::LateralControlConfiguration + # Create uORB::PublicationMulti subscriptions_multi: diff --git a/src/modules/uxrce_dds_client/uxrce_dds_client.cpp b/src/modules/uxrce_dds_client/uxrce_dds_client.cpp index 9cc9bd516b..d8beb4f609 100644 --- a/src/modules/uxrce_dds_client/uxrce_dds_client.cpp +++ b/src/modules/uxrce_dds_client/uxrce_dds_client.cpp @@ -54,29 +54,19 @@ static constexpr uint8_t TIMESYNC_MAX_TIMEOUTS = 10; using namespace time_literals; -static void on_time(uxrSession *session, int64_t current_time, int64_t received_timestamp, int64_t transmit_timestamp, - int64_t originate_timestamp, void *args) +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) { - // latest round trip time (RTT) - int64_t rtt = current_time - originate_timestamp; - - // HRT to AGENT - int64_t offset_1 = (received_timestamp - originate_timestamp) - (rtt / 2); - int64_t offset_2 = (transmit_timestamp - current_time) - (rtt / 2); - - session->time_offset = (offset_1 + offset_2) / 2; - if (args) { Timesync *timesync = static_cast(args); - timesync->update(current_time / 1000, transmit_timestamp, originate_timestamp); + timesync->update(current_time / 1000, agent_receive_timestamp, originate_timestamp); session->time_offset = -timesync->offset() * 1000; // us -> ns } } -static void on_time_no_sync(uxrSession *session, int64_t current_time, int64_t received_timestamp, - int64_t transmit_timestamp, - int64_t originate_timestamp, void *args) +static void on_time_no_sync(uxrSession *session, int64_t current_time, int64_t client_transmit_timestamp, + int64_t agent_receive_timestamp, int64_t originate_timestamp, void *args) { session->time_offset = 0; } @@ -693,7 +683,6 @@ void UxrceddsClient::run() if (_synchronize_timestamps && hrt_elapsed_time(&last_sync_session) > 1_s) { if (uxr_sync_session(&session, 10) && _timesync.sync_converged()) { - //PX4_INFO("synchronized with time offset %-5" PRId64 "ns", session.time_offset); last_sync_session = hrt_absolute_time(); if (_param_uxrce_dds_syncc.get() > 0) { @@ -702,10 +691,10 @@ void UxrceddsClient::run() } if (!_timesync_converged && _timesync.sync_converged()) { - PX4_INFO("time sync converged"); + PX4_DEBUG("time sync converged"); } else if (_timesync_converged && !_timesync.sync_converged()) { - PX4_WARN("time sync no longer converged"); + PX4_DEBUG("time sync no longer converged"); } _timesync_converged = _timesync.sync_converged(); 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 353d236ce6..081c5a8106 100644 --- a/src/modules/vtol_att_control/vtol_att_control_main.cpp +++ b/src/modules/vtol_att_control/vtol_att_control_main.cpp @@ -81,8 +81,8 @@ VtolAttitudeControl::VtolAttitudeControl() : _spoilers_setpoint_pub.advertise(); _vtol_vehicle_status_pub.advertise(); _vehicle_thrust_setpoint0_pub.advertise(); - _vehicle_torque_setpoint0_pub.advertise(); _vehicle_thrust_setpoint1_pub.advertise(); + _vehicle_torque_setpoint0_pub.advertise(); _vehicle_torque_setpoint1_pub.advertise(); } @@ -449,10 +449,10 @@ VtolAttitudeControl::Run() _vtol_type->fill_actuator_outputs(); - _vehicle_torque_setpoint0_pub.publish(_torque_setpoint_0); - _vehicle_torque_setpoint1_pub.publish(_torque_setpoint_1); _vehicle_thrust_setpoint0_pub.publish(_thrust_setpoint_0); _vehicle_thrust_setpoint1_pub.publish(_thrust_setpoint_1); + _vehicle_torque_setpoint0_pub.publish(_torque_setpoint_0); + _vehicle_torque_setpoint1_pub.publish(_torque_setpoint_1); // Advertise/publish vtol vehicle status -- immediately if changed, otherwise at 1 Hz const bool vtol_vehicle_status_changed = diff --git a/src/modules/zenoh/Kconfig.topics b/src/modules/zenoh/Kconfig.topics index ac96b8586f..5ecde816d1 100644 --- a/src/modules/zenoh/Kconfig.topics +++ b/src/modules/zenoh/Kconfig.topics @@ -445,10 +445,6 @@ menu "Zenoh publishers/subscribers" bool "normalized_unsigned_setpoint" default n - config ZENOH_PUBSUB_NPFG_STATUS - bool "npfg_status" - default n - config ZENOH_PUBSUB_OBSTACLE_DISTANCE bool "obstacle_distance" default n diff --git a/src/systemcmds/i2c_launcher/i2c_launcher.cpp b/src/systemcmds/i2c_launcher/i2c_launcher.cpp index db8b522132..c2a46a39f1 100644 --- a/src/systemcmds/i2c_launcher/i2c_launcher.cpp +++ b/src/systemcmds/i2c_launcher/i2c_launcher.cpp @@ -40,11 +40,17 @@ constexpr I2CLauncher::I2CDevice I2CLauncher::_devices[]; -I2CLauncher::I2CLauncher(int bus) : +I2CLauncher::I2CLauncher(int bus, int batt_index) : ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::device_bus_to_wq(bus)), _bus(bus) { + if (_batt_index == -1) { + _batt_index = bus; + + } else { + _batt_index = batt_index; + } } I2CLauncher::~I2CLauncher() @@ -87,10 +93,10 @@ void I2CLauncher::Run() return; } - scan_i2c_bus(_bus); + scan_i2c_bus(_bus, _batt_index); } -void I2CLauncher::scan_i2c_bus(int bus) +void I2CLauncher::scan_i2c_bus(int bus, int batt_index) { struct i2c_master_s *i2c_dev = px4_i2cbus_initialize(bus); @@ -163,7 +169,7 @@ void I2CLauncher::scan_i2c_bus(int bus) if (found) { char buf[32]; - snprintf(buf, sizeof(buf), "%s -X -b %d -t %d start", _devices[i].cmd, bus, bus); + snprintf(buf, sizeof(buf), "%s -X -b %d -t %d start", _devices[i].cmd, bus, batt_index); PX4_INFO("Found address 0x%x, running '%s'\n", _devices[i].i2c_addr, buf); @@ -204,6 +210,7 @@ Daemon that starts drivers based on found I2C devices. PRINT_MODULE_USAGE_NAME("i2c_launcher", "system"); PRINT_MODULE_USAGE_COMMAND("start"); PRINT_MODULE_USAGE_PARAM_INT('b', 0, 1, 4, "Bus number", false); + PRINT_MODULE_USAGE_PARAM_INT('t', 1, 1, 3, "battery index for calibration values (1 or 3)", false); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); return 0; @@ -215,18 +222,23 @@ extern "C" __EXPORT int i2c_launcher_main(int argc, char *argv[]) static I2CLauncher* instances[I2C_BUS_MAX_BUS_ITEMS]; int bus = -1; + int batt_index = -1; int myoptind = 1; int ch; const char *myoptarg = nullptr; const char *verb = argv[1]; - while ((ch = px4_getopt(argc, argv, "b:", &myoptind, &myoptarg)) != EOF) { + while ((ch = px4_getopt(argc, argv, "b:t:", &myoptind, &myoptarg)) != EOF) { switch (ch) { case 'b': bus = strtol(myoptarg, nullptr, 10); break; + case 't': + batt_index = strtol(myoptarg, nullptr, 10); + break; + default: return ThisDriver::print_usage("unrecognized flag"); } @@ -250,7 +262,7 @@ extern "C" __EXPORT int i2c_launcher_main(int argc, char *argv[]) if (strcmp(verb, "start") == 0) { - instances[bus] = new I2CLauncher(bus); + instances[bus] = new I2CLauncher(bus, batt_index); if (instances[bus]) { diff --git a/src/systemcmds/i2c_launcher/i2c_launcher.hpp b/src/systemcmds/i2c_launcher/i2c_launcher.hpp index 18884e3ac4..0922dfb6ca 100644 --- a/src/systemcmds/i2c_launcher/i2c_launcher.hpp +++ b/src/systemcmds/i2c_launcher/i2c_launcher.hpp @@ -51,7 +51,7 @@ using namespace time_literals; class I2CLauncher : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem { public: - I2CLauncher(int bus); + I2CLauncher(int bus, int batt_index); ~I2CLauncher() override; @@ -78,11 +78,12 @@ private: void Run() override; - static void scan_i2c_bus(int bus); + static void scan_i2c_bus(int bus, int batt_index); uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)}; uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; // regular subscription for additional data int _bus; + int _batt_index; bool _armed {false}; }; diff --git a/test/mavsdk_tests/MAVSDK_VERSION b/test/mavsdk_tests/MAVSDK_VERSION index 3a3cd8cc8b..18091983f5 100644 --- a/test/mavsdk_tests/MAVSDK_VERSION +++ b/test/mavsdk_tests/MAVSDK_VERSION @@ -1 +1 @@ -1.3.1 +3.4.0 diff --git a/test/mavsdk_tests/autopilot_tester.cpp b/test/mavsdk_tests/autopilot_tester.cpp index 4344a35ae8..4e6aea0952 100644 --- a/test/mavsdk_tests/autopilot_tester.cpp +++ b/test/mavsdk_tests/autopilot_tester.cpp @@ -52,6 +52,7 @@ AutopilotTester::AutopilotTester() : AutopilotTester::~AutopilotTester() { + _events->unsubscribe_events(_events_handle); _should_exit = true; _real_time_report_thread.join(); } @@ -76,14 +77,26 @@ void AutopilotTester::connect(const std::string uri) _offboard.reset(new Offboard(system)); _param.reset(new Param(system)); _telemetry.reset(new Telemetry(system)); + _events.reset(new Events(system)); _mavlink_passthrough.reset(new MavlinkPassthrough(system)); + + _events_handle = _events->subscribe_events([](const Events::Event & event) { + std::cout << "[" << event.log_level << "] " << event.message << std::endl; + + if (!event.description.empty()) { + std::cout << " Description: " << event.description << std::endl; + } + + std::cout << " Event name: " << event.event_namespace << "/" << event.event_name + << std::endl; + }); } void AutopilotTester::wait_until_ready() { std::cout << time_str() << "Waiting for system to be ready (system health ok & able to arm)" << std::endl; - // Wiat until the system is healthy + // Wait until the system is healthy CHECK(poll_condition_with_timeout( [this]() { return _telemetry->health_all_ok(); }, std::chrono::seconds(30))); @@ -215,9 +228,10 @@ void AutopilotTester::wait_until_altitude(float rel_altitude_m, std::chrono::sec auto prom = std::promise {}; auto fut = prom.get_future(); - _telemetry->subscribe_position([&prom, rel_altitude_m, delta, this](Telemetry::Position new_position) { + Telemetry::PositionHandle handle = _telemetry->subscribe_position([&prom, rel_altitude_m, delta, &handle, + this](Telemetry::Position new_position) { if (fabs(rel_altitude_m - new_position.relative_altitude_m) <= delta) { - _telemetry->subscribe_position(nullptr); + _telemetry->unsubscribe_position(handle); prom.set_value(); } }); @@ -244,6 +258,8 @@ void AutopilotTester::prepare_square_mission(MissionOptions mission_options) _mission->set_return_to_launch_after_mission(mission_options.rtl_at_end); REQUIRE(_mission->upload_mission(mission_plan) == Mission::Result::Success); + // PX4 needs time to realize that it now has a mission available, so we need to wait a bit here. + sleep_for(std::chrono::seconds(1)); } void AutopilotTester::prepare_straight_mission(MissionOptions mission_options) @@ -260,6 +276,8 @@ void AutopilotTester::prepare_straight_mission(MissionOptions mission_options) _mission->set_return_to_launch_after_mission(mission_options.rtl_at_end); REQUIRE(_mission->upload_mission(mission_plan) == Mission::Result::Success); + // PX4 needs time to realize that it now has a mission available, so we need to wait a bit here. + sleep_for(std::chrono::seconds(1)); } void AutopilotTester::execute_mission() @@ -389,6 +407,8 @@ void AutopilotTester::load_qgc_mission_raw_and_move_here(const std::string &plan move_mission_raw_here(import_result.second.mission_items); REQUIRE(_mission_raw->upload_mission(import_result.second.mission_items) == MissionRaw::Result::Success); + // PX4 needs time to realize that it now has a mission available, so we need to wait a bit here. + sleep_for(std::chrono::seconds(1)); } void AutopilotTester::execute_mission_raw() @@ -629,7 +649,8 @@ void AutopilotTester::start_checking_altitude(const float max_deviation_m) std::array initial_position = get_current_position_ned(); float target_altitude = initial_position[2]; - _telemetry->subscribe_position([target_altitude, max_deviation_m, this](Telemetry::Position new_position) { + _check_altitude_handle = _telemetry->subscribe_position([target_altitude, max_deviation_m, + this](Telemetry::Position new_position) { const float current_deviation = fabs((-target_altitude) - new_position.relative_altitude_m); CHECK(current_deviation <= max_deviation_m); }); @@ -637,7 +658,7 @@ void AutopilotTester::start_checking_altitude(const float max_deviation_m) void AutopilotTester::stop_checking_altitude() { - _telemetry->subscribe_position(nullptr); + _telemetry->unsubscribe_position(_check_altitude_handle); } void AutopilotTester::check_tracks_mission_raw(float corridor_radius_m, bool reverse) @@ -744,15 +765,10 @@ void AutopilotTester::send_custom_mavlink_command(const MavlinkPassthrough::Comm _mavlink_passthrough->send_command_int(command); } -void AutopilotTester::send_custom_mavlink_message(mavlink_message_t &message) -{ - _mavlink_passthrough->send_message(message); -} - void AutopilotTester::add_mavlink_message_callback(uint16_t message_id, std::function< void(const mavlink_message_t &)> callback) { - _mavlink_passthrough->subscribe_message_async(message_id, std::move(callback)); + _mavlink_passthrough->subscribe_message(message_id, std::move(callback)); } std::array AutopilotTester::get_current_position_ned() @@ -867,11 +883,12 @@ void AutopilotTester::start_and_wait_for_mission_sequence(int sequence_number) auto prom = std::promise {}; auto fut = prom.get_future(); - _mission->subscribe_mission_progress([&prom, this, sequence_number](Mission::MissionProgress progress) { + Mission::MissionProgressHandle handle = _mission->subscribe_mission_progress( + [&prom, &handle, this, sequence_number](Mission::MissionProgress progress) { std::cout << time_str() << "Progress: " << progress.current << "/" << progress.total << std::endl; if (progress.current >= sequence_number) { - _mission->subscribe_mission_progress(nullptr); + _mission->unsubscribe_mission_progress(handle); prom.set_value(); } }); @@ -886,11 +903,12 @@ void AutopilotTester::start_and_wait_for_mission_sequence_raw(int sequence_numbe auto prom = std::promise {}; auto fut = prom.get_future(); - _mission_raw->subscribe_mission_progress([&prom, this, sequence_number](MissionRaw::MissionProgress progress) { + MissionRaw::MissionProgressHandle handle = _mission_raw->subscribe_mission_progress( + [&prom, &handle, this, sequence_number](MissionRaw::MissionProgress progress) { std::cout << time_str() << "Progress: " << progress.current << "/" << progress.total << std::endl; if (progress.current >= sequence_number) { - _mission_raw->subscribe_mission_progress(nullptr); + _mission_raw->unsubscribe_mission_progress(handle); prom.set_value(); } }); @@ -905,9 +923,10 @@ void AutopilotTester::wait_for_flight_mode(Telemetry::FlightMode flight_mode, st auto prom = std::promise {}; auto fut = prom.get_future(); - _telemetry->subscribe_flight_mode([&prom, flight_mode, this](Telemetry::FlightMode new_flight_mode) { + Telemetry::FlightModeHandle handle = _telemetry->subscribe_flight_mode( + [&prom, &handle, flight_mode, this](Telemetry::FlightMode new_flight_mode) { if (new_flight_mode == flight_mode) { - _telemetry->subscribe_flight_mode(nullptr); + _telemetry->unsubscribe_flight_mode(handle); prom.set_value(); } }); @@ -920,9 +939,10 @@ void AutopilotTester::wait_for_landed_state(Telemetry::LandedState landed_state, auto prom = std::promise {}; auto fut = prom.get_future(); - _telemetry->subscribe_landed_state([&prom, landed_state, this](Telemetry::LandedState new_landed_state) { + Telemetry::LandedStateHandle handle = _telemetry->subscribe_landed_state( + [&prom, &handle, landed_state, this](Telemetry::LandedState new_landed_state) { if (new_landed_state == landed_state) { - _telemetry->subscribe_landed_state(nullptr); + _telemetry->unsubscribe_landed_state(handle); prom.set_value(); } }); @@ -935,7 +955,8 @@ void AutopilotTester::wait_until_speed_lower_than(float speed, std::chrono::seco auto prom = std::promise {}; auto fut = prom.get_future(); - _telemetry->subscribe_position_velocity_ned([&prom, speed, this](Telemetry::PositionVelocityNed position_velocity_ned) { + Telemetry::PositionVelocityNedHandle handle = _telemetry->subscribe_position_velocity_ned( + [&prom, &handle, speed, this](Telemetry::PositionVelocityNed position_velocity_ned) { std::array current_velocity; current_velocity[0] = position_velocity_ned.velocity.north_m_s; current_velocity[1] = position_velocity_ned.velocity.east_m_s; @@ -943,7 +964,7 @@ void AutopilotTester::wait_until_speed_lower_than(float speed, std::chrono::seco const float current_speed = norm(current_velocity); if (current_speed <= speed) { - _telemetry->subscribe_position_velocity_ned(nullptr); + _telemetry->unsubscribe_position_velocity_ned(handle); prom.set_value(); } }); @@ -956,9 +977,10 @@ void AutopilotTester::wait_for_mission_finished(std::chrono::seconds timeout) auto prom = std::promise {}; auto fut = prom.get_future(); - _mission->subscribe_mission_progress([&prom, this](Mission::MissionProgress progress) { + Mission::MissionProgressHandle handle = _mission->subscribe_mission_progress( + [&prom, &handle, this](Mission::MissionProgress progress) { if (progress.current == progress.total) { - _mission->subscribe_mission_progress(nullptr); + _mission->unsubscribe_mission_progress(handle); prom.set_value(); } }); @@ -971,9 +993,10 @@ void AutopilotTester::wait_for_mission_raw_finished(std::chrono::seconds timeout auto prom = std::promise {}; auto fut = prom.get_future(); - _mission_raw->subscribe_mission_progress([&prom, this](MissionRaw::MissionProgress progress) { + MissionRaw::MissionProgressHandle handle = _mission_raw->subscribe_mission_progress( + [&prom, &handle, this](MissionRaw::MissionProgress progress) { if (progress.current == progress.total) { - _mission_raw->subscribe_mission_progress(nullptr); + _mission_raw->unsubscribe_mission_progress(handle); prom.set_value(); } }); diff --git a/test/mavsdk_tests/autopilot_tester.h b/test/mavsdk_tests/autopilot_tester.h index 802bc819a3..b0ac078d5d 100644 --- a/test/mavsdk_tests/autopilot_tester.h +++ b/test/mavsdk_tests/autopilot_tester.h @@ -45,6 +45,7 @@ #include #include #include +#include #include "catch2/catch.hpp" #include #include @@ -149,7 +150,6 @@ public: void check_current_altitude(float target_rel_altitude_m, float max_distance_m = 1.5f); void execute_rtl_when_reaching_mission_sequence(int sequence_number); void send_custom_mavlink_command(const MavlinkPassthrough::CommandInt &command); - void send_custom_mavlink_message(mavlink_message_t &message); void add_mavlink_message_callback(uint16_t message_id, std::function< void(const mavlink_message_t &)> callback); void enable_fixedwing_mectrics(); @@ -192,6 +192,7 @@ public: protected: mavsdk::Param *getParams() const { return _param.get();} mavsdk::Telemetry *getTelemetry() const { return _telemetry.get();} + mavsdk::MissionRaw *getMissionRaw() const { return _mission_raw.get();} mavsdk::ManualControl *getManualControl() const { return _manual_control.get();} MavlinkPassthrough *getMavlinkPassthrough() const { return _mavlink_passthrough.get();} std::shared_ptr get_system() { return _mavsdk.systems().at(0);} @@ -282,7 +283,7 @@ private: } - mavsdk::Mavsdk _mavsdk{}; + mavsdk::Mavsdk _mavsdk{Mavsdk::Configuration{ComponentType::GroundStation}}; std::unique_ptr _action{}; std::unique_ptr _failure{}; std::unique_ptr _info{}; @@ -293,9 +294,14 @@ private: std::unique_ptr _offboard{}; std::unique_ptr _param{}; std::unique_ptr _telemetry{}; + std::unique_ptr _events{}; Telemetry::GroundTruth _home{NAN, NAN, NAN}; + mavsdk::Telemetry::PositionHandle _check_altitude_handle{}; + std::atomic _should_exit {false}; std::thread _real_time_report_thread {}; + + mavsdk::Events::EventsHandle _events_handle{}; }; diff --git a/test/mavsdk_tests/autopilot_tester_figure_eight.cpp b/test/mavsdk_tests/autopilot_tester_figure_eight.cpp index 402c72d3a2..2d6e8f0b85 100644 --- a/test/mavsdk_tests/autopilot_tester_figure_eight.cpp +++ b/test/mavsdk_tests/autopilot_tester_figure_eight.cpp @@ -103,7 +103,8 @@ void AutopilotTesterFigureEight::check_tracks_figure_eight(std::chrono::seconds order_to_fly = std::vector {0, 3, 2, 1, 0, 6, 5, 4, 0}; } - getTelemetry()->subscribe_position_velocity_ned([&figure_eight_point_of_interest, &prom, corridor_radius_m, + Telemetry::PositionVelocityNedHandle handle = getTelemetry()->subscribe_position_velocity_ned( + [&figure_eight_point_of_interest, &prom, &handle, corridor_radius_m, &order_to_fly, this](Telemetry::PositionVelocityNed position_velocity_ned) { static size_t index{0}; int32_t close_index{-1}; @@ -129,14 +130,14 @@ void AutopilotTesterFigureEight::check_tracks_figure_eight(std::chrono::seconds } else { // reached an out of order point if (index > 0U) { // only set to false if we already hve passed the first center point - getTelemetry()->subscribe_position_velocity_ned(nullptr); + getTelemetry()->unsubscribe_position_velocity_ned(handle); prom.set_value(false); } } } if (index + 1 == order_to_fly.size()) { - getTelemetry()->subscribe_position_velocity_ned(nullptr); + getTelemetry()->unsubscribe_position_velocity_ned(handle); prom.set_value(true); } }); diff --git a/test/mavsdk_tests/autopilot_tester_rtl.cpp b/test/mavsdk_tests/autopilot_tester_rtl.cpp index d24b59e90d..200cf66a24 100644 --- a/test/mavsdk_tests/autopilot_tester_rtl.cpp +++ b/test/mavsdk_tests/autopilot_tester_rtl.cpp @@ -64,47 +64,9 @@ void AutopilotTesterRtl::set_takeoff_land_requirements(int req) CHECK(getParams()->set_param_int("MIS_TKO_LAND_REQ", req) == Param::Result::Success); } -void AutopilotTesterRtl::upload_custom_mission(std::chrono::seconds timeout) +void AutopilotTesterRtl::upload_rally_points() { - std::promise prom; - auto fut = prom.get_future(); - - uint8_t mission_type = _custom_mission[0].mission_type; - // Register callback to mission item request. - add_mavlink_message_callback(MAVLINK_MSG_ID_MISSION_REQUEST_INT, [this, mission_type, - &prom](const mavlink_message_t &message) { - - mavlink_mission_request_int_t request_int_message; - mavlink_msg_mission_request_int_decode(&message, &request_int_message); - - if (request_int_message.mission_type == mission_type) { - // send requested element. - mavlink_message_t mission_item_int_mavlink_message; - mavlink_msg_mission_item_int_encode(getMavlinkPassthrough()->get_our_sysid(), getMavlinkPassthrough()->get_our_compid(), - &mission_item_int_mavlink_message, &(_custom_mission[request_int_message.seq])); - send_custom_mavlink_message(mission_item_int_mavlink_message); - - if (request_int_message.seq + 1U == _custom_mission.size()) { - add_mavlink_message_callback(MAVLINK_MSG_ID_MISSION_REQUEST_INT, nullptr); - prom.set_value(); - } - } - }); - - // send mission count - mavlink_mission_count_t mission_count_message; - mission_count_message.count = _custom_mission.size(); - mission_count_message.target_system = getMavlinkPassthrough()->get_target_sysid(); - mission_count_message.target_component = getMavlinkPassthrough()->get_target_compid(); - mission_count_message.mission_type = mission_type; - - mavlink_message_t mission_count_mavlink_message; - mavlink_msg_mission_count_encode(getMavlinkPassthrough()->get_our_sysid(), getMavlinkPassthrough()->get_our_compid(), - &mission_count_mavlink_message, &mission_count_message); - - send_custom_mavlink_message(mission_count_mavlink_message); - - REQUIRE(fut.wait_for(timeout) == std::future_status::ready); + REQUIRE(getMissionRaw()->upload_rally_points(_rally_points) == MissionRaw::Result::Success); } void AutopilotTesterRtl::add_home_to_rally_point() @@ -121,13 +83,13 @@ void AutopilotTesterRtl::add_home_with_approaches_to_rally_point() void AutopilotTesterRtl::add_local_rally_point(mavsdk::geometry::CoordinateTransformation::LocalCoordinate local_coordinate) { - _rally_points.push_back(local_coordinate); + _local_rally_points.push_back(local_coordinate); mavsdk::geometry::CoordinateTransformation ct(get_coordinate_transformation()); mavsdk::geometry::CoordinateTransformation::GlobalCoordinate pos(ct.global_from_local(local_coordinate)); // Set rally point - mavlink_mission_item_int_t tmp_mission_item; + mavsdk::MissionRaw::MissionItem tmp_mission_item; tmp_mission_item.param1 = 0.f; tmp_mission_item.param2 = 0.f; tmp_mission_item.param3 = 0.f; @@ -135,16 +97,15 @@ void AutopilotTesterRtl::add_local_rally_point(mavsdk::geometry::CoordinateTrans tmp_mission_item.x = static_cast(pos.latitude_deg * 1E7); tmp_mission_item.y = static_cast(pos.longitude_deg * 1E7); tmp_mission_item.z = 0.f; - tmp_mission_item.seq = static_cast(_custom_mission.size()); + tmp_mission_item.seq = static_cast(_rally_points.size()); tmp_mission_item.command = MAV_CMD_NAV_RALLY_POINT; - tmp_mission_item.target_system = getMavlinkPassthrough()->get_target_sysid(); - tmp_mission_item.target_component = getMavlinkPassthrough()->get_target_compid(); tmp_mission_item.frame = MAV_FRAME_GLOBAL_RELATIVE_ALT; - tmp_mission_item.current = 0; + // FIXME: this is currently required with MAVSDK even though it doesn't make much sense for rally points + tmp_mission_item.current = _rally_points.empty() ? 1 : 0; tmp_mission_item.autocontinue = 0; tmp_mission_item.mission_type = MAV_MISSION_TYPE_RALLY; - _custom_mission.push_back(tmp_mission_item); + _rally_points.push_back(tmp_mission_item); } void AutopilotTesterRtl::add_local_rally_with_approaches_point( @@ -164,7 +125,7 @@ void AutopilotTesterRtl::add_approaches_to_point(mavsdk::geometry::CoordinateTra mavsdk::geometry::CoordinateTransformation::LocalCoordinate tmp_coordinate{local_coordinate}; tmp_coordinate.north_m += 200.; mavsdk::geometry::CoordinateTransformation::GlobalCoordinate pos(ct.global_from_local(tmp_coordinate)); - mavlink_mission_item_int_t tmp_mission_item; + mavsdk::MissionRaw::MissionItem tmp_mission_item; tmp_mission_item.param1 = 0.f; tmp_mission_item.param2 = 80.f; tmp_mission_item.param3 = 0.f; @@ -172,16 +133,15 @@ void AutopilotTesterRtl::add_approaches_to_point(mavsdk::geometry::CoordinateTra tmp_mission_item.x = static_cast(pos.latitude_deg * 1E7); tmp_mission_item.y = static_cast(pos.longitude_deg * 1E7); tmp_mission_item.z = 15.f; - tmp_mission_item.seq = static_cast(_custom_mission.size()); + tmp_mission_item.seq = static_cast(_rally_points.size()); tmp_mission_item.command = MAV_CMD_NAV_LOITER_TO_ALT; - tmp_mission_item.target_system = getMavlinkPassthrough()->get_target_sysid(); - tmp_mission_item.target_component = getMavlinkPassthrough()->get_target_compid(); tmp_mission_item.frame = MAV_FRAME_GLOBAL_RELATIVE_ALT; - tmp_mission_item.current = 0; + // FIXME: this is currently required with MAVSDK even though it doesn't make much sense for rally points + tmp_mission_item.current = _rally_points.empty() ? 1 : 0; tmp_mission_item.autocontinue = 0; tmp_mission_item.mission_type = MAV_MISSION_TYPE_RALLY; - _custom_mission.push_back(tmp_mission_item); + _rally_points.push_back(tmp_mission_item); // Set east loiter to alt tmp_coordinate = local_coordinate; @@ -189,9 +149,9 @@ void AutopilotTesterRtl::add_approaches_to_point(mavsdk::geometry::CoordinateTra pos = ct.global_from_local(tmp_coordinate); tmp_mission_item.x = static_cast(pos.latitude_deg * 1E7); tmp_mission_item.y = static_cast(pos.longitude_deg * 1E7); - tmp_mission_item.seq = static_cast(_custom_mission.size()); + tmp_mission_item.seq = static_cast(_rally_points.size()); - _custom_mission.push_back(tmp_mission_item); + _rally_points.push_back(tmp_mission_item); } void AutopilotTesterRtl::check_rally_point_within(float acceptance_radius_m) @@ -202,7 +162,7 @@ void AutopilotTesterRtl::check_rally_point_within(float acceptance_radius_m) mavsdk::geometry::CoordinateTransformation::GlobalCoordinate pos; bool within_rally_point{false}; - for (const auto &rally_point : _rally_points) { + for (const auto &rally_point : _local_rally_points) { pos = ct.global_from_local(rally_point); land_coord.latitude_deg = pos.latitude_deg; land_coord.longitude_deg = pos.longitude_deg; @@ -222,7 +182,8 @@ void AutopilotTesterRtl::check_rtl_approaches(float acceptance_radius_m, std::ch REQUIRE(return_rtl_alt.first == Param::Result::Success); REQUIRE(descend_rtl_alt.first == Param::Result::Success); - getTelemetry()->subscribe_position_velocity_ned([&prom, acceptance_radius_m, return_rtl_alt, descend_rtl_alt, ct, + Telemetry::PositionVelocityNedHandle handle = getTelemetry()->subscribe_position_velocity_ned( + [&prom, &handle, acceptance_radius_m, return_rtl_alt, descend_rtl_alt, ct, this](Telemetry::PositionVelocityNed position_velocity_ned) { if ((-position_velocity_ned.position.down_m < return_rtl_alt.second - 3.) @@ -230,7 +191,7 @@ void AutopilotTesterRtl::check_rtl_approaches(float acceptance_radius_m, std::ch // We started to loiter down so we should be on the approach loiter bool on_approach_loiter(false); - for (const auto mission_item : _custom_mission) { + for (const auto mission_item : _rally_points) { if (mission_item.command == MAV_CMD_NAV_LOITER_TO_ALT) { mavsdk::geometry::CoordinateTransformation::LocalCoordinate pos(ct.local_from_global({static_cast(mission_item.x) / 1E7, static_cast(mission_item.y) / 1E7})); double rel_distance_to_center = sqrt(sq(position_velocity_ned.position.north_m - pos.north_m) + sq( @@ -242,7 +203,7 @@ void AutopilotTesterRtl::check_rtl_approaches(float acceptance_radius_m, std::ch if (-position_velocity_ned.position.down_m < descend_rtl_alt.second + 3.) { // We reached the altitude - getTelemetry()->subscribe_position_velocity_ned(nullptr); + getTelemetry()->unsubscribe_position_velocity_ned(handle); prom.set_value(true); return; @@ -252,7 +213,7 @@ void AutopilotTesterRtl::check_rtl_approaches(float acceptance_radius_m, std::ch } if (!on_approach_loiter) { - getTelemetry()->subscribe_position_velocity_ned(nullptr); + getTelemetry()->unsubscribe_position_velocity_ned(handle); prom.set_value(false); } diff --git a/test/mavsdk_tests/autopilot_tester_rtl.h b/test/mavsdk_tests/autopilot_tester_rtl.h index eaa3c5fd9d..8efbe7ecc4 100644 --- a/test/mavsdk_tests/autopilot_tester_rtl.h +++ b/test/mavsdk_tests/autopilot_tester_rtl.h @@ -59,15 +59,13 @@ public: void connect(const std::string uri); void check_rally_point_within(float acceptance_radius_m); void check_rtl_approaches(float acceptance_radius_m, std::chrono::seconds timeout); - /* NOTE mavsdk mission upload should be used when possible. Only use this when uploading a mission which is not yet suppported by mavsdk. - * Used here to to test the new way of uploading approaches for rally points. */ - void upload_custom_mission(std::chrono::seconds timeout); + void upload_rally_points(); private: void add_approaches_to_point(mavsdk::geometry::CoordinateTransformation::LocalCoordinate local_coordinate); std::unique_ptr _failure{}; - std::vector _custom_mission{}; - std::vector _rally_points{}; + std::vector _rally_points{}; + std::vector _local_rally_points{}; }; diff --git a/test/mavsdk_tests/configs/sitl.json b/test/mavsdk_tests/configs/sitl.json index e14b73689c..a281c2fe2a 100644 --- a/test/mavsdk_tests/configs/sitl.json +++ b/test/mavsdk_tests/configs/sitl.json @@ -1,7 +1,7 @@ { "mode": "sitl", "simulator": "gazebo", - "mavlink_connection": "udp://:14540", + "mavlink_connection": "udpin://0.0.0.0:14540", "tests": [ { diff --git a/test/mavsdk_tests/test_vtol_rtl.cpp b/test/mavsdk_tests/test_vtol_rtl.cpp index c98a3cd3ef..75e28d3820 100644 --- a/test/mavsdk_tests/test_vtol_rtl.cpp +++ b/test/mavsdk_tests/test_vtol_rtl.cpp @@ -105,7 +105,7 @@ TEST_CASE("RTL direct home without approaches", "[vtol]") tester.set_rtl_appr_force(0); // reupload rally points with approaches tester.add_home_to_rally_point(); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(4); tester.wait_until_disarmed(std::chrono::seconds(150)); @@ -124,7 +124,7 @@ TEST_CASE("RTL direct home without approaches forced", "[vtol]") tester.set_rtl_appr_force(1); // reupload rally points with approaches tester.add_home_to_rally_point(); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(4); tester.wait_until_disarmed(std::chrono::seconds(150)); @@ -142,7 +142,7 @@ TEST_CASE("RTL direct home with approaches", "[vtol]") tester.set_rtl_type(0); // reupload rally points with approaches tester.add_home_with_approaches_to_rally_point(); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(4); tester.check_rtl_approaches(5., std::chrono::seconds(60)); @@ -161,7 +161,7 @@ TEST_CASE("RTL direct home not as rally point", "[vtol]") tester.set_rtl_type(1); // reupload rally points with approaches tester.add_home_with_approaches_to_rally_point(); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(2); tester.wait_until_disarmed(std::chrono::seconds(150)); @@ -180,7 +180,7 @@ TEST_CASE("RTL direct rally without approaches", "[vtol]") tester.set_rtl_appr_force(0); // reupload rally points with approaches tester.add_local_rally_point({100., -200.}); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(3); tester.wait_until_disarmed(std::chrono::seconds(150)); @@ -200,7 +200,7 @@ TEST_CASE("RTL direct rally without approaches forced", "[vtol]") tester.set_rtl_appr_force(1); // reupload rally points with approaches tester.add_local_rally_point({100., -2000.}); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(3); tester.wait_until_disarmed(std::chrono::seconds(150)); @@ -219,7 +219,7 @@ TEST_CASE("RTL direct rally with approaches", "[vtol]") tester.set_rtl_appr_force(0); // reupload rally points with approaches tester.add_local_rally_with_approaches_point({100., -200.}); - tester.upload_custom_mission(std::chrono::seconds(10)); + tester.upload_rally_points(); tester.arm(); tester.execute_rtl_when_reaching_mission_sequence(3); tester.check_rtl_approaches(5., std::chrono::seconds(60));