Compare commits

..

2 Commits

Author SHA1 Message Date
Hamish Willee df8c765c4d Apply suggestion from @hamishwillee 2026-02-18 19:14:27 -08:00
Ramon Roche 9b552800ad docs: add AGENTS.md and gitignore AI agent local files
Add AGENTS.md as a cross-tool standard for AI coding agents with
pointers to in-tree docs, build verification commands, safety-critical
directory table, coding rules, and an agent decision framework.

Update docs/en/contribute/code.md with coding conventions enforced
during review (return early, no get/is prefixes, default member init,
no std:: in embedded code, no dynamic alloc after init).

Update docs/en/simulation/index.md with a "Choosing a Simulator"
section explaining when to use SIH vs Gazebo.

Gitignore tool-specific AI agent configs and local state for Claude
Code, Cursor, Windsurf, Aider, Cline, Continue.dev, Codex CLI,
Amazon Q, Augment, Cody, Junie, Tabnine, and Gemini.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-02-18 19:14:27 -08:00
457 changed files with 5001 additions and 9477 deletions
+5
View File
@@ -147,10 +147,12 @@ Checks: '*,
-readability-avoid-nested-conditional-operator,
-cppcoreguidelines-prefer-member-initializer,
-cppcoreguidelines-explicit-virtual-functions,
-cppcoreguidelines-virtual-class-destructor,
-readability-convert-member-functions-to-static,
-readability-make-member-function-const,
-bugprone-assignment-in-if-condition,
-bugprone-implicit-widening-of-multiplication-result,
-bugprone-incorrect-roundings,
-bugprone-macro-parentheses,
-bugprone-multi-level-implicit-pointer-conversion,
-bugprone-signed-char-misuse,
@@ -165,10 +167,13 @@ Checks: '*,
-readability-avoid-return-with-void-value,
-readability-avoid-unconditional-preprocessor-if,
-readability-delete-null-pointer,
-readability-duplicate-include,
-readability-redundant-casting,
-readability-redundant-member-init,
-readability-reference-to-constructed-temporary,
-readability-simplify-boolean-expr,
-bugprone-unsafe-functions,
-cert-msc24-c,
-cert-msc32-c,
-cert-msc33-c,
-cert-msc51-cpp,
+1 -3
View File
@@ -21,10 +21,8 @@ applyTo: "docs/en/**"
- Do not apply bold or italic styling inside a heading.
- **Formatting:**
- **Bold:** Only for UI elements (buttons, menu items).
- **Italics (Emphasis):** For tool names (e.g., *QGroundControl*).
- **Inline Code:** Use backticks for file paths, parameters, and CLI commands (e.g., `prettier`).
Backticks are optional for hyperlinked CLI commands and tool names.
- **Italics (Emphasis):** Use for application names (e.g., *QGroundControl*).
Emphasis is optional for hyperlinked applications.
- **Structure:** End every line at the end of a sentence (Semantic Line Breaks).
## Linking & Navigation
+35
View File
@@ -112,3 +112,38 @@ keys/
# metadata
_emscripten_sdk/
# AI coding agents -- only AGENTS.md is committed
# Tool-specific configs, settings, and local state
.claude/
CLAUDE.md
CLAUDE.local.md
.cursor/
.cursorrules
.cursorignore
.cursorindexingignore
.windsurf/
.windsurfrules
.codeiumignore
.aider*
.clinerules
.clinerules-*
.clineignore
.continue/
.continuerc.json
.continueignore
.codex/
.amazonq/
.augment/
.augmentignore
.augment-guidelines
.cody/
.junie/
.tabnine_root
.tabnineignore
GEMINI.md
.gemini/
.geminiignore
.aiexclude
.mcp.json
.claudeignore
-6
View File
@@ -109,9 +109,3 @@
[submodule "src/lib/rl_tools/rl_tools"]
path = src/lib/rl_tools/rl_tools
url = https://github.com/rl-tools/rl-tools.git
[submodule "libmodal-json"]
path = boards/modalai/voxl2/src/lib/mpa/libmodal-json
url = https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-json.git
[submodule "libmodal-pipe"]
path = boards/modalai/voxl2/src/lib/mpa/libmodal-pipe
url = https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-pipe.git
+51
View File
@@ -0,0 +1,51 @@
# AGENTS.md -- PX4-Autopilot
Open-source flight controller (C/C++, NuttX/POSIX/QURT). Docs live in-tree at `docs/en/` (rendered at https://docs.px4.io).
## Docs (read these first)
- **Building & targets:** `docs/en/dev_setup/building_px4.md`
- **Code style, conventions & commits:** `docs/en/contribute/code.md`
- **Architecture & modules:** `docs/en/concept/architecture.md`
- **uORB messaging:** `docs/en/middleware/uorb.md`
- **Simulation (incl. choosing SIH vs Gazebo):** `docs/en/simulation/index.md`
- **Testing:** `docs/en/test_and_ci/unit_tests.md`
- **Test flights:** `docs/en/test_and_ci/test_flights.md`
## Build Verification
Always test across architectures before submitting:
```bash
make px4_sitl_default # POSIX / SITL
make px4_fmu-v6x_default # STM32H7 (Pixhawk 6X)
make px4_fmu-v5x_default # STM32F7 (Pixhawk 5X)
make nxp_fmuk66-v3_default # NXP K66
```
## Areas That Benefit From Extra Review
| Directory | Controls | Before modifying |
|-----------|----------|------------------|
| `src/modules/commander/` | Arming, failsafe, mode transitions | Verify failsafe in SITL for all vehicle types |
| `src/modules/ekf2/` | State estimation | Run EKF replay tests |
| `src/modules/mc_*_control/` | Multicopter controllers | Test in SIH; verify all MC airframes |
| `src/modules/fw_*/` | Fixed-wing controllers | Test FW airframes in SITL |
| `src/modules/vtol_att_control/` | VTOL transitions | Test MC + FW modes and transitions |
| `msg/*.msg` | uORB schemas | Check all publishers/subscribers |
| `ROMFS/px4fmu_common/init.d/` | Startup & default params | Can change behavior on all boards |
## Rules
- Never bypass safety checks (arming, geofence, failsafe) without justification
- Document parameter changes, they affect flight behavior
- Specify units in comments for physical quantities
- No magic numbers, use named `constexpr` constants
## Agent Decision Framework
**Do without asking:** write or update the docs, ensure successful build, ensure CI checks are successful, run `make format`, add tests for new features or fixes.
**Ask first:** parameter defaults, control algorithms, failsafe logic, uORB schema changes, board configs.
**Stop, do not proceed:** if you can't verify flight safety, if modifying EKF2/controller math without SITL/SIH, if removing safety guards.
@@ -42,21 +42,23 @@ param set-default FD_FAIL_R 0
param set-default CA_ROTOR_COUNT 8
param set-default CA_R_REV 255
param set-default CA_ROTOR0_AX 1
param set-default CA_ROTOR0_AY -1
param set-default CA_ROTOR0_AX -1
param set-default CA_ROTOR0_AY 1
param set-default CA_ROTOR0_AZ 0
param set-default CA_ROTOR0_KM 0
param set-default CA_ROTOR0_PX 0.14
param set-default CA_ROTOR0_PY 0.10
param set-default CA_ROTOR0_PZ 0.06
#param set-default CA_ROTOR0_PZ 0.0
param set-default CA_ROTOR1_AX 1
param set-default CA_ROTOR1_AY 1
param set-default CA_ROTOR1_AX -1
param set-default CA_ROTOR1_AY -1
param set-default CA_ROTOR1_AZ 0
param set-default CA_ROTOR1_KM 0
param set-default CA_ROTOR1_PX 0.14
param set-default CA_ROTOR1_PY -0.10
param set-default CA_ROTOR1_PZ 0.06
#param set-default CA_ROTOR1_PZ 0.0
param set-default CA_ROTOR2_AX 1
param set-default CA_ROTOR2_AY 1
@@ -65,6 +67,7 @@ param set-default CA_ROTOR2_KM 0
param set-default CA_ROTOR2_PX -0.14
param set-default CA_ROTOR2_PY 0.10
param set-default CA_ROTOR2_PZ 0.06
#param set-default CA_ROTOR2_PZ 0.0
param set-default CA_ROTOR3_AX 1
param set-default CA_ROTOR3_AY -1
@@ -76,7 +79,7 @@ param set-default CA_ROTOR3_PZ 0.06
param set-default CA_ROTOR4_AX 0
param set-default CA_ROTOR4_AY 0
param set-default CA_ROTOR4_AZ -1
param set-default CA_ROTOR4_AZ 1
param set-default CA_ROTOR4_KM 0
param set-default CA_ROTOR4_PX 0.12
param set-default CA_ROTOR4_PY 0.22
@@ -100,7 +103,7 @@ param set-default CA_ROTOR6_PZ 0
param set-default CA_ROTOR7_AX 0
param set-default CA_ROTOR7_AY 0
param set-default CA_ROTOR7_AZ -1
param set-default CA_ROTOR7_AZ 1
param set-default CA_ROTOR7_KM 0
param set-default CA_ROTOR7_PX -0.12
param set-default CA_ROTOR7_PY -0.22
@@ -39,8 +39,6 @@ exec find boards msg src platforms test \
-path src/lib/cdrstream/rosidl -prune -o \
-path src/modules/zenoh/zenoh-pico -prune -o \
-path boards/modalai/voxl2/libfc-sensor-api -prune -o \
-path boards/modalai/voxl2/src/lib/mpa/libmodal-json -prune -o \
-path boards/modalai/voxl2/src/lib/mpa/libmodal-pipe -prune -o \
-path src/drivers/actuators/vertiq_io/iq-module-communication-cpp -prune -o \
-path src/lib/tensorflow_lite_micro/tflite_micro -prune -o \
-path src/drivers/ins/sbgecom/sbgECom -prune -o \
+6 -6
View File
@@ -123,7 +123,7 @@ generate_parameters() {
if [[ "$VERBOSE" == "true" ]]; then
make parameters_metadata
else
make parameters_metadata >/dev/null
make parameters_metadata >/dev/null 2>&1
fi
}
@@ -132,7 +132,7 @@ generate_airframes() {
if [[ "$VERBOSE" == "true" ]]; then
make airframe_metadata
else
make airframe_metadata >/dev/null
make airframe_metadata >/dev/null 2>&1
fi
}
@@ -141,7 +141,7 @@ generate_modules() {
if [[ "$VERBOSE" == "true" ]]; then
make module_documentation
else
make module_documentation >/dev/null
make module_documentation >/dev/null 2>&1
fi
}
@@ -150,7 +150,7 @@ generate_msg_docs() {
if [[ "$VERBOSE" == "true" ]]; then
make msg_docs
else
make msg_docs >/dev/null
make msg_docs >/dev/null 2>&1
fi
}
@@ -159,7 +159,7 @@ generate_uorb_graphs() {
if [[ "$VERBOSE" == "true" ]]; then
make uorb_graphs
else
make uorb_graphs >/dev/null
make uorb_graphs >/dev/null 2>&1
fi
}
@@ -169,7 +169,7 @@ generate_failsafe_web() {
if [[ "$VERBOSE" == "true" ]]; then
make failsafe_web
else
make failsafe_web >/dev/null
make failsafe_web >/dev/null 2>&1
fi
}
+13 -10
View File
@@ -511,7 +511,7 @@ pageClass: is-wide-page
markdown += "--- | --- | --- |---\n"
for name, command in self.commandConstants.items():
description = f" {command.comment} " if enum.comment else " "
markdown += f'<a id="#{name}"></a> {name} | `{command.type}` | {command.value} |{description}\n'
markdown += f'<a href="#{name}"></a> {name} | `{command.type}` | {command.value} |{description}\n'
"""
for commandConstant in self.commandConstants.values():
#print(commandConstant)
@@ -529,7 +529,7 @@ pageClass: is-wide-page
for enumValueName, enumValue in enum.enumValues.items():
description = f" {enumValue.comment} " if enumValue.comment else " "
markdown += f'<a id="#{enumValueName}"></a> {enumValueName} | `{enumValue.type}` | {enumValue.value} |{description}\n'
markdown += f'<a href="#{enumValueName}"></a> {enumValueName} | `{enumValue.type}` | {enumValue.value} |{description}\n'
# Generate table for constants docs
if len(self.constantFields) > 0:
@@ -538,7 +538,7 @@ pageClass: is-wide-page
markdown += "--- | --- | --- |---\n"
for name, enum in self.constantFields.items():
description = f" {enum.comment} " if enum.comment else " "
markdown += f'<a id="#{name}"></a> {name} | `{enum.type}` | {enum.value} |{description}\n'
markdown += f'<a href="#{name}"></a> {name} | `{enum.type}` | {enum.value} |{description}\n'
@@ -635,8 +635,8 @@ pageClass: is-wide-page
temp = fieldOrConstant.split("=")
value = temp[-1]
typeAndName = temp[0].split(" ")
type = typeAndName[0].strip()
name = typeAndName[1].strip()
type = typeAndName[0]
name = typeAndName[1]
if name.startswith("VEHICLE_CMD_") and parentMessage.name == 'VehicleCommand': #it's a command.
#print(f"DEBUG: startswith VEHICLE_CMD_ {name}")
commandConstant = CommandConstant(name, type, value, comment, line_number, parentMessage)
@@ -729,10 +729,10 @@ pageClass: is-wide-page
# Fix up topics if the topic is empty
def camel_to_snake(name):
# Insert underscore between lowercase/digit and uppercase letter
s1 = re.sub('([a-z0-9])([A-Z])', r'\1_\2', name)
# Insert underscore between consecutive uppercase and uppercase+lowercase
return re.sub('([A-Z]+)([A-Z][a-z])', r'\1_\2', s1).lower()
# Match upper case not at start of string
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
# Handle cases with multiple capital first letter
return re.sub('([A-Z]+)([A-Z][a-z]*)', r'\1_\2', s1).lower()
defaultTopic = camel_to_snake(self.name)
if len(self.topics) == 0:
@@ -745,7 +745,7 @@ pageClass: is-wide-page
error = Error("topic_error", self.filename, "", f"WARNING: TOPIC {defaultTopic} unnecessarily declared for {self.name}")
else:
# Declared topic is not default topic
error = Error("topic_error", self.filename, "", f"NOTE: TOPIC {self.topics[0]}: Only Declared topic is not default topic {defaultTopic} for {self.name}")
error = Error("topic_error", self.filename, "", f"NOTE: TOPIC {self.topics[1]}: Only Declared topic is not default topic {defaultTopic} for {self.name}")
if not "topic_error" in self.errors:
self.errors["topic_error"] = []
self.errors["topic_error"].append(error)
@@ -944,6 +944,9 @@ if __name__ == "__main__":
for msg_file in msg_files:
# Add messages to set of allowed types (compound types)
#msg_type = msg_file.rsplit('/')[-1]
#msg_type = msg_type.rsplit('\\')[-1]
#msg_type = msg_type.rsplit('.')[0]
msg_name = os.path.splitext(os.path.basename(msg_file))[0]
msgTypes.add(msg_name)
-2
View File
@@ -26,8 +26,6 @@ then
fi
param set-default BAT1_V_DIV 21.0
param set-default BAT1_V_FILT 0.075
param set-default BAT1_I_FILT 0.5
param set-default RC_CRSF_PRT_CFG 300
param set-default RC_SBUS_PRT_CFG 0
+3
View File
@@ -176,6 +176,9 @@
#define BOARD_BATTERY1_V_DIV (21.0f) // (20k + 1k) / 1k = 21
#define BOARD_BATTERY_ADC_VOLTAGE_FILTER_S 0.075f
#define BOARD_BATTERY_ADC_CURRENT_FILTER_S 0.125f
#define ADC_SCALED_PAYLOAD_SENSE ADC_SCALED_12V_CHANNEL
/* HW has to large of R termination on ADC todo:change when HW value is chosen */
@@ -5,19 +5,14 @@ CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP101XX=y
CONFIG_DRIVERS_BAROMETER_MS5611=y
CONFIG_DRIVERS_BAROMETER_BMP280=y
CONFIG_DRIVERS_BAROMETER_BMP388=y
CONFIG_DRIVERS_BAROMETER_DPS310=y
CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_MS4525DO=y
CONFIG_DRIVERS_DISTANCE_SENSOR_VL53L0X=y
CONFIG_DRIVERS_DISTANCE_SENSOR_VL53L1X=y
CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_BOSCH_BMI270=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y
CONFIG_DRIVERS_BAROMETER_DPS310=y
CONFIG_DRIVERS_LIGHTS_RGBLED_NCP5623C=y
CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8308=y
CONFIG_DRIVERS_MAGNETOMETER_ISENTEK_IST8310=y
CONFIG_DRIVERS_MAGNETOMETER_QMC5883L=y
CONFIG_DRIVERS_MAGNETOMETER_ST_IIS2MDC=y
CONFIG_DRIVERS_POWER_MONITOR_VOXLPM=y
CONFIG_DRIVERS_QSHELL_QURT=y
CONFIG_DRIVERS_RC_CRSF_RC=y
@@ -31,11 +26,6 @@ CONFIG_MODULES_LOAD_MON=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_AIRSPEED_SELECTOR=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
+2 -2
View File
@@ -1,6 +1,6 @@
/****************************************************************************
*
* Copyright (c) 2022-2026 ModalAI, Inc. All rights reserved.
* Copyright (c) 2022 ModalAI, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,7 +39,7 @@
#pragma once
#define CONFIG_BOARDCTL_RESET
#define BOARD_HAS_NO_RESET
#define BOARD_HAS_NO_BOOTLOADER
/*
* I2C buses
+1 -1
View File
@@ -36,5 +36,5 @@
#include <drivers/drv_sensor.h>
constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = {
initSPIBus(1, {initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P), initSPIDevice(DRV_IMU_DEVTYPE_BMI270), }),
initSPIBus(1, {initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P), }),
};
-3
View File
@@ -3,8 +3,6 @@ CONFIG_BOARD_LINUX_TARGET=y
CONFIG_BOARD_TOOLCHAIN="aarch64-linux-gnu"
CONFIG_BOARD_ROOT_PATH="/data/px4"
CONFIG_DRIVERS_ACTUATORS_VOXL_ESC=y
CONFIG_DRIVERS_BAROMETER_DPS310=y
CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP101XX=y
CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_OSD_MSP_OSD=y
CONFIG_DRIVERS_QSHELL_POSIX=y
@@ -27,6 +25,5 @@ CONFIG_SYSTEMCMDS_PERF=y
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y
CONFIG_SYSTEMCMDS_UORB=y
CONFIG_SYSTEMCMDS_VER=y
CONFIG_SYSTEMCMDS_REBOOT=y
CONFIG_ORB_COMMUNICATOR=y
CONFIG_PARAM_PRIMARY=y
@@ -128,11 +128,6 @@ adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-flight_mode_manager"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-imu_server"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-apps_sbus"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-voxl_save_cal_params"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-vehicle_air_data_bridge"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-sensor_baro_bridge"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-dps310"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-icp101xx"
adb shell "cd /usr/bin; /bin/ln -f -s px4 px4-vehicle_local_position_bridge"
# Make sure any required directories exist
adb shell "/bin/mkdir -p /data/px4/param"
+1 -10
View File
@@ -1,6 +1,6 @@
############################################################################
#
# Copyright (c) 2022-2026 ModalAI, Inc. All rights reserved.
# Copyright (c) 2022 ModalAI, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -39,20 +39,11 @@ set(DISABLE_PARAMS_MODULE_SCOPING TRUE PARENT_SCOPE)
add_library(drivers_board
board_config.h
i2c.cpp
init.c
boardctl.c
spi.cpp
)
# Add custom drivers
add_subdirectory(${PX4_BOARD_DIR}/src/drivers/apps_sbus)
# Add custom libraries
add_subdirectory(${PX4_BOARD_DIR}/src/lib/mpa)
# Add custom modules
add_subdirectory(${PX4_BOARD_DIR}/src/modules/voxl_save_cal_params)
add_subdirectory(${PX4_BOARD_DIR}/src/modules/vehicle_air_data_bridge)
add_subdirectory(${PX4_BOARD_DIR}/src/modules/sensor_baro_bridge)
add_subdirectory(${PX4_BOARD_DIR}/src/modules/vehicle_local_position_bridge)
+3 -15
View File
@@ -1,6 +1,6 @@
/****************************************************************************
*
* Copyright (c) 2022-2026 ModalAI, Inc. All rights reserved.
* Copyright (c) 2022 ModalAI, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,24 +39,12 @@
#pragma once
#define CONFIG_BOARDCTL_RESET
#define BOARD_HAS_NO_RESET
#define BOARD_HAS_NO_BOOTLOADER
// Define this as empty since i2c clock init isn't required
// Define this as empty since there are no I2C buses
#define BOARD_I2C_BUS_CLOCK_INIT
/*
* I2C buses
*/
#define CONFIG_I2C 1
#define PX4_NUMBER_I2C_BUSES 1
/*
* SPI buses
*/
#define CONFIG_SPI 1
#define BOARD_SPI_BUS_MAX_BUS_ITEMS 1
#include <system_config.h>
#include <px4_platform_common/board_common.h>
-46
View File
@@ -1,46 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#include <unistd.h>
#include <stdint.h>
#include <stdlib.h>
#include "fc_sensor.h"
int boardctl(unsigned int cmd, uintptr_t arg)
{
fc_sensor_kill_slpi();
sleep(2);
exit(-1);
return 0;
}
-40
View File
@@ -1,40 +0,0 @@
/****************************************************************************
*
* Copyright (C) 2025-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (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 <px4_platform_common/i2c.h>
#include <px4_arch/i2c_hw_description.h>
#include <drivers/drv_sensor.h>
constexpr px4_i2c_bus_t px4_i2c_buses[I2C_BUS_MAX_BUS_ITEMS] = {
initI2CBusExternal(0)
};
@@ -1,44 +0,0 @@
############################################################################
#
# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_git_submodule(TARGET git_mpa_libmodal-json PATH "libmodal-json")
px4_add_git_submodule(TARGET git_mpa_libmodal-pipe PATH "libmodal-pipe")
px4_add_library(mpa mpa.cpp)
target_link_libraries(mpa PRIVATE ${CMAKE_DL_LIBS})
target_include_directories(mpa PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/libmodal-json/library/include
${CMAKE_CURRENT_SOURCE_DIR}/libmodal-pipe/library/include
)
-262
View File
@@ -1,262 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2025-2026 ModalAI, inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#include "mpa.hpp"
#include <dlfcn.h>
#include <px4_log.h>
#include <string.h>
bool MPA::initialized = false;
void *MPA::handle = nullptr;
int MPA::current_client = 0;
int MPA::current_server = 0;
MPA::pipe_client_set_simple_helper_cb_t MPA::helper_cb = nullptr;
MPA::pipe_client_set_connect_cb_t MPA::connect_cb = nullptr;
MPA::pipe_client_set_disconnect_cb_t MPA::disconnect_cb = nullptr;
MPA::pipe_client_open_t MPA::open_pipe = nullptr;
MPA::pipe_server_create_t MPA::create_pipe = nullptr;
MPA::pipe_server_write_t MPA::write_pipe = nullptr;
MPA::pipe_server_set_control_cb_t MPA::set_control_cb = nullptr;
MPA::pipe_server_close_t MPA::close_pipe = nullptr;
MPA::mpa_data_cb_t MPA::data_cb[MAX_MPA_CLIENTS];
// called whenever we connect or reconnect to the server
void MPA::ConnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context)
{
PX4_INFO("vfc status server connected");
return;
}
// called whenever we disconnect from the server
void MPA::DisconnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context)
{
PX4_INFO("vfc status server disconnected");
return;
}
void MPA::HelperCB(__attribute__((unused)) int ch, char *data, int bytes, __attribute__((unused)) void *context)
{
// PX4_INFO("Got %d bytes in pipe callback", bytes);
if (data_cb[ch]) { data_cb[ch](data, bytes); }
return;
}
int MPA::PipeClient(const char *pipe_name, int size, mpa_data_cb_t cb)
{
if (!initialized) {
PX4_ERR("Cannot open pipe %s before initialization", pipe_name);
return -1;
}
printf("waiting for server for pipe %s\n", pipe_name);
if (open_pipe(current_client, pipe_name, "px4", EN_PIPE_CLIENT_SIMPLE_HELPER, size * 10) < 0) {
PX4_ERR("Error opening pipe %s", pipe_name);
return -1;
}
data_cb[current_client] = cb;
current_client++;
return current_client - 1;
}
int MPA::PipeCreate(char *pipe_name, int flags)
{
if (!initialized) {
PX4_ERR("Cannot open pipe %s before initialization", pipe_name);
return -1;
}
pipe_info_t server_pipe;
strncpy(server_pipe.name, pipe_name, MODAL_PIPE_MAX_NAME_LEN);
server_pipe.name[MODAL_PIPE_MAX_NAME_LEN - 1] = 0;
server_pipe.location[0] = 0;
server_pipe.type[0] = 0;
strncpy(server_pipe.server_name, "px4_mpa", MODAL_PIPE_MAX_NAME_LEN);
server_pipe.size_bytes = MODAL_PIPE_DEFAULT_PIPE_SIZE;
server_pipe.server_pid = 0;
if (create_pipe(current_server, server_pipe, flags) < 0) {
// remove_pid_file(server_pipe.server_name);
PX4_ERR("Error opening pipe %s", pipe_name);
return -1;
}
current_server++;
return current_server - 1;
}
int MPA::PipeWrite(int ch, const void *data, int bytes)
{
return write_pipe(ch, data, bytes);
}
int MPA::PipeServerSetControlCb(int ch, mpa_control_cb_t cb, void *context)
{
return set_control_cb(ch, cb, context);
}
void MPA::PipeServerClose(int ch)
{
if (close_pipe) {
close_pipe(ch);
}
}
int MPA::Initialize()
{
if (initialized) {
// Already successfully initialized
return 0;
}
char libname[] = "libmodal_pipe.so";
handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL);
if (!handle) {
PX4_ERR("Error opening library %s: %s\n", libname, dlerror());
return -1;
} else {
PX4_INFO("Successfully loaded library %s", libname);
}
// set up all our MPA callbacks
char helper_cb_name[] = "pipe_client_set_simple_helper_cb";
helper_cb = (pipe_client_set_simple_helper_cb_t) dlsym(handle, helper_cb_name);
if (!helper_cb) {
PX4_ERR("Error finding symbol %s: %s\n", helper_cb_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", helper_cb_name);
}
helper_cb(0, HelperCB, NULL);
char connect_cb_name[] = "pipe_client_set_connect_cb";
connect_cb = (pipe_client_set_connect_cb_t) dlsym(handle, connect_cb_name);
if (!connect_cb) {
PX4_ERR("Error finding symbol %s: %s", connect_cb_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", connect_cb_name);
}
connect_cb(0, ConnectCB, NULL);
char disconnect_cb_name[] = "pipe_client_set_disconnect_cb";
disconnect_cb = (pipe_client_set_disconnect_cb_t) dlsym(handle, disconnect_cb_name);
if (!disconnect_cb) {
PX4_ERR("Error finding symbol %s: %s", disconnect_cb_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", disconnect_cb_name);
}
disconnect_cb(0, DisconnectCB, NULL);
// request a new pipe from the server
char open_pipe_name[] = "pipe_client_open";
open_pipe = (pipe_client_open_t) dlsym(handle, open_pipe_name);
if (!open_pipe) {
PX4_ERR("Error finding symbol %s: %s", open_pipe_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", open_pipe_name);
}
// Create a new server pipe
char create_pipe_name[] = "pipe_server_create";
create_pipe = (pipe_server_create_t) dlsym(handle, create_pipe_name);
if (!create_pipe) {
PX4_ERR("Error finding symbol %s: %s", create_pipe_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", create_pipe_name);
}
// Write to a server pipe
char write_pipe_name[] = "pipe_server_write";
write_pipe = (pipe_server_write_t) dlsym(handle, write_pipe_name);
if (!write_pipe) {
PX4_ERR("Error finding symbol %s: %s", write_pipe_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", write_pipe_name);
}
// Set control callback for server pipe
char set_control_cb_name[] = "pipe_server_set_control_cb";
set_control_cb = (pipe_server_set_control_cb_t) dlsym(handle, set_control_cb_name);
if (!set_control_cb) {
PX4_ERR("Error finding symbol %s: %s", set_control_cb_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", set_control_cb_name);
}
// Close server pipe
char close_pipe_name[] = "pipe_server_close";
close_pipe = (pipe_server_close_t) dlsym(handle, close_pipe_name);
if (!close_pipe) {
PX4_ERR("Error finding symbol %s: %s", close_pipe_name, dlerror());
return -1;
} else {
PX4_DEBUG("Successfully loaded function %s", close_pipe_name);
}
initialized = true;
return 0;
}
-83
View File
@@ -1,83 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2025-2026 ModalAI, inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#include <modal_pipe.h>
#pragma once
class MPA
{
public:
static int Initialize();
typedef void (*mpa_data_cb_t)(char *data, int bytes);
typedef void (*mpa_control_cb_t)(int ch, char *data, int bytes, void *context);
static int PipeClient(const char *pipe_name, int size, mpa_data_cb_t cb);
static int PipeCreate(char *pipe_name, int flags = 0);
static int PipeWrite(int ch, const void *data, int bytes);
static int PipeServerSetControlCb(int ch, mpa_control_cb_t cb, void *context);
static void PipeServerClose(int ch);
private:
static void HelperCB(__attribute__((unused)) int ch, char *data, int bytes, __attribute__((unused)) void *context);
static void DisconnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context);
static void ConnectCB(__attribute__((unused)) int ch, __attribute__((unused)) void *context);
typedef int (*pipe_client_set_simple_helper_cb_t)(int ch, client_simple_cb *cb, void *context);
typedef int (*pipe_client_set_connect_cb_t)(int ch, client_connect_cb *cb, void *context);
typedef int (*pipe_client_set_disconnect_cb_t)(int ch, client_disc_cb *cb, void *context);
typedef int (*pipe_client_open_t)(int ch, const char *name_or_location, const char *client_name, int flags, int buf_len);
typedef int (*pipe_server_create_t)(int ch, pipe_info_t info, int flags);
typedef int (*pipe_server_write_t)(int ch, const void *data, int bytes);
typedef int (*pipe_server_set_control_cb_t)(int ch, server_control_cb *cb, void *context);
typedef void (*pipe_server_close_t)(int ch);
static pipe_client_set_simple_helper_cb_t helper_cb;
static pipe_client_set_connect_cb_t connect_cb;
static pipe_client_set_disconnect_cb_t disconnect_cb;
static pipe_client_open_t open_pipe;
static pipe_server_create_t create_pipe;
static pipe_server_write_t write_pipe;
static pipe_server_set_control_cb_t set_control_cb;
static pipe_server_close_t close_pipe;
static bool initialized;
static void *handle;
static int current_client;
static int current_server;
static const int MAX_MPA_CLIENTS{8};
static mpa_data_cb_t data_cb[MAX_MPA_CLIENTS];
};
@@ -1,43 +0,0 @@
############################################################################
#
# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
MODULE modules__sensor_baro_bridge
MAIN sensor_baro_bridge
INCLUDES
${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa
SRCS
sensor_baro_bridge.cpp
DEPENDS
mpa
)
@@ -1,183 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2025-2026 ModalAI, inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#include "mpa.hpp"
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <px4_log.h>
#include <px4_platform_common/defines.h>
#include <px4_platform_common/module.h>
#include <uORB/uORB.h>
#include <uORB/SubscriptionCallback.hpp>
#include <uORB/topics/sensor_baro.h>
class SensorBaroBridge : public ModuleBase, public px4::WorkItem
{
public:
static Descriptor desc;
SensorBaroBridge();
~SensorBaroBridge() override = default;
/** @see ModuleBase */
static int task_spawn(int argc, char *argv[]);
/** @see ModuleBase */
static int custom_command(int argc, char *argv[]);
/** @see ModuleBase */
static int print_usage(const char *reason = nullptr);
bool init();
private:
void Run() override;
uORB::SubscriptionCallbackWorkItem _sensor_baro_sub{this, ORB_ID(sensor_baro)};
sensor_baro_s _sensor_baro{};
int baro_pipe_ch{0};
};
ModuleBase::Descriptor SensorBaroBridge::desc{task_spawn, custom_command, print_usage};
SensorBaroBridge::SensorBaroBridge() :
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
{
}
bool SensorBaroBridge::init()
{
if (MPA::Initialize() == -1) {
PX4_ERR("MPA init failed");
return false;
}
char baro_pipe_name[] = "px4_sensor_baro";
baro_pipe_ch = MPA::PipeCreate(baro_pipe_name);
if (baro_pipe_ch == -1) {
PX4_ERR("Pipe create failed for %s", baro_pipe_name);
return false;
}
if (!_sensor_baro_sub.registerCallback()) {
PX4_ERR("callback registration failed");
return false;
}
return true;
}
void SensorBaroBridge::Run()
{
if (should_exit()) {
_sensor_baro_sub.unregisterCallback();
exit_and_cleanup(desc);
return;
}
if (_sensor_baro_sub.updated()) {
if (_sensor_baro_sub.update(&_sensor_baro)) {
baro_data_t baro;
memset(&baro, 0, sizeof(baro));
baro.magic_number = BARO_MAGIC_NUMBER;
baro.pressure_pa = _sensor_baro.pressure;
baro.temp_c = _sensor_baro.temperature;
baro.alt_amsl_m = 0.0f; // sensor_baro does not include altitude
baro.timestamp_ns = _sensor_baro.timestamp * 1000; // Convert µs to ns
baro.reserved_1 = 0;
baro.reserved_2 = 0;
if (MPA::PipeWrite(baro_pipe_ch, (void *)&baro, sizeof(baro_data_t)) == -1) {
PX4_ERR("Pipe %d write failed!", baro_pipe_ch);
}
}
}
}
int SensorBaroBridge::custom_command(int argc, char *argv[])
{
return print_usage("unknown command");
}
int SensorBaroBridge::task_spawn(int argc, char *argv[])
{
SensorBaroBridge *instance = new SensorBaroBridge();
if (instance) {
desc.object.store(instance);
desc.task_id = task_id_is_work_queue;
if (instance->init()) {
return PX4_OK;
}
} else {
PX4_ERR("alloc failed");
}
delete instance;
desc.object.store(nullptr);
desc.task_id = -1;
return PX4_ERROR;
}
int SensorBaroBridge::print_usage(const char *reason)
{
if (reason) {
PX4_WARN("%s\n", reason);
}
PRINT_MODULE_DESCRIPTION(
R"DESCR_STR(
### Description
Sensor baro bridge
)DESCR_STR");
PRINT_MODULE_USAGE_NAME("sensor_baro_bridge", "system");
PRINT_MODULE_USAGE_COMMAND("start");
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
return 0;
}
extern "C" __EXPORT int sensor_baro_bridge_main(int argc, char *argv[])
{
return ModuleBase::main(SensorBaroBridge::desc, argc, argv);
}
@@ -1,43 +0,0 @@
############################################################################
#
# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
MODULE modules__vehicle_air_data_bridge
MAIN vehicle_air_data_bridge
INCLUDES
${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa
SRCS
vehicle_air_data_bridge.cpp
DEPENDS
mpa
)
@@ -1,183 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2025-2026 ModalAI, inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#include "mpa.hpp"
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <px4_log.h>
#include <px4_platform_common/defines.h>
#include <px4_platform_common/module.h>
#include <uORB/uORB.h>
#include <uORB/SubscriptionCallback.hpp>
#include <uORB/topics/vehicle_air_data.h>
class VehicleAirDataBridge : public ModuleBase, public px4::WorkItem
{
public:
static Descriptor desc;
VehicleAirDataBridge();
~VehicleAirDataBridge() override = default;
/** @see ModuleBase */
static int task_spawn(int argc, char *argv[]);
/** @see ModuleBase */
static int custom_command(int argc, char *argv[]);
/** @see ModuleBase */
static int print_usage(const char *reason = nullptr);
bool init();
private:
void Run() override;
uORB::SubscriptionCallbackWorkItem _vehicle_air_data_sub{this, ORB_ID(vehicle_air_data)};
vehicle_air_data_s _vehicle_air_data{};
int baro_pipe_ch{0};
};
ModuleBase::Descriptor VehicleAirDataBridge::desc{task_spawn, custom_command, print_usage};
VehicleAirDataBridge::VehicleAirDataBridge() :
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
{
}
bool VehicleAirDataBridge::init()
{
if (MPA::Initialize() == -1) {
PX4_ERR("MPA init failed");
return false;
}
char baro_pipe_name[] = "px4_vehicle_air_data";
baro_pipe_ch = MPA::PipeCreate(baro_pipe_name);
if (baro_pipe_ch == -1) {
PX4_ERR("Pipe create failed for %s", baro_pipe_name);
return false;
}
if (!_vehicle_air_data_sub.registerCallback()) {
PX4_ERR("callback registration failed");
return false;
}
return true;
}
void VehicleAirDataBridge::Run()
{
if (should_exit()) {
_vehicle_air_data_sub.unregisterCallback();
exit_and_cleanup(desc);
return;
}
if (_vehicle_air_data_sub.updated()) {
if (_vehicle_air_data_sub.update(&_vehicle_air_data)) {
baro_data_t baro;
memset(&baro, 0, sizeof(baro));
baro.magic_number = BARO_MAGIC_NUMBER;
baro.pressure_pa = _vehicle_air_data.baro_pressure_pa;
baro.temp_c = _vehicle_air_data.ambient_temperature;
baro.alt_amsl_m = _vehicle_air_data.baro_alt_meter;
baro.timestamp_ns = _vehicle_air_data.timestamp * 1000; // Convert µs to ns
baro.reserved_1 = 0;
baro.reserved_2 = 0;
if (MPA::PipeWrite(baro_pipe_ch, (void *)&baro, sizeof(baro_data_t)) == -1) {
PX4_ERR("Pipe %d write failed!", baro_pipe_ch);
}
}
}
}
int VehicleAirDataBridge::custom_command(int argc, char *argv[])
{
return print_usage("unknown command");
}
int VehicleAirDataBridge::task_spawn(int argc, char *argv[])
{
VehicleAirDataBridge *instance = new VehicleAirDataBridge();
if (instance) {
desc.object.store(instance);
desc.task_id = task_id_is_work_queue;
if (instance->init()) {
return PX4_OK;
}
} else {
PX4_ERR("alloc failed");
}
delete instance;
desc.object.store(nullptr);
desc.task_id = -1;
return PX4_ERROR;
}
int VehicleAirDataBridge::print_usage(const char *reason)
{
if (reason) {
PX4_WARN("%s\n", reason);
}
PRINT_MODULE_DESCRIPTION(
R"DESCR_STR(
### Description
Vehicle air data bridge
)DESCR_STR");
PRINT_MODULE_USAGE_NAME("vehicle_air_data_bridge", "system");
PRINT_MODULE_USAGE_COMMAND("start");
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
return 0;
}
extern "C" __EXPORT int vehicle_air_data_bridge_main(int argc, char *argv[])
{
return ModuleBase::main(VehicleAirDataBridge::desc, argc, argv);
}
@@ -1,43 +0,0 @@
############################################################################
#
# Copyright (c) 2025-2026 ModalAI, Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
MODULE modules__vehicle_local_position_bridge
MAIN vehicle_local_position_bridge
INCLUDES
${CMAKE_CURRENT_SOURCE_DIR}/../../lib/mpa
SRCS
vehicle_local_position_bridge.cpp
DEPENDS
mpa
)
@@ -1,238 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2025-2026 ModalAI, inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#include "mpa.hpp"
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <math.h>
#include <px4_log.h>
#include <px4_platform_common/defines.h>
#include <px4_platform_common/module.h>
#include <uORB/uORB.h>
#include <uORB/SubscriptionCallback.hpp>
#include <uORB/topics/vehicle_local_position.h>
class VehicleLocalPositionBridge : public ModuleBase, public px4::WorkItem
{
public:
static Descriptor desc;
VehicleLocalPositionBridge();
~VehicleLocalPositionBridge() override = default;
/** @see ModuleBase */
static int task_spawn(int argc, char *argv[]);
/** @see ModuleBase */
static int custom_command(int argc, char *argv[]);
/** @see ModuleBase */
static int print_usage(const char *reason = nullptr);
bool init();
private:
void Run() override;
uORB::SubscriptionCallbackWorkItem _vehicle_local_position_sub{this, ORB_ID(vehicle_local_position)};
vehicle_local_position_s _vehicle_local_position{};
int _pipe_ch{0};
};
ModuleBase::Descriptor VehicleLocalPositionBridge::desc{task_spawn, custom_command, print_usage};
VehicleLocalPositionBridge::VehicleLocalPositionBridge() :
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
{
}
bool VehicleLocalPositionBridge::init()
{
if (MPA::Initialize() == -1) {
PX4_ERR("MPA init failed");
return false;
}
char pipe_name[] = "px4_vehicle_local_position";
_pipe_ch = MPA::PipeCreate(pipe_name);
if (_pipe_ch == -1) {
PX4_ERR("Pipe create failed for %s", pipe_name);
return false;
}
if (!_vehicle_local_position_sub.registerCallback()) {
PX4_ERR("callback registration failed");
return false;
}
return true;
}
void VehicleLocalPositionBridge::Run()
{
if (should_exit()) {
_vehicle_local_position_sub.unregisterCallback();
exit_and_cleanup(desc);
return;
}
if (_vehicle_local_position_sub.updated()) {
if (_vehicle_local_position_sub.update(&_vehicle_local_position)) {
// Only publish if we have valid position data
if (!_vehicle_local_position.xy_valid && !_vehicle_local_position.z_valid) {
return;
}
pose_vel_6dof_t pose;
pose.magic_number = POSE_VEL_6DOF_MAGIC_NUMBER;
pose.timestamp_ns = _vehicle_local_position.timestamp * 1000; // Convert µs to ns
// Position (NED frame)
if (_vehicle_local_position.xy_valid) {
pose.T_child_wrt_parent[0] = _vehicle_local_position.x;
pose.T_child_wrt_parent[1] = _vehicle_local_position.y;
} else {
pose.T_child_wrt_parent[0] = NAN;
pose.T_child_wrt_parent[1] = NAN;
}
if (_vehicle_local_position.z_valid) {
pose.T_child_wrt_parent[2] = _vehicle_local_position.z;
} else {
pose.T_child_wrt_parent[2] = NAN;
}
// Rotation matrix from heading (yaw rotation around Z axis)
// R_z(heading) = [cos(h) -sin(h) 0]
// [sin(h) cos(h) 0]
// [0 0 1]
float cos_h = cosf(_vehicle_local_position.heading);
float sin_h = sinf(_vehicle_local_position.heading);
pose.R_child_to_parent[0][0] = cos_h;
pose.R_child_to_parent[0][1] = -sin_h;
pose.R_child_to_parent[0][2] = 0.0f;
pose.R_child_to_parent[1][0] = sin_h;
pose.R_child_to_parent[1][1] = cos_h;
pose.R_child_to_parent[1][2] = 0.0f;
pose.R_child_to_parent[2][0] = 0.0f;
pose.R_child_to_parent[2][1] = 0.0f;
pose.R_child_to_parent[2][2] = 1.0f;
// Velocity (NED frame)
if (_vehicle_local_position.v_xy_valid) {
pose.v_child_wrt_parent[0] = _vehicle_local_position.vx;
pose.v_child_wrt_parent[1] = _vehicle_local_position.vy;
} else {
pose.v_child_wrt_parent[0] = NAN;
pose.v_child_wrt_parent[1] = NAN;
}
if (_vehicle_local_position.v_z_valid) {
pose.v_child_wrt_parent[2] = _vehicle_local_position.vz;
} else {
pose.v_child_wrt_parent[2] = NAN;
}
// Angular velocity not available in vehicle_local_position
pose.w_child_wrt_child[0] = NAN;
pose.w_child_wrt_child[1] = NAN;
pose.w_child_wrt_child[2] = NAN;
if (MPA::PipeWrite(_pipe_ch, (void *)&pose, sizeof(pose_vel_6dof_t)) == -1) {
PX4_ERR("Pipe %d write failed!", _pipe_ch);
}
}
}
}
int VehicleLocalPositionBridge::custom_command(int argc, char *argv[])
{
return print_usage("unknown command");
}
int VehicleLocalPositionBridge::task_spawn(int argc, char *argv[])
{
VehicleLocalPositionBridge *instance = new VehicleLocalPositionBridge();
if (instance) {
desc.object.store(instance);
desc.task_id = task_id_is_work_queue;
if (instance->init()) {
return PX4_OK;
}
} else {
PX4_ERR("alloc failed");
}
delete instance;
desc.object.store(nullptr);
desc.task_id = -1;
return PX4_ERROR;
}
int VehicleLocalPositionBridge::print_usage(const char *reason)
{
if (reason) {
PX4_WARN("%s\n", reason);
}
PRINT_MODULE_DESCRIPTION(
R"DESCR_STR(
### Description
Vehicle local position bridge - publishes vehicle_local_position to MPA pipe as pose_vel_6dof_t
)DESCR_STR");
PRINT_MODULE_USAGE_NAME("vehicle_local_position_bridge", "system");
PRINT_MODULE_USAGE_COMMAND("start");
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
return 0;
}
extern "C" __EXPORT int vehicle_local_position_bridge_main(int argc, char *argv[])
{
return ModuleBase::main(VehicleLocalPositionBridge::desc, argc, argv);
}
-40
View File
@@ -1,40 +0,0 @@
/****************************************************************************
*
* Copyright (C) 2025-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (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 <px4_arch/spi_hw_description.h>
#include <px4_platform_common/spi.h>
#include <drivers/drv_sensor.h>
constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = {
initSPIBus(1, {initSPIDevice(DRV_IMU_DEVTYPE_ICM42688P, 0), }),
};
+4 -19
View File
@@ -2,12 +2,10 @@
CONFIG_FILE="/etc/modalai/voxl-px4.conf"
AIRFRAME=MULTICOPTER
GPS=NONE
RC=SPEKTRUM
ESC=VOXL_ESC
POWER_MANAGER=VOXLPM
AIRSPEED_SENSOR=NONE
DISTANCE_SENSOR=NONE
OSD=DISABLE
DAEMON_MODE=DISABLE
@@ -41,14 +39,12 @@ else
fi
print_usage() {
echo -e "\nUsage: voxl-px4 [-a (Specify Airspeed Sensor)]"
echo " [-b (Specify Holybro GPS unit)]"
echo -e "\nUsage: voxl-px4 [-b (Specify Holybro GPS unit)]"
echo " [-c delete configuration file and exit]"
echo " [-d start px4 without daemon mode]"
echo " [-f (Use fake rc input instead of from a real transmitter)]"
echo " [-m (Specify Matek GPS unit)]"
echo " [-o (Start OSD module on the apps processor)]"
echo " [-p (Specify Fixed Wing airframe selected)]"
echo " [-r (Specify TBS Crossfire RC receiver, MAVLINK)]"
echo " [-w (Specify TBS Crossfire RC receiver, raw)]"
echo " [-z (Use fake sensor calibration values)]"
@@ -59,12 +55,10 @@ print_usage() {
print_config_settings(){
echo -e "\n*************************"
echo "AIRFRAME=$AIRFRAME"
echo "GPS=$GPS"
echo "RC=$RC"
echo "ESC=$ESC"
echo "POWER MANAGER=$POWER_MANAGER"
echo "AIRSPEED SENSOR=$AIRSPEED_SENSOR"
echo "DISTANCE SENSOR=$DISTANCE_SENSOR"
echo "OSD=$OSD"
echo "DAEMON_MODE=$DAEMON_MODE"
@@ -77,13 +71,9 @@ print_config_settings(){
echo -e "*************************\n"
}
while getopts "abcdhfmoprwz" flag
while getopts "bcdhfmorwz" flag
do
case "${flag}" in
a)
echo "[INFO] MRO AIRSPEED Sensor selected"
AIRSPEED_SENSOR=MS4525DO
;;
b)
echo "[INFO] Holybro GPS selected"
GPS=HOLYBRO
@@ -114,10 +104,6 @@ do
echo "[INFO] OSD module selected"
OSD=ENABLE
;;
p)
echo "[INFO] Airframe Selected as Fixed Wing"
AIRFRAME=FIXED_WING
;;
r)
echo "[INFO] TBS Crossfire RC receiver, MAVLINK selected"
RC=CRSF_MAV
@@ -151,6 +137,5 @@ fi
print_config_settings
AIRFRAME=$AIRFRAME GPS=$GPS RC=$RC ESC=$ESC POWER_MANAGER=$POWER_MANAGER DISTANCE_SENSOR=$DISTANCE_SENSOR \
AIRSPEED_SENSOR=$AIRSPEED_SENSOR OSD=$OSD EXTRA_STEPS=$EXTRA_STEPS \
px4 $DAEMON -s /usr/bin/voxl-px4-start
GPS=$GPS RC=$RC ESC=$ESC POWER_MANAGER=$POWER_MANAGER DISTANCE_SENSOR=$DISTANCE_SENSOR \
OSD=$OSD EXTRA_STEPS=$EXTRA_STEPS px4 $DAEMON -s /usr/bin/voxl-px4-start
@@ -17,15 +17,13 @@ if [ $RETURNCODE -ne 0 ]; then
fi
fi
# We can only run on M0052, M0054, M0104, or M0197 so exit with error if that is not the case
# We can only run on M0052, M0054, or M0104 so exit with error if that is not the case
if [ $PLATFORM = "M0052" ]; then
/bin/echo "Running on M0052"
elif [ $PLATFORM = "M0054" ]; then
/bin/echo "Running on M0054"
elif [ $PLATFORM = "M0104" ]; then
/bin/echo "Running on M0104"
elif [ $PLATFORM = "M0197" ]; then
/bin/echo "Running on M0197"
else
/bin/echo "Error, cannot determine platform!"
exit 0
@@ -78,11 +76,7 @@ microdds_client start -t udp -h 127.0.0.1 -p 8888
qshell pwm_out_sim start -m hil
# g = gps, m = mag, o = odometry (vio), h = distance sensor, f = optic flow
# qshell dsp_hitl start -g -m -o -h -f
if [ "$PLATFORM" == "M0197" ]; then
qshell dsp_hitl start -g -m -p 6
else
qshell dsp_hitl start -g -m
fi
qshell dsp_hitl start -g -m
# start the onboard fast link to connect to voxl-mavlink-server
mavlink start -x -u 14556 -o 14557 -r 100000 -n lo -m onboard
+52 -92
View File
@@ -4,12 +4,10 @@
. px4-alias.sh
echo -e "\n*************************"
echo "AIRFRAME: $AIRFRAME"
echo "GPS: $GPS"
echo "RC: $RC"
echo "ESC: $ESC"
echo "POWER MANAGER: $POWER_MANAGER"
echo "AIRSPEED SENSOR: $AIRSPEED_SENSOR"
echo "DISTANCE SENSOR: $DISTANCE_SENSOR"
echo "OSD: $OSD"
echo "EXTRA STEPS:"
@@ -25,8 +23,6 @@ echo -e "*************************\n"
# and modules manually from the px4 command shell
if [ ! -z $MINIMAL_PX4 ]; then
/bin/echo "Running minimal script"
param select /data/px4/param/parameters
param load
exit 0
fi
@@ -37,30 +33,23 @@ if [ $RETURNCODE -ne 0 ]; then
# If we couldn't get the platform from the voxl-platform utility then check
# /etc/version to see if there is an M0052 substring in the version string. If so,
# then we assume that we are on M0052.
VERSIONSTRING=""
if [ -f /etc/version ]; then
VERSIONSTRING=$(</etc/version)
fi
VERSIONSTRING=$(</etc/version)
M0052SUBSTRING="M0052"
if [[ "$VERSIONSTRING" == *"$M0052SUBSTRING"* ]]; then
PLATFORM="M0052"
fi
fi
# We can only run on M0054, M0104, or M0197 so exit with error if that is not the case
# We can only run on M0052, M0054, or M0104 so exit with error if that is not the case
if [ $PLATFORM = "M0052" ]; then
/bin/echo "Running on M0052"
/bin/echo "Error M0052 is no longer supported!!!"
exit 1
elif [ $PLATFORM = "M0054" ]; then
/bin/echo "Running on M0054"
elif [ $PLATFORM = "M0104" ]; then
/bin/echo "Running on M0104"
elif [ $PLATFORM = "M0197" ]; then
/bin/echo "Running on M0197"
else
/bin/echo "Error, cannot determine platform!"
exit 1
exit 0
fi
# Sleep a little here. A lot happens when the uorb and muorb start
@@ -87,43 +76,14 @@ param load
# IMU (accelerometer / gyroscope)
if [ "$PLATFORM" == "M0104" ]; then
/bin/echo "Starting IMU driver with rotation 12"
qshell icm42688p start -s -R 12 -C 32768
elif [ "$PLATFORM" == "M0197" ]; then
/bin/echo "Starting bmi270 IMU driver with rotation 26"
qshell bmi270 start -s -R 26
qshell icm42688p start -s -R 12
else
/bin/echo "Starting IMU driver with no rotation"
qshell icm42688p start -s -C 32768
qshell icm42688p start -s
fi
# First look for any external barometers connected to the apps proc
EXTERNAL_BAROMETER=0
/bin/echo "Looking for external DPS368 barometer"
if dps310 start -X -b /dev/i2c-0; then
/bin/echo "Detected external DPS368 barometer"
EXTERNAL_BAROMETER=1
fi
if (( EXTERNAL_BAROMETER == 0 )); then
/bin/echo "Looking for external ICP10100 barometer"
if icp101xx start -X -b /dev/i2c-0; then
/bin/echo "Detected external ICP10100 barometer"
EXTERNAL_BAROMETER=1
fi
fi
# If no external barometers found, use the builtin barometer
if (( EXTERNAL_BAROMETER == 0 )); then
/bin/echo "Did not detect an external barometer, starting onboard barometer"
if [ "$PLATFORM" == "M0197" ]; then
/bin/echo "Starting dps368 barometer on M0197"
qshell dps310 start -I -b 5
else
# Start Invensense ICP 101xx barometer built on to VOXL 2
qshell icp101xx start -I -b 5
fi
fi
# Start Invensense ICP 101xx barometer built on to VOXL 2
qshell icp101xx start -I -b 5
# Auto detect the magnetometer. If one or both of these devices
# are not connected it will fail but not cause any harm.
@@ -131,19 +91,15 @@ fi
qshell qmc5883l start -R 10 -X -b 1
/bin/echo "Looking for ist8310 magnetometer"
qshell ist8310 start -R 10 -X -b 1
/bin/echo "Looking for ist8308 magnetometer"
# Rotation 12 = PITCH_180
qshell ist8308 start -R 12 -X -b 1
/bin/echo "Looking for iis2mdc magnetometer"
# Note: Rotation may not be correct
qshell iis2mdc start -R 10 -X -b 1
# GPS and magnetometer
if [ "$GPS" != "NONE" ]; then
if [ "$PLATFORM" == "M0197" ]; then
gps start -d /dev/ttyHS7
# On M0052 the GPS driver runs on the apps processor
if [ $PLATFORM = "M0052" ]; then
gps start -d /dev/ttyHS2
# On M0054 and M0104 the GPS driver runs on SLPI DSP
else
qshell gps start
qshell gps start -d 6
fi
fi
@@ -188,12 +144,20 @@ elif [ "$RC" == "CRSF_MAV" ]; then
qshell mavlink_rc_in start -m -p 7 -b 115200
elif [ "$RC" == "SPEKTRUM" ]; then
/bin/echo "Starting Spektrum RC"
qshell spektrum_rc start
# On M0052 the RC driver runs on the apps processor
if [ $PLATFORM = "M0052" ]; then
rc_input start -d /dev/ttyHS1
# On M0054 and M0104 the RC driver runs on SLPI DSP
else
qshell spektrum_rc start
fi
elif [ "$RC" == "GHST" ]; then
/bin/echo "Starting GHST RC driver"
qshell ghst_rc start -d 7
elif [ "$RC" == "M0065_SBUS" ]; then
if [ "$ESC" != "VOXL2_IO_PWM_ESC" ]; then
if [ $PLATFORM = "M0052" ]; then
apps_sbus start
elif [ "$ESC" != "VOXL2_IO_PWM_ESC" ]; then
/bin/echo "Attempting to start M0065 SBUS RC driver for original M0065 FW"
qshell dsp_sbus start
retVal=$?
@@ -217,10 +181,6 @@ if [ "$POWER_MANAGER" == "VOXLPM" ]; then
qshell voxlpm start -X -b 2
fi
if [ "$AIRSPEED_SENSOR" == "MS4525DO" ]; then
qshell ms4525do start -X -b 4
fi
# Optional distance sensor on spare i2c
# qshell vl53l0x start -X -b 4
# qshell vl53l1x start -X -b 4
@@ -228,27 +188,22 @@ fi
# Start all of the processing modules on DSP
qshell sensors start
qshell ekf2 start
if [ "$AIRFRAME" == "FIXED_WING" ]; then
qshell fw_pos_control start
qshell fw_att_control start
qshell fw_rate_control start
qshell airspeed_selector start
qshell fw_autotune_attitude_control start
qshell land_detector start fixedwing
elif [ $AIRFRAME = "MULTICOPTER" ]; then
qshell mc_pos_control start
qshell mc_att_control start
qshell mc_rate_control start
qshell mc_hover_thrust_estimator start
qshell mc_autotune_attitude_control start
qshell land_detector start multicopter
fi
qshell mc_pos_control start
qshell mc_att_control start
qshell mc_rate_control start
qshell mc_hover_thrust_estimator start
qshell mc_autotune_attitude_control start
qshell land_detector start multicopter
qshell manual_control start
qshell control_allocator start
qshell load_mon start
qshell rc_update start
# Only start the rc_update module if an actual RC driver
# is publishing input_rc topics. Otherwise for external RC
# over Mavlink this isn't needed.
if [ "$RC" != "EXTERNAL" ]; then
qshell rc_update start
fi
qshell commander start
@@ -258,15 +213,21 @@ qshell flight_mode_manager start
# Start all of the processing modules on the applications processor
dataman start
navigator start
vehicle_air_data_bridge start
sensor_baro_bridge start
vehicle_local_position_bridge start
# This bridge allows raw data packets to be sent over UART to the ESC
# voxl2_io_bridge start
# Start uxrce_dds_client for ros2 offboard messages from agent over localhost
uxrce_dds_client start -t udp -h 127.0.0.1 -p 8888
voxl_save_cal_params start
# On M0052 there is only one IMU. So, PX4 needs to
# publish IMU samples externally for VIO to use.
if [ $PLATFORM = "M0052" ]; then
imu_server start
fi
# start the onboard fast link to connect to voxl-mavlink-server
mavlink start -x -u 14556 -o 14557 -r 100000 -n lo -m onboard
@@ -277,12 +238,17 @@ mavlink stream -u 14556 -s ATTITUDE_QUATERNION -r 10
mavlink stream -u 14556 -s GLOBAL_POSITION_INT -r 30
mavlink stream -u 14556 -s SCALED_PRESSURE -r 10
# Increase heartbeat rate so VFC can get faster mode updates
mavlink stream -u 14556 -s HEARTBEAT -r 10
# start the slow normal mode for voxl-mavlink-server to forward to GCS
mavlink start -x -u 14558 -o 14559 -r 100000 -n lo
# Start logging and use timestamps for log files when possible.
# Add the "-e" option to start logging immediately. Default is
# to log only when armed. Caution must be used with the "-e" option
# because if power is removed without stopping the logger gracefully then
# the log file may be corrupted. Rather than using "-e" option it's better
# to use the SDLOG_MODE to do that.
logger start -t -b 256
mavlink boot_complete
# Optional MSP OSD driver for DJI goggles
@@ -297,9 +263,3 @@ for i in "${EXTRA_STEPS[@]}"
do
$i
done
# Start logging module. This is done as the last step because any topics
# marked as optional will only be logged if they have been advertised when
# this is started. By starting it last it makes sure to see those
# advertisements as the other modules are starting before it.
logger start
@@ -269,6 +269,7 @@
*(.text.udp_pollsetup)
*(.text._ZL14timer_callbackPv)
*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf)
*(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi)
*(.text.nxsem_wait_irq)
*(.text._ZN20MavlinkCommandSender4lockEv)
*(.text.MEM_LongCopyEnd)
@@ -269,6 +269,7 @@
*(.text.udp_pollsetup)
*(.text._ZL14timer_callbackPv)
*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf)
*(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi)
*(.text.nxsem_wait_irq)
*(.text._ZN20MavlinkCommandSender4lockEv)
*(.text.MEM_LongCopyEnd)
@@ -273,6 +273,7 @@
*(.text.udp_pollsetup)
*(.text._ZL14timer_callbackPv)
*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf)
*(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi)
*(.text.nxsem_wait_irq)
*(.text._ZN20MavlinkCommandSender4lockEv)
*(.text.MEM_LongCopyEnd)
-9
View File
@@ -162,15 +162,6 @@
}
/**
* Custom style to hide search on the ome page
* -------------------------------------------------------------------------- */
.home #local-search {
display: none;
}
/**
* Custom styles for wide pages
* -------------------------------------------------------------------------- */
@@ -1,8 +1,8 @@
# Onboard parameters for Vehicle 1
#
# Stack: PX4 Pro
# Vehicle: Amovlab F410
# Version: 1.15.4
# Vehicle: Multi-Rotor
# Version: 1.15.4
# Git Revision: 99c40407ff000000
#
# Vehicle-Id Component-Id Name Value Type
@@ -546,6 +546,7 @@
1 1 IMU_INTEG_RATE 200 6
1 1 LNDMC_ALT_GND 2.000000000000000000 9
1 1 LNDMC_ROT_MAX 20.000000000000000000 9
1 1 LNDMC_TRIG_TIME 1.000000000000000000 9
1 1 LNDMC_XY_VEL_MAX 1.500000000000000000 9
1 1 LNDMC_Z_VEL_MAX 0.250000000000000000 9
1 1 LND_FLIGHT_T_HI 5 6
+4 -5
View File
@@ -328,11 +328,10 @@
- [Vertiq Motor/ESC Modules](peripherals/vertiq.md)
- [VESC Project ESCs](peripherals/vesc.md)
- [Zubax Telega ESCs](dronecan/zubax_telega.md)
- [Manual Control](config/manual_control.md)
- [Radio Control (RC)](getting_started/rc_transmitter_receiver.md)
- [Radio Setup](config/radio.md)
- [Flight Modes](config/flight_mode.md)
- [Joysticks](config/joystick.md)
- [Radio Control (RC)](getting_started/rc_transmitter_receiver.md)
- [Radio Setup](config/radio.md)
- [Flight Modes](config/flight_mode.md)
- [Joysticks](config/joystick.md)
- [Data Links](data_links/index.md)
- [MAVLink Telemetry (OSD/GCS)](peripherals/mavlink_peripherals.md)
- [Telemetry Radios](telemetry/index.md)
+1 -1
View File
@@ -38,7 +38,7 @@ In order to detect landing, the multicopter first has to go through three differ
If a condition cannot be reached because of missing sensors, then the condition is true by default.
For instance, in [Acro mode](../flight_modes_mc/acro.md) and no sensor is active except for the gyro sensor, then the detection solely relies on thrust output and time.
In order to proceed to the next state, each condition has to be true for 300ms.
In order to proceed to the next state, each condition has to be true for a third of the configured total land detector trigger time [LNDMC_TRIG_TIME](../advanced_config/parameter_reference.md#LNDMC_TRIG_TIME).
If the vehicle is equipped with a distance sensor, but the distance to ground is currently not measurable (usually because it is too large), the trigger time is increased by a factor of 3.
If one condition fails, the land detector drops out of the current state immediately.
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -18,7 +18,7 @@ Further/updated information may be available in the [Cube User Manual](https://d
## Accessories
Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#store).
Cube comes with most (or all) of the accessories you will need when [purchased](../flight_controller/pixhawk-2.md#stores).
![Cube Accessories](../../assets/flight_controller/cube/cube_accessories.jpg)
+10 -14
View File
@@ -2,12 +2,12 @@
<Badge type="info" text="Discontinued" />
::: warning
:::warning
_Crazyflie 2.0_ has been [discontinued/superseded](../flight_controller/autopilot_experimental.md).
Try [Bitcraze Crazyflie 2.1](../complete_vehicles_mc/crazyflie21.md) instead!
:::
::: warning
:::warning
- PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://www.bitcraze.io/) for hardware support or compliance issues.
@@ -202,7 +202,7 @@ Next, launch the cfbridge by giving the same channel and address as the first an
- After using _cfbridge_, you can deactivate the virtualenv if you activated it by pressing `CTRL+z`.
Most of the time, launching _cfbridge_ again from the same terminal doesn't connect to crazyflie, this can be solved by closing the terminal and relaunching _cfbridge_ in a new terminal.
::: tip
:::tip
If you change any driver in [crazyflie-lib-python](https://github.com/bitcraze/crazyflie-lib-python) or if launching _cfbridge_ in a new terminal does not find crazyflie, you can try navigating to the crazyflie-lib-python folder and run the script below to rebuild cflib.
```sh
@@ -212,18 +212,14 @@ make venv
:::
::: info
To use a [Joystick](../config/joystick.md):
- Make sure you're using a [`COM_RC_IN_MODE` that allows Joystick](../config/manual_control.md#px4-configuration).
- Calibrate the Joystick and set the Joystick message frequency in QGroundControl if needed (25 Hz is the default).
To be able to set the frequency, the advanced option should be enabled.
![QGC UI for setting message frequency](../../assets/hardware/joystick-message-frequency.png)
This is the rate at which Joystick commands are sent from QGroundControl to Crazyflie 2.0 (to do this, you will need to follow the instructions [here](https://github.com/mavlink/qgroundcontrol) to obtain the latest QGroundControl source code (master) and build it).
To use Joystick, set `COM_RC_IN_MODE` in QGroundControl to "Joystick/No RC Checks".
Calibrate the Joystick and set the Joystick message frequency in QGroundControl to any value between 5 to 14 Hz (10 Hz is recommended).
To be able to set the frequency, the advanced option should be enabled.
This is the rate at which Joystick commands are sent from QGroundControl to Crazyflie 2.0 (to do this, you will need to follow the instructions [here](https://github.com/mavlink/qgroundcontrol) to obtain the latest QGroundControl source code (master) and build it).
:::
![](../../assets/hardware/joystick-message-frequency.png)
## Hardware Setup
Crazyflie 2.0 is able to fly with precise control in [Stabilized mode](../flight_modes_mc/manual_stabilized.md), [Altitude mode](../flight_modes_mc/altitude.md) and [Position mode](../flight_modes_mc/position.md).
@@ -251,7 +247,7 @@ Then, you need to stick the battery on top of the SD card deck using a double si
Crazyflie is able to fly in _Altitude_ mode if you use a [Z-ranger deck](https://store.bitcraze.io/collections/decks/products/z-ranger-deck).
According to the datasheet, the maximum height (above ground) the range finder can sense is 2 m. However, when tested on dark surfaces this value decreases to 0.5 m. On a light floor, it goes up to max 1.3 m. This means you cannot hold altitudes above this value in _Altitude_ or _Position_ flight modes.
::: tip
:::tip
If the Crazyflie 2.0 height drifts at mid-throttle command in _Altitude mode_ or _Position mode_, first try rebooting the vehicle. If this does not fix the problem, recalibrate the accel and mag (compass).
:::
+3 -3
View File
@@ -21,7 +21,7 @@ For that to work, a few things are required:
- PX4 modules need to look like individual executables to the system.
This is done via symbolic links.
For each module a symbolic link `px4-<module> -> px4` is created in the `bin` directory of the build folder.
When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main PX4 instance (see below).
When executed, the binary path is checked (`argv[0]`), and if it is a module (starts with `px4-`), it sends the command to the main px4 instance (see below).
:::tip
The `px4-` prefix is used to avoid conflicts with system commands (e.g. `shutdown`), and it also allows for simple tab completion by typing `px4-<TAB>`.
@@ -30,13 +30,13 @@ For that to work, a few things are required:
- The shell needs to know where to find the symbolic links.
For that the `bin` directory with the symbolic links is added to the `PATH` variable right before executing the startup scripts.
- The shell starts each module as a new (client) process.
Each client process needs to communicate with the main instance of PX4 (the server), where the actual modules are running as threads.
Each client process needs to communicate with the main instance of px4 (the server), where the actual modules are running as threads.
This is done through a [UNIX socket](https://man7.org/linux/man-pages/man7/unix.7.html).
The server listens on a socket, to which clients can connect and send a command.
The server then sends the output and return code back to the client.
- The startup scripts call the module directly, e.g. `commander start`, rather than using the `px4-` prefix.
This works via aliases: for each module an alias in the form of `alias <module>=px4-<module>` is created in the file `bin/px4-alias.sh`.
- The `rcS` script is executed from the main PX4 instance.
- The `rcS` script is executed from the main px4 instance.
It does not start any modules, but first updates the `PATH` variable and then simply runs a shell with the `rcS` file as argument.
- In addition to that, multiple server instances can be started for multi-vehicle simulations.
A client selects the instance via `--instance`.
+3 -2
View File
@@ -23,7 +23,8 @@ Information about how to set up a joystick is covered in: [QGroundControl > Joys
In summary:
- Open _QGroundControl_
- [Enable a `COM_RC_IN_MODE` mode that allows Joystick](../config/manual_control.md#px4-configuration).
The default `RC or MAVLink keep first` should work if you plan to only have a Joystick connected.
- Set the parameter [COM_RC_IN_MODE=1](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) - `Joystick`
- See [Parameters](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/parameters.html) for information about setting parameters
- Setting the parameter to `2` or `3` also enables Joystick under some circumstances.
- Connect the joystick
- Configure the connected joystick in: **Vehicle Setup > Joystick**.
-58
View File
@@ -1,58 +0,0 @@
# Manual Control
Pilots can control a vehicle manually using either a [Radio Control (RC) System](../getting_started/rc_transmitter_receiver.md) or a [Joystick/Gamepad](../config/joystick.md) controller connected via QGroundControl.
PX4 also supports using RC and/or multiple Joysticks, with fallback from one type to the other.
![Taranis X9D Transmitter](../../assets/hardware/transmitters/frsky_taranis_x9d_transmitter.jpg) <img src="../../assets/peripherals/joystick/micronav.jpg" alt="Photo of MicroNav, a ground controller with integrated joysticks" width="400px">
## Overview
_Joystick_ setups use QGroundControl to encode the control information from a "standard" computer gaming joystick into [MAVLink messages](https://mavlink.io/en/services/manual_control.html) that are sent to the vehicle over the (shared) telemetry radio channel.
They are often used in integrated GCS/manual control systems because it is cheaper and easier to integrate a joystick than a separate radio system.
Joysticks are suitable for most applications provided your telemetry channel has a high enough bandwidth/low latency.
They are perfect for flying the PX4 simulator, because you can plug them directly into your ground control computer and start flying.
_RC systems_ use a dedicated ground-based radio transmitter and vehicle-based receiver for sending control information.
They offer lower latency than Joysticks, and are very highly recommended when first tuning/testing a new frame design, when flying racers/acrobatically, and in other cases where low latency is important.
They can also be useful as a robust backup link for safety.
Note RC systems usually require significantly more configuration and calibration, much of which may be brand or model-specific.
::: info
PX4 does not _require_ a manual control system for autonomous flight modes.
:::
## PX4 Configuration
::: tip
This section explains how to configure PX4 to use and prioritise various manual control sources (other configuration is covered in the guides for each type of manual control).
:::
If you only have one manual control system, either RC or Joystick, then by default no manual control selection is required.
In this case PX4 locks to the first valid manual control source it detects and uses that source until the vehicle is rebooted.
If you have multiple control sources, such as an RC system and/or one or more Joysticks, then you can use the [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter to determine which source is active, specifying selection priorities and fallback behavior ([parameters can be set](../advanced_config/parameters.md#finding-a-parameter) using QGC):
- `0`: RC only.
- `1`: MAVLink only.
- `2`: RC or MAVLink with fallback (switches if current source becomes invalid).
- `3`: RC or MAVLink keep first (locks to the first valid source until reboot).
- `4`: Disable manual control (ignores all sources).
- `5`: RC priority, then MAVLink (lower instance before higher) — `RC > MAVLink 1 > MAVLink 2`
- `6`: MAVLink priority (lower instance before higher), then RC — `MAVLink 1 > MAVLink 2 > RC`
- `7`: RC priority, then MAVLink (higher instance before lower) — `RC > MAVLink 2 > MAVLink 1`
- `8`: MAVLink priority (higher instance before lower), then RC — `MAVLink 2 > MAVLink 1 > RC`
The [MAVLink instance](../peripherals/mavlink_peripherals.md#mavlink-instances) refers to an instance assigned to a serial port, such as [MAV_0_CONFIG](../advanced_config/parameter_reference.md#MAV_0_CONFIG).
Notes:
- RC checks are run for any option that uses RC (so not for `MAVLink only` or `Disable manual control`).
- When using priority sources, sources are evaluated as soon as they become valid and may trigger an immediate switch (if higher priority than the currently active source).
- A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered when none of the manual control inputs allowed by the `COM_RC_IN_MODE` mode are available for a time that is greater than the RC Loss Timeout.
As long as there is a fallback input source available, the failsafe is not triggered.
## See Also
- [Radio Control (RC)](../getting_started/rc_transmitter_receiver.md)
- [Joysticks](../config/joystick.md)
+3 -5
View File
@@ -1,12 +1,10 @@
# Radio Control (RC) Setup
The _Radio Setup_ screen is used to configure the mapping of your [RC controller's](../getting_started/rc_transmitter_receiver.md) main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels.
The _Radio Setup_ screen is used to configure the mapping of your RC controller's main attitude control sticks (roll, pitch, yaw, throttle) to channels, and to calibrate the minimum, maximum, trim and reverse settings for all other transmitter controls/RC channels.
::: info
A [Joystick](../config/joystick.md) can also be used for [Manual Control](../config/manual_control.md).
By default PX4 will latch the first valid controller it discovers and use it until the vehicle reboots.
If you have multiple controllers and you want to define their priority see [Manual Control > PX4 Configuration](../config/manual_control.md#px4-configuration).
A [Joystick](../config/joystick.md) can be used instead of RC for manual control.
The [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) parameter [can be set](../advanced_config/parameters.md) to define what kind of manual controller(s) are enabled.
:::
## Binding the Receiver
+7 -5
View File
@@ -111,17 +111,19 @@ The settings and underlying parameters are shown below.
## Manual Control Loss Failsafe
A [Manual Control Loss Failsafe](../config/safety.md#manual-control-loss-failsafe) is triggered after a [manual control loss timeout](#COM_RC_LOSS_T) in which none of the configured [Manual Controllers](../config/manual_control.md) are available.
The manual control loss failsafe may be triggered if the connection to the [RC transmitter](../getting_started/rc_transmitter_receiver.md) or [joystick](../config/joystick.md) is lost, and there is no fallback.
If using an [RC transmitter](../getting_started/rc_transmitter_receiver.md) this is triggered if the RC [transmitter link is lost](../getting_started/rc_transmitter_receiver.md#set-signal-loss-behaviour).
If using [joysticks](../config/joystick.md) connected over a MAVLink data link, this is triggered if the joysticks are disconnected or the data link is lost.
::: info
PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection).
:::
![Safety - RC Loss (QGC)](../../assets/qgc/setup/safety/safety_rc_loss.png)
The QGCroundControl Safety UI allows you to set the [failsafe action](#failsafe-actions) and [manual control loss timeout](#COM_RC_LOSS_T).
Users that want to disable this failsafe in specific modes can do so using the parameter [COM_RCL_EXCEPT](#COM_RCL_EXCEPT).
::: info
PX4 and the receiver may also need to be configured in order to _detect RC loss_: [Radio Setup > RC Loss Detection](../config/radio.md#rc-loss-detection).
:::
Additional (and underlying) parameter settings are shown below.
| Parameter | Setting | Description |
@@ -95,7 +95,7 @@ It should be set to a value which ensures that the vehicle reaches a high enough
[VT_TRANS_TIMEOUT](../advanced_config/parameter_reference.md#VT_TRANS_TIMEOUT)
This specifies the upper limit for the duration of the front transition. If the vehicle has not reached the transition airspeed after this time, then the transition will be aborted and a [Quadchute](../config/safety.md#quad-chute-failsafe) event will be triggered.
::: info
:::note
Additionally, if an airspeed sensor is present, the transition will also be aborted if the airspeed has not reached [VT_ARSP_BLEND](../advanced_config/parameter_reference.md#VT_ARSP_BLEND) after the openloop transition time [VT_F_TR_OL_TM](../advanced_config/parameter_reference.md#VT_F_TR_OL_TM) has elapsed. This checks is used to avoid a scenario where the vehicle gains excessive speed when the airspeed sensor is faulty.
:::
+14
View File
@@ -86,6 +86,20 @@ private:
};
```
## Coding Conventions
The following conventions are enforced during code review:
- **Return early** to reduce nesting depth.
- **No `get`/`is` prefixes** on boolean methods: prefer `enabled()` over `isEnabled()`.
- **Default member initialization** in class headers, not constructors (e.g. `float _value{0.f};`).
- **Avoid `goto`.**
- **Prefer `++i`** over `i++`.
- **No `std::` containers or algorithms** in embedded (NuttX) code.
- **No dynamic memory allocation after init.**
Formatting source of truth: `Tools/astyle/astylerc`. Run `make format` to fix formatting project-wide, or `Tools/astyle/fix_code_style.sh <file>` for a single file.
## In-Source Documentation
PX4 developers are encouraged to create appropriate in-source documentation.
+1 -1
View File
@@ -106,7 +106,7 @@ You can also start your simulation, and _then_ attach `gdb`:
```
As the script runs, note the **SITL COMMAND:** output text located right above the large "PX4" text.
It will list the location of your PX4 bin file for later use.
It will list the location of your px4 bin file for later use.
```sh
SITL COMMAND: "<px4 bin file>" "<build dir>"/etc
+5 -8
View File
@@ -287,15 +287,12 @@ PX4 can control LEDs via DroneCAN [LightsCommand](https://dronecan.github.io/Spe
Configuration:
1. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (0 disables, maximum 2). You need to reboot and reopen the ground station to have parameters for new instances available.
2. [UAVCAN_LGT_MODE](../advanced_config/parameter_reference.md#UAVCAN_LGT_MODE) controls when lights should be in active state (always off, when armed, when prearmed, always on).
3. For each light slot (0 to NUM-1), set:
1. Set [UAVCAN_LGT_NUM](../advanced_config/parameter_reference.md#UAVCAN_LGT_NUM) to the number of lights (0 disables). You might need to reopen the ground station to have parameters for new instances available.
2. For each light slot (0 to NUM-1), set:
- `UAVCAN_LGT_IDx`: The `light_id` matching your peripheral.
- `UAVCAN_LGT_FNx`: The light function. Available options:
- System status light
- Static colors which light up when `UAVCAN_LGT_MODE` is active.
- Hybrid modes where the Status is shown when `UAVCAN_LGT_MODE` is inactive, and a static color when active.
4. Reboot for changes to take effect.
- `UAVCAN_LGT_FNx`: `Status` for system status colours, or `Anti-collision` for white beacon.
3. For anti-collision lights, [UAVCAN_LGT_ANTCL](../advanced_config/parameter_reference.md#UAVCAN_LGT_ANTCL) controls when they illuminate (off, armed, prearmed, always on).
4. Reboot for any changes to take effect.
## QGC CANNODE Parameter Configuration
@@ -1,18 +1,18 @@
# Accton Godwit G-A1
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues.
:::
The G-A1 is a state-of-the-art flight controller derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf).
The G-A1 is a state-of-the-art flight controller developed derived from the [Pixhawk Autopilot v6X Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-012%20Pixhawk%20Autopilot%20v6X%20Standard.pdf).
It includes an STM32H753 double-precision floating-point FMU processor and an STM32F103 IO coprocessor, multiple IMUs with 6-axis inertial sensors, two pressure/temperature sensors, and a geomagnetic sensor.
It also has independent buses and power supplies, and is designed for safety and rich expansion capabilities.
With an integrated 10/100M Ethernet Physical Layer (PHY), the G-A1 can also communicate with a mission computer (airborne computer), high-end surveying and mapping cameras, and other UxV-mounted equipment for high-speed communications, meeting the needs of advanced UxV systems.
::: tip
:::tip
Visit [Accton-IoT Godwit](https://www.accton-iot.com/godwit/) for more information.
:::
@@ -65,7 +65,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- 92.2 (L) x 51.2 (W) x 28.3 (H) mm
- 77.6g (carrier board with IMU)
## Where to Buy {#store}
## Where to Buy
- [Accton-IoT Godwit](https://www.accton-iot.com/godwit/)
- [sales@accton-iot.com](sales@accton-iot.com)
@@ -115,7 +115,7 @@ PPM receivers should be connected to the PPM interface. And other RC systems can
## GPS/Compass
The Godwit G-A1 has a built-in compass.
The Godwit G-A1 has a built-in compass
Due to potential interference, the autopilot is usually used with an external I2C compass as part of a GPS/Compass combination.
![G-A1 GPS](../../assets/flight_controller/accton-godwit/ga1/gps.png "G-A1 GPS")
+6 -6
View File
@@ -1,6 +1,6 @@
# Sky-Drones AIRLink
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://sky-drones.com/) for hardware support or compliance issues.
:::
@@ -26,7 +26,7 @@ AIRLink has two computers and integrated LTE Module:
## Specifications
- **Sensors**
- 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensors
- 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensorss
- GNSS, Rangefinders, Lidars, Optical Flow, Cameras
- 3x-redundant IMU
- Vibration dampening
@@ -71,7 +71,7 @@ AIRLink has two computers and integrated LTE Module:
- Antenna, 4x4 MIMO
- Bands: Worldwide
## Where to Buy {#store}
## Where to Buy
Purchase from the original Sky-Drones Store (worldwide shipping with 1-2 days order processing time):
@@ -92,7 +92,7 @@ The standard set contains:
- 1x FPV camera with CSI cable
- 1x WiFi antenna with MMCX connector
- 2x/4x LTE/5G antenna with MMCX connector
- 1x HDMI to mini HDMI cable, 1x set of cables (7 cables for all connectors)
- 1x HDMI to mini HDMI cable1x set of cables (7 cables for all connectors)
[AIRLink Telemetry](https://sky-drones.com/sets/airlink-telemetry-set.html) based on the Microhard LAN/IP-based RF micromodule is available as an add-on and is fully compatible with AIRLink.
@@ -344,14 +344,14 @@ AIRLink has 16 PWM ouputs. Main outputs 1-8 and connected to IO MCU. AUX outputs
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make sky-drones_smartap-airlink
```
+4 -4
View File
@@ -1,6 +1,6 @@
# ARK FPV Flight Controller
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues.
:::
@@ -9,11 +9,11 @@ The USA-built ARK FPV flight controller is based on the [ARKV6X](https://arkelec
![ARK FPV Main Photo](../../assets/flight_controller/arkfpv/ark_fpv.jpg)
::: info
:::info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Where To Buy {#store}
## Where To Buy
Order from [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US)
@@ -76,7 +76,7 @@ See the documentation [Ark Electronics GitBook](https://arkelectron.gitbook.io/a
## Additional Information
- Weight: 7.5 g with MicroSD card
- Weight: 7.5 g g with MicroSD card
- Dimensions: 3.6 x 3.6 x 0.8 cm
- USA Built - NDAA compliant
- Heater: 1W for warming sensors in extreme cold
+3 -3
View File
@@ -1,6 +1,6 @@
# ARK Pixhawk Autopilot Bus Carrier
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues.
:::
@@ -11,7 +11,7 @@ The PAB form factor enables the ARK PAB Carrier to be used with any [PAB-compati
![ARKPAB Main Photo](../../assets/flight_controller/arkpab/ark_pab_main.jpg)
### Where To Buy {#store}
### Where To Buy
Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopilot-bus-carrier/) (US)
@@ -39,7 +39,7 @@ Order From [Ark Electronics](https://arkelectron.com/product/ark-pixhawk-autopil
- 6 Pin JST-GH
- Dual CAN Ports
- 4 Pin JST-GH
- Triple Telemetry Ports with Flow Control
- Triple Telemetry Ports with Flow - Control
- 6 Pin JST-GH
- Eight PWM Outputs
- 10 Pin JST-GH
+1 -10
View File
@@ -1,19 +1,10 @@
# ARK Pi6X Flow
::: warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues.
:::
The [ARK Pi6X Flow](https://arkelectron.gitbook.io/ark-documentation/flight-controllers/ark-pi6x-flow) integrates a Raspberry Pi Compute Module 4 (CM4) Carrier, [ARKV6X Flight Controller](../flight_controller/ark_v6x.md), [ARK Flow sensors](../dronecan/ark_flow.md) , [ARK PAB Power Module](../power_module/ark_pab_power_module.md), and a 4-in-1 ESC, all mounted onto one compact board.
![ARK Pi6X Flow Flight Controller](../../assets/flight_controller/ark_pi6x_flow/ark_pi6xflow.jpg)
::: info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Where to Buy {#store}
## Where to Buy
Order this module from:
+2 -2
View File
@@ -1,6 +1,6 @@
# ARK Electronics ARKV6X
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://arkelectron.com/contact-us/) for hardware support or compliance issues.
:::
@@ -16,7 +16,7 @@ The Pixhawk Autopilot Bus (PAB) form factor enables the ARKV6X to be used on any
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Where To Buy {#store}
## Where To Buy
Order From [Ark Electronics](https://arkelectron.com/product/arkv6x/) (US)
+2 -2
View File
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" />
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues.
:::
@@ -1,6 +1,6 @@
# Community Supported & Experimental Autopilots
::: tip
:::tip
For more information about PX4 project autopilot board support levels see: [px4.io/autopilots/](https://px4.io/autopilots/).
:::
@@ -2,7 +2,7 @@
Manufacturer-supported autopilots are maintained and supported by a board manufacturer (manufacturers commit to delivering compatibility with the current stable PX4 release within 4 months of the official release announcement).
::: tip
:::tip
For more information about PX4 project autopilot board support levels see: [px4.io/autopilots/](https://px4.io/autopilots/).
:::
@@ -18,7 +18,7 @@ The boards in this category are:
- [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md) (and [ARK Electronics Pixhawk Autopilot Bus Carrier](../flight_controller/ark_pab.md))
- [ARK FPV Flight Controller](../flight_controller/ark_fpv.md)
- [ARK Pi6X Flow Flight Controller](../flight_controller/ark_pi6x.md)
- [CUAV Nora](../flight_controller/cuav_nora.md) (CUAV X7 variant)
- [CUAV Nora](../flight_controller/cuav_nora.md)CUAV X7 variant)
- [CUAV V5+](../flight_controller/cuav_v5_plus.md) (FMUv5)
- [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) (FMUv5)
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
@@ -4,7 +4,7 @@
These boards are maintained, updated, tested and otherwise supported by the PX4 project maintainers and Dronecode test team.
::: tip
:::tip
For more information about PX4 project autopilot board support levels see: [px4.io/autopilots/](https://px4.io/autopilots/).
:::
+18 -14
View File
@@ -2,7 +2,7 @@
<LinkedBadge type="warning" text="Experimental" url="../flight_controller/autopilot_experimental.md"/>
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://beagleboard.org/blue) for hardware support or compliance issues.
:::
@@ -23,7 +23,7 @@ _BeagleBone Blue_ images can be found here:
Information about flashing OS images can be found on [this page](https://github.com/beagleboard/beaglebone-blue/wiki/Flashing-firmware).
Other useful information can be found in the [FAQ](<https://github.com/beagleboard/beaglebone-blue/wiki/Frequently-Asked-Questions-(FAQ)>).
::: tip
:::tip
Optionally you can update to a realtime kernel, and if you do, re-check if _librobotcontrol_ works properly with the realtime kernel.
:::
@@ -33,7 +33,7 @@ The latest OS images at time of updating this document is [AM3358 Debian 10.3 20
The recommended way to build PX4 for _BeagleBone Blue_ is to compile on a development computer and upload the PX4 executable binary directly to the BeagleBone Blue.
::: tip
:::tip
This approach is recommended over [native build](#native_builds) due to speed of deployment and ease of use.
:::
@@ -79,7 +79,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
For _rsync_ over SSH with key authentication, follow the steps here (on the development machine):
1. Generate an SSH key if you have not previously done so:
```sh
```
ssh-keygen -t rsa
```
@@ -89,13 +89,13 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
1. Define the BeagleBone Blue board as `beaglebone` in **/etc/hosts** and copy the public SSH key to the board for password-less SSH access:
```sh
```
ssh-copy-id debian@beaglebone
```
1. Alternatively you can use the beaglebone's IP directly:
```sh
```
ssh-copy-id debian@<IP>
```
@@ -115,7 +115,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
The ARM Cross Compiler for _BeagleBone Blue_ can be found at [Linaro Toolchain Binaries site](https://www.linaro.org/downloads/#gnu_and_llvm).
::: tip
:::tip
GCC in the toolchain should be compatible with kernel in _BeagleBone Blue_.
General rule of thumb is to choose a toolchain where version of GCC is not higher than version of GCC which comes with the OS image on _BeagleBone Blue_.
:::
@@ -129,7 +129,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
tar -xf gcc-linaro-13.0.0-2022.06-x86_64_arm-linux-gnueabihf.tar.xz
```
::: tip
:::tip
The GCC version of the toolchain should be compatible with kernel in _BeagleBone Blue_.
:::
@@ -147,7 +147,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
1. Setup other dependencies by downloading the PX4 source code and then running the setup scripts:
````sh
````
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
ols
```
@@ -166,7 +166,7 @@ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && systemctl restart sshd
Compile and Upload
```sh
```
make beaglebone_blue_default upload
```
@@ -185,7 +185,9 @@ sudo ./bin/px4 -s px4.config
Currently _librobotcontrol_ requires root access.
:::
## Native Builds (optional) {#native_builds}
<a id="native_builds"></a>
## Native Builds (optional)
You can also natively build PX4 builds directly on the BeagleBone Blue.
@@ -209,7 +211,7 @@ Run the following commands on the BeagleBone Blue (i.e. via SSH):
## Changes in config
All changes can be made in the px4.config file directly on beaglebone.
All changes can be made in de px4.config file directly on beaglebone.
For example, you can change the WIFI to wlan.
::: info
@@ -288,6 +290,8 @@ For a quadcopter with GPS and an SBUS receiver, here are typical connections:
1. Connect the ESC of motor 1, 2, 3 and 4 to channel 1, 2, 3 and 4 of servo outputs on BeagleBone Blue, respectively.
If your ESC connector contains a power output pin, remove it and do not connect it to the power output pin of the servo channel on the BeagleBone Blue.
2. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly.
3. Connect the signals of GPS module to GPS port on the BeagleBone Blue.
1. Connect the above mentioned converted SBUS signal to the dsm2 port if you have the matching connector for dsm2, otherwise connect it to any other available UART port and change the corresponding port in **/home/debian/px4/px4.config** accordingly.
1. Connect the signals of GPS module to GPS port on the BeagleBone Blue.
Note that the signal pins of the GPS port on the BeagleBone Blue are only 3.3V tolerant, so choose your GPS module accordingly.
+8 -8
View File
@@ -1,6 +1,6 @@
# CUAV Nora Flight Controller
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues.
:::
@@ -30,7 +30,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Car-grade RM3100 compass
- High performance processor
::: tip
:::tip
The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/nora.html) are the canonical reference for Nora.
They should be used by preference as they contain the most complete and up to date information.
:::
@@ -72,7 +72,7 @@ When it runs PX4 firmware, only 8 PWM outputs work.
The remaining 6 PWM ports are still being adapted (so it is not compatible with VOLT at time of writing).
:::
## Where to Buy {#store}
## Where to Buy
- [CUAV Store](https://store.cuav.net)<\br>
- [CUAV Aliexpress](https://www.aliexpress.com/item/4001042501927.html?gps-id=8041884&scm=1007.14677.110221.0&scm_id=1007.14677.110221.0&scm-url=1007.14677.110221.0&pvid=3dc0a3ba-fa82-43d2-b0b3-6280e4329cef&spm=a2g0o.store_home.promoteRecommendProducts_7913969.58)
@@ -87,7 +87,7 @@ The remaining 6 PWM ports are still being adapted (so it is not compatible with
![X7 pinouts](../../assets/flight_controller/cuav_nora/nora-pinouts.jpg)
::: warning
:::warning
The `RCIN` port is limited to powering the rc receiver and cannot be connected to any power/load.
:::
@@ -109,14 +109,14 @@ Under these conditions all power sources will be used in this order to power the
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make cuav_nora_default
```
@@ -125,7 +125,7 @@ make cuav_nora_default
The _Nora_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A.
The _Nora_ has short circuit protection.
::: warning
:::warning
Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A).
:::
@@ -153,7 +153,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1).
![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg)
::: warning
:::warning
The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V!
Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines.
@@ -1,6 +1,6 @@
# CUAV Pixhawk V6X
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
@@ -11,7 +11,7 @@ It is based on the [Pixhawk​® Autopilot FMUv6X Standard](https://github.co
![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/pixhawk_v6x.jpg)
::: tip
:::tip
This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams.
:::
@@ -61,7 +61,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co
- 16- PWM servo outputs
- 1 Dedicated R/C input for Spektrum / DSM and S.Bus with analog / PWM RSSI input
- 3 TELEM Portswith full flow control
- 1 UART4(Serial and I2C)
- 1 UART4(Seial and I2C)
- 2 GPS ports
- 1 full GPS plus Safety Switch Port(GPS1)
- 1 basic GPS port(with I2C,GPS2)
@@ -104,7 +104,7 @@ The Pixhawk® V6X is ideal for corporate research labs, academic research and co
![Pixhawk V6X](../../assets/flight_controller/cuav_pixhawk_v6x/core.png)
## Where to Buy {#store}
## Where to Buy
Order from [CUAV](https://store.cuav.net/).
@@ -166,18 +166,20 @@ Analog battery monitoring via an ADC is not supported on this particular board,
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v6x_default
```
## Debug Port {#debug_port}
<a id="debug_port"></a>
## Debug Port
The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port.
+6 -6
View File
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" /> <!-- 202507 / PX4v1.16 -->
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
@@ -52,7 +52,7 @@ It is intended primarily for academic and commercial developers.
- Other Characteristics:
- Operating temperature: -20 ~ 80°C Measured value
## Where to Buy {#store}
## Where to Buy
Order from [CUAV](https://cuav.taobao.com/index.htm?spm=2013.1.w5002-16371268426.2.411f26d9E18eAz).
@@ -60,7 +60,7 @@ Order from [CUAV](https://cuav.taobao.com/index.htm?spm=2013.1.w5002-16371268426
![CUAV v5](../../assets/flight_controller/cuav_v5/pixhack_v5_connector.jpg)
::: warning
:::warning
The RCIN interface is limited to powering the rc receiver and cannot be connected to any power/load.
:::
@@ -82,14 +82,14 @@ Under these conditions all power sources will be used in this order to power the
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v5_default
```
+10 -8
View File
@@ -1,6 +1,6 @@
# CUAV V5 nano Autopilot
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
@@ -58,7 +58,7 @@ Main FMU Processor: STM32F765◦32 Bit Arm® Cortex®-M7, 216MHz, 2MB memory, 51
- Other Characteristics:
- Operating temperature: -20 ~ 85°C Measured value
## Where to Buy {#store}
## Where to Buy
[CUAV Store](https://store.cuav.net/shop/v5-nano/)
@@ -82,18 +82,20 @@ Download **V5 nano** pinouts from [here](http://manual.cuav.net/V5-Plus.pdf).
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v5_default
```
## Debug Port {#debug_port}
<a id="debug_port"></a>
## Debug Port
The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) operate on the **FMU Debug** port (`DSU7`).
The board does not have an I/O debug interface.
@@ -117,7 +119,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1).
![CUAV Debug cable](../../assets/flight_controller/cuav_v5_nano/cuav_nano_debug_cable.jpg)
::: warning
:::warning
The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V!
Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines.
@@ -198,7 +200,7 @@ For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of
`PM2` can only measure battery voltage and current, but **not** power the flight controller.
::: warning
:::warning
PX4 does not support this interface.
:::
@@ -212,7 +214,7 @@ For example, the serial number Batch V011904((V01 is the number of V5, 1904 is t
#### SBUS / DSM / RSSI interface Pin1 unfused
::: warning
:::warning
This is a safety issue.
:::
+8 -8
View File
@@ -1,6 +1,6 @@
# CUAV V5+ Autopilot
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
@@ -58,7 +58,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Other Characteristics:
- Operating temperature: -20 ~ 80°cMeasured value
## Where to Buy {#store}
## Where to Buy
[CUAV Aliexpress](https://www.aliexpress.com/item/32890380056.html?spm=a2g0o.detail.1000060.1.7a7233e7mLTlVl&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.90158.0&scm_id=1007.13339.90158.0&scm-url=1007.13339.90158.0&pvid=d899bfab-a7ca-46e1-adf2-72ad1d649822) (International users)
@@ -101,20 +101,20 @@ Under these conditions all power sources will be used in this order to power the
The _V5+_ has over current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A.
The _V5+_ has short circuit protection.
::: warning
:::warning
Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A).
:::
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v5_default
```
@@ -142,7 +142,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1).
![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg)
::: warning
:::warning
The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V!
Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines.
@@ -205,7 +205,7 @@ The UAVCAN [NEO V2 PRO GNSS receiver](https://doc.cuav.net/gps/neo-series-gnss/e
`DSU7` FMU Debug Pin 1 is 5 volts - not the 3.3 volts of the CPU.
Some JTAG adapters use this voltage to set the IO levels when communicating to the target.
Some JTAG use this voltage to set the IO levels when communicating to the target.
For direct connection to _Segger Jlink_ we recommended you use the 3.3 Volts of DSM/SBUS/RSSI pin 4 as Pin 1 on the debug connector (`Vtref`).
@@ -219,7 +219,7 @@ For example, the serial number Batch V011904((V01 is the number of V5, 1904 is t
#### SBUS / DSM / RSSI interface Pin1 unfused
::: warning
:::warning
This is a safety issue.
:::
+7 -5
View File
@@ -1,6 +1,6 @@
# CUAV X25-EVO
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
@@ -85,7 +85,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
- Not provided.
## Purchase Channels {#store}
## Purchase Channels
Order from [CUAV](https://store.cuav.net/).
@@ -128,18 +128,20 @@ Digital DroneCAN/UAVCAN battery monitoring is enabled by default.
## Building Firmware
::: tip
:::tip
Most users do not need to build this firmware!
It is pre-built and installed automatically by _QGroundControl_ when the appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target, execute:
```sh
```
make cuav_x25-evo_default
```
## Debug Port {#debug_port}
<a id="debug_port"></a>
## Debug Port
The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debug/swd_debug.md) operate on the **FMU Debug** port.
+9 -9
View File
@@ -2,12 +2,12 @@
<Badge type="info" text="Discontinued" /> <!-- 202507 / PX4v1.16 -->
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
It has been superseded by the [CUAV X7+](https://doc.cuav.net/controller/x7/en/).
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://www.cuav.net) for hardware support or compliance issues.
:::
@@ -38,7 +38,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Car-grade RM3100 compass
- High performance processor
::: tip
:::tip
The manufacturer [CUAV Docs](https://doc.cuav.net/flight-controller/x7/en/) are the canonical reference for the X7.
They should be used by preference as they contain the most complete and up to date information.
:::
@@ -79,7 +79,7 @@ They should be used by preference as they contain the most complete and up to da
When it runs PX4 firmware, only 8 pwm works, the remaining 6 pwm are still being adapted, so it is not compatible with VOLT now.
:::
## Where to Buy {#store}
## Where to Buy
[CUAV Store](https://store.cuav.net)
@@ -95,7 +95,7 @@ When it runs PX4 firmware, only 8 pwm works, the remaining 6 pwm are still being
![X7 pinouts](../../assets/flight_controller/cuav_x7/x7-pinouts.jpg)
::: warning
:::warning
The `RCIN` port is limited to powering the RC receiver and cannot be connected to any power/load.
:::
@@ -118,14 +118,14 @@ Under these conditions all power sources will be used in this order to power the
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make cuav_x7pro_default
```
@@ -134,7 +134,7 @@ make cuav_x7pro_default
The _X7_ has over-current protection on the 5 Volt Peripheral and 5 Volt high power, which limits the current to 2.5A.
The _X7_ has short circuit protection.
::: warning
:::warning
Up to 2.5 A can be delivered to the connectors listed as pin 1 (although these are only rated at 1 A).
:::
@@ -164,7 +164,7 @@ The provided debug cable does not connect to the SWD port `Vref` pin (1).
![CUAV Debug cable](../../assets/flight_controller/cuav_v5_plus/cuav_v5_debug_cable.jpg)
::: warning
:::warning
The SWD Vref pin (1) uses 5V as Vref but the CPU is run at 3.3V!
Some JTAG adapters (SEGGER J-Link) will use the Vref voltage to set the voltage on the SWD lines.
@@ -1,6 +1,6 @@
# CubePilot Cube Orange Flight Controller
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues.
:::
@@ -10,7 +10,7 @@ The [Cube Orange](https://www.cubepilot.com/#/cube/features) flight controller i
![Cube Orange](../../assets/flight_controller/cube/orange/cube_orange_hero.jpg)
The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly.
For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle.
For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle.
The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix.
This provides attitude and location of commercial manned aircraft within the range of Cube.
@@ -18,14 +18,10 @@ This is automatically configured and enabled in the default PX4 firmware.
Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup.
::: tip
:::tip
The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications).
:::
::: info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Key Features
- 32bit STM32H753VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB).
@@ -40,7 +36,9 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- High-power, multi-tone piezo audio indicator
- microSD card for high-rate logging over extended periods of time
## Where to Buy {#store}
<a id="stores"></a>
## Where to Buy
- [Reseller list](https://www.cubepilot.com/#/reseller/list)
@@ -225,14 +223,14 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter:
```sh
```
make cubepilot_cubeorange
```
@@ -1,17 +1,17 @@
# CubePilot Cube Orange+ Flight Controller
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues.
:::
The [Cube Orange+](https://www.cubepilot.com/#/cube/features) flight controller is a flexible autopilot intended primarily for manufacturers of commercial systems.
Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757), and some different sensor parts.
Cube Orange+ is similar to Cube Orange, but has a more powerful dual-core processor (STM32H757, and some different sensors parts.
![Cube Orange](../../assets/flight_controller/cube/orangeplus/cubepilot_cube_orangeplus_standard_set.jpg)
The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly.
For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle.
For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle.
The ADS-B carrier board includes a customized 1090MHz ADSB-In receiver from uAvionix.
This provides attitude and location of commercial manned aircraft within the range of Cube.
@@ -19,14 +19,10 @@ This is automatically configured and enabled in the default PX4 firmware.
Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup.
::: tip
:::tip
The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications).
:::
::: info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Key Features
- 32bit STM32H757ZI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 1MB).
@@ -41,7 +37,9 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- High-power, multi-tone piezo audio indicator
- microSD card for high-rate logging over extended periods of time
## Where to Buy {#store}
<a id="stores"></a>
## Where to Buy
- [Reseller list](https://www.cubepilot.com/#/reseller/list)
@@ -226,13 +224,13 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
## Building Firmware
::: warning
:::warning
The firmware for Orange+ will be present in releases from PX4 v1.14.
:::
To [build PX4](../dev_setup/building_px4.md) for this target, open up the terminal and enter:
```sh
```
make cubepilot_cubeorangeplus
```
@@ -1,6 +1,6 @@
# CubePilot Cube Yellow Flight Controller
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://cubepilot.org/#/home) for hardware support or compliance issues.
:::
@@ -10,18 +10,14 @@ The Cube Yellow flight controller is a flexible autopilot intended primarily for
![Cube Yellow](../../assets/flight_controller/cube/yellow/cube_yellow_hero.jpg)
The controller is designed to be used with a domain-specific carrier board in order to reduce the wiring, improve reliability, and ease of assembly.
For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could include ESCs for the frame of the vehicle.
For example, a carrier board for a commercial inspection vehicle might include connections for a companion computer, while a carrier board for a racer could includes ESCs for the frame of the vehicle.
Cube includes vibration isolation on two of the IMU's, with a third fixed IMU as a reference / backup.
::: tip
:::tip
The manufacturer [Cube User Guide](https://docs.cubepilot.org/user-guides/autopilot/the-cube) contains detailed information, including an overview of the [Differences between Cube Colours](https://docs.cubepilot.org/user-guides/autopilot/the-cube/introduction/specifications).
:::
::: info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Key Features
- 32bit STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7), 400 MHz, Flash 2MB, RAM 512 KB).
@@ -36,7 +32,9 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- High-power, multi-tone piezo audio indicator
- microSD card for high-rate logging over extended periods of time
## Where to Buy {#store}
<a id="stores"></a>
## Where to Buy
- [Reseller list](https://www.cubepilot.com/#/reseller/list)
@@ -49,7 +47,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- **Processor:**
- STM32F777VI (32bit [ARM Cortex M7](https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M7))
- 400 MHz
- 512 KB RAM
- 512 KB MB RAM
- 2 MB Flash
- **Failsafe co-processor:** <!-- inconsistent info on failsafe processor: 32 bit STM32F103 failsafe co-processor -->
- STM32F100 (32bit _ARM Cortex-M3_)
@@ -123,14 +121,14 @@ Board schematics and other documentation can be found here: [The Cube Project](h
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make cubepilot_cubeyellow
```
+8 -6
View File
@@ -1,6 +1,6 @@
# Holybro Durandal
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -19,7 +19,7 @@ At high level, some of the key features are:
- Internal vibration isolation system.
- Dual high-performance, low-noise IMUs on board are designed for demanding stabilization applications.
A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#store) links can be found below.
A summary of the key features, [assembly](../assembly/quick_start_durandal.md), and [purchase](#purchase) links can be found below.
::: info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
@@ -86,7 +86,9 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
For more information see: [Durandal Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Durandal_technical_data_sheet_90f8875d-8035-4632-a936-a0d178062077.pdf).
## Where to Buy {#store}
<a id="purchase"></a>
## Where to Buy
Order from [Holybro](https://holybro.com/products/durandal).
@@ -153,14 +155,14 @@ The [Durandal Wiring Quick Start](../assembly/quick_start_durandal.md) provides
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make holybro_durandal-v1_default
```
@@ -370,7 +372,7 @@ These can also be downloaded from [here](https://cdn.shopifycdn.net/s/files/1/06
<a id="warn_sensor"></a>
::: warning
:::warning
\++ Sensors connected to pins 8, 9 must not send a signal exceeding the indicated voltage.
:::
@@ -1,6 +1,6 @@
# Gear Up AirBrainH743
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://takeyourgear.com/) for hardware support.
:::
@@ -31,7 +31,7 @@ For more information and pinout, check the [GitHub documentation](https://github
## Connectors and Pins
::: warning
:::warning
The pin order is different from the Pixhawk standard (compatible to the Betaflight standard).
:::
@@ -74,7 +74,7 @@ Download the [gearup_airbrainh743_bootloader.bin](https://github.com/PX4/PX4-Aut
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make gearup_airbrainh743_default
```
@@ -84,7 +84,7 @@ Firmware can be installed in any of the normal ways:
- Build and upload the source:
```sh
```
make gearup_airbrainh743_default upload
```
+5 -5
View File
@@ -2,7 +2,7 @@
<Badge type="info" text="Discontinued" />
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -15,7 +15,7 @@ It runs the PX4 flight stack on the [NuttX](https://nuttx.apache.org/) OS.
As a CC-BY-SA 3.0 licensed Open Hardware design, schematics and design files should be [available here](https://github.com/pixhawk/Hardware).
::: tip
:::tip
The Holybro pix32 is software compatible with the [3DR Pixhawk 1](../flight_controller/pixhawk.md).
It is not connector compatible, but is otherwise physically very similar to the 3DR Pixhawk or mRo Pixhawk.
:::
@@ -56,7 +56,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- External microUSB port
- Molex PicoBlade connectors
## Where to Buy {#store}
## Where to Buy
[shop.holybro.com](https://holybro.com/products/pix32pixhawk-flight-controller)
@@ -67,14 +67,14 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v2_default
```
@@ -1,6 +1,6 @@
# Holybro Pix32 v5
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -71,7 +71,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
Additional information can be found in the [Pix32 V5 Technical Data Sheet](https://cdn.shopify.com/s/files/1/0604/5905/7341/files/Holybro_PIX32-V5_technical_data_sheet_v1.1.pdf).
## Where to Buy {#store}
## Where to Buy
Order from [Holybro website](https://holybro.com/products/pix32-v5).
@@ -118,14 +118,14 @@ Under these conditions the system will not draw any power (will not be operation
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make holybro_pix32v5_default
```
@@ -1,6 +1,6 @@
# Holybro Pix32 v6
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -12,7 +12,7 @@ It is equipped with a high performance H7 Processor, and comes with IMU redundan
<img src="../../assets/flight_controller/pix32v6/pix32v6_fc_only.png" width="550px" title="pix32v6 Upright Image" />
<!--
::: tip
:::tip
This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams.
:::
-->
@@ -85,7 +85,7 @@ This flight controller is perfect for people that is looking for a affordable an
- Other Characteristics:
- Operating & storage temperature: -40 ~ 85°c
## Where to Buy {#store}
## Where to Buy
Order from [Holybro](https://holybro.com/products/pix32-v6).
@@ -141,18 +141,20 @@ Holybro makes various analog [power modules](../power_module/index.md) for diffe
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v6c_default
```
## Debug Port {#debug_port}
<a id="debug_port"></a>
## Debug Port
The [PX4 System Console](../debug/system_console.md) and [SWD interface](../debug/swd_debug.md) run on the **FMU Debug** port.
+6 -6
View File
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" />
::: warning
:::warning
This frame has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -34,13 +34,13 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- 6 PWM outputs
- Built-in OSD chip (AB7456 via SPI)
## Where to Buy {#store}
## Where to Buy
The board can be bought from one of the following shops (for example):
- [getfpv](https://www.getfpv.com/holybro-kakute-f7-tekko32-f3-metal-65a-4-in-1-esc-combo.html)
::: tip
:::tip
The _Kakute F7_ is designed to work with the _Tekko32_ 4-in-1 ESC and they can be bought in combination.
:::
@@ -84,7 +84,7 @@ Download the [kakutef7_bl.hex](https://github.com/PX4/PX4-Autopilot/raw/main/doc
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make holybro_kakutef7_default
```
@@ -93,7 +93,7 @@ make holybro_kakutef7_default
The firmware can be installed in any of the normal ways:
- Build and upload the source
```sh
```
make holybro_kakutef7_default upload
```
- [Load the firmware](../config/firmware.md) using _QGroundControl_.
+4 -4
View File
@@ -2,7 +2,7 @@
<Badge type="tip" text="PX4 v1.16" />
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -13,7 +13,7 @@ The [Holybro Kakute H743 Wing](https://holybro.com/products/kakute-h743-wing) is
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## Where to Buy {#store}
## Where to Buy
The board can be bought from one of the following shops (for example):
@@ -43,7 +43,7 @@ Download the [holybro_kakuteh7-wing.hex](https://github.com/PX4/PX4-Autopilot/ra
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make holybro_kakuteh7-wing_default
```
@@ -58,7 +58,7 @@ Firmware can be manually installed in any of the normal ways:
- Build and upload the source:
```sh
```
make holybro_kakuteh7-wing_default upload
```
+4 -4
View File
@@ -2,7 +2,7 @@
<Badge type="tip" text="PX4 v1.13" />
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -36,13 +36,13 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Dimensions: 35x35mm
- Weight: 8g
## Where to Buy {#store}
## Where to Buy
The board can be bought from one of the following shops (for example):
- [Holybro](https://holybro.com/products/kakute-h7)
::: tip
:::tip
The _Kakute H7_ is designed to work with the _Tekko32_ 4-in-1 ESC and they can be bought in combination.
:::
@@ -102,7 +102,7 @@ The firmware can be installed in any of the normal ways:
You can use either pre-built firmware or your own custom firmware.
::: info
If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7.
If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7.
:::
## PX4 Configuration
+5 -5
View File
@@ -2,7 +2,7 @@
<Badge type="tip" text="PX4 v1.13" />
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -40,7 +40,7 @@ PX4 runs on the H7 mini v1.3 and later.
- Dimensions: 30x31x6mm
- Weight: 5.5g
## Where to Buy {#store}
## Where to Buy
The board can be bought from one of the following shops (for example):
@@ -86,14 +86,14 @@ Download the [holybro_kakuteh7mini_bootloader.hex](https://github.com/PX4/PX4-Au
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make holybro_kakuteh7mini_default
```
## Installing PX4 Firmware
::: info
If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7.
If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7.
Prior to that release you will need to manually build and install the firmware.
:::
@@ -101,7 +101,7 @@ Firmware can be manually installed in any of the normal ways:
- Build and upload the source:
```sh
```
make holybro_kakuteh7mini_default upload
```
+6 -6
View File
@@ -1,6 +1,6 @@
# Holybro Kakute H7 V2
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -36,13 +36,13 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Dimensions: 35x35mm
- Weight: 8g
## Where to Buy {#store}
## Where to Buy
The board can be bought from one of the following shops (for example):
- [Holybro](https://holybro.com/products/kakute-h7-v2)
::: tip
:::tip
The _Kakute H7v2_ is designed to work with the _Tekko32_ 4-in-1 ESC and they can be bought in combination.
:::
@@ -83,14 +83,14 @@ Download the [holybro_kakuteh7v2_bootloader.hex](https://github.com/PX4/PX4-Auto
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make holybro_kakuteh7v2_default
```
## Installing PX4 Firmware
::: info
KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundControl, you must use QGC Daily or QGC version newer than 4.1.7.
KakuteH7v2 is supported with PX4 master & PX4 v1.14 or newer. If you are loading the pre-built firmware via QGroundcontrol, you must use QGC Daily or QGC version newer than 4.1.7.
Prior to that release you will need to manually build and install the firmware.
:::
@@ -98,7 +98,7 @@ Firmware can be manually installed in any of the normal ways:
- Build and upload the source:
```sh
```
make holybro_kakuteh7v2_default upload
```
+5 -5
View File
@@ -2,7 +2,7 @@
<Badge type="tip" text="PX4 v1.17" />
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://micoair.com/) for hardware support or compliance issues.
:::
@@ -12,7 +12,7 @@ MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbe
![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png)
Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size).
When paired with Bluetooth telemetry, the board can be debugged with a phone or PC.
When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC.
::: info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
@@ -67,7 +67,7 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png)
## Where to Buy {#store}
## Where to Buy
Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/).
@@ -85,12 +85,12 @@ Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw
| UART4 | /dev/ttyS3 | TELEM2 |
| UART5 | /dev/ttyS4 | TELEM3 |
| USART6 | /dev/ttyS5 | RC |
| UART7 | /dev/ttyS6 | UART6 |
| UART7 | /dev/ttyS6 | URT6 |
| UART8 | /dev/ttyS7 | TELEM4 |
## Interfaces Diagram
::: info
::: note
All the connectors used on the board are SH1.0
:::
+6 -6
View File
@@ -1,6 +1,6 @@
# MindPX Hardware
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](http://mindpx.net) for hardware support or compliance issues.
:::
@@ -19,7 +19,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
The main hardware documentation is [here](http://mindpx.net/assets/accessories/Specification9.18_3_pdf.pdf).
:::
MindPX is a new generation autopilot system branched from Pixhawk<sup>&reg;</sup>, has been revised in schematic and structure, and has been further enhanced with new features to make unmanned vehicle more smart and more friendly to use.
MindPX is a new generation autopilot system branched from Pixhawk<sup>&reg;</sup>, been revised in schematic and structure, and been further enhanced with new features to make un-manned vehicle more smart and more friendly to use.
MindPX increases total PWM output channels to 16 (8 main outputs + 8 aux outputs).
This means that MindPX can support more complicated VTOL configurations and more fine control.
@@ -79,14 +79,14 @@ For detailed Pin diagram, please refer to the [User Guide](http://mindpx.net/ass
### Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make airmind_mindpx-v2_default
```
@@ -96,7 +96,7 @@ MindPX has a USB-TO-UART Bridge IC on the board.
A micro-USB to USB type A cable is used for the connection.
Connect micro-USB end to the 'OBC' port of MindPX and USB type A end to companion computer.
And the max BAUD rate is the same as for the PX4 family, which is up to 921600.
And the max BAUD rate is the same with px4 family, which is up to 921600.
## User Guide
@@ -104,7 +104,7 @@ And the max BAUD rate is the same as for the PX4 family, which is up to 921600.
The user guide is [here](http://mindpx.net/assets/accessories/UserGuide9.18_2_pdf.pdf).
:::
## Where to Buy {#store}
## Where to Buy
MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog).
You can also find MindRacer at Amazon<sup>&reg;</sup> or eBay<sup>&reg;</sup>.
+5 -5
View File
@@ -1,6 +1,6 @@
# MindRacer Hardware
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](http://mindpx.net) for hardware support or compliance issues.
:::
@@ -59,14 +59,14 @@ The main hardware documentation is [here](http://mindpx.net/assets/accessories/m
### How to Build
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make airmind_mindpx-v2_default
```
@@ -79,7 +79,7 @@ MindRacer has an attached Adapt IO board.
MindRacer has a built-in UART-to-USB converter.
To connect a companion computer, stack MindRacer on an interface board, and connect the companion computer to the USB port on the interface board.
And the max BAUD rate is the same as for the PX4 family, which is up to 921600.
And the max BAUD rate is the same with px4 family, which is up to 921600.
### User Guide
@@ -87,7 +87,7 @@ And the max BAUD rate is the same as for the PX4 family, which is up to 921600.
The user guide is [here](http://mindpx.net/assets/accessories/mindracer_user_guide_v1.2.pdf)
:::
## Where to Buy {#store}
## Where to Buy
MindRacer is available at [AirMind Store](https://airmind.mindpx.net/catalog).
You can also find MindRacer at Amazon<sup>&reg;</sup> or eBay<sup>&reg;</sup>.
+4 -4
View File
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" /> <Badge type="tip" text="PX4 v1.11" />
::: warning
:::warning
This frame has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues.
:::
@@ -77,7 +77,7 @@ More information about the firmware can be found [here](https://docs.modalai.com
## QGroundControl Support
This board is supported in QGroundControl 4.0 and later.
This board supported in QGroundControl 4.0 and later.
## Availability
@@ -122,7 +122,7 @@ The full user guide is available [here](https://docs.modalai.com/flight-core-man
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make modalai_fc-v1
```
+2 -2
View File
@@ -1,6 +1,6 @@
# ModalAI VOXL 2
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues.
:::
@@ -70,7 +70,7 @@ PX4 mainline supports VOXL 2 (board documentation [here](https://github.com/PX4/
## QGroundControl Support
This board is supported in QGroundControl 4.0 and later.
This board supported in QGroundControl 4.0 and later.
## Availability
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" /> <Badge type="tip" text="PX4 v1.11" />
::: warning
:::warning
This frame has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://forum.modalai.com/) for hardware support or compliance issues.
:::
@@ -106,7 +106,7 @@ More information about the firmware can be found [here](https://docs.modalai.com
## QGroundControl Support
This board is supported in QGroundControl 4.0 and later.
This board supported in QGroundControl 4.0 and later.
## Availability
@@ -176,7 +176,7 @@ The full user guide is available [here](https://docs.modalai.com/voxl-flight-qui
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make modalai_fc-v1
```
@@ -1,6 +1,6 @@
# mRo Control Zero F7 Flight Controller
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues.
:::
@@ -56,20 +56,20 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Power System:
- 3x Ultra low noise LDO voltage regulator
## Where to Buy {#store}
## Where to Buy
- [mRo Control Zero](https://store.mrobotics.io/mRo-Control-Zero-F7-p/mro-ctrl-zero-f7.htm)
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make mro_ctrl-zero-f7
```
+5 -5
View File
@@ -1,13 +1,13 @@
# mRo Pixhawk Flight Controller (Pixhawk 1)
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues.
:::
The _mRo Pixhawk<sup>&reg;</sup>_ is a hardware compatible version of the original [Pixhawk 1](../flight_controller/pixhawk.md). It runs PX4 on the [NuttX](https://nuttx.apache.org/) OS.
::: tip
:::tip
The controller can be used as a drop-in replacement for the 3DR<sup>&reg;</sup> [Pixhawk 1](../flight_controller/pixhawk.md).
The main difference is that it is based on the [Pixhawk-project](https://pixhawk.org/) **FMUv3** open hardware design, which corrects a bug that limited the original Pixhawk 1 to 1MB of flash.
:::
@@ -16,7 +16,7 @@ The main difference is that it is based on the [Pixhawk-project](https://pixhawk
Assembly/setup instructions for use with PX4 are provided here: [Pixhawk Wiring Quickstart](../assembly/quick_start_pixhawk.md)
::: tip
:::tip
This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams.
:::
@@ -62,14 +62,14 @@ This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v3_default
```
+4 -4
View File
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" /> <!-- 202507 / PX4v1.16 -->
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.mrobotics.io/) for hardware support or compliance issues.
:::
@@ -92,14 +92,14 @@ This product can be ordered at the [mRobotics<sup>&reg;</sup> Store](https://sto
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make mro_x21_default
```
@@ -2,7 +2,7 @@
<Badge type="tip" text="PX4 v1.15" />
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://www.nxp.com) for hardware support (https://community.nxp.com/) or compliance issues.
:::
@@ -23,7 +23,7 @@ It also removes the IO processor to enable 12 PWM ports, with 8 providing Dshot
This board takes advantage of multiple Pixhawk​® open standards, such as the FMUv6X-RT Standard, [Autopilot Bus Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf), and [Connector Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-009%20Pixhawk%20Connector%20Standard.pdf).
Equipped with a high performance NXP i.mx RT1176 dual core Processor, modular design, triple redundancy, temperature-controlled IMU board, isolated sensor domains, delivering incredible performance, reliability, and flexibility.
::: tip
:::tip
This autopilot is [supported](../flight_controller/autopilot_pixhawk_standard.md) by the PX4 maintenance and test teams.
:::
@@ -133,7 +133,7 @@ Similar variants will be available from our licensees.
- Other Characteristics:
- Operating & storage temperature: -40 ~ 85°c
## Where to Buy {#store}
## Where to Buy
Order from [NXP](https://www.nxp.com).
@@ -214,7 +214,7 @@ Analog battery monitoring via an ADC is not supported on this particular board,
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" />
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://www.nxp.com/) for hardware support or compliance issues.
:::
@@ -49,7 +49,7 @@ A "Lite" version RDDRONE-FMUK66L is also available which does not include the po
Additional information can be found in the [Technical Data Sheet](https://www.nxp.com/design/design-center/development-boards-and-designs/px4-robotic-drone-vehicle-flight-management-unit-vmu-fmu-rddrone-fmuk66:RDDRONE-FMUK66). <!-- www.nxp.com/rddrone-fmuk66 -->
## Where to Buy {#store}
## Where to Buy
**RDDRONE-FMUK66** reference design kit may be purchased direct from NXP or from any of NXP's authorised worldwide network of [electronics distributors](https://www.nxp.com/support/sample-and-buy/distributor-network:DISTRIBUTORS).
@@ -83,14 +83,14 @@ https://nxp.gitbook.io/hovergames
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make nxp_fmuk66-v3_default
```
@@ -117,7 +117,7 @@ The complete set of supported configurations can be seen in the [Airframes Refer
![HoverGames Drone Kit](../../assets/flight_controller/nxp_rddrone_fmuk66/hovergames_drone_14042019_xl001.jpg)
::: tip
:::tip
The NXP [HoverGames Drone Kit](https://www.nxp.com/kit-hgdronek66) (shown above) is a complete drone development kit that includes everything needed to build a quadcopter.
You only need to supply the 3S/4S LiPo battery.
:::
+1 -1
View File
@@ -2,7 +2,7 @@
<Badge type="info" text="Discontinued" />
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
PX4 v1.11 is the last release that has (experimental) support for this platform.
+10 -10
View File
@@ -1,10 +1,10 @@
# Omnibus F4 SD
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the manufacturer for support or compliance issues.
:::
@@ -23,7 +23,7 @@ These are the main differences compared to a [Pixracer](../flight_controller/pix
- Same board dimensions as a _Pixracer_, but slightly smaller form factor (because it has less connectors)
- Integrated OSD (not yet implemented in software)
::: tip
:::tip
All the usual PX4 features can still be used for your racer!
:::
@@ -46,15 +46,15 @@ This flight controller is [manufacturer supported](../flight_controller/autopilo
- Built-in current sensor
- Built-in OSD chip (AB7456 via SPI)
## Where to Buy {#store}
## Where to Buy
The board is produced by different vendors, with some variations (e.g. with or without a barometer).
::: tip
:::tip
PX4 is compatible with boards that support the Betaflight OMNIBUSF4SD target (if _OMNIBUSF4SD_ is present on the product page the board should work with PX4).
:::
::: tip
:::tip
Any Omnibus F4 labeled derivative (e.g. clone) should work as well. However, power distribution on these boards is of varying quality.
:::
@@ -193,7 +193,7 @@ On the handheld controller (e.g. Taranis) you will also need a [Transmitter Modu
This can be plugged into the back of the RC controller.
::: info
The referenced links above contain the documentation for the TX/RX modules.
The referenced links above contains the documentation for the TX/RX modules.
:::
#### Setup
@@ -225,7 +225,7 @@ Download the [omnibusf4sd_bl.hex](https://github.com/PX4/PX4-Autopilot/raw/main/
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make omnibus_f4sd_default
```
@@ -233,7 +233,7 @@ make omnibus_f4sd_default
You can use either pre-built firmware or your own custom firmware.
::: warning
:::warning
If you use [CRSF Telemetry](../telemetry/crsf_telemetry.md#px4-configuration) in your radio system, as describe above, then you must use custom firmware.
:::
@@ -241,7 +241,7 @@ The firmware can be installed in any of the normal ways:
- Build and upload the source
```sh
```
make omnibus_f4sd_default upload
```
+4 -4
View File
@@ -2,11 +2,11 @@
<Badge type="info" text="Discontinued" px4_current="v1.15" year="2024"/>
::: warning
:::warning
This flight controller has been [discontinued](../flight_controller/autopilot_experimental.md) and is no longer commercially available.
:::
::: warning
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
@@ -47,14 +47,14 @@ Optional hardware:
## Building Firmware
::: tip
:::tip
Most users will not need to build this firmware!
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
```
make px4_fmu-v2_default
```

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