Compare commits

...

74 Commits

Author SHA1 Message Date
Hamish Willee 3328e80722 Minor restructure 2025-12-03 11:05:40 +11:00
Hamish Willee fa109297a6 Remove _sidebar.md update 2025-12-03 10:30:57 +11:00
copilot-swe-agent[bot] 456a4b905e Fix broken link to board support documentation
Co-authored-by: dakejahl <37091262+dakejahl@users.noreply.github.com>
2025-11-27 21:03:23 +00:00
copilot-swe-agent[bot] cdcdc7c441 Add comprehensive documentation for secure boot feature
Co-authored-by: dakejahl <37091262+dakejahl@users.noreply.github.com>
2025-11-27 20:55:58 +00:00
copilot-swe-agent[bot] eba51fffb4 Initial plan 2025-11-27 20:47:56 +00:00
bresch 4fbff2cdd9 fw gain compression: add docs 2025-11-27 17:33:06 +01:00
bresch 3646032296 fw rate: add gain compression algorithm 2025-11-27 17:33:06 +01:00
Matthias Grob f6de211a27 boards: skip resetting INA parameters to the same default value 2025-11-27 15:16:50 +01:00
Peter van der Perk 85916b8946 Update V6X-RT bootloader .bin file (#26007)
#25998 Addition required bin update
2025-11-27 08:59:21 -05:00
Mahima Yoga 8e8fd485b9 docs: add "first flight" docs for airspeed scale handling (#25987)
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
2025-11-27 10:51:54 +01:00
Hamish Willee 78ff7469ec Actuator page tweaks (#26004) 2025-11-27 17:33:03 +11:00
Mateusz Sadowski 7d034d6087 Add Foxglove to flight_log_analysis (#25990)
* Add Foxglove to flight_log_analysis

* shrink image

* Minor subedit

* Change scrub to seek in Foxglove description

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-11-27 17:10:40 +11:00
Tarmo Tänav ad38dba167 crsf_rc: fixed cmake directory conflict 2025-11-26 15:52:33 -09:00
Onur Özkan 8874d533bb add fast-path mavlink forwarding for single instance
Counts active mavlink instances atomically when instances
are claimed or released and uses that value to early-exit
the forwarding logic.

It means on single-instance scenarios this will skip taking
the mavlink_module_mutex lock and will not iterate over
mavlink_module_instances on every received message.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
2025-11-26 10:35:40 -09:00
Tarmo Tänav f29aa182a8 Add support for NXP i.MX RT1170B 2025-11-26 09:59:51 -09:00
Matthias Grob c8286d4bba Remove COM_RC_ARM_HYST
I've never anyone seen change that value and break the familiar user experience.
2025-11-26 09:58:19 -09:00
Nick 575fa0850b PWM: Add servo center setting & asymetric deflection (#25897)
Add PWM_*_CENTERx for each servo.
Use a bilinear transform to map actuator_servos to PWM signals.

This solution only works for PWM based servos. Other types of servos are not affected.

* PWM: Add servo trim option

* PWM: Improve documentation of PWM trim feature

* PWM: cleaner clamping and docs typo

* update documentation & safety

* add migration formula

* rename param from trim to center

* docs with center instead of trim

* move clamping and reorder values

* improve documentation

* adress failing range check

* improve documentation

* CA: add event for setting CENTER with TRIM

Signed-off-by: Silvan <silvan@auterion.com>

---------

Signed-off-by: Silvan <silvan@auterion.com>
Co-authored-by: Silvan <silvan@auterion.com>
2025-11-26 18:12:25 +01:00
Balduin 6caf4f0942 ekf2: fuse airspeed & beta only in fronttransition and fixed wing (#25980)
This allows airspeed and sideslip fusion to start during VTOL front
transition, but not in backtransition or MC. This mitigates issues seen
due to going in and out of airspeed fusion in strong headwinds in MC.

Co-authored-by: bresch <brescianimathieu@gmail.com>
2025-11-26 16:29:19 +01:00
Niklas Hauser 0ce60fd528 Revert "[crsf_rc] Allow setting the baudrate via parameter"
This reverts commit 7a9b04c67c.
2025-11-26 15:09:00 +01:00
Nick 93d767ab51 Airspeed Filter: add filter to airspeed for scaling (#25908) 2025-11-26 12:38:17 +01:00
Michael Schaeuble d97a8d7d3b mode: control auto set home from an external mode
The mode executor can run land mode which updates the home position to the landing location. This
can be not the desirable behavior and the home position should stay at the original location.

A flag is added to the configuration overrides to control if the home position is updated or not.
2025-11-26 10:16:54 +01:00
Michael Schaeuble a2299b02c8 modes: make available modes user selectable with a registration option
Some modes should only be run within the context of a mode executor and the user should not be able
to select them in the GCS. With this change, the external component registration request can be
used to set if a mode is selectable or not.
2025-11-26 10:04:53 +01:00
Julian Oes 276cab8d3c mavlink: don't silently ignore mavlink dev streams
I don't think it makes sense to ignore required streams that easily.

If we do use some streams that are only in the MAVLink development.xml
dialect, then we will have to properly and explicitly ifdef them
everywhere that we use them. Otherwise, this basically means that we
will just swallow this warning on most (non mavlink-dev) platforms which
can mask issues.
2025-11-26 09:51:15 +01:00
Balduin a6d5c78d10 Ignore max HAGL failsafe in front transition (#25982)
* mission_block: readibility improvement

* mission_block: ignore max hagl failsafe in front transition
2025-11-26 09:14:06 +01:00
mahima-yoga 7bb12b15b5 fw_att_ctrl: zero initialize all member variables 2025-11-25 21:19:36 -09:00
Hamish Willee 526c64aab7 COM_ARM_WO_GPS clarifications (#25954) 2025-11-26 15:28:33 +11:00
Hamish Willee 6eb2251ee5 docs: Update metadata (#25993) 2025-11-26 15:05:05 +11:00
Marco Hauswirth d9a66b11ac Docs: baro-auto-calibration and gnss-fault-detection (#25796) 2025-11-26 11:52:40 +11:00
Mahima Yoga a8c5df90ce fw-ctrl: advertise attitude_sp_pub in attitude and FwLateralLongitudinal controller (#25983) 2025-11-25 21:25:43 +01:00
Alexander Lerach 8dd88e036d gps: add init timeout to handle larger diff after configuration 2025-11-25 11:41:50 -05:00
Alexander Lerach c4a459838e gps: wipe FLASH config only once 2025-11-25 11:41:50 -05:00
Niklas Hauser 932abfd558 [auav] Robustify I2C transfers and enforce minimum sample time 2025-11-25 17:09:52 +01:00
Alexander Lerach bd3b3d647f drivers: PCA9685 robustness & logging improvements
Co-authored-by: Phil-Engljaehringer <philipp.engljahringer@auterion.com>
2025-11-25 10:42:48 -05:00
Alexander Lerach 14b38f2eba boards: free up FLASH in auterion v6s by disabling modules 2025-11-25 09:50:01 -05:00
Niklas Hauser bb72088ff6 [crsf_rc] Add ability to inject buffers for development 2025-11-25 13:15:44 +01:00
Niklas Hauser 1904838043 [crsf_rc] Extend the RC packet reception timeouts to 0.5s 2025-11-25 13:15:44 +01:00
Niklas Hauser 7a9b04c67c [crsf_rc] Allow setting the baudrate via parameter 2025-11-25 13:15:44 +01:00
Niklas Hauser a514560169 [crsf_rc] Add support for link statistic messages 2025-11-25 13:15:44 +01:00
Jacopo Panerati 6901bc6a01 VTOL Takeoff: Use VehicleCommand specified heading for VTOL transition (#24040)
* Use VehicleCommand heading for VTOL transition

* options for param2 of vehicle_cmd_nav_vtol_takeoff
2025-11-25 09:46:48 +01:00
Alexis Guijarro a6d9e114be Revert "3DR Control Zero H7 OEM RevG: MTD driver fix (#25015)"
This reverts commit 26499b3c8b.
2025-11-24 10:37:45 -09:00
Alexis Guijarro 5f7e395609 NuttX: Add support for FM25V02A-DGQ 2025-11-24 10:37:45 -09:00
Peter van der Perk 921e91863a dshot: IMXRT BDSHOT baud training
AM32 bdshot doesn't do clock compensation like BLHeli32 did.
Instead we traing BDSHOT timing on known zero value to lock on
best bdshot baudrate to receive.

Reduces CRC and frame errors on AM32 a lot
2025-11-24 09:24:49 -09:00
Edvard Sire 585a615e64 Fix typo in OS version field name 2025-11-24 09:23:17 -09:00
bresch 45e8712d60 VectorNav: set global position validity 2025-11-24 12:00:55 +01:00
Phil-Engljaehringer 0cefd74fee drivers: add perf counters and documentation to ads7953 2025-11-24 11:06:56 +01:00
PX4 Build Bot 7d8e79c49d New Crowdin translations - ko (#25963)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-24 07:27:59 +11:00
PX4 Build Bot faedf252b3 New Crowdin translations - zh-CN (#25965)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-24 07:21:18 +11:00
PX4 Build Bot 7f8d2b5067 New Crowdin translations - uk (#25964)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-24 07:21:00 +11:00
Peter van der Perk 4498475515 fmu-v6x: zenoh config set CONSTRAINED_FLASH
Fixes flash overflow with zenoh target on fmu-v6x
2025-11-21 10:10:32 -09:00
Peter van der Perk b8974cb77b Zenoh: Improve out-of-memory behaviour
Abort publication immediately when not enough memory is available.
Zero _zenoh_publishers and _zenoh_subscribers to ensure we're not
dereferencing a wrong pointer
2025-11-21 10:10:32 -09:00
Peter van der Perk 042a251542 Zenoh: Update zenoh-pico library 2025-11-21 10:10:32 -09:00
Julian Oes ff06a206d1 mavsdk_tests: bump version to 3.11.1
This should now include the figure eight messages.
2025-11-20 23:23:40 -09:00
Julian Oes 46ed71fa5b mavsdk_tests: figure eight is in common now 2025-11-20 23:23:40 -09:00
Julian Oes 2ef2580388 Gazebo-classic: add define for development.xml
And update submodule.
2025-11-20 23:23:40 -09:00
Julian Oes c89667d911 boards: add MAVLink development targets
These targets can be used to test MAVLink messages in the
development.xml dialect.
2025-11-20 23:23:40 -09:00
Julian Oes fa7ffa423c boards: remove MAVLink development dialect
We should not build and release with the MAVLink development dialect
because messages in development.xml can change at any time and break
things.

Instead we should prototype and test things using specific mavlink-dev
targets.
2025-11-20 23:23:40 -09:00
Julian Oes 8f3442b358 mavlink: update submodule 2025-11-20 23:23:40 -09:00
Niklas Hauser 17f3db9231 [serial] Fix byte size, flow control, parity, stop bits configuration 2025-11-20 10:29:57 -09:00
Henry Kotzé 25138d0a12 MavlinkTimeSync: Specify compid & Sysid (#25949)
Co-authored-by: henrykotze <henry@autonosky.com>
Co-authored-by: Beniamino Pozzan <beniamino.pozzan@gmail.com>
2025-11-20 12:43:46 +00:00
DrinkingHook 70f32f4631 Clean up duplicate assignments in flight_mode_manager-task-auto 2025-11-19 20:44:22 -09:00
Ramon Roche e74e1bb32a github: Update pull request template for clarity
Removed outdated sections and streamlined the pull request template.
2025-11-19 10:26:35 -09:00
Jacob Dahl 5c469a36b8 drivers: bootloaders: specify UAVCAN only in KConfig (#25947) 2025-11-19 13:58:58 -05:00
Jacob Dahl efbc9e64a4 mavlink: esc: fix ESC_STATUS and ESC_INFO message emission. (#25849)
* mavlink: esc: fix ESC_STATUS and ESC_INFO message emission.

Fixes mavlink messages emission for ESC messages. Actuator --> MotorNumber mapping was not respected, the mavlink messages should be reporting the ESC status in motor number order not actuator order.

* Update src/modules/mavlink/streams/ESC_STATUS.hpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/modules/mavlink/streams/ESC_INFO.hpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* remove dependency on mixer_module/output_functions.hpp

* add actuator function definitions to EscReport.msg

* clean up

* add missing header

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-20 06:51:42 +13:00
Alexander Lerach 229b53d25d uavcannode: fix compile error in BatteryInfo.hpp (#25944) 2025-11-19 16:23:25 +01:00
dirksavage88 e0137fe7a7 add back linux pwm to bbblue
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
2025-11-18 20:25:58 -09:00
Ryan Johnston 072eeb4617 Add GNSS position fusion details to documentation (#25900) 2025-11-19 16:23:48 +11:00
PX4 Build Bot 9c850b1594 New Crowdin translations - zh-CN (#25890)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-19 15:56:43 +11:00
PX4 Build Bot ad2279adb5 New Crowdin translations - ko (#25888)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-19 15:56:28 +11:00
PX4 Build Bot e54d1fd114 New Crowdin translations - uk (#25889)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-19 15:56:20 +11:00
Ahmed Osman d0009c2af8 Add log.h include to hello_sky.md 2025-11-18 19:48:23 -09:00
Tharnath 06d73b3758 Docs: Review Changes 2025-11-18 19:36:11 -09:00
Tharnath 8fe24d8884 Doc: Add pixhawk version comparison table.
Added a table to compare V6X-RT, V6X, V6C standards.
2025-11-18 19:36:11 -09:00
Beniamino Pozzan ffc184fcf7 [uxrce_dds_client] Allow for arbitrary topic instances to be bridged (#22350)
Signed-off-by: Beniamino Pozzan <beniamino.pozzan@gmail.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
2025-11-18 23:24:35 +00:00
Phil-Engljaehringer 8a2239f3e8 drivers: Add TLA2528 ADC driver (#25898)
* tla2528 basic implementation (restarting driver still fails)

* fixed probe function, restarting driver now works

* -added reset call to init
-added return value checks on all important transfers and retry if failed when possible
-removed comments
-removed unnecessary parameters of module

* Introduced initialization-states that can be executed multiple times on failure

* Added one more state s.t. init() only does probing

* added communication error count _comms_errors

* use get() instead of param_find

* changed scheduling interval

* start in reset state. check second byte in probe. add 2 retries to probe function

* add space in front of comments

* jump to reset state when another state fails

* changed SAMPLE_INTERVAL to 10_ms

* added static assert on number of channels in adc_report
2025-11-18 17:30:34 +01:00
324 changed files with 5095 additions and 1516 deletions
+2 -16
View File
@@ -1,22 +1,9 @@
<!--
Thank you for your contribution!
Get early feedback through
- Dronecode Discord: https://discord.gg/dronecode
- PX4 Discuss: http://discuss.px4.io/
- opening a draft pr and sharing the link
-->
### Solved Problem
When ... I found that ...
Fixes #{Github issue ID}
### Solution
- Add ... for ...
- Refactor ...
### Changelog Entry
For release notes:
@@ -27,11 +14,10 @@ Documentation: Need to clarify page ... / done, read docs.px4.io/...
```
### Alternatives
We could also ...
### Test coverage
- Unit/integration test: ...
- Simulation/hardware testing logs: https://review.px4.io/
### Context
Related links, screenshot before/after, video
-->
+6
View File
@@ -231,6 +231,12 @@ then
ads7953 start -S
fi
# ADC sensor tla2528 external I2C
if param compare -s ADC_TLA2528_EN 1
then
tla2528 start -X
fi
# probe for optional external I2C devices
if param compare SENS_EXT_I2C_PRB 1
then
@@ -238,6 +238,7 @@ def get_actuator_output(yaml_config, output_functions, timer_config_file, verbos
( 'disarmed', 'Disarmed', 'DIS', False ),
( 'min', 'Minimum', 'MIN', False ),
( 'max', 'Maximum', 'MAX', False ),
( 'center', 'Center\n(for Servos)', 'CENT', False ),
( 'failsafe', 'Failsafe', 'FAIL', True ),
]
for key, label, param_suffix, advanced in standard_params_array:
+8
View File
@@ -284,6 +284,9 @@ Note that non-motor outputs might already be active in prearm state if COM_PREAR
'''
minimum_description = \
'''Minimum output value (when not disarmed).
'''
center_description = \
'''Servo Center output value (when not disarmed).
'''
maximum_description = \
'''Maxmimum output value (when not disarmed).
@@ -296,6 +299,7 @@ When set to -1 (default), the value depends on the function (see {:}).
standard_params_array = [
( 'disarmed', 'Disarmed', 'DIS', disarmed_description ),
( 'min', 'Minimum', 'MIN', minimum_description ),
( 'center', 'Center', 'CENT', center_description ),
( 'max', 'Maximum', 'MAX', maximum_description ),
( 'failsafe', 'Failsafe', 'FAIL', failsafe_description ),
]
@@ -312,6 +316,10 @@ When set to -1 (default), the value depends on the function (see {:}).
standard_params[key]['default'] = -1
standard_params[key]['min'] = -1
if key == 'center':
standard_params[key]['default'] = -1
standard_params[key]['min'] = -1
param = {
'description': {
'short': channel_label+' ${i} '+label+' Value',
@@ -132,7 +132,6 @@ ENTRY(_stext)
*/
EXTERN(abort)
EXTERN(_bootdelay_signature)
EXTERN(board_get_manifest)
SECTIONS
{
@@ -48,7 +48,6 @@ else()
i2c.cpp
init.c
led.c
mtd.cpp
spi.cpp
timer_config.cpp
usb.c
@@ -67,7 +67,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -3,19 +3,13 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set - default SENS_EN_INA238 0
param set - default SENS_EN_INA228 0
param set - default SENS_EN_INA226 0
# Mavlink ethernet (CFG 1000)
param set - default MAV_2_CONFIG 1000
param set - default MAV_2_BROADCAST 1
param set - default MAV_2_MODE 0
param set - default MAV_2_RADIO_CTL 0
param set - default MAV_2_RATE 100000
param set - default MAV_2_REMOTE_PRT 14550
param set - default MAV_2_UDP_PRT 14550
param set-default MAV_2_CONFIG 1000
param set-default MAV_2_BROADCAST 1
param set-default MAV_2_MODE 0
param set-default MAV_2_RADIO_CTL 0
param set-default MAV_2_RATE 100000
param set-default MAV_2_REMOTE_PRT 14550
param set-default MAV_2_UDP_PRT 14550
safety_button start
-1
View File
@@ -72,7 +72,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -14,10 +14,7 @@ param set-default MAV_2_RATE 100000
param set-default MAV_2_REMOTE_PRT 14550
param set-default MAV_2_UDP_PRT 14550
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 1
param set-default SENS_EN_THERMAL 1
param set-default SENS_IMU_MODE 1
param set-default SENS_IMU_TEMP 10.0
-1
View File
@@ -50,7 +50,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
-1
View File
@@ -41,7 +41,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
-4
View File
@@ -58,7 +58,6 @@ CONFIG_LOGGER_STACK_SIZE=4100
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -78,9 +77,7 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=y
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y
CONFIG_SYSTEMCMDS_BSONDUMP=y
CONFIG_SYSTEMCMDS_DMESG=y
CONFIG_SYSTEMCMDS_GPIO=y
CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y
CONFIG_SYSTEMCMDS_I2C_LAUNCHER=y
CONFIG_SYSTEMCMDS_I2CDETECT=y
CONFIG_SYSTEMCMDS_LED_CONTROL=y
CONFIG_SYSTEMCMDS_MFT=y
@@ -92,7 +89,6 @@ CONFIG_SYSTEMCMDS_PARAM=y
CONFIG_SYSTEMCMDS_PERF=y
CONFIG_SYSTEMCMDS_REBOOT=y
CONFIG_SYSTEMCMDS_SD_BENCH=y
CONFIG_SYSTEMCMDS_SD_STRESS=y
CONFIG_SYSTEMCMDS_SERIAL_TEST=y
CONFIG_SYSTEMCMDS_SYSTEM_TIME=y
CONFIG_SYSTEMCMDS_TOP=y
@@ -3,12 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA226 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA238 0
# Set the backend of the dataman to SRAM
param set-default SYS_DM_BACKEND 1
# Set TELEM1 as default mavlink connection
@@ -3,12 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
# Skynode: use the "custom participant", IP=10.41.10.1 config for uxrce_dds_client
param set-default UXRCE_DDS_PTCFG 2
param set-default UXRCE_DDS_AG_IP 170461697
+2 -1
View File
@@ -14,6 +14,7 @@ CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_ANALOG_DEVICES_ADIS16448=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y
CONFIG_DRIVERS_IMU_INVENSENSE_MPU9250=y
CONFIG_DRIVERS_LINUX_PWM_OUT=y
CONFIG_DRIVERS_MAGNETOMETER_HMC5883=y
CONFIG_DRIVERS_RC_INPUT=y
CONFIG_DRIVERS_SMART_BATTERY_BATMON=y
@@ -30,8 +31,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
-1
View File
@@ -61,7 +61,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -3,13 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
# Mavlink ethernet (CFG 1000)
param set-default MAV_2_CONFIG 1000
param set-default MAV_2_BROADCAST 1
@@ -15,10 +15,6 @@ param set-default MAV_2_UDP_PRT 14550
param set-default BAT1_V_DIV 18
param set-default BAT1_A_PER_V 24
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
param set-default USB_MAV_MODE 5
param set-default UAVCAN_SUB_GPS 1
@@ -12,10 +12,6 @@ param set-default MAV_2_RATE 100000
param set-default MAV_2_REMOTE_PRT 14550
param set-default MAV_2_UDP_PRT 14550
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
param set-default RC_CRSF_PRT_CFG 300
param set-default RC_CRSF_TEL_EN 1
param set-default RC_SBUS_PRT_CFG 0
@@ -12,10 +12,6 @@ param set-default MAV_2_RATE 100000
param set-default MAV_2_REMOTE_PRT 14550
param set-default MAV_2_UDP_PRT 14550
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
param set-default BAT1_V_DIV 18.000000000
param set-default BAT1_A_PER_V 38.462030303
-1
View File
@@ -74,7 +74,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -3,10 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
if ver hwbasecmp 008 009 00a 010 011
then
# Skynode: use the "custom participant", IP=10.41.10.1 config for uxrce_dds_client
-1
View File
@@ -71,7 +71,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -3,12 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
# Mavlink ethernet (CFG 1000)
param set-default MAV_2_CONFIG 1000
param set-default MAV_2_BROADCAST 1
+1
View File
@@ -0,0 +1 @@
CONFIG_MAVLINK_DIALECT="development"
+1
View File
@@ -1,4 +1,5 @@
# CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE is not set
CONFIG_DRIVERS_UAVCAN=n
CONFIG_MODULES_UXRCE_DDS_CLIENT=n
CONFIG_BOARD_CONSTRAINED_FLASH=y
CONFIG_MODULES_ZENOH=y
@@ -12,12 +12,6 @@ param set-default MAV_2_RATE 100000
param set-default MAV_2_REMOTE_PRT 14550
param set-default MAV_2_UDP_PRT 14550
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
safety_button start
if param greater -s UAVCAN_ENABLE 0
-1
View File
@@ -35,7 +35,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
+1
View File
@@ -0,0 +1 @@
CONFIG_MAVLINK_DIALECT="development"
-1
View File
@@ -34,7 +34,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
-1
View File
@@ -63,7 +63,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
@@ -3,12 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
# Mavlink ethernet (CFG 1000)
param set-default MAV_2_CONFIG 1000
param set-default MAV_2_BROADCAST 1
-1
View File
@@ -61,7 +61,6 @@ CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MAVLINK_DIALECT="development"
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
-6
View File
@@ -3,12 +3,6 @@
# board specific defaults
#------------------------------------------------------------------------------
# By disabling all 3 INA modules, we use the
# i2c_launcher instead.
param set-default SENS_EN_INA238 0
param set-default SENS_EN_INA228 0
param set-default SENS_EN_INA226 0
if ver hwbasecmp 009 010 011
then
# Skynode: use the "custom participant", IP=10.41.10.1 config for uxrce_dds_client
@@ -325,7 +325,6 @@
1 1 COM_PREARM_MODE 0 6
1 1 COM_QC_ACT 0 6
1 1 COM_RCL_EXCEPT 0 6
1 1 COM_RC_ARM_HYST 1000 6
1 1 COM_RC_IN_MODE 3 6
1 1 COM_RC_LOSS_T 0.500000000000000000 9
1 1 COM_RC_OVERRIDE 1 6
Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

+6 -2
View File
@@ -56,11 +56,14 @@
- [DJI F450 (CUAV v5 nano)](frames_multicopter/dji_f450_cuav_5nano.md)
- [Planes (Fixed-Wing)](frames_plane/index.md)
- [Features](features_fw/index.md)
- [Gain compression](features_fw/gain_compression.md)
- [Assembly](assembly/assembly_fw.md)
- [Config/Tuning](config_fw/index.md)
- [Auto-tune](config/autotune_fw.md)
- [Rate/Attitude Controller Tuning Guide](config_fw/pid_tuning_guide_fixedwing.md)
- [Altitude/Position Controller Tuning Guide](config_fw/position_tuning_guide_fixedwing.md)
- [Airspeed Scale Estimate Handling](config_fw/airspeed_scale_handling.md)
- [Weight & Altitude Tuning](config_fw/weight_and_altitude_tuning.md)
- [Trimming Guide](config_fw/trimming_guide_fixedwing.md)
- [Flying (Basics)](flying/basic_flying_fw.md)
@@ -225,6 +228,7 @@
- [Bootloader Update](advanced_config/bootloader_update.md)
- [Bootloader Update FMUv6X-RT via USB](advanced_config/bootloader_update_v6xrt.md)
- [Bootloader Flashing onto Betaflight Systems](advanced_config/bootloader_update_from_betaflight.md)
- [Secure Boot and Firmware Signature Verification](advanced_config/bootloader_secure_boot.md)
- [Airframe Selection](config/airframe.md)
- [Sensors](sensor/index.md)
- [Accelerometer](sensor/accelerometer.md)
@@ -672,8 +676,6 @@
- [RoverSpeedStatus](msg_docs/RoverSpeedStatus.md)
- [RoverSteeringSetpoint](msg_docs/RoverSteeringSetpoint.md)
- [RoverThrottleSetpoint](msg_docs/RoverThrottleSetpoint.md)
- [RoverVelocitySetpoint](msg_docs/RoverVelocitySetpoint.md)
- [RoverVelocityStatus](msg_docs/RoverVelocityStatus.md)
- [Rpm](msg_docs/Rpm.md)
- [RtlStatus](msg_docs/RtlStatus.md)
- [RtlTimeEstimate](msg_docs/RtlTimeEstimate.md)
@@ -695,6 +697,7 @@
- [SensorOpticalFlow](msg_docs/SensorOpticalFlow.md)
- [SensorPreflightMag](msg_docs/SensorPreflightMag.md)
- [SensorSelection](msg_docs/SensorSelection.md)
- [SensorTemp](msg_docs/SensorTemp.md)
- [SensorUwb](msg_docs/SensorUwb.md)
- [SensorsStatus](msg_docs/SensorsStatus.md)
- [SensorsStatusImu](msg_docs/SensorsStatusImu.md)
@@ -765,6 +768,7 @@
- [Rpm Sensor](modules/modules_driver_rpm_sensor.md)
- [Radio Control](modules/modules_driver_radio_control.md)
- [Transponder](modules/modules_driver_transponder.md)
- [adc](modules/modules_driver_adc.md)
- [Estimators](modules/modules_estimator.md)
- [Simulations](modules/modules_simulation.md)
- [System](modules/modules_system.md)
+1
View File
@@ -1,4 +1,5 @@
<!-- GENERATED CONTENT: DO NOT EDIT -->
- [Introduction](/index.md)
- [Basic Concepts](/getting_started/px4_basic_concepts.md)
+3 -26
View File
@@ -10,36 +10,13 @@ By default, the [Missing Data](#missing-data-check), [Data Stuck](#data-stuck-ch
You can configure which checks are active using the [ASPD_DO_CHECKS](#aspd_do_checks_table) parameter.
:::
## Airspeed in PX4
PX4 handles multiple types of airspeed:
- **IAS (Indicated Airspeed):** The raw measurement from the airspeed sensor, directly influenced by sensor characteristics and installation effects (e.g., pitot-static errors).
- **CAS (Calibrated Airspeed):** IAS corrected for sensor-specific and installation-related errors.
- **EAS (Equivalent Airspeed):** _Not explicitly handled by PX4_ - Calibrated airspeed corrected for compressibility effects.
While PX4 does not currently model EAS separately, this correction is negligible at low speeds and altitudes, so EAS is treated as equivalent to CAS for simplicity.
- **TAS (True Airspeed):** CAS adjusted for atmospheric effects such as air pressure and temperature (i.e., altitude and atmospheric conditions).
The standard conversion chain used in PX4 is: `IAS → CAS (= EAS) → TAS`.
## CAS Scale Estimation
PX4 estimates the IAS to CAS scale (referred to as the CAS scale) during flight using GNSS ground speed and wind estimation.
To compute the final TAS, standard environment conversions are applied (CAS → TAS).
This CAS scaling plays an important role in keeping the [innovation check](#innovation-check) reliable, since a well-estimated CAS is key to spotting inconsistencies between measured and predicted airspeed.
Calibrated Airspeed (CAS) is the measured Indicated Airspeed (IAS) scaled to correct for sensor-specific and installation-related errors.
CAS scaling plays an important role in keeping the [innovation check](#innovation-check) reliable, since a well-estimated CAS is key to spotting inconsistencies between measured and predicted airspeed.
If the estimated CAS scale is inaccurate, it can mask real airspeed faults or trigger false positives.
If you observe that the CAS scale estimate is consistently off, or if it is converging too slowly, you can manually set it using [ASPD_SCALE_n](#aspd_scale_n_table) (where `n` is the sensor number).
[ASPD_SCALE_APPLY](#aspd_scale_apply_table) can be used to configure when/if the estimated scale is applied.
::: info
For a quick manual CAS scale estimate, compare groundspeed minus windspeed (from the [VehicleLocalPosition](../msg_docs/VehicleLocalPosition.md) and [Wind](../msg_docs/Wind.md) messages, respectively) to indicated airspeed values (in the [Airspeed](../msg_docs/Airspeed.md) message).
The ratio of indicated airspeed to groundspeed minus windspeed can provide a reasonable starting estimate for [ASPD_SCALE_n](#aspd_scale_n_table).
:::
If you observe that the CAS scale estimate is consistently off, or if it is converging too slowly, follow the steps outlined in [Airspeed Scale Handling](../config_fw/airspeed_scale_handling.md#recommended-first-flight-process).
## Validation Checks
@@ -0,0 +1,323 @@
# Secure Boot and Firmware Signature Verification
PX4 includes support for secure boot, which prevents unauthorized or tampered firmware from running on the flight controller.
This feature uses cryptographic signature verification to ensure only trusted firmware can be executed.
::: warning
Secure boot is an advanced feature primarily intended for commercial applications and OEM manufacturers who need to protect their firmware from tampering.
Improper configuration can brick your device.
:::
## Overview
The PX4 secure boot implementation provides:
- **Firmware signature verification**: The bootloader verifies cryptographic signatures before executing firmware.
- **Tamper protection**: Unsigned or improperly signed firmware will not be executed.
- **Key-based authentication**: Uses cryptographic keys stored in the device.
- **Table of Contents (TOC)**: A structured format for organizing firmware components with security metadata.
The secure boot feature is available on NuttX-based flight controllers.
## Enabling Secure Boot
### Prerequisites
Before enabling secure boot, you need:
1. A board configuration that supports secure boot (NuttX-based flight controllers)
2. Understanding of the build system and firmware signing process
3. Secure storage for your private keys
4. A workflow for signing firmware images
### Board Configuration
To enable secure boot on your board:
1. **Enable security in bootloader**: Add to your board's bootloader configuration file (e.g., `boards/[vendor]/[board]/nuttx-config/bootloader/defconfig`):
```sh
CONFIG_BOOTLOADER_USE_SECURITY=y
```
2. **Set crypto algorithm**: Define the signing algorithm in your board's `hw_config.h`:
```c
#define BOOTLOADER_SIGNING_ALGORITHM CRYPTO_ED25519
```
3. **Configure key storage**: Implement or configure the keystore backend for your board
4. **Build bootloader with crypto support**: Ensure `PX4_CRYPTO` is defined in your board's CMake configuration
### Key Management
::: warning CRITICAL
Keep your private keys secure! If private keys are lost, you cannot sign new firmware. If private keys are compromised, unauthorized firmware can be created.
:::
Key management involves:
1. **Key generation**: Generate cryptographic key pairs (public and private keys)
2. **Key storage**:
- Private keys: Store securely on your build/signing server (never on the device)
- Public keys: Store in the device's keystore (accessible to bootloader)
3. **Key indices**: Each key has an index (0-15) used to reference it in the TOC
#### Generating ED25519 Keys
You can use various tools to generate ED25519 keys.
Example using Python with the `cryptography` library:
```python
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
from cryptography.hazmat.primitives import serialization
# Generate private key
private_key = Ed25519PrivateKey.generate()
# Get public key
public_key = private_key.public_key()
# Serialize private key
private_bytes = private_key.private_bytes(
encoding=serialization.Encoding.Raw,
format=serialization.PrivateFormat.Raw,
encryption_algorithm=serialization.NoEncryption()
)
# Serialize public key
public_bytes = public_key.public_bytes(
encoding=serialization.Encoding.Raw,
format=serialization.PublicFormat.Raw
)
# Save keys to files
with open('private_key.bin', 'wb') as f:
f.write(private_bytes)
with open('public_key.bin', 'wb') as f:
f.write(public_bytes)
```
#### Installing Public Keys on Device
Public keys must be installed in the device's keystore. The exact method depends on your board's keystore implementation:
- Some boards use One-Time Programmable (OTP) memory
- Some boards use secure flash storage
- Some implementations use a stub keystore for development/testing
Refer to your board's keystore implementation in `src/drivers/stub_keystore/` or board-specific keystore drivers.
### Firmware Signing Process
The firmware signing process involves:
1. **Build firmware**: Build your PX4 firmware as usual
2. **Create TOC**: Generate the Table of Contents structure
3. **Sign firmware**: Sign the firmware image with your private key
4. **Append signature**: Add the signature to the firmware image according to TOC structure
5. **Flash to device**: Upload the signed firmware to the device
::: info
The exact tooling for firmware signing depends on your board and security requirements. Custom scripts are typically needed for production use.
:::
### TOC Creation Example
The TOC structure typically looks like this:
```
[TOC Start Magic]
[TOC Version]
[TOC Entry 0: Firmware]
- Name: "APP"
- Start: <firmware start address>
- End: <firmware end address>
- Signature Index: 1
- Key Index: 0
- Flags: TOC_FLAG1_BOOT | TOC_FLAG1_CHECK_SIGNATURE
[TOC Entry 1: Signature]
- Name: "SIG"
- Start: <signature start address>
- End: <signature end address>
- Flags: 0
[TOC End Magic]
[Firmware Binary Data]
[Signature Data]
```
## Security Considerations
### Best Practices
1. **Key Management**:
- Use hardware security modules (HSM) for key storage when possible
- Never commit private keys to version control
- Use separate keys for development and production
- Implement key rotation policies
2. **Build Security**:
- Sign firmware in a secure, controlled environment
- Verify signatures before distribution
- Use checksums for firmware integrity verification
- Maintain an audit log of signed firmware versions
3. **Device Security**:
- Use OTP or secure flash for storing public keys
- Consider using R&D certificates for development devices (allows unsigned boot)
- Implement secure firmware update mechanisms
- Monitor for signature verification failures
### Development vs Production
For development, you can use the R&D Certificate feature:
```c
// In TOC, mark entry with RDCT flag
toc_entry.flags1 |= TOC_FLAG1_RDCT;
// R&D certificate capabilities
#define RDCT_CAPS0_ALLOW_UNSIGNED_BOOT 0x1
```
R&D certificates allow specific devices (identified by UUID) to boot unsigned firmware, useful during development without compromising production security.
::: warning
Never deploy R&D certificates to production devices!
:::
## Firmware Updates
### Updating Signed Firmware
When using secure boot, firmware updates must:
1. Be properly signed with the correct private key
2. Include a valid TOC structure
3. Use the same key index that matches the public key in the device
The update process through QGroundControl or other tools works the same way, but the firmware file must be properly signed before upload.
### Signature Verification Failures
If signature verification fails:
- The bootloader will not execute the firmware.
- The bootloader remains active and accepts new firmware uploads.
- The device will not be bricked (bootloader always runs).
- You can upload a correctly signed firmware to recover.
Check bootloader logs (if available) to diagnose signature failures.
## Troubleshooting
### Common Issues
#### Firmware won't boot after enabling secure boot
- Ensure the firmware is properly signed
- Verify the TOC structure is correct
- Check that the key index in TOC matches the keystore
#### Signature verification always fails
- Confirm public key is correctly installed in keystore
- Verify the signature was created with the matching private key
- Check that the signature algorithm matches (e.g., ED25519)
- Ensure the signature covers the correct data range
#### Device appears bricked
- The bootloader should always be accessible
- Use a debug probe to reprogram the bootloader if needed
- Check that BOOTLOADER_USE_SECURITY is defined correctly
### Debug Information
To debug secure boot issues:
1. Enable bootloader debug output (if supported by your board)
2. Use a debug probe to examine memory and execution flow
3. Verify TOC parsing with debug tools
4. Check return values from `verify_app()` function
## How It Works
### Boot Process
1. **Bootloader starts**: The secure bootloader runs first after power-on or reset.
2. **TOC validation**: Locates and validates the Firmware Table of Contents (TOC) structure in flash.
3. **Signature verification**: Verifies the cryptographic signature of the firmware using stored keys.
4. **Boot decision**:
- If verification succeeds, the firmware is executed.
- If verification fails, the bootloader remains active and waits for a valid firmware upload.
### Firmware Table of Contents (TOC)
The firmware TOC is a data structure embedded in the firmware that describes:
- Firmware components and their locations in flash memory
- Signature information for each component
- Encryption settings (if used)
- Boot flags indicating which component should be executed
The TOC format is defined in `src/include/image_toc.h`:
```c
typedef struct image_toc_entry {
unsigned char name[4]; // Name of the section
const void *start; // Start address in flash
const void *end; // End address in flash
void *target; // Copy target address (for RAM execution)
uint8_t signature_idx; // Index to signature in TOC
uint8_t signature_key; // Key index for signature verification
uint8_t encryption_key; // Key index for encryption (future)
uint8_t flags1; // Control flags
uint32_t reserved; // Reserved for future use
} image_toc_entry_t;
```
### Supported Cryptographic Algorithms
PX4's crypto backend supports multiple algorithms (defined in `platforms/common/include/px4_platform_common/crypto_algorithms.h`):
- **ED25519**: EdDSA signatures using Curve25519 (recommended for signatures)
- **RSA-OAEP**: RSA with Optimal Asymmetric Encryption Padding
- **XCHACHA20**: Stream cipher for encryption (future use)
- **AES**: Block cipher for encryption (future use)
The bootloader uses ED25519 by default for signature verification due to its security, performance, and small signature size.
## Implementation Details
The secure boot implementation consists of:
- **Bootloader**: `platforms/nuttx/src/bootloader/common/`
- `bl.c`: Main bootloader logic
- `image_toc.c`: TOC parsing and validation
- `crypto.c`: Cryptographic operation wrappers
- **Crypto Backend**: `src/drivers/sw_crypto/`
- `crypto.c`: Software crypto implementation using monocypher and libtomcrypt
- **Keystore**: `src/drivers/stub_keystore/` (or board-specific implementations)
- Key storage and retrieval
- **Headers**:
- `src/include/image_toc.h`: TOC structure definitions
- `platforms/common/include/px4_platform_common/crypto_backend.h`: Crypto API
- `platforms/common/include/px4_platform_common/crypto_algorithms.h`: Algorithm definitions
## Related Topics
- [Bootloader Update](bootloader_update.md) - Updating the bootloader itself
- [Building PX4 Software](../dev_setup/building_px4.md) - Build system information
- [Board Support Guide](../hardware/board_support_guide.md) - Creating custom boards
## References
- Original implementation: [PR #17672](https://github.com/PX4/PX4-Autopilot/pull/17672)
- Contributor: Technology Innovation Institute
- Monocypher library: https://monocypher.org/
- LibTomCrypt library: https://www.libtom.net/LibTomCrypt/
+1
View File
@@ -32,6 +32,7 @@ This topic lists configuration topics that are not particularly vehicle specific
- [Bootloader Update](../advanced_config/bootloader_update.md)
- [Bootloader Update FMUv6X-RT via USB](../advanced_config/bootloader_update_v6xrt.md)
- [Secure Boot and Firmware Signature Verification](../advanced_config/bootloader_secure_boot.md)
## See Also
+74 -14
View File
@@ -10,6 +10,48 @@ If a listed parameter is missing from the Firmware see: [Finding/Updating Parame
<!-- markdown generator: src/lib/parameters/px4params/markdownout.py -->
## ADC
### ADC_ADS7953_EN (`INT32`) {#ADC_ADS7953_EN}
Enable ADS7953.
Enable the driver for the ADS7953 board
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------------ | ---- |
| &check; | | | | Disabled (0) |
### ADC_ADS7953_REFV (`FLOAT`) {#ADC_ADS7953_REFV}
Applied reference Voltage.
The voltage applied to the ADS7953 board as reference
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 2.0 | 3.0 | 0.01 | 2.5 | V |
### ADC_TLA2528_EN (`INT32`) {#ADC_TLA2528_EN}
Enable TLA2528.
Enable the driver for the TLA2528
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------------ | ---- |
| &check; | | | | Disabled (0) |
### ADC_TLA2528_REFV (`FLOAT`) {#ADC_TLA2528_REFV}
Applied reference Voltage.
The voltage applied to the TLA2528 board as reference
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 2.0 | 3.0 | 0.01 | 2.5 | V |
## ADSB
### ADSB_CALLSIGN_1 (`INT32`) {#ADSB_CALLSIGN_1}
@@ -13955,9 +13997,9 @@ Scale of airspeed sensor 1.
This is the scale IAS --> CAS of the first airspeed sensor instance
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0.5 | 2.0 | | 1.0 |
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0.5 | 2.0 | | 1.0 |
### ASPD_SCALE_2 (`FLOAT`) {#ASPD_SCALE_2}
@@ -13965,9 +14007,9 @@ Scale of airspeed sensor 2.
This is the scale IAS --> CAS of the second airspeed sensor instance
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0.5 | 2.0 | | 1.0 |
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0.5 | 2.0 | | 1.0 |
### ASPD_SCALE_3 (`FLOAT`) {#ASPD_SCALE_3}
@@ -13975,9 +14017,9 @@ Scale of airspeed sensor 3.
This is the scale IAS --> CAS of the third airspeed sensor instance
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0.5 | 2.0 | | 1.0 |
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0.5 | 2.0 | | 1.0 |
### ASPD_SCALE_APPLY (`INT32`) {#ASPD_SCALE_APPLY}
@@ -17165,7 +17207,9 @@ Set bits in the following positions to enable: 0 : Longitude and latitude fusion
### EKF2_GPS_DELAY (`FLOAT`) {#EKF2_GPS_DELAY}
GPS measurement delay relative to IMU measurements.
GPS measurement delay relative to IMU measurement.
GPS measurement delay relative to IMU measurement if PPS time correction is not available/enabled (PPS_CAP_ENABLE).
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
@@ -17175,7 +17219,7 @@ GPS measurement delay relative to IMU measurements.
Fusion reset mode.
Automatic: reset on fusion timeout if no other source of position is available Dead-reckoning: reset on fusion timeout if no source of velocity is available
Automatic: reset on fusion timeout if no other source of position is available. Dead-reckoning: reset on fusion timeout if no source of velocity is available.
**Values:**
@@ -33105,6 +33149,14 @@ Maxbotix Sonar (mb12xx).
| ------- | -------- | -------- | --------- | ------------ | ---- |
| &check; | | | | Disabled (0) |
### SENS_EN_MCP9808 (`INT32`) {#SENS_EN_MCP9808}
Enable MCP9808 temperature sensor (external I2C).
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------------ | ---- |
| &check; | | | | Disabled (0) |
### SENS_EN_MPDT (`INT32`) {#SENS_EN_MPDT}
Enable Mappydot rangefinder (i2c).
@@ -39432,6 +39484,14 @@ Maximum time (in seconds) before resetting setpoint.
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | | | | 2.0 |
### UUV_STICK_MODE (`INT32`) {#UUV_STICK_MODE}
Stick mode selector (0=Heave/sway control, roll/pitch leveled; 1=Pitch/roll control).
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0 | 1 | | 0 |
### UUV_THRUST_SAT (`FLOAT`) {#UUV_THRUST_SAT}
UUV Thrust setpoint Saturation.
@@ -40135,7 +40195,7 @@ Time in seconds it takes to tilt form VT_TILT_FW to VT_TILT_MC.
### VT_B_DEC_I (`FLOAT`) {#VT_B_DEC_I}
Backtransition deceleration setpoint to pitch I gain.
Backtransition deceleration setpoint to tilt I gain.
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ------- |
@@ -40353,7 +40413,7 @@ During landing it can be beneficial to reduce the pitch angle to reduce the gene
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | -10.0 | 45.0 | 0.1 | -5.0 | deg |
| &nbsp; | -10.0 | 45.0 | 0.1 | 0.0 | deg |
### VT_PITCH_MIN (`FLOAT`) {#VT_PITCH_MIN}
@@ -40364,7 +40424,7 @@ VT_FWD_TRHUST_EN is set.
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | -10.0 | 45.0 | 0.1 | -5.0 | deg |
| &nbsp; | -10.0 | 45.0 | 0.1 | 0.0 | deg |
### VT_PSHER_SLEW (`FLOAT`) {#VT_PSHER_SLEW}
+2 -4
View File
@@ -52,19 +52,17 @@ RC controllers will use different sticks for throttle and yaw [based on their mo
- _Arm:_ Left-stick to right, right-stick to bottom.
- _Disarm:_ Left-stick to left, right-stick to the bottom.
The required hold time can be configured using [COM_RC_ARM_HYST](#COM_RC_ARM_HYST).
Note that by default ([COM_DISARM_MAN](#COM_DISARM_MAN)) you can also disarm in flight using gestures/buttons: you may choose to disable this to avoid accidental disarming.
| Parameter | Description |
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| <a id="MAN_ARM_GESTURE"></a>[MAN_ARM_GESTURE](../advanced_config/parameter_reference.md#MAN_ARM_GESTURE) | Enable arm/disarm stick guesture. `0`: Disabled, `1`: Enabled (default). |
| <a id="COM_DISARM_MAN"></a>[COM_DISARM_MAN](../advanced_config/parameter_reference.md#COM_DISARM_MAN) | Enable disarming in flight via switch/stick/button in MC manual thrust modes. `0`: Disabled, `1`: Enabled (default). |
| <a id="COM_RC_ARM_HYST"></a>[COM_RC_ARM_HYST](../advanced_config/parameter_reference.md#COM_RC_ARM_HYST) | Time that RC stick must be held in arm/disarm position before arming/disarming occurs (default: `1` second). |
## Arming Button/Switch {#arm_disarm_switch}
An _arming button_ or "momentary switch" can be configured to trigger arm/disarm _instead_ of [gesture-based arming](#arm_disarm_gestures) (setting an arming switch disables arming gestures).
The button should be held down for ([nominally](#COM_RC_ARM_HYST)) one second to arm (when disarmed) or disarm (when armed).
The button should be held down for one second to arm (when disarmed) or disarm (when armed).
A two-position switch can also be used for arming/disarming, where the respective arm/disarm commands are sent on switch _transitions_.
@@ -77,7 +75,7 @@ The switch or button is assigned (and enabled) using [RC_MAP_ARM_SW](#RC_MAP_ARM
| Parameter | Description |
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a id="RC_MAP_ARM_SW"></a>[RC_MAP_ARM_SW](../advanced_config/parameter_reference.md#RC_MAP_ARM_SW) | RC arm switch channel (default: 0 - unassigned). If defined, the specified RC channel (button/switch) is used for arming instead of a stick gesture. <br>**Note:**<br>- This setting _disables the stick gesture_!<br>- This setting applies to RC controllers. It does not apply to Joystick controllers that are connected via _QGroundControl_. |
| <a id="COM_ARM_SWISBTN"></a>[COM_ARM_SWISBTN](../advanced_config/parameter_reference.md#COM_ARM_SWISBTN) | Arm switch is a momentary button. <br>- `0`: Arm switch is a 2-position switch where arm/disarm commands are sent on switch transitions.<br>-`1`: Arm switch is a button or momentary button where the arm/disarm command ae sent after holding down button for set time ([COM_RC_ARM_HYST](#COM_RC_ARM_HYST)). |
| <a id="COM_ARM_SWISBTN"></a>[COM_ARM_SWISBTN](../advanced_config/parameter_reference.md#COM_ARM_SWISBTN) | Arm switch is a momentary button. <br>- `0`: Arm switch is a 2-position switch where arm/disarm commands are sent on switch transitions.<br>-`1`: Arm switch is a momentary button where the arm/disarm command is sent after holding down the button for one second. |
::: info
The switch can also be set as part of _QGroundControl_ [Flight Mode](../config/flight_mode.md) configuration.
@@ -348,6 +348,60 @@ The `hpos_drift_rate`, `vpos_drift_rate` and `hspd` are calculated over a period
Note that `ekf2_gps_drift` is not logged!
:::
#### GNSS Fault Detection
PX4's GNSS fault detection protects against malicious or erroneous GNSS signals using selective fusion control based on measurement validation.
The fault detection logic depends on the GPS mode, and also operates differently for horizontal position and altitude measurements.
The mode is set using the [EKF2_GPS_MODE](../advanced_config/parameter_reference.md#EKF2_GPS_MODE) parameter:
- **Automatic (`0`)** (Default): Assumes that GNSS is generally reliable and is likely to be recovered.
EKF2 resets on fusion timeouts if no other source of position is available.
- **Dead-reckoning (`1`)**: Assumes that GNSS might be lost indefinitely, so resets should be avoided while we have other estimates of position data.
EKF2 may reset if no other sources of position or velocity are available.
If GNSS altitude OR horizontal position data drifts, the system disables fusion of both measurements simultaneously (even if one would still pass validation) and avoids performing resets.
##### Detection Logic
Horizontal Position:
- **Automatic mode**: Horizontal position resets to GNSS data if no other horizontal position source is currently being fused (e.g., Auxiliary Global Position - AGP).
- **Dead-reckoning mode**: Horizontal position resets to GNSS data only if no other horizontal position OR velocity source is currently being fused (e.g., AGP, airspeed, optical flow).
Altitude:
- The altitude logic is more complex due to the height reference sensor ([EKF2_HGT_REF](../advanced_config/parameter_reference.md#EKF2_HGT_REF)) parameter, which is typically set to GNSS or baro in GNSS-denied scenarios.
- If height reference is set to baro, GNSS-based height resets are prevented (except when baro fusion fails completely and height reference automatically switches to GNSS).
- When height reference is set to GNSS:
- **Automatic mode**: Resets occur on drifting GNSS altitude measurements.
- **Dead-reckoning mode**: When validation starts failing, the system prevents GNSS altitude resets and labels the GNSS data as faulty.
##### Faulty GNSS Data During Boot
The system cannot automatically detect faulty GNSS data during vehicle boot as no baseline comparison exists.
If GNSS fusion is enabled ([EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL)), operators will observe incorrect positions on maps and should disable GNSS fusion, then manually set the correct position via ground control station.
The global position gets corrected, and if [SENS_BAR_AUTOCAL](../advanced_config/parameter_reference.md#SENS_BAR_AUTOCAL) was enabled, baro offsets are automatically adjusted (through bias correction, not parameter changes).
##### Enabling GNSS Fusion Mid-Flight
With Faulty GNSS Data:
- **Automatic mode**: Vehicle will reset to faulty position - potentially dangerous.
- **Dead-reckoning mode**: Large measurement differences cause GNSS rejection and fault detection activation.
With Valid GNSS Data:
- **Automatic mode**: Vehicle will reset to GNSS measurements.
- **Dead-reckoning mode**: If estimated position/altitude is close enough to measurements, fusion resumes; if too far apart, data gets labeled as faulty.
##### Notes
- **Dual Detection**: Horizontal and altitude checks run completely separately but both lead to the same result when triggered - all GNSS fusion gets disabled.
- **Recovery**: Only the specific check that labeled data as invalid can re-enable fusion.
- **Alternative Sources**: Dead-reckoning mode provides enhanced protection by requiring absence of alternative navigation sources before allowing resets.
- **Boot Vulnerability**: Initial faulty GNSS data cannot be detected automatically; requires operator intervention and manual position correction.
### Range Finder
[Range finder](../sensor/rangefinders.md) distance to ground is used by a single state filter to estimate the vertical position of the terrain relative to the height datum.
+46 -6
View File
@@ -160,6 +160,7 @@ The fields are:
[Generally you should use the default actuator value](#actuator-roll-pitch-and-yaw-scaling).
- `Trim`: An offset added to the actuator so that it is centered without input.
This might be determined by trial and error.
Prefer using the improved `PWM_CENT` instead: [PWM control surfaces](actuators.md#pwm-control-surfaces-that-move-both-directions-about-a-neutral-point).
- <a id="slew_rate"></a>(Advanced) `Slew Rate`: Limits the minimum time in which the motor/servo signal is allowed to pass through its full output range, in seconds.
- The setting limits the rate of change of an actuator (if not specified then no rate limit is applied).
It is intended for actuators that may be damaged or cause flight disturbance if they move too fast — such as the tilting actuators on a tiltrotor VTOL vehicle, or fast moving flaps, respectively.
@@ -535,12 +536,41 @@ If you're using PWM servos, PWM50 is far more common.
If a high rate servo is _really_ needed, DShot offers better value.
:::
#### Control surfaces that move both directions about a neutral point
##### PWM: Control surfaces that move both directions about a neutral point
To facilitate setting the neutral point of the servos, a bilinear curve function can be defined using the following parameters `PWM_MAIN_CENTx` / `PWM_AUX_CENTx` for each servo. This allows for unequal deflections in the positive and negative direction:
![Asymmetric Servo Deflections](../../assets/config/actuators/servo_pwm_center.png)
To set this up:
1. Set all surface `Trim` to `0.00` for all surfaces:
![PWM Trimming](../../assets/config/actuators/control_surface_trim.png)
2. Set the `PWM_MAIN_CENTx` / `PWM_AUX_CENTx` value so that the surface will stay at the neutral (aligned with airfoil) position.
This is usually around `1500` for PWM servos (near the center of the servo range).
![Control Surface Trimming](../../assets/config/actuators/pwm_center_output.png)
3. Gradually increase the `Maximum` for each servo until the desired deflection is reached. Check the deflection with a remote manual mode while [`COM_PREARM_MODE`](../advanced_config/parameter_reference.md#COM_PREARM_MODE) is set to `Always` or use the sliders.
4. Gradually decrease the `Minimum` for each servo, until the desired deflection is reached.
5. Set `Disarmed` value to the desired value. It is usually desirable to have it the same as the `Center` value.
::: info
If you want to retain the linear behaviour of the servo after setting the `Center`, make sure to adjust the `Minimum` or `Maximum`, such that both intervals (`min` to `cent` & `cent` to `max`) are equally large.
![Linear PWM Adjustment](../../assets/config/actuators/servo_pwm_linear.png)
:::
#### Non-PWM: Control surfaces that move both directions about a neutral point
Control surfaces that move either direction around a neutral point include: ailerons, elevons, V-tails, A-tails, and rudders.
To set these up:
0. Set all `PWM_MAIN_CENTx` and `PWM_AUX_CENTx` to default (-1), or trimming will not be possible.
1. Set the `Disarmed` value so that the surfaces will stay at neutral position when disarmed.
This is usually around `1500` for PWM servos (near the centre of the servo range).
@@ -559,14 +589,17 @@ To set these up:
3. Move the slider again to the middle and check if the Control Surfaces are aligned in the neutral position of the wing.
- If it is not aligned, you can set the **Trim** value for the control surface.
::: info
This is done in the `Trim` setting of the Geometry panel, usually by "trial and error".
![Control Surface Trimming](../../assets/config/actuators/control_surface_trim.png)
:::
::: info
This is done in the `Trim` setting of the Geometry panel, usually by "trial and error".
![Control Surface Trimming](../../assets/config/actuators/control_surface_trim.png)
:::
- After setting the trim for a control surface, move its slider away from the centre, release, and then back into disarmed (middle) position.
Confirm that surface is in the neutral position.
::: tip
If any servo has a `PWM_MAIN_CENTx` or `PWM_AUX_CENTx` not set to default (-1), the system will automatically remove `Trim` from all surfaces. This is done to prevent mixing of old and new trimming tools.
:::
::: info
Another way to test without using the sliders would be to set the [`COM_PREARM_MODE`](../advanced_config/parameter_reference.md#COM_PREARM_MODE) parameter to `Always`:
@@ -585,6 +618,7 @@ For a flap, that is when the flap is fully retracted and flush with the wing.
One approach for setting these up is:
0. Set all `PWM_MAIN_CENTx` and `PWM_AUX_CENTx` to default (-1), or trimming will not be possible.
1. Set values `Disarmed` to `1500`, `Min` to `1200`, `Max` to `1700` so that the values are around the centre of the servo range.
2. Move the corresponding slider up and check the control moves and that it is extending (moving away from the disarmed position).
If not, click on the `Rev Range` checkbox to reverse the range.
@@ -594,6 +628,7 @@ One approach for setting these up is:
- If the value was increased towards `Max`, then set `Max` to match `Disarmed`.
4. The value that you did _not_ set to match `Disarmed` controls the maximum amount that the control surface can extend.
Set the slider to the top of the control, then change the value (`Max` or `Min`) so that the control surface is fully extended when the slider is at top.
5. (Only PWM servos) Set the `Center` value to the middle between `Min` and `Max`.
::: info Special note for flaps
In some vehicle builds, flaps may be configured such that both flaps are controlled from a single output.
@@ -631,6 +666,11 @@ For each of the tilt servos:
- Standard VTOL : Motors defined as multicopter motors will be turned off
- Tiltrotors : Motors that have no associated tilt servo will turn off
- Tailsitters do not turn off any motors in fixed-wing flight
- The following formula can be used to migrate from surface trim to PWM trim:
```plain
PWM_MAIN_CENTx = ((PWM_MAX - PWM_MIN) / 2) * CA_SV_CSx_TRIM + PWM_MIN + ((PWM_MAX - PWM_MIN) / 2)
```
### Reversing Motors
@@ -0,0 +1,104 @@
# Airspeed Scale Handling
::: info
This section complements the existing [Airspeed Validation](../advanced_config/airspeed_validation.md) documentation.
:::
The airspeed scale is used by PX4 to convert the measured airspeed (indicated airspeed) to the calibrated airspeed.
This scale can be set by [ASPD_SCALE_n](../advanced_config/parameter_reference.md#ASPD_SCALE_1) (where `n` is the sensor number), and logged in [AirspeedWind.msg](../msg_docs/AirspeedWind.md).
Note that the airspeed scale is different from the airspeed sensor offset calibration done on the ground at 0 m/s. The airspeed scale accounts for errors in the airspeed measurement during flight, such as those caused by sensor placement or installation effects.
This topic describes how to set an initial airspeed scale for a new fixed-wing vehicle during its first flight. Correct scale calibration ensures reliable airspeed data, accurate TAS calculation, robust PX4 airspeed validation, and consistent controller performance.
## Airspeed in PX4
PX4 handles multiple types of airspeed:
- **IAS (Indicated Airspeed):** The raw measurement from the airspeed sensor, directly influenced by sensor characteristics and installation effects (e.g., pitot-static errors).
- **CAS (Calibrated Airspeed):** IAS corrected for sensor-specific and installation-related errors.
- **EAS (Equivalent Airspeed):** _Not explicitly handled by PX4_ - Calibrated airspeed corrected for compressibility effects.
While PX4 does not currently model EAS separately, this correction is negligible at low speeds and altitudes, so EAS is treated as equivalent to CAS for simplicity.
- **TAS (True Airspeed):** CAS adjusted for atmospheric effects such as air pressure and temperature (i.e., altitude and atmospheric conditions).
The standard conversion chain used in PX4 is: `IAS → CAS (= EAS) → TAS`.
## CAS Scale Estimation
PX4 estimates the IAS to CAS scale (referred to as the CAS scale) during flight using GNSS ground speed and wind estimation.
To compute the final TAS, standard environment conversions are applied (CAS → TAS).
:::warning Important
A GNSS is required for scale estimation.
:::
PX4 uses a two-stage approach to robustly estimate the scale:
1. **Continuous EKF Estimation**: A wind estimator constantly compares your measured airspeed against what it expects based on ground velocity (from GNSS) and estimated wind.
If there's a consistent bias, it adjusts the scale estimate.
The estimated scale is logged in the `AirspeedWind.msg` as the `tas_scale_raw`.
2. **Validation**: To ensure robustness, PX4 collects airspeed and ground speed data across 12 different heading segments (every 30°).
This averages out wind estimation errors.
The validated scale is only updated when the new estimate demonstrably reduces the error between predicted and actual ground speeds across all headings.
The validated scale is logged in the `AirspeedWind.msg` as the `tas_scale_validated`.
### Understanding the Scale: Physical Intuition
The CAS scale is essentially a correction factor that accounts for systematic errors in your airspeed sensor installation.
- A scale of 1.0 means your sensor reads perfectly (no correction needed)
- A scale > 1.0 (e.g., 1.1) means your sensor _under-reads_ by 10%, so measured airspeed (IAS) must be multiplied by 1.1
- A scale < 1.0 (e.g., 0.9) means your sensor _over-reads_ by ~11%, so measured airspeed (IAS) must be multiplied by 0.9
### What Affects the Airspeed Scale
The primary factor influencing the airspeed scale is **sensor placement**.
Biased readings can be reflected in the scale estimate for pitot tubes installed:
- In regions experiencing disturbed flow (commonly near blunt aircraft noses)
- Near propellers
- Under aerodynamic surfaces
- At an angle with respect to the airflow
### Symptoms of Incorrect Scale
Symptoms of an incorrectly scaled airspeed measurement include:
- Stalling or overspeeding
- Persistent under- or overestimation of the TAS relative to wind-corrected groundspeed
- False positives or missed detections in [airspeed innovation checks](../advanced_config/airspeed_validation.md#innovation-check)
- Degraded tracking of the rate controllers
## Recommended First Flight Process
During the first flight of a new fixed-wing vehicle, allocate time for the CAS scale to converge to a reasonable initial estimate.
Follow these steps:
1. **Set an Initial Scale**
Use a conservative starting point: set the CAS scale (`ASPD_SCALE_n`) slightly under 1.0 (for example 0.95).
This biases the system toward over-speed rather than under-speed, reducing stall risk.
2. **Perform a Flight**
After takeoff, place the vehicle in loiter for about 15 minutes to allow the scale estimation to converge.
3. **Check Scale Convergence**
After the flight, review the estimated scale in logs.
Verify that:
- `tas_scale_validated` in `AirspeedWind.msg` converged during flight.
- `true_airspeed_m_s` (TAS) in [AirspeedValidated.msg](../msg_docs/AirspeedValidated.md) is consistent with groundspeed corrected for wind.
4. **Update the Airframe Configuration**
If using an [airframe configuration file](../dev_airframes/adding_a_new_frame.md): update `ASPD_SCALE_n`with the estimated CAS scale for future flights.
For similar vehicles with similarly mounted sensors, this value is typically a reliable starting point.
::: info
If you are not able to perform the steps outlined above ...
For a quick manual CAS scale estimate, compare groundspeed minus windspeed (from the [VehicleLocalPosition](../msg_docs/VehicleLocalPosition.md) and [Wind](../msg_docs/Wind.md) messages, respectively) to indicated airspeed values (in the [Airspeed](../msg_docs/Airspeed.md) message).
The ratio of indicated airspeed to groundspeed minus windspeed can provide a reasonable starting estimate for `ASPD_SCALE_n`.
:::
+2 -1
View File
@@ -3,7 +3,7 @@
Fixed-wing configuration and calibration follows the same high level steps as other frames: selection of firmware, configuration of the frame including actuator/motor geometry and output mappings, sensor configuration and calibration, configuration of safety and other features, and finally tuning.
::: info
This topic is the recommended entry point when performing first-time configuration and calibration of a new multicopter frame.
This topic is the recommended entry point when performing first-time configuration and calibration of a new fixed-wing frame.
:::
The main steps are:
@@ -17,3 +17,4 @@ The main steps are:
- [Fixed-wing Altitude/Position Controller Tuning Guide](../config_fw/position_tuning_guide_fixedwing.md)
- [Fixed-wing Trimming Guide](../config_fw/trimming_guide_fixedwing.md)
- [Fixed-Wing Airspeed Scale Handling](../config_fw/airspeed_scale_handling.md)
@@ -17,6 +17,8 @@ Manual tuning is recommended for frames where autotuning does not work, or where
- Excessive gains (and rapid servo motion) can violate the maximum forces of your airframe - increase gains carefully.
- Roll and pitch tuning follow the same sequence.
The only difference is that pitch is more sensitive to trim offsets, so [trimming](../config_fw/trimming_guide_fixedwing.md) has to be done carefully and integrator gains need more attention to compensate this.
- Disable automatic [gain compression](../features_fw/gain_compression.md) ([FW_GC_EN](../advanced_config/parameter_reference.md#FW_GC_EN)) to avoid over-tuning.
Remember to re-enable it when tuning is done.
## Establishing the Airframe Baseline
+1 -1
View File
@@ -88,7 +88,7 @@ Navigate to [Parameters](../advanced_config/parameters.md) in QGroundControl and
One approach to determine an appropriate value is:
1. From a standstill, give the rover full throttle until it reaches the maximum speed.
2. Disarm the rover and plot the `measured_speed_body_x` from [RoverVelocityStatus](../msg_docs/RoverVelocityStatus.md).
2. Disarm the rover and plot the `measured_speed_body_x` from [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md).
3. Divide the maximum speed by the time it took to reach it and set this as the value for [RO_ACCEL_LIM](#RO_ACCEL_LIM).
Some RC rovers have enough torque to lift up if the maximum acceleration is not limited.
+1 -4
View File
@@ -19,7 +19,6 @@ To tune the position controller configure the [parameters](../advanced_config/pa
$v*{max} = v*{full throttle} \cdot (1 - \theta\_{normalized} \cdot k) $
with
- $v_{max}:$ Maximum speed
- $v_{full throttle}:$ Speed at maximum throttle [RO_MAX_THR_SPEED](../advanced_config/parameter_reference.md#RO_MAX_THR_SPEED).
- $\theta_{normalized}:$ Course error (Course - bearing setpoint) normalized from $[0\degree, 180\degree]$ to $[0, 1]$
@@ -34,14 +33,13 @@ To tune the position controller configure the [parameters](../advanced_config/pa
::: tip
Plan a mission for the rover to drive a square and observe how it slows down when approaching a waypoint:
- If the rover decelerates too quickly decrease the [RO_DECEL_LIM](../advanced_config/parameter_reference.md#RO_DECEL_LIM) parameter, if it starts slowing down too early increase the parameter.
- If you observe a jerking motion as the rover slows down, decrease the [RO_JERK_LIM](../advanced_config/parameter_reference.md#RO_JERK_LIM) parameter otherwise increase it as much as possible as it can interfere with the tuning of [RO_DECEL_LIM](../advanced_config/parameter_reference.md#RO_DECEL_LIM).
These two parameters have to be tuned as a pair, repeat until you are satisfied with the behaviour.
:::
3. Plot the `adjusted_speed_body_x_setpoint` and `measured_speed_body_x` from the [RoverVelocityStatus](../msg_docs/RoverVelocityStatus.md) message over each other.
3. Plot the `adjusted_speed_body_x_setpoint` and `measured_speed_body_x` from the [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) message over each other.
If the tracking of these setpoints is not satisfactory adjust the values for [RO_SPEED_P](../advanced_config/parameter_reference.md#RO_SPEED_P) and [RO_SPEED_I](../advanced_config/parameter_reference.md#RO_SPEED_I).
## Path Following
@@ -57,7 +55,6 @@ The following parameters are used to tune the algorithm:
Decreasing the parameter makes it more aggressive but can lead to oscillations.
To tune this:
1. Start with a value of 1 for [PP_LOOKAHD_GAIN](#PP_LOOKAHD_GAIN)
2. Put the rover in [Position mode](../flight_modes_rover/manual.md#position-mode) and while driving a straight line at approximately half the maximum speed observe its behaviour.
3. If the rover does not drive in a straight line, reduce the value of the parameter, if it oscillates around the path increase the value.
+1 -3
View File
@@ -23,11 +23,10 @@ To tune the velocity controller configure the following [parameters](../advanced
::: tip
To further tune this parameter:
1. Set [RO_SPEED_P](#RO_SPEED_P) and [RO_SPEED_I](#RO_SPEED_I) to zero.
This way the speed is only controlled by the feed-forward term, which makes it easier to tune.
2. Put the rover in [Position mode](../flight_modes_rover/manual.md#position-mode) and then move the left stick of your controller up and/or down and hold it at a few different levels for a couple of seconds each.
3. Disarm the rover and from the flight log plot the `adjusted_speed_body_x_setpoint` and the `measured_speed_body_x` from the [RoverVelocityStatus](../msg_docs/RoverVelocityStatus.md) message over each other.
3. Disarm the rover and from the flight log plot the `adjusted_speed_body_x_setpoint` and the `measured_speed_body_x` from the [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md) message over each other.
4. If the actual speed of the rover is higher than the speed setpoint, increase [RO_MAX_THR_SPEED](#RO_MAX_THR_SPEED).
If it is the other way around decrease the parameter and repeat until you are satisfied with the setpoint tracking.
@@ -64,7 +63,6 @@ These steps are only necessary if you are tuning/want to unlock the manual [Posi
Decreasing the parameter makes it more aggressive but can lead to oscillations.
To tune this:
1. Start with a value of 1 for [PP_LOOKAHD_GAIN](#PP_LOOKAHD_GAIN)
2. Put the rover in [Position mode](../flight_modes_rover/manual.md#position-mode) and while driving a straight line at approximately half the maximum speed observe its behaviour.
3. If the rover does not drive in a straight line, reduce the value of the parameter, if it oscillates around the path increase the value.
+1 -1
View File
@@ -215,7 +215,7 @@ Predefined information messages are:
| `char[value_len] ver_sw_branch` | git branch | "master" |
| `uint32_t ver_sw_release` | Software version (see below) | 0x010401ff |
| `char[value_len] sys_os_name` | Operating System Name | "Linux" |
| `char[value_len] sys_os_ve`r | OS version (git tag) | "9f82919" |
| `char[value_len] sys_os_ver` | OS version (git tag) | "9f82919" |
| `uint32_t ver_os_release` | OS version (see below) | 0x010401ff |
| `char[value_len] sys_toolchain` | Toolchain Name | "GNU GCC" |
| `char[value_len] sys_toolchain_ver` | Toolchain Version | "6.2.1" |
+24
View File
@@ -0,0 +1,24 @@
# Gain compression
<Badge type="tip" text="main (planned for: PX4 v1.17)" />
Automatic gain compression reduces the gains of the angular-rate PID whenever oscillations are detected.
It monitors the angular-rate controller output through a band-pass filter to identify these oscillations.
This approach is a safe adaptive mechanism for stable aircraft: the PID gains remain unchanged when no oscillations are present, they are never increased beyond their nominal values, and they are bounded by a minimum limit.
Gain compression can help prevent actuator damage and even loss of the vehicle in cases such as airspeed-sensor failure (loss of airspeed scaling) or in-flight changes in dynamics (e.g.: CG shifts, inertia changes), or other failures that could cause the angular-rate loop to become oscillatory.
![Gain compression diagram](../../assets/config/fw/gain_compression_diagram.png)
## Usage
Gain compression is enabled by default ([FW_GC_EN](../advanced_config/parameter_reference.md#FW_GC_EN)).
It should be disabled during fixed wing [manual tuning](../config_fw/pid_tuning_guide_fixedwing.md) to avoid over-tuning.
It does not need to be disabled when autotuning.
## Parameters
- [FW_GC_EN](../advanced_config/parameter_reference.md#FW_GC_EN)
- [FW_GC_GAIN_MIN](../advanced_config/parameter_reference.md#FW_GC_GAIN_MIN)
+5
View File
@@ -0,0 +1,5 @@
# Fixedwing-Specific Features
This section lists features that are specific to (or customised for) fixed-wings:
- [Gain Compression](../features_fw/gain_compression.md)
@@ -100,6 +100,24 @@ At very high level, the main differences are:
<a id="licensing-and-trademarks"></a>
### FMUv6 Comparison
| Feature | **FMUv6X-RT** | **FMUv6X** | **FMUv6C** |
| ------------------ | --------------------- | ----------------- | ------------------ |
| **FMU MCU** | NXP i.MX RT1176 | STM32H753 | STM32H743V |
| **RAM** | 2 MB | 1 MB | 1 MB |
| **Flash** | 64 MB Octal SPI | 2 MB internal | 2 MB internal |
| **IO MCU** | STM32F103 | STM32F103 | STM32F103 |
| **Secure Element** | NXP SE051 | NXP SE051 | Not supported |
| **PAB Standard** | Supported | Supported | Not supported |
| **Ethernet** | Supported | Supported | Not supported |
| **IMUs** | 3× | 3× | 2× |
| **Barometers** | 2× | 2× | 1× |
| **Magnetometer** | 1× | 1× | 1× |
| **FMU PWM** | 12× | 8× | 8× |
| **IO PWM** | 8× | 8× | 8× |
| **CAN Bus** | 3× | 2× | 2× |
### Licensing and Trademarks
Pixhawk project schematics and reference designs are licensed under [CC BY-SA 3](https://creativecommons.org/licenses/by-sa/3.0/legalcode).
+8
View File
@@ -196,6 +196,14 @@ It is possible to have low DOP (good satellite geometry) but still have high EPH
EPH/EPV values therefore provide a more immediate and practical estimate of the actual GPS accuracy you can expect under current conditions.
### GNSS Position Fusion
GNSS position fusion will not begin until yaw alignment is established.
If a magnetometer is available, the EKF aligns yaw using the magnetic heading, allowing GPS position fusion to start soon after boot.
If no magnetometer is present, the system must rely on GPS yaw (from a dual-antenna setup) or movement-based yaw estimation.
Until one of these provides a valid heading, the EKF will not start GPS position fusion, and the vehicle will remain in a “no position” state even though attitude data is valid.
This behavior prevents large position errors that could occur when the yaw reference is uncertain.
## Developer Information
- GPS/RTK-GPS
+17
View File
@@ -41,6 +41,23 @@ Key features:
See [Log Analysis using Flight Review](../log/flight_review.md) for an introduction.
### Foxglove
[Foxglove](https://foxglove.dev/) is a purpose-built robotics observation platform that works natively with ULog.
It allows you to replay your flights and seek through the timeline to find data of interest.
Key features:
- Native support for ULog files — open files by dragging and dropping or using the file dialog.
- Multiple visualization panels, including Raw Messages, Plot, 3D, and Map panels.
- [PX4 Converter extension](https://github.com/foxglove/px4_converter) that translates selected uORB messages and creates Foxglove schemas for enhanced visualizations.
- Save and share custom layouts with panels and their settings.
- Cross-platform desktop application (Windows, macOS, Linux).
See [Foxglove PX4 Docs](https://docs.foxglove.dev/docs/getting-started/frameworks/px4) for more detailed information and instructions.
![Foxglove](../../assets/flight_log_analysis/foxglove/foxglove_px4.png)
### PlotJuggler
[PlotJuggler](https://github.com/facontidavide/PlotJuggler) is a desktop application that allows users to easily visualize and analyze data expressed in the form of time series.
+247 -239
View File
@@ -4,75 +4,84 @@
This document is [auto-generated](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/msg/generate_msg_docs.py) from the source code.
:::
The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) and/or [zenoh](../modules/modules_driver.md#zenoh) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default).
The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default).
This document shows a markdown-rendered version of [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), listing the publications, subscriptions, and so on.
## Publications
Topic | Type| Rate Limit
--- | --- | ---
`/fmu/out/register_ext_component_reply` | [px4_msgs::msg::RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md) |
`/fmu/out/arming_check_request` | [px4_msgs::msg::ArmingCheckRequest](../msg_docs/ArmingCheckRequest.md) | 5.0
`/fmu/out/mode_completed` | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md) | 50.0
`/fmu/out/battery_status` | [px4_msgs::msg::BatteryStatus](../msg_docs/BatteryStatus.md) | 1.0
`/fmu/out/collision_constraints` | [px4_msgs::msg::CollisionConstraints](../msg_docs/CollisionConstraints.md) | 50.0
`/fmu/out/estimator_status_flags` | [px4_msgs::msg::EstimatorStatusFlags](../msg_docs/EstimatorStatusFlags.md) | 5.0
`/fmu/out/failsafe_flags` | [px4_msgs::msg::FailsafeFlags](../msg_docs/FailsafeFlags.md) | 5.0
`/fmu/out/manual_control_setpoint` | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md) | 25.0
`/fmu/out/message_format_response` | [px4_msgs::msg::MessageFormatResponse](../msg_docs/MessageFormatResponse.md) |
`/fmu/out/position_setpoint_triplet` | [px4_msgs::msg::PositionSetpointTriplet](../msg_docs/PositionSetpointTriplet.md) | 5.0
`/fmu/out/sensor_combined` | [px4_msgs::msg::SensorCombined](../msg_docs/SensorCombined.md) |
`/fmu/out/timesync_status` | [px4_msgs::msg::TimesyncStatus](../msg_docs/TimesyncStatus.md) | 10.0
`/fmu/out/vehicle_land_detected` | [px4_msgs::msg::VehicleLandDetected](../msg_docs/VehicleLandDetected.md) | 5.0
`/fmu/out/vehicle_attitude` | [px4_msgs::msg::VehicleAttitude](../msg_docs/VehicleAttitude.md) |
`/fmu/out/vehicle_control_mode` | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md) | 50.0
`/fmu/out/vehicle_command_ack` | [px4_msgs::msg::VehicleCommandAck](../msg_docs/VehicleCommandAck.md) |
`/fmu/out/vehicle_global_position` | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | 50.0
`/fmu/out/vehicle_gps_position` | [px4_msgs::msg::SensorGps](../msg_docs/SensorGps.md) | 50.0
`/fmu/out/vehicle_local_position` | [px4_msgs::msg::VehicleLocalPosition](../msg_docs/VehicleLocalPosition.md) | 50.0
`/fmu/out/vehicle_odometry` | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
`/fmu/out/vehicle_status` | [px4_msgs::msg::VehicleStatus](../msg_docs/VehicleStatus.md) | 5.0
`/fmu/out/airspeed_validated` | [px4_msgs::msg::AirspeedValidated](../msg_docs/AirspeedValidated.md) | 50.0
`/fmu/out/vtol_vehicle_status` | [px4_msgs::msg::VtolVehicleStatus](../msg_docs/VtolVehicleStatus.md) |
`/fmu/out/home_position` | [px4_msgs::msg::HomePosition](../msg_docs/HomePosition.md) | 5.0
| Topic | Type | Rate Limit |
| ---------------------------------------- | -------------------------------------------------------------------------------------- | ---------- |
| `/fmu/out/register_ext_component_reply` | [px4_msgs::msg::RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md) |
| `/fmu/out/arming_check_request` | [px4_msgs::msg::ArmingCheckRequest](../msg_docs/ArmingCheckRequest.md) | 5.0 |
| `/fmu/out/mode_completed` | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md) | 50.0 |
| `/fmu/out/battery_status` | [px4_msgs::msg::BatteryStatus](../msg_docs/BatteryStatus.md) | 1.0 |
| `/fmu/out/collision_constraints` | [px4_msgs::msg::CollisionConstraints](../msg_docs/CollisionConstraints.md) | 50.0 |
| `/fmu/out/estimator_status_flags` | [px4_msgs::msg::EstimatorStatusFlags](../msg_docs/EstimatorStatusFlags.md) | 5.0 |
| `/fmu/out/failsafe_flags` | [px4_msgs::msg::FailsafeFlags](../msg_docs/FailsafeFlags.md) | 5.0 |
| `/fmu/out/manual_control_setpoint` | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md) | 25.0 |
| `/fmu/out/message_format_response` | [px4_msgs::msg::MessageFormatResponse](../msg_docs/MessageFormatResponse.md) |
| `/fmu/out/position_setpoint_triplet` | [px4_msgs::msg::PositionSetpointTriplet](../msg_docs/PositionSetpointTriplet.md) | 5.0 |
| `/fmu/out/sensor_combined` | [px4_msgs::msg::SensorCombined](../msg_docs/SensorCombined.md) |
| `/fmu/out/timesync_status` | [px4_msgs::msg::TimesyncStatus](../msg_docs/TimesyncStatus.md) | 10.0 |
| `/fmu/out/transponder_report` | [px4_msgs::msg::TransponderReport](../msg_docs/TransponderReport.md) |
| `/fmu/out/vehicle_land_detected` | [px4_msgs::msg::VehicleLandDetected](../msg_docs/VehicleLandDetected.md) | 5.0 |
| `/fmu/out/vehicle_attitude` | [px4_msgs::msg::VehicleAttitude](../msg_docs/VehicleAttitude.md) | 50.0 |
| `/fmu/out/vehicle_control_mode` | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md) | 50.0 |
| `/fmu/out/vehicle_command_ack` | [px4_msgs::msg::VehicleCommandAck](../msg_docs/VehicleCommandAck.md) |
| `/fmu/out/vehicle_global_position` | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | 50.0 |
| `/fmu/out/vehicle_gps_position` | [px4_msgs::msg::SensorGps](../msg_docs/SensorGps.md) | 50.0 |
| `/fmu/out/vehicle_local_position` | [px4_msgs::msg::VehicleLocalPosition](../msg_docs/VehicleLocalPosition.md) | 50.0 |
| `/fmu/out/vehicle_odometry` | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) | 100.0 |
| `/fmu/out/vehicle_status` | [px4_msgs::msg::VehicleStatus](../msg_docs/VehicleStatus.md) | 5.0 |
| `/fmu/out/airspeed_validated` | [px4_msgs::msg::AirspeedValidated](../msg_docs/AirspeedValidated.md) | 50.0 |
| `/fmu/out/vtol_vehicle_status` | [px4_msgs::msg::VtolVehicleStatus](../msg_docs/VtolVehicleStatus.md) |
| `/fmu/out/home_position` | [px4_msgs::msg::HomePosition](../msg_docs/HomePosition.md) | 5.0 |
| `/fmu/out/wind` | [px4_msgs::msg::Wind](../msg_docs/Wind.md) | 1.0 |
| `/fmu/out/gimbal_device_attitude_status` | [px4_msgs::msg::GimbalDeviceAttitudeStatus](../msg_docs/GimbalDeviceAttitudeStatus.md) | 20.0 |
## Subscriptions
Topic | Type
--- | ---
/fmu/in/register_ext_component_request | [px4_msgs::msg::RegisterExtComponentRequest](../msg_docs/RegisterExtComponentRequest.md)
/fmu/in/unregister_ext_component | [px4_msgs::msg::UnregisterExtComponent](../msg_docs/UnregisterExtComponent.md)
/fmu/in/config_overrides_request | [px4_msgs::msg::ConfigOverrides](../msg_docs/ConfigOverrides.md)
/fmu/in/arming_check_reply | [px4_msgs::msg::ArmingCheckReply](../msg_docs/ArmingCheckReply.md)
/fmu/in/message_format_request | [px4_msgs::msg::MessageFormatRequest](../msg_docs/MessageFormatRequest.md)
/fmu/in/mode_completed | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md)
/fmu/in/config_control_setpoints | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md)
/fmu/in/distance_sensor | [px4_msgs::msg::DistanceSensor](../msg_docs/DistanceSensor.md)
/fmu/in/manual_control_input | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md)
/fmu/in/offboard_control_mode | [px4_msgs::msg::OffboardControlMode](../msg_docs/OffboardControlMode.md)
/fmu/in/onboard_computer_status | [px4_msgs::msg::OnboardComputerStatus](../msg_docs/OnboardComputerStatus.md)
/fmu/in/obstacle_distance | [px4_msgs::msg::ObstacleDistance](../msg_docs/ObstacleDistance.md)
/fmu/in/sensor_optical_flow | [px4_msgs::msg::SensorOpticalFlow](../msg_docs/SensorOpticalFlow.md)
/fmu/in/goto_setpoint | [px4_msgs::msg::GotoSetpoint](../msg_docs/GotoSetpoint.md)
/fmu/in/telemetry_status | [px4_msgs::msg::TelemetryStatus](../msg_docs/TelemetryStatus.md)
/fmu/in/trajectory_setpoint | [px4_msgs::msg::TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md)
/fmu/in/vehicle_attitude_setpoint | [px4_msgs::msg::VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md)
/fmu/in/vehicle_mocap_odometry | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md)
/fmu/in/vehicle_rates_setpoint | [px4_msgs::msg::VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md)
/fmu/in/vehicle_visual_odometry | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md)
/fmu/in/vehicle_command | [px4_msgs::msg::VehicleCommand](../msg_docs/VehicleCommand.md)
/fmu/in/vehicle_command_mode_executor | [px4_msgs::msg::VehicleCommand](../msg_docs/VehicleCommand.md)
/fmu/in/vehicle_thrust_setpoint | [px4_msgs::msg::VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md)
/fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md)
/fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md)
/fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md)
/fmu/in/aux_global_position | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md)
/fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md)
/fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md)
/fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md)
/fmu/in/lateral_control_configuration | [px4_msgs::msg::LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md)
| Topic | Type |
| ------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| /fmu/in/register_ext_component_request | [px4_msgs::msg::RegisterExtComponentRequest](../msg_docs/RegisterExtComponentRequest.md) |
| /fmu/in/unregister_ext_component | [px4_msgs::msg::UnregisterExtComponent](../msg_docs/UnregisterExtComponent.md) |
| /fmu/in/config_overrides_request | [px4_msgs::msg::ConfigOverrides](../msg_docs/ConfigOverrides.md) |
| /fmu/in/arming_check_reply | [px4_msgs::msg::ArmingCheckReply](../msg_docs/ArmingCheckReply.md) |
| /fmu/in/message_format_request | [px4_msgs::msg::MessageFormatRequest](../msg_docs/MessageFormatRequest.md) |
| /fmu/in/mode_completed | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md) |
| /fmu/in/config_control_setpoints | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md) |
| /fmu/in/distance_sensor | [px4_msgs::msg::DistanceSensor](../msg_docs/DistanceSensor.md) |
| /fmu/in/manual_control_input | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md) |
| /fmu/in/offboard_control_mode | [px4_msgs::msg::OffboardControlMode](../msg_docs/OffboardControlMode.md) |
| /fmu/in/onboard_computer_status | [px4_msgs::msg::OnboardComputerStatus](../msg_docs/OnboardComputerStatus.md) |
| /fmu/in/obstacle_distance | [px4_msgs::msg::ObstacleDistance](../msg_docs/ObstacleDistance.md) |
| /fmu/in/sensor_optical_flow | [px4_msgs::msg::SensorOpticalFlow](../msg_docs/SensorOpticalFlow.md) |
| /fmu/in/goto_setpoint | [px4_msgs::msg::GotoSetpoint](../msg_docs/GotoSetpoint.md) |
| /fmu/in/telemetry_status | [px4_msgs::msg::TelemetryStatus](../msg_docs/TelemetryStatus.md) |
| /fmu/in/trajectory_setpoint | [px4_msgs::msg::TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
| /fmu/in/vehicle_attitude_setpoint | [px4_msgs::msg::VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) |
| /fmu/in/vehicle_mocap_odometry | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
| /fmu/in/vehicle_rates_setpoint | [px4_msgs::msg::VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) |
| /fmu/in/vehicle_visual_odometry | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
| /fmu/in/vehicle_command | [px4_msgs::msg::VehicleCommand](../msg_docs/VehicleCommand.md) |
| /fmu/in/vehicle_command_mode_executor | [px4_msgs::msg::VehicleCommand](../msg_docs/VehicleCommand.md) |
| /fmu/in/vehicle_thrust_setpoint | [px4_msgs::msg::VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) |
| /fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) |
| /fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md) |
| /fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md) |
| /fmu/in/aux_global_position | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) |
| /fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md) |
| /fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) |
| /fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md) |
| /fmu/in/lateral_control_configuration | [px4_msgs::msg::LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) |
| /fmu/in/rover_position_setpoint | [px4_msgs::msg::RoverPositionSetpoint](../msg_docs/RoverPositionSetpoint.md) |
| /fmu/in/rover_speed_setpoint | [px4_msgs::msg::RoverSpeedSetpoint](../msg_docs/RoverSpeedSetpoint.md) |
| /fmu/in/rover_attitude_setpoint | [px4_msgs::msg::RoverAttitudeSetpoint](../msg_docs/RoverAttitudeSetpoint.md) |
| /fmu/in/rover_rate_setpoint | [px4_msgs::msg::RoverRateSetpoint](../msg_docs/RoverRateSetpoint.md) |
| /fmu/in/rover_throttle_setpoint | [px4_msgs::msg::RoverThrottleSetpoint](../msg_docs/RoverThrottleSetpoint.md) |
| /fmu/in/rover_steering_setpoint | [px4_msgs::msg::RoverSteeringSetpoint](../msg_docs/RoverSteeringSetpoint.md) |
| /fmu/in/landing_gear | [px4_msgs::msg::LandingGear](../msg_docs/LandingGear.md) |
## Subscriptions Multi
@@ -85,192 +94,191 @@ They are not build into the module, and hence are neither published or subscribe
::: details See messages
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [EventV0](../msg_docs/EventV0.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [RoverThrottleSetpoint](../msg_docs/RoverThrottleSetpoint.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [GimbalDeviceAttitudeStatus](../msg_docs/GimbalDeviceAttitudeStatus.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [RoverAttitudeSetpoint](../msg_docs/RoverAttitudeSetpoint.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [InputRc](../msg_docs/InputRc.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [Event](../msg_docs/Event.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [RoverSteeringSetpoint](../msg_docs/RoverSteeringSetpoint.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [RoverVelocityStatus](../msg_docs/RoverVelocityStatus.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [Ping](../msg_docs/Ping.md)
- [LedControl](../msg_docs/LedControl.md)
- [Wind](../msg_docs/Wind.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [Gripper](../msg_docs/Gripper.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [LandingGear](../msg_docs/LandingGear.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [RoverRateSetpoint](../msg_docs/RoverRateSetpoint.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [RoverVelocitySetpoint](../msg_docs/RoverVelocitySetpoint.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [Gripper](../msg_docs/Gripper.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [Mission](../msg_docs/Mission.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [Rpm](../msg_docs/Rpm.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [Ping](../msg_docs/Ping.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [LedControl](../msg_docs/LedControl.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [Event](../msg_docs/Event.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [Rpm](../msg_docs/Rpm.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [TransponderReport](../msg_docs/TransponderReport.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [Mission](../msg_docs/Mission.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [RoverPositionSetpoint](../msg_docs/RoverPositionSetpoint.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
:::
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [InputRc](../msg_docs/InputRc.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [EscReport](../msg_docs/EscReport.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [EventV0](../msg_docs/EventV0.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
:::
+8
View File
@@ -503,6 +503,11 @@ publications:
- topic: /fmu/out/vehicle_trajectory_waypoint_desired
type: px4_msgs::msg::VehicleTrajectoryWaypoint
- topic: /fmu/out/vehicle_imu
type: px4_msgs::msg::VehicleImu
rate_limit: 50.
instance: 1 # OPTIONAL
subscriptions:
- topic: /fmu/in/offboard_control_mode
@@ -535,6 +540,9 @@ Each (`topic`,`type`) pairs defines:
4. The message type (`VehicleOdometry`, `VehicleStatus`, `OffboardControlMode`, etc.) and the ROS 2 package (`px4_msgs`) that is expected to provide the message definition.
5. **(Optional)**: An additional `rate_limit` field (only for publication entries), which specifies the maximum rate (Hz) at which messages will be published on this topic by PX4 to ROS 2.
If left unspecified, the maximum publication rate limit is set to 100 Hz.
6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2.
If provided, this option changes the ROS 2 topic name of the advertised uORB topic appending the instance number: `fmu/out/[uorb topic name][instance]` (plus eventual namespace and message version).
In the example above the final topic name would be `/fmu/out/vehicle_imu1`.
`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS2 publications, respectively.
Without this mechanism all ROS 2 messages would be routed to the _same_ uORB topic instance (because ROS 2 does not have the concept of [multiple topic instances](../middleware/uorb.md#multi-instance)), and it would not be possible for PX4 subscribers to differentiate between streams from ROS 2 or PX4 publishers.
+1
View File
@@ -434,6 +434,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
*/
#include <px4_platform_common/px4_config.h>
#include <px4_platform_common/log.h>
#include <px4_platform_common/tasks.h>
#include <px4_platform_common/posix.h>
#include <unistd.h>
+25 -60
View File
@@ -2,6 +2,7 @@
Subcategories:
- [Adc](modules_driver_adc.md)
- [Airspeed Sensor](modules_driver_airspeed_sensor.md)
- [Baro](modules_driver_baro.md)
- [Camera](modules_driver_camera.md)
@@ -46,66 +47,6 @@ MCP23009 <command> [arguments...]
status print status info
```
## adc
Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/board_adc)
### Description
ADC driver.
### Usage {#adc_usage}
```
adc <command> [arguments...]
Commands:
start
test
[-n] Do not publish ADC report, only system power
stop
status print status info
```
## ads1115
Source: [drivers/adc/ads1115](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/ads1115)
### Description
Driver to enable an external [ADS1115](https://www.adafruit.com/product/1085) ADC connected via I2C.
The driver is included by default in firmware for boards that do not have an internal analog to digital converter,
such as [PilotPi](../flight_controller/raspberry_pi_pilotpi.md) or [CUAV Nora](../flight_controller/cuav_nora.md)
(search for `CONFIG_DRIVERS_ADC_ADS1115` in board configuration files).
It is enabled/disabled using the
[ADC_ADS1115_EN](../advanced_config/parameter_reference.md#ADC_ADS1115_EN)
parameter, and is disabled by default.
If enabled, internal ADCs are not used.
### Usage {#ads1115_usage}
```
ads1115 <command> [arguments...]
Commands:
start
[-I] Internal I2C bus(es)
[-X] External I2C bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-a <val>] I2C address
default: 72
stop
status print status info
```
## atxxxx
Source: [drivers/osd/atxxxx](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/osd/atxxxx)
@@ -808,6 +749,30 @@ lsm303agr <command> [arguments...]
status print status info
```
## mcp9808
Source: [drivers/temperature_sensor/mcp9808](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/temperature_sensor/mcp9808)
### Usage {#mcp9808_usage}
```
mcp9808 <command> [arguments...]
Commands:
start
[-I] Internal I2C bus(es)
[-X] External I2C bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-a <val>] I2C address
default: 24
stop
status print status info
```
## msp_osd
Source: [drivers/osd/msp_osd](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/osd/msp_osd)
+107
View File
@@ -0,0 +1,107 @@
# Modules Reference: Adc (Driver)
## TLA2528
Source: [drivers/adc/tla2528](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/tla2528)
### Usage {#TLA2528_usage}
```
TLA2528 <command> [arguments...]
Commands:
start
[-I] Internal I2C bus(es)
[-X] External I2C bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
stop
status print status info
```
## adc
Source: [drivers/adc/board_adc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/board_adc)
### Description
ADC driver.
### Usage {#adc_usage}
```
adc <command> [arguments...]
Commands:
start
test
[-n] Do not publish ADC report, only system power
stop
status print status info
```
## ads1115
Source: [drivers/adc/ads1115](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/ads1115)
### Description
Driver to enable an external [ADS1115](https://www.adafruit.com/product/1085) ADC connected via I2C.
The driver is included by default in firmware for boards that do not have an internal analog to digital converter,
such as [PilotPi](../flight_controller/raspberry_pi_pilotpi.md) or [CUAV Nora](../flight_controller/cuav_nora.md)
(search for `CONFIG_DRIVERS_ADC_ADS1115` in board configuration files).
It is enabled/disabled using the
[ADC_ADS1115_EN](../advanced_config/parameter_reference.md#ADC_ADS1115_EN)
parameter, and is disabled by default.
If enabled, internal ADCs are not used.
### Usage {#ads1115_usage}
```
ads1115 <command> [arguments...]
Commands:
start
[-I] Internal I2C bus(es)
[-X] External I2C bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-a <val>] I2C address
default: 72
stop
status print status info
```
## ads7953
Source: [drivers/adc/ads7953](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/adc/ads7953)
### Usage {#ads7953_usage}
```
ads7953 <command> [arguments...]
Commands:
start
[-s] Internal SPI bus(es)
[-S] External SPI bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-c <val>] chip-select pin (for internal SPI) or index (for external SPI)
[-m <val>] SPI mode
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
stop
status print status info
```
+10 -10
View File
@@ -4,10 +4,9 @@
Source: [drivers/rc/crsf_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/crsf_rc)
### Description
This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data
This module parses the CRSF RC uplink protocol and generates CRSF downlink telemetry data
### Usage {#crsf_rc_usage}
@@ -17,6 +16,10 @@ crsf_rc <command> [arguments...]
start
[-d <val>] RC device
values: <file:dev>, default: /dev/ttyS3
[-b <val>] RC baudrate
default: 420000
inject Inject frame data bytes (for testing)
stop
@@ -27,10 +30,9 @@ crsf_rc <command> [arguments...]
Source: [drivers/rc/dsm_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/dsm_rc)
### Description
This module does Spektrum DSM RC input parsing.
This module does Spektrum DSM RC input parsing.
### Usage {#dsm_rc_usage}
@@ -52,10 +54,9 @@ dsm_rc <command> [arguments...]
Source: [drivers/rc/ghst_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/ghst_rc)
### Description
This module does Ghost (GHST) RC input parsing.
This module does Ghost (GHST) RC input parsing.
### Usage {#ghst_rc_usage}
@@ -75,9 +76,10 @@ ghst_rc <command> [arguments...]
Source: [drivers/rc_input](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc_input)
### Description
This module does the RC input parsing and auto-selecting the method. Supported methods are:
- PPM
- SBUS
- DSM
@@ -85,7 +87,6 @@ This module does the RC input parsing and auto-selecting the method. Supported m
- ST24
- TBS Crossfire (CRSF)
### Usage {#rc_input_usage}
```
@@ -106,10 +107,9 @@ rc_input <command> [arguments...]
Source: [drivers/rc/sbus_rc](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/rc/sbus_rc)
### Description
This module does SBUS RC input parsing.
This module does SBUS RC input parsing.
### Usage {#sbus_rc_usage}
+12 -6
View File
@@ -1,15 +1,21 @@
# AdcReport (UORB message)
ADC raw data.
Communicates raw data from an analog-to-digital converter (ADC) to other modules, such as battery status.
[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/AdcReport.msg)
```c
uint64 timestamp # time since system start (microseconds)
uint32 device_id # unique device ID for the sensor that does not change between power cycles
int16[12] channel_id # ADC channel IDs, negative for non-existent, TODO: should be kept same as array index
int32[12] raw_data # ADC channel raw value, accept negative value, valid if channel ID is positive
uint32 resolution # ADC channel resolution
float32 v_ref # ADC channel voltage reference, use to calculate LSB voltage(lsb=scale/resolution)
# ADC raw data.
#
# Communicates raw data from an analog-to-digital converter (ADC) to other modules, such as battery status.
uint64 timestamp # [us] Time since system start
uint32 device_id # [-] unique device ID for the sensor that does not change between power cycles
int16[16] channel_id # [-] ADC channel IDs, negative for non-existent, TODO: should be kept same as array index
int32[16] raw_data # [-] ADC channel raw value, accept negative value, valid if channel ID is positive
uint32 resolution # [-] ADC channel resolution
float32 v_ref # [V] ADC channel voltage reference, use to calculate LSB voltage(lsb=scale/resolution)
```
+13 -2
View File
@@ -1,7 +1,5 @@
# EscReport (UORB message)
[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EscReport.msg)
```c
@@ -18,6 +16,19 @@ uint8 esc_state # State of ESC - depend on Vendor
uint8 actuator_function # actuator output function (one of Motor1...MotorN)
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101
uint8 ACTUATOR_FUNCTION_MOTOR2 = 102
uint8 ACTUATOR_FUNCTION_MOTOR3 = 103
uint8 ACTUATOR_FUNCTION_MOTOR4 = 104
uint8 ACTUATOR_FUNCTION_MOTOR5 = 105
uint8 ACTUATOR_FUNCTION_MOTOR6 = 106
uint8 ACTUATOR_FUNCTION_MOTOR7 = 107
uint8 ACTUATOR_FUNCTION_MOTOR8 = 108
uint8 ACTUATOR_FUNCTION_MOTOR9 = 109
uint8 ACTUATOR_FUNCTION_MOTOR10 = 110
uint8 ACTUATOR_FUNCTION_MOTOR11 = 111
uint8 ACTUATOR_FUNCTION_MOTOR12 = 112
uint16 failures # Bitmask to indicate the internal ESC faults
int8 esc_power # Applied power 0-100 in % (negative values reserved)
+2 -2
View File
@@ -1,7 +1,5 @@
# InputRc (UORB message)
[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/InputRc.msg)
```c
@@ -39,11 +37,13 @@ bool rc_lost # RC receiver connection status: True,if no frame has arrived in
uint16 rc_lost_frame_count # Number of lost RC frames. Note: intended purpose: observe the radio link quality if RSSI is not available. This value must not be used to trigger any failsafe-alike functionality.
uint16 rc_total_frame_count # Number of total RC frames. Note: intended purpose: observe the radio link quality if RSSI is not available. This value must not be used to trigger any failsafe-alike functionality.
uint16 rc_ppm_frame_length # Length of a single PPM frame. Zero for non-PPM systems
uint16 rc_frame_rate # RC frame rate in msg/second. 0 = invalid
uint8 input_source # Input source
uint16[18] values # measured pulse widths for each of the supported channels
int8 link_quality # link quality. Percentage 0-100%. -1 = invalid
float32 rssi_dbm # Actual rssi in units of dBm. NaN = invalid
int8 link_snr # link signal to noise ratio in units of dB. -1 = invalid
```
-15
View File
@@ -1,15 +0,0 @@
# RoverVelocitySetpoint (UORB message)
Rover Velocity Setpoint
[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverVelocitySetpoint.msg)
```c
# Rover Velocity Setpoint
uint64 timestamp # [us] Time since system start
float32 speed # [m/s] [@range -inf (Backwards), inf (Forwards)] Speed setpoint
float32 bearing # [rad] [@range -pi,pi] [@frame NED] [@invalid: NaN, speed is defined in body x direction] Bearing setpoint
float32 yaw # [rad] [@range -pi, pi] [@frame NED] [@invalid NaN, Defaults to vehicle yaw] Mecanum only: Yaw setpoint
```
-18
View File
@@ -1,18 +0,0 @@
# RoverVelocityStatus (UORB message)
Rover Velocity Status
[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RoverVelocityStatus.msg)
```c
# Rover Velocity Status
uint64 timestamp # [us] Time since system start
float32 measured_speed_body_x # [m/s] [@range -inf (Backwards), inf (Forwards)] [@frame Body] Measured speed in body x direction
float32 adjusted_speed_body_x_setpoint # [m/s] [@range -inf (Backwards), inf (Forwards)] [@frame Body] Speed setpoint in body x direction that is being tracked (Applied slew rates)
float32 pid_throttle_body_x_integral # [] [@range -1, 1] Integral of the PID for the closed loop controller of the speed in body x direction
float32 measured_speed_body_y # [m/s] [@range -inf (Left), inf (Right)] [@frame Body] [@invalid NaN If not mecanum] Mecanum only: Measured speed in body y direction
float32 adjusted_speed_body_y_setpoint # [m/s] [@range -inf (Left), inf (Right)] [@frame Body] [@invalid NaN If not mecanum] Mecanum only: Speed setpoint in body y direction that is being tracked (Applied slew rates)
float32 pid_throttle_body_y_integral # [] [@range -1, 1] [@invalid NaN If not mecanum] Mecanum only: Integral of the PID for the closed loop controller of the speed in body y direction
```
+11
View File
@@ -0,0 +1,11 @@
# SensorTemp (UORB message)
[source file](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorTemp.msg)
```c
uint64 timestamp # time since system start (microseconds)
uint32 device_id # unique device ID for the sensor that does not change between power cycles
float32 temperature # Temperature provided by sensor (Celsius)
```
+1 -1
View File
@@ -28,7 +28,7 @@ uint16 VEHICLE_CMD_DO_ORBIT = 34 # Start orbiting on the circumference of a circ
uint16 VEHICLE_CMD_DO_FIGUREEIGHT = 35 # Start flying on the outline of a figure eight defined by the parameters. |[m] Major radius|[m] Minor radius|[m/s] Velocity|Orientation|Latitude/X|Longitude/Y|Altitude/Z|
uint16 VEHICLE_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |[@enum VEHICLE_ROI] Region of interest mode.|MISSION index/ target ID.|ROI index (allows a vehicle to manage multiple ROI's)|Unused|x the location of the fixed ROI (see MAV_FRAME)|y|z|
uint16 VEHICLE_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning|0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid|Unused|[deg] [@range 0, 360] Yaw angle at goal, in compass degrees|Latitude/X of goal|Longitude/Y of goal|Altitude/Z of goal|
uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Unused|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude|
uint16 VEHICLE_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground / hand and transition to fixed wing. |Minimum pitch (if airspeed sensor present), desired pitch without sensor|Transition heading, 0: Default, 3: Use specified transition heading|Unused|Yaw angle (if magnetometer present), ignored without magnetometer|Latitude|Longitude|Altitude|
uint16 VEHICLE_CMD_NAV_VTOL_LAND = 85 # Transition to MC and land at location. |Unused|Unused|Unused|Desired yaw angle.|Latitude|Longitude|Altitude|
uint16 VEHICLE_CMD_NAV_GUIDED_LIMITS = 90 # Set limits for external control. |[s] Timeout - maximum time that external controller will be allowed to control vehicle. 0 means no timeout|[m] Absolute altitude min AMSL - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit|[m] Absolute altitude max - if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit|[m] Horizontal move limit (AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit|Unused|Unused|Unused|
uint16 VEHICLE_CMD_NAV_GUIDED_MASTER = 91 # Set id of master controller. |System ID|Component ID|Unused|Unused|Unused|Unused|Unused|
+2 -1
View File
@@ -84,7 +84,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
- [ActuatorOutputs](ActuatorOutputs.md)
- [ActuatorServosTrim](ActuatorServosTrim.md) — Servo trims, added as offset to servo outputs
- [ActuatorTest](ActuatorTest.md)
- [AdcReport](AdcReport.md)
- [AdcReport](AdcReport.md) — ADC raw data.
- [Airspeed](Airspeed.md) — Airspeed data from sensors
- [AirspeedWind](AirspeedWind.md) — Wind estimate (from airspeed_selector)
- [AutotuneAttitudeControlStatus](AutotuneAttitudeControlStatus.md) — Autotune attitude control status
@@ -259,6 +259,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
The topic will not be updated when the vehicle is armed
- [SensorSelection](SensorSelection.md) — Sensor ID's for the voted sensors output on the sensor_combined topic.
Will be updated on startup of the sensor module and when sensor selection changes
- [SensorTemp](SensorTemp.md)
- [SensorUwb](SensorUwb.md) — UWB distance contains the distance information measured by an ultra-wideband positioning system,
such as Pozyx or NXP Rddrone.
- [SensorsStatus](SensorsStatus.md) — Sensor check metrics. This will be zero for a sensor that's primary or unpopulated.
+5
View File
@@ -76,6 +76,10 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
- TBD
### RC
- Parse ELRS Status and Link Statistics TX messages in the CRSF parser.
### Multi-Rotor
- Removed parameters `MPC_{XY/Z/YAW}_MAN_EXPO` and use default value instead, as they were not deemed necessary anymore. ([PX4-Autopilot#25435: Add new flight mode: Altitude Cruise](https://github.com/PX4/PX4-Autopilot/pull/25435)).
@@ -89,6 +93,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
- [Fixed Wing Takeoff mode](../flight_modes_fw/takeoff.md) will now keep climbing with level wings on position loss.
A target takeoff waypoint can be set to control takeoff course and loiter altitude. ([PX4-Autopilot#25083](https://github.com/PX4/PX4-Autopilot/pull/25083)).
- Automatically suppress angular rate oscillations using [Gain compression](../features_fw/gain_compression.md). ([PX4-Autopilot#25840: FW rate control: add gain compression algorithm](https://github.com/PX4/PX4-Autopilot/pull/25840))
### Rover
+42 -8
View File
@@ -30,17 +30,51 @@ If needed, you can:
- Change the selection order of barometers using the [CAL_BAROx_PRIO](../advanced_config/parameter_reference.md#CAL_BARO0_PRIO) parameters for each barometer.
- Disable a barometer by setting its [CAL_BAROx_PRIO](../advanced_config/parameter_reference.md#CAL_BARO0_PRIO) value to `0`.
## Calibration
## Baro Auto-Calibration (Developers)
Barometers don't require calibration.
::: tip
This section documents the automated calibration mechanisms that ensure accurate altitude measurements throughout flight operations.
It is intended primarily for a developer audience who want to understand the underlying mechanisms.
:::
<!-- Notes:
- Absolute value isn't important since we just use the difference in altitude between "now" and the value when initializing EKF2
- There is usually a scale factor error but it's compensated by the GNSS altitude using a bias estimator in EKF2 (we don't provide a way to calibrate that). This method is fine as long as the height change of the drone isn't too fast (below 200-300km/h probably; don't have real data on that).
- The baro readings can be corrected using a param SENS_BARO_QNH (https://en.wikipedia.org/wiki/Altimeter_setting) parameter, but again, it is only necessary to adjust it if the absolute barometric altitude is required by the pilot.
-->
The system implements two complementary calibration approaches that work together to maintain altitude measurement precision.
Both calibrations are initiated at the beginning after a system boot.
Relative calibration is performed first, followed by GNSS-barometric calibration.
## Developer Information
### Relative Calibration
Relative baro calibration is **always enabled** and operates automatically during system initialization.
This calibration establishes offset corrections for all secondary baro sensors relative to the primary (selected) sensor.
This calibration:
- Eliminates altitude jumps when switching between baro sensors during flight.
- Ensures consistent altitude readings across all available baro sensors.
- Maintains seamless sensor redundancy and failover capability.
### GNSS-Baro Calibration
::: info
GNSS-baro calibration requires an operational GNSS receiver with vertical accuracy (EPV) ≤ 8 meters.
Relative calibration must already have completed.
:::
GNSS-baro calibration adjusts baro sensor offsets to align with absolute altitude measurements from the GNSS receiver.
This calibration is controlled by the [SENS_BAR_AUTOCAL](../advanced_config/parameter_reference.md#SENS_BAR_AUTOCAL) parameter (enabled by default).
The algorithm monitors GNSS quality, collects altitude differences over a 2-second filtered window, and verifies stability within 4m tolerance.
Once stable, it uses binary search to calculate pressure offsets that align baro altitude with GNSS altitude (0.1m precision), then applies the offset to all sensors and saves the parameters.
Notes:
- **EKF Independence**: GNSS-baro calibration operates independently of EKF2 altitude fusion settings.
- **Execution Timing**: Calibration runs even when [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) altitude fusion is disabled.
- **One-Time Process**: Each calibration session completes once per system startup.
- **Persistence**: Calibration offsets are saved to parameters and persist across reboots.
- **Faulty GNSS Vulnerability**: If GNSS data is faulty during boot, the calibration will use incorrect altitude reference.
See [Faulty GNSS Data During Boot](../advanced_config/tuning_the_ecl_ekf.md#faulty-gnss-data-during-boot) for mitigation strategies.
## See Also
- [Baro driver source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/barometer)
- [Modules Reference: Baro (Driver)](../modules/modules_driver_baro.md) documentation.
+2
View File
@@ -182,6 +182,7 @@
- [Wiring Quickstart](assembly/quick_start_durandal.md)
- [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md)
- [Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md)
- [MicoAir H743 Lite](flight_controller/micoair743-lite.md)
- [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md)
- [mRo Control Zero F7](flight_controller/mro_control_zero_f7.md)
- [Radiolink PIX6](flight_controller/radiolink_pix6.md)
@@ -504,6 +505,7 @@
- [UART/Serial 포트](uart/index.md)
- [포트 설정 가능 시리얼 드라이버](uart/user_configurable_serial_driver.md)
- [RTK GPS (통합)](advanced/rtk_gps.md)
- [PPS Time Synchronization](advanced/pps_time_sync.md)
- [미들웨어](middleware/index.md)
- [uORB 메시지 전송](middleware/uorb.md)
- [uORB 그라프](middleware/uorb_graph.md)
+135
View File
@@ -0,0 +1,135 @@
# PPS Time Synchronization (PX4 Integration)
[Pulse Per Second](https://en.wikipedia.org/wiki/Pulse-per-second_signal) (PPS) time synchronization provides high-precision timing for GNSS receivers.
This page explains how PPS is integrated into PX4 and how to configure it.
## 개요
PPS (Pulse Per Second) is a timing signal provided by GNSS receivers that outputs an electrical pulse once per second, synchronized to UTC time.
The PPS signal provides a highly accurate timing reference that PX4 can use to:
- Refine GNSS time measurements and compensate for clock drift
- Provide precise UTC timestamps for camera capture events (for photogrammetry and mapping applications)
- Enable offline position refinement through accurate time correlation
## 지원 하드웨어
PPS time synchronization can be supported on flight controllers that have a hardware timer input pin that can be configured for PPS capture, by [enabling the PPS capture driver](#enable-pps-driver-in-board-configuration) in the board configuration.
Supported boards include (at time of writing):
- [Ark FMUv6x](../flight_controller/ark_v6x.md)
- Auterion FMUv6x
- Auterion FMUv6s
## 설정
### Enable PPS Driver in Board Configuration
The [PPS capture driver](../modules/modules_driver.md#pps-capture) must be enabled in the board configuration.
This is done by adding the following to your board's configuration:
```ini
CONFIG_DRIVERS_PPS_CAPTURE=y
```
### Configure PPS Parameters
The configuration varies depending on your flight controller hardware.
#### FMUv6X
For FMUv6X-based flight controllers, configure PWM AUX Timer 3 and Function 9:
```sh
param set PWM_AUX_TIM3 -2
param set PWM_AUX_FUNC9 2064
param set PPS_CAP_ENABLE 1
```
#### FMUv6S
For FMUv6S-based flight controllers, configure PWM MAIN Timer 3 and Function 10:
```sh
param set PWM_MAIN_TIM3 -2
param set PWM_MAIN_FUNC10 2064
param set PPS_CAP_ENABLE 1
```
### 배선
The wiring configuration depends on your specific flight controller.
#### Skynode X (FMUv6x)
Connect the PPS signal from your GNSS module to the flight controller using the 11-pin or 6-pin GPS connector:
For detailed pinout information, refer to:
- [Skynode GPS Peripherals - Pinouts](https://docs.auterion.com/hardware-integration/skynode/peripherals/gps#pinouts)
#### Skynode S (FMUv6S)
For FMUv6S, you need to route the PPS signal separately:
1. Connect your GNSS module using the standard 6-pin GPS connector: [Skynode S GPS Interface](https://docs.auterion.com/hardware-integration/skynode-s/interfaces#gps)
2. Connect the PPS signal from your GNSS module to the **PPM_IN** pin: [Skynode S Extras 1 Interface](https://docs.auterion.com/hardware-integration/skynode-s/interfaces#extras-1)
#### ARK Jetson Carrier Board (FMUv6x)
For ARK FMUv6X on the Jetson carrier board:
1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab#gps1)
2. Connect the PPS signal to the **FMU_CAP** pin: [ARK PAB ADIO Interface](../flight_controller/ark_pab.md#adio)
## 검증
After configuring PPS, you can verify that it is working correctly:
1. Connect to the [PX4 System Console](../debug/system_console.md) (via MAVLink shell or serial console).
2. Wait for GNSS fix.
3. Check the PPS capture status to confirm it is up and running:
```sh
pps_capture status
```
4. You can also check the [PpsCapture](../msg_docs/PpsCapture.md) uORB topic
```sh
listener pps_capture
```
Where you should see: `timestamp`, `rtc_timestamp`, and `pps_rate_exceeded_counter`.
### PPS Capture Driver
The PPS capture driver is located in `src/drivers/pps_capture` and uses hardware timer input capture to precisely measure the arrival time of each PPS pulse.
주요 기능:
- Sub-microsecond pulse capture precision (hardware-dependent)
- Automatic drift calculation and compensation
- Integration with the GNSS driver for refined time stamping
See also:
- [PPS Capture Driver Documentation](../modules/modules_driver.md#pps-capture)
- [PpsCapture Message](../msg_docs/PpsCapture.md)
### Time Synchronization Flow
1. GNSS module sends position/time data at ~1-20 Hz.
2. GNSS module outputs PPS pulse at 1 Hz, precisely aligned to UTC second boundary.
3. PPS capture driver measures the exact time of the PPS pulse arrival using hardware timer.
4. Driver calculates the offset between GNSS time (from UART data) and autopilot clock (from PPS measurement).
5. This offset is used to correct GNSS timestamps and improve sensor fusion accuracy.
The PPS signal provides much higher temporal precision than the transmitted time data, which has latency and jitter from serial communication.
:::warning
If the PPS driver does not sending any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the `EKF2_GPS_DELAY` will be used instead for estimating the latency.
:::
@@ -89,7 +89,7 @@ Flight controllers that have bootloader PX4-Autopilot `make` targets, can build
The list of controllers for which this applies can be obtained by running the following `make` command, and noting the `make` targets that end in `_bootloader`
```
$make list_config_targets
$ make list_config_targets
...
cuav_nora_bootloader
@@ -30,6 +30,7 @@ This category includes boards that are not fully compliant with the pixhawk stan
- [Holybro Kakute H7](../flight_controller/kakuteh7.md)
- [Holybro Durandal](../flight_controller/durandal.md)
- [Holybro Pix32 v5](../flight_controller/holybro_pix32_v5.md)
- [MicoAir H743 Lite](../flight_controller/micoair743-lite.md)
- [ModalAI VOXL 2](../flight_controller/modalai_voxl_2.md)
- [mRo Control Zero](../flight_controller/mro_control_zero_f7.md)
- [Radiolink PIX6](../flight_controller/radiolink_pix6.md)
@@ -0,0 +1,153 @@
# MicoAir743-Lite
<Badge type="tip" text="main (planned for: PX4 v1.17)" />
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://micoair.com/) for hardware support or compliance issues.
:::
MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbeatable price, featuring the ICM45686 IMU sensor and integrated Bluetooth telemetry.
![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png)
Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size).
When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC.
:::info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## MicoAir743-Lite (v1.1)
![MicoAir743-Lite Back View](../../assets/flight_controller/micoair743_lite/back_view.png)
## 요약
### Processors & Sensors
- FMU Processor: STM32H743
- 32 Bit Arm® Cortex®-M7, 480MHz, 2MB flash memory, 1MB RAM
- 내장 센서 :
- Accel/Gyro: ICM-45686 (with BalancedGyro™ Technology)
- Barometer: SPA06
- On-board Bluetooth Telemetry
- Connected to UART8 internally, baudrate 115200
- Connecting to QGC (PC or Android phone) via Bluetooth
- 기타 특성:
- Operating & storage temperature: -20 ~ 85°c
### 인터페이스
- 8 UART (TELEM / GPS / RC)
- 14 PWM outputs 10 supports DShot
- Support multiple RC inputs (SBUS / CRSF / DSM)
- 1 GPS port
- 1 I2C port
- 2 ADC port2 (VBAT, Current)
- 1 DJI O3/O4 VTX connector
- 1 MicroSD Card Slot
- 1 USB Type-C
### Electrical data
- VBAT Input:
- 2\~6S (6\~27V)
- USB Power Input:
- 4.75\~5.25V
- BEC Output:
- 5V 2A (for controller, receiver, GPS, optical flow or other devices)
- 9V 2A (for video transmitter, camera)
### Mechanical data
- Mounting: 30.5 x 30.5mm, Φ4mm
- Dimensions: 36 x 36 x 8 mm
- Weight: 10g
![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png)
## 구매처
Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/).
## 핀배열
Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw.githubusercontent.com/PX4/PX4-Autopilot/refs/heads/main/docs/assets/flight_controller/micoair743_lite/micoair743_lite_pinout.xlsx) file.
## 시리얼 포트 매핑
| UART | 장치 | 포트 |
| ------ | ---------- | ------ |
| USART1 | /dev/ttyS0 | TELEM1 |
| USART2 | /dev/ttyS1 | GPS2 |
| USART3 | /dev/ttyS2 | GPS1 |
| UART4 | /dev/ttyS3 | TELEM2 |
| UART5 | /dev/ttyS4 | TELEM3 |
| USART6 | /dev/ttyS5 | RC |
| UART7 | /dev/ttyS6 | URT6 |
| UART8 | /dev/ttyS7 | TELEM4 |
## Interfaces Diagram
:::note
All the connectors used on the board are SH1.0
:::
![MicoAir743-Lite Interface Diagram](../../assets/flight_controller/micoair743_lite/interfaces_diagram.png)
## Sample Wiring Diagram
![MicoAir743-Lite Wiring Diagram](../../assets/flight_controller/micoair743_lite/wiring_diagram.png)
## 펌웨어 빌드
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
make micoair_h743-lite_default
```
## 펌웨어 설치
펌웨어는 일반적인 방법으로 설치할 수 있습니다.
- 소스 빌드 및 업로드
```sh
make micoair_h743-lite_default upload
```
- [Load the firmware](../config/firmware.md) using _QGroundControl_.
미리 빌드된 펌웨어나 사용자 지정 펌웨어를 사용할 수 있습니다.
::: info
At time of writing the only pre-built software is `PX4 main` (see [Installing PX4 Main, Beta or Custom Firmware](../config/firmware.md#installing-px4-main-beta-or-custom-firmware)).
Release builds will be supported for PX4 v1.17 and later.
:::
## 무선 조종
A [Radio Control (RC) system](../getting_started/rc_transmitter_receiver.md) is required if you want to manually control your vehicle (PX4 does not require a radio system for autonomous flight modes).
The RC port is connected to the FMU and you can attach a receiver that uses the protocols `DSM`, `SBUS`, `CSRF`, `GHST`, or other protocol listed in [Radio Control modules](../modules/modules_driver_radio_control.md).
You will need to enable the protocol by setting the corresponding parameter `RC_xxxx_PRT_CFG`, such as [RC_CRSF_PRT_CFG](../advanced_config/parameter_reference.md#RC_CRSF_PRT_CFG) for a [CRSF receiver](../telemetry/crsf_telemetry.md).
## 지원 플랫폼 및 기체
일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트.
The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md).
## 주변 장치
- [MicoAir Telemetry Radio Modules](https://micoair.com/radio_telemetry/)
- [MicoAir Optical & Range Sensor](https://micoair.com/optical_range_sensor/)
- [MicoAir GPS](https://micoair.com/gps/)
- [MicoAir ESC Modules](https://micoair.com/esc/)
## 추가 정보
- [MicoAir Tech.](https://micoair.com/)
- [Details about MicoAir743-Lite](https://micoair.com/flightcontroller_micoair743lite/)
- [QGroundControl Download and Install](https://docs.qgroundcontrol.com/Stable_V5.0/en/qgc-user-guide/getting_started/download_and_install.html)
@@ -100,6 +100,24 @@ PX4 _developers_ need to know the FMU version of their board, as this is require
<a id="licensing-and-trademarks"></a>
### FMUv6 Comparison
| 기능 | **FMUv6X-RT** | **FMUv6X** | **FMUv6C** |
| ------------------ | ------------------------------- | ------------- | ------------- |
| **FMU MCU** | NXP i.MX RT1176 | STM32H753 | STM32H743V |
| **RAM** | 2 MB | 1 MB | 1 MB |
| **Flash** | 64 MB Octal SPI | 2 MB internal | 2 MB internal |
| **IO MCU** | STM32F103 | STM32F103 | STM32F103 |
| **Secure Element** | NXP SE051 | NXP SE051 | Not supported |
| **PAB Standard** | Supported | Supported | Not supported |
| **Ethernet** | Supported | Supported | Not supported |
| **IMUs** | 3× | 3× | 2× |
| **Barometers** | 2× | 2× | 1× |
| **Magnetometer** | 1× | 1× | 1× |
| **FMU PWM** | 12× | 8× | 8× |
| **IO PWM** | 8× | 8× | 8× |
| **CAN Bus** | 3× | 2× | 2× |
### 라이선스와 상표
Pixhawk project schematics and reference designs are licensed under [CC BY-SA 3](https://creativecommons.org/licenses/by-sa/3.0/legalcode).
-5
View File
@@ -25,11 +25,6 @@ The default type is recommended.
:::
:::warning
There is a known issue ([PX4-Autopilot#25436](https://github.com/PX4/PX4-Autopilot/issues/25436)) with fixed-wing approaches and landings while in RTL mode.
Please review the issue and verify in simulation that the behavior you get is safe in an RTL landing scenario (if not, consider using rally points).
:::
## Technical Summary
Fixed-wing vehicles use the _mission landing/rally point_ return type by default.
+15 -5
View File
@@ -145,21 +145,21 @@ To ensure the port is set up correctly perform a [Serial Port Configuration](../
The following steps show how to configure a secondary GPS on the `GPS 2` port in _QGroundControl_:
1. [Find and set](../advanced_config/parameters.md) the parameter [GPS_2_CONFIG](../advanced_config/parameter_reference.md#GPS_2_CONFIG) to **GPS 2**.
- Open _QGroundControl_ and navigate to the **Vehicle Setup > Parameters** section.
- Select the **GPS** tab, then open the [GPS_2_CONFIG](../advanced_config/parameter_reference.md#GPS_2_CONFIG) parameter and select `GPS 2` from the dropdown list.
- Open _QGroundControl_ and navigate to the **Vehicle Setup > Parameters** section.
- Select the **GPS** tab, then open the [GPS_2_CONFIG](../advanced_config/parameter_reference.md#GPS_2_CONFIG) parameter and select `GPS 2` from the dropdown list.
![QGC Serial Example](../../assets/peripherals/qgc_serial_config_example.png)
![QGC Serial Example](../../assets/peripherals/qgc_serial_config_example.png)
2. 다른 매개변수를 표시하려면 기체를 재부팅하십시오.
3. Select the **Serial** tab, and open the [SER_GPS2_BAUD](../advanced_config/parameter_reference.md#SER_GPS2_BAUD) parameter (`GPS 2` port baud rate): set it to _Auto_ (or 115200 for the Trimble).
![QGC Serial Baudrate Example](../../assets/peripherals/qgc_serial_baudrate_example.png)
![QGC Serial Baudrate Example](../../assets/peripherals/qgc_serial_baudrate_example.png)
보조 GPS 포트를 설정 후 :
1. 두 GPS 시스템의 데이터를 혼합하도록 ECL/EKF2 추정기를 설정합니다.
For detailed instructions see: [Using the ECL EKF > Dual Receivers](../advanced_config/tuning_the_ecl_ekf.md#dual-receivers).
For detailed instructions see: [Using the ECL EKF > Dual Receivers](../advanced_config/tuning_the_ecl_ekf.md#dual-receivers).
### DroneCAN GNSS Configuration
@@ -197,11 +197,21 @@ It is possible to have low DOP (good satellite geometry) but still have high EPH
EPH/EPV values therefore provide a more immediate and practical estimate of the actual GPS accuracy you can expect under current conditions.
### GNSS Position Fusion
GNSS position fusion will not begin until yaw alignment is established.
If a magnetometer is available, the EKF aligns yaw using the magnetic heading, allowing GPS position fusion to start soon after boot.
If no magnetometer is present, the system must rely on GPS yaw (from a dual-antenna setup) or movement-based yaw estimation.
Until one of these provides a valid heading, the EKF will not start GPS position fusion, and the vehicle will remain in a “no position” state even though attitude data is valid.
This behavior prevents large position errors that could occur when the yaw reference is uncertain.
## 개발자 정보
- GPS/RTK-GPS
- [RTK-GPS](../advanced/rtk_gps.md)
- [PPS Time Synchronization](../advanced/pps_time_sync.md)
- [GPS driver](../modules/modules_driver.md#gps)
- [PPS driver](../modules/modules_driver.md#pps-capture)
- [DroneCAN Example](../dronecan/index.md)
- 나침반
- [Driver source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer) (Compasses)
+1
View File
@@ -40,6 +40,7 @@ This list contains stand-alone magnetometer modules (without GNSS).
| 장치 | 나침반 | DroneCan |
| :--------------------------------------------------------------------------------------------------------------- | :----: | :------: |
| [ARK MAG](https://arkelectron.com/product/ark-mag/) | RM3100 | ✓ |
| [Avionics Anonymous UAVCAN Magnetometer](https://www.tindie.com/products/avionicsanonymous/uavcan-magnetometer/) | ? | |
| [Holybro DroneCAN RM3100 Compass/Magnetometer](https://holybro.com/products/dronecan-rm3100-compass) | RM3100 | ✓ |
| [RaccoonLab DroneCAN/Cyphal Magnetometer RM3100](https://holybro.com/products/dronecan-rm3100-compass) | RM3100 | ✓ |
+10 -1
View File
@@ -454,6 +454,7 @@ uxrce_dds_client start -n fancy_uav
```
This can be included in `etc/extras.txt` as part of a custom [System Startup](../concept/system_startup.md).
:::
## PX4 ROS 2 QoS Settings
@@ -515,6 +516,11 @@ publications:
- topic: /fmu/out/vehicle_trajectory_waypoint_desired
type: px4_msgs::msg::VehicleTrajectoryWaypoint
- topic: /fmu/out/vehicle_imu
type: px4_msgs::msg::VehicleImu
rate_limit: 50.
instance: 1 # OPTIONAL
subscriptions:
- topic: /fmu/in/offboard_control_mode
@@ -547,6 +553,9 @@ Each (`topic`,`type`) pairs defines:
4. The message type (`VehicleOdometry`, `VehicleStatus`, `OffboardControlMode`, etc.) and the ROS 2 package (`px4_msgs`) that is expected to provide the message definition.
5. **(Optional)**: An additional `rate_limit` field (only for publication entries), which specifies the maximum rate (Hz) at which messages will be published on this topic by PX4 to ROS 2.
If left unspecified, the maximum publication rate limit is set to 100 Hz.
6. **(Optional)**: An additional `instance` field (only for publication entries), which lets you select which instance of a [multi-instance topic](./uorb.md#multi-instance) you want to be published to ROS 2.
If provided, this option changes the ROS 2 topic name of the advertised uORB topic appending the instance number: `fmu/out/[uorb topic name][instance]` (plus eventual namespace and message version).
In the example above the final topic name would be `/fmu/out/vehicle_imu1`.
`subscriptions` and `subscriptions_multi` allow us to choose the uORB topic instance that ROS 2 topics are routed to: either a shared instance that may also be getting updates from internal PX4 uORB publishers, or a separate instance that is reserved for ROS2 publications, respectively.
Without this mechanism all ROS 2 messages would be routed to the _same_ uORB topic instance (because ROS 2 does not have the concept of [multiple topic instances](../middleware/uorb.md#multi-instance)), and it would not be possible for PX4 subscribers to differentiate between streams from ROS 2 or PX4 publishers.
@@ -588,7 +597,7 @@ For a list of services, details and examples see the [service documentation](../
These guidelines explain how to migrate from using PX4 v1.13 [Fast-RTPS](../middleware/micrortps.md) middleware to PX4 v1.14 `uXRCE-DDS` middleware.
These are useful if you have [ROS 2 applications written for PX4 v1.13](https://docs.px4.io/v1.13/en/ros/ros2_comm.html), or you have used Fast-RTPS to interface your applications to PX4 [directly](https://docs.px4.io/v1.13/en/middleware/micrortps.html#agent-in-an-offboard-fast-dds-interface-ros-independent).
::: info
:::info
This section contains migration-specific information.
You should also read the rest of this page to properly understand uXRCE-DDS.
:::
+120 -119
View File
@@ -28,151 +28,151 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
1. Create a new directory **PX4-Autopilot/src/examples/px4_simple_app**.
2. Create a new C file in that directory named **px4_simple_app.c**:
- 기본 헤더를 페이지 상단에 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다.
- 기본 헤더를 페이지 상단에 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다.
```c
/****************************************************************************
*
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
```
```c
/****************************************************************************
*
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
```
- 기본 헤더 아래에 다음 코드를 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다.
- 기본 헤더 아래에 다음 코드를 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다.
```c
/**
* @file px4_simple_app.c
* Minimal application example for PX4 autopilot
*
* @author Example User <mail@example.com>
*/
```c
/**
* @file px4_simple_app.c
* Minimal application example for PX4 autopilot
*
* @author Example User <mail@example.com>
*/
#include <px4_platform_common/log.h>
#include <px4_platform_common/log.h>
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
return OK;
}
```
int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
return OK;
}
```
:::tip
The main function must be named `<module_name>_main` and exported from the module as shown.
:::tip
The main function must be named `<module_name>_main` and exported from the module as shown.
:::
:::tip
`PX4_INFO` is the equivalent of `printf` for the PX4 shell (included from **px4_platform_common/log.h**).
There are different log levels: `PX4_INFO`, `PX4_WARN`, `PX4_ERR`, `PX4_DEBUG`.
Warnings and errors are additionally added to the [ULog](../dev_log/ulog_file_format.md) and shown on [Flight Review](https://logs.px4.io/).
:::tip
`PX4_INFO` is the equivalent of `printf` for the PX4 shell (included from **px4_platform_common/log.h**).
There are different log levels: `PX4_INFO`, `PX4_WARN`, `PX4_ERR`, `PX4_DEBUG`.
Warnings and errors are additionally added to the [ULog](../dev_log/ulog_file_format.md) and shown on [Flight Review](https://logs.px4.io/).
:::
3. Create and open a new _cmake_ definition file named **CMakeLists.txt**.
아래 텍스트를 복사하십시오.
아래 텍스트를 복사하십시오.
```cmake
############################################################################
#
# Copyright (c) 2015 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
MODULE examples__px4_simple_app
MAIN px4_simple_app
STACK_MAIN 2000
SRCS
px4_simple_app.c
DEPENDS
)
```
```cmake
############################################################################
#
# Copyright (c) 2015 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
MODULE examples__px4_simple_app
MAIN px4_simple_app
STACK_MAIN 2000
SRCS
px4_simple_app.c
DEPENDS
)
```
The `px4_add_module()` method builds a static library from a module description.
The `px4_add_module()` method builds a static library from a module description.
- The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
- The `MAIN` block lists the entry point of the module, which registers the command with NuttX so that it can be called from the PX4 shell or SITL console.
- The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
- The `MAIN` block lists the entry point of the module, which registers the command with NuttX so that it can be called from the PX4 shell or SITL console.
:::tip
The `px4_add_module()` format is documented in [PX4-Autopilot/cmake/px4_add_module.cmake](https://github.com/PX4/PX4-Autopilot/blob/main/cmake/px4_add_module.cmake). <!-- NEED px4_version -->
:::tip
The `px4_add_module()` format is documented in [PX4-Autopilot/cmake/px4_add_module.cmake](https://github.com/PX4/PX4-Autopilot/blob/main/cmake/px4_add_module.cmake). <!-- NEED px4_version -->
:::
::: info
If you specify `DYNAMIC` as an option to `px4_add_module`, a _shared library_ is created instead of a static library on POSIX platforms (these can be loaded without having to recompile PX4, and shared to others as binaries rather than source code).
Your app will not become a builtin command, but ends up in a separate file called `examples__px4_simple_app.px4mod`.
You can then run your command by loading the file at runtime using the `dyn` command: `dyn ./examples__px4_simple_app.px4mod`
::: info
If you specify `DYNAMIC` as an option to `px4_add_module`, a _shared library_ is created instead of a static library on POSIX platforms (these can be loaded without having to recompile PX4, and shared to others as binaries rather than source code).
Your app will not become a builtin command, but ends up in a separate file called `examples__px4_simple_app.px4mod`.
You can then run your command by loading the file at runtime using the `dyn` command: `dyn ./examples__px4_simple_app.px4mod`
:::
4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)).
아래 텍스트를 복사하십시오.
아래 텍스트를 복사하십시오.
```
menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app"
default n
---help---
Enable support for px4_simple_app
```
```
menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app"
default n
---help---
Enable support for px4_simple_app
```
## 애플리케이션/펌웨어 빌드
@@ -440,6 +440,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
*/
#include <px4_platform_common/px4_config.h>
#include <px4_platform_common/log.h>
#include <px4_platform_common/tasks.h>
#include <px4_platform_common/posix.h>
#include <unistd.h>
+2
View File
@@ -182,6 +182,7 @@
- [Wiring Quickstart](assembly/quick_start_durandal.md)
- [Holybro Pix32 v5](flight_controller/holybro_pix32_v5.md)
- [Wiring Quickstart](assembly/quick_start_holybro_pix32_v5.md)
- [MicoAir H743 Lite](flight_controller/micoair743-lite.md)
- [ModalAI VOXL 2](flight_controller/modalai_voxl_2.md)
- [mRo Control Zero F7](flight_controller/mro_control_zero_f7.md)
- [Radiolink PIX6](flight_controller/radiolink_pix6.md)
@@ -504,6 +505,7 @@
- [UART/Послідовний порт](uart/index.md)
- [Драйвери послідовного порту і їх налаштування](uart/user_configurable_serial_driver.md)
- [RTK GPS (Інтеграція)](advanced/rtk_gps.md)
- [PPS Time Synchronization](advanced/pps_time_sync.md)
- [Проміжне програмне забезпечення](middleware/index.md)
- [Повідомлення uORB](middleware/uorb.md)
- [Граф uORB](middleware/uorb_graph.md)
+135
View File
@@ -0,0 +1,135 @@
# PPS Time Synchronization (PX4 Integration)
[Pulse Per Second](https://en.wikipedia.org/wiki/Pulse-per-second_signal) (PPS) time synchronization provides high-precision timing for GNSS receivers.
This page explains how PPS is integrated into PX4 and how to configure it.
## Загальний огляд
PPS (Pulse Per Second) is a timing signal provided by GNSS receivers that outputs an electrical pulse once per second, synchronized to UTC time.
The PPS signal provides a highly accurate timing reference that PX4 can use to:
- Refine GNSS time measurements and compensate for clock drift
- Provide precise UTC timestamps for camera capture events (for photogrammetry and mapping applications)
- Enable offline position refinement through accurate time correlation
## Підтримуване обладнання
PPS time synchronization can be supported on flight controllers that have a hardware timer input pin that can be configured for PPS capture, by [enabling the PPS capture driver](#enable-pps-driver-in-board-configuration) in the board configuration.
Supported boards include (at time of writing):
- [Ark FMUv6x](../flight_controller/ark_v6x.md)
- Auterion FMUv6x
- Auterion FMUv6s
## Установка
### Enable PPS Driver in Board Configuration
The [PPS capture driver](../modules/modules_driver.md#pps-capture) must be enabled in the board configuration.
This is done by adding the following to your board's configuration:
```ini
CONFIG_DRIVERS_PPS_CAPTURE=y
```
### Configure PPS Parameters
The configuration varies depending on your flight controller hardware.
#### FMUv6X
For FMUv6X-based flight controllers, configure PWM AUX Timer 3 and Function 9:
```sh
param set PWM_AUX_TIM3 -2
param set PWM_AUX_FUNC9 2064
param set PPS_CAP_ENABLE 1
```
#### FMUv6S
For FMUv6S-based flight controllers, configure PWM MAIN Timer 3 and Function 10:
```sh
param set PWM_MAIN_TIM3 -2
param set PWM_MAIN_FUNC10 2064
param set PPS_CAP_ENABLE 1
```
### Підключення
The wiring configuration depends on your specific flight controller.
#### Skynode X (FMUv6x)
Connect the PPS signal from your GNSS module to the flight controller using the 11-pin or 6-pin GPS connector:
For detailed pinout information, refer to:
- [Skynode GPS Peripherals - Pinouts](https://docs.auterion.com/hardware-integration/skynode/peripherals/gps#pinouts)
#### Skynode S (FMUv6S)
For FMUv6S, you need to route the PPS signal separately:
1. Connect your GNSS module using the standard 6-pin GPS connector: [Skynode S GPS Interface](https://docs.auterion.com/hardware-integration/skynode-s/interfaces#gps)
2. Connect the PPS signal from your GNSS module to the **PPM_IN** pin: [Skynode S Extras 1 Interface](https://docs.auterion.com/hardware-integration/skynode-s/interfaces#extras-1)
#### ARK Jetson Carrier Board (FMUv6x)
For ARK FMUv6X on the Jetson carrier board:
1. Connect your GNSS module using either the 10-pin or 6-pin GPS connector: [ARK PAB GPS1 Interface](../flight_controller/ark_pab#gps1)
2. Connect the PPS signal to the **FMU_CAP** pin: [ARK PAB ADIO Interface](../flight_controller/ark_pab.md#adio)
## Перевірка
After configuring PPS, you can verify that it is working correctly:
1. Connect to the [PX4 System Console](../debug/system_console.md) (via MAVLink shell or serial console).
2. Wait for GNSS fix.
3. Check the PPS capture status to confirm it is up and running:
```sh
pps_capture status
```
4. You can also check the [PpsCapture](../msg_docs/PpsCapture.md) uORB topic
```sh
listener pps_capture
```
Where you should see: `timestamp`, `rtc_timestamp`, and `pps_rate_exceeded_counter`.
### PPS Capture Driver
The PPS capture driver is located in `src/drivers/pps_capture` and uses hardware timer input capture to precisely measure the arrival time of each PPS pulse.
Основні функції:
- Sub-microsecond pulse capture precision (hardware-dependent)
- Automatic drift calculation and compensation
- Integration with the GNSS driver for refined time stamping
See also:
- [PPS Capture Driver Documentation](../modules/modules_driver.md#pps-capture)
- [PpsCapture Message](../msg_docs/PpsCapture.md)
### Time Synchronization Flow
1. GNSS module sends position/time data at ~1-20 Hz.
2. GNSS module outputs PPS pulse at 1 Hz, precisely aligned to UTC second boundary.
3. PPS capture driver measures the exact time of the PPS pulse arrival using hardware timer.
4. Driver calculates the offset between GNSS time (from UART data) and autopilot clock (from PPS measurement).
5. This offset is used to correct GNSS timestamps and improve sensor fusion accuracy.
The PPS signal provides much higher temporal precision than the transmitted time data, which has latency and jitter from serial communication.
:::warning
If the PPS driver does not sending any data for 5 seconds (despite having `PPS_CAP_ENABLE` set to 1), the `EKF2_GPS_DELAY` will be used instead for estimating the latency.
:::
@@ -89,7 +89,7 @@ dfu-util -a 0 --dfuse-address 0x08000000 -D build/<target>/<target>.bin
Список контролерів, яких це стосується, можна отримати, виконавши наступну команду `make` і зазначивши цілі `make`, які закінчуються на `_bootloader`
```
$make list_config_targets
$ make list_config_targets
...
cuav_nora_bootloader
@@ -30,6 +30,7 @@ This category includes boards that are not fully compliant with the pixhawk stan
- [Holybro Kakute H7](../flight_controller/kakuteh7.md)
- [Holybro Durandal](../flight_controller/durandal.md)
- [Holybro Pix32 v5](../flight_controller/holybro_pix32_v5.md)
- [MicoAir H743 Lite](../flight_controller/micoair743-lite.md)
- [ModalAI VOXL 2](../flight_controller/modalai_voxl_2.md)
- [mRo Control Zero](../flight_controller/mro_control_zero_f7.md)
- [Radiolink PIX6](../flight_controller/radiolink_pix6.md)
@@ -0,0 +1,153 @@
# MicoAir743-Lite
<Badge type="tip" text="main (planned for: PX4 v1.17)" />
:::warning
PX4 не розробляє цей (або будь-який інший) автопілот.
Contact the [manufacturer](https://micoair.com/) for hardware support or compliance issues.
:::
MicoAir743-Lite is an ultra-high performance H743 flight controller with an unbeatable price, featuring the ICM45686 IMU sensor and integrated Bluetooth telemetry.
![MicoAir743-Lite Front View](../../assets/flight_controller/micoair743_lite/front_view.png)
Equipped with a high-performance H7 processor, the MicoAir743-Lite features a compact form factor with SH1.0 connectors (which are more suitable than Pixhawk-standard GH1.25 for this board size).
When paired with with Bluetooth telemetry, the board can be debugged with a phone or PC.
:::info
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
:::
## MicoAir743-Lite (v1.1)
![MicoAir743-Lite Back View](../../assets/flight_controller/micoair743_lite/back_view.png)
## Короткий опис
### Processors & Sensors
- FMU Processor: STM32H743
- 32 Bit Arm® Cortex®-M7, 480MHz, 2MB flash memory, 1MB RAM
- Сенсори на платі
- Accel/Gyro: ICM-45686 (with BalancedGyro™ Technology)
- Barometer: SPA06
- On-board Bluetooth Telemetry
- Connected to UART8 internally, baudrate 115200
- Connecting to QGC (PC or Android phone) via Bluetooth
- Інші характеристики:
- Operating & storage temperature: -20 ~ 85°c
### Інтерфейси
- 8 UART (TELEM / GPS / RC)
- 14 PWM outputs 10 supports DShot
- Support multiple RC inputs (SBUS / CRSF / DSM)
- 1 GPS port
- 1 I2C порт
- 2 ADC port2 (VBAT, Current)
- 1 DJI O3/O4 VTX connector
- 1 MicroSD Card Slot
- 1 USB Type-C
### Електричні дані
- VBAT Input:
- 2\~6S (6\~27V)
- USB Power Input:
- 4.75\~5.25V
- BEC Output:
- 5V 2A (for controller, receiver, GPS, optical flow or other devices)
- 9V 2A (for video transmitter, camera)
### Механічні характеристики
- Mounting: 30.5 x 30.5mm, Φ4mm
- Dimensions: 36 x 36 x 8 mm
- Weight: 10g
![MicoAir743-Lite Size](../../assets/flight_controller/micoair743_lite/size.png)
## Де купити
Order from [MicoAir Tech Store](https://store.micoair.com/product/micoair743-lite/).
## Схема розташування виводів
Pinouts definition can be found in the [MicoAir743-Lite_pinout.xlsx](https://raw.githubusercontent.com/PX4/PX4-Autopilot/refs/heads/main/docs/assets/flight_controller/micoair743_lite/micoair743_lite_pinout.xlsx) file.
## Налаштування послідовного порту
| UART | Пристрій | Порт |
| ------ | ---------- | ------ |
| USART1 | /dev/ttyS0 | TELEM1 |
| USART2 | /dev/ttyS1 | GPS2 |
| USART3 | /dev/ttyS2 | GPS1 |
| UART4 | /dev/ttyS3 | TELEM2 |
| UART5 | /dev/ttyS4 | TELEM3 |
| USART6 | /dev/ttyS5 | RC |
| UART7 | /dev/ttyS6 | URT6 |
| UART8 | /dev/ttyS7 | TELEM4 |
## Interfaces Diagram
:::note
All the connectors used on the board are SH1.0
:::
![MicoAir743-Lite Interface Diagram](../../assets/flight_controller/micoair743_lite/interfaces_diagram.png)
## Зразок схеми з'єднань
![MicoAir743-Lite Wiring Diagram](../../assets/flight_controller/micoair743_lite/wiring_diagram.png)
## Збірка прошивки
To [build PX4](../dev_setup/building_px4.md) for this target:
```sh
make micoair_h743-lite_default
```
## Встановлення прошивки PX4
Прошивку можна встановити будь-якими звичайними способами:
- Збудуйте та завантажте джерело
```sh
make micoair_h743-lite_default upload
```
- [Load the firmware](../config/firmware.md) using _QGroundControl_.
Ви можете використовувати або готове вбудоване програмне забезпечення, або власне користувацьке програмне забезпечення.
::: info
At time of writing the only pre-built software is `PX4 main` (see [Installing PX4 Main, Beta or Custom Firmware](../config/firmware.md#installing-px4-main-beta-or-custom-firmware)).
Release builds will be supported for PX4 v1.17 and later.
:::
## Радіоуправління
A [Radio Control (RC) system](../getting_started/rc_transmitter_receiver.md) is required if you want to manually control your vehicle (PX4 does not require a radio system for autonomous flight modes).
The RC port is connected to the FMU and you can attach a receiver that uses the protocols `DSM`, `SBUS`, `CSRF`, `GHST`, or other protocol listed in [Radio Control modules](../modules/modules_driver_radio_control.md).
You will need to enable the protocol by setting the corresponding parameter `RC_xxxx_PRT_CFG`, such as [RC_CRSF_PRT_CFG](../advanced_config/parameter_reference.md#RC_CRSF_PRT_CFG) for a [CRSF receiver](../telemetry/crsf_telemetry.md).
## Підтримувані платформи / Конструкції
Будь-який мультикоптер / літак / наземна платформа / човен, який може керуватися звичайними RC сервоприводами або сервоприводами Futaba S-Bus.
The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md).
## Периферійні пристрої
- [MicoAir Telemetry Radio Modules](https://micoair.com/radio_telemetry/)
- [MicoAir Optical & Range Sensor](https://micoair.com/optical_range_sensor/)
- [MicoAir GPS](https://micoair.com/gps/)
- [MicoAir ESC Modules](https://micoair.com/esc/)
## Подальша інформація
- [MicoAir Tech.](https://micoair.com/)
- [Details about MicoAir743-Lite](https://micoair.com/flightcontroller_micoair743lite/)
- [QGroundControl Download and Install](https://docs.qgroundcontrol.com/Stable_V5.0/en/qgc-user-guide/getting_started/download_and_install.html)
@@ -100,6 +100,24 @@ PX4 _developers_ need to know the FMU version of their board, as this is require
<a id="licensing-and-trademarks"></a>
### FMUv6 Comparison
| Характеристика | **FMUv6X-RT** | **FMUv6X** | **FMUv6C** |
| ------------------ | ------------------------------- | ------------- | ------------- |
| **FMU MCU** | NXP i.MX RT1176 | STM32H753 | STM32H743V |
| **RAM** | 2 MB | 1 MB | 1 MB |
| **Flash** | 64 MB Octal SPI | 2 MB internal | 2 MB internal |
| **IO MCU** | STM32F103 | STM32F103 | STM32F103 |
| **Secure Element** | NXP SE051 | NXP SE051 | Not supported |
| **PAB Standard** | Supported | Supported | Not supported |
| **Ethernet** | Supported | Supported | Not supported |
| **IMUs** | 3× | 3× | 2× |
| **Barometers** | 2× | 2× | 1× |
| **Magnetometer** | 1× | 1× | 1× |
| **FMU PWM** | 12× | 8× | 8× |
| **IO PWM** | 8× | 8× | 8× |
| **CAN Bus** | 3× | 2× | 2× |
### Ліцензування та товарні знаки
Pixhawk project schematics and reference designs are licensed under [CC BY-SA 3](https://creativecommons.org/licenses/by-sa/3.0/legalcode).
-5
View File
@@ -25,11 +25,6 @@
:::
:::warning
There is a known issue ([PX4-Autopilot#25436](https://github.com/PX4/PX4-Autopilot/issues/25436)) with fixed-wing approaches and landings while in RTL mode.
Please review the issue and verify in simulation that the behavior you get is safe in an RTL landing scenario (if not, consider using rally points).
:::
## Технічний підсумок
Літальні апарати з фіксованим крилом за замовчуванням використовують тип повернення до призначення _місії посадки/точка збору_.
+10
View File
@@ -197,11 +197,21 @@ It is possible to have low DOP (good satellite geometry) but still have high EPH
EPH/EPV values therefore provide a more immediate and practical estimate of the actual GPS accuracy you can expect under current conditions.
### GNSS Position Fusion
GNSS position fusion will not begin until yaw alignment is established.
If a magnetometer is available, the EKF aligns yaw using the magnetic heading, allowing GPS position fusion to start soon after boot.
If no magnetometer is present, the system must rely on GPS yaw (from a dual-antenna setup) or movement-based yaw estimation.
Until one of these provides a valid heading, the EKF will not start GPS position fusion, and the vehicle will remain in a “no position” state even though attitude data is valid.
This behavior prevents large position errors that could occur when the yaw reference is uncertain.
## Інформація для розробників
- GPS/RTK-GPS
- [RTK-GPS](../advanced/rtk_gps.md)
- [PPS Time Synchronization](../advanced/pps_time_sync.md)
- [GPS driver](../modules/modules_driver.md#gps)
- [PPS driver](../modules/modules_driver.md#pps-capture)
- [DroneCAN Example](../dronecan/index.md)
- Компас
- [Driver source code](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/magnetometer) (Compasses)

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