Commit Graph

50514 Commits

Author SHA1 Message Date
Hyunduk Shin
2bc9774170 feat(airframes): add generic airship 2026-06-29 12:34:55 -07:00
Jacob Dahl
7fc5fd4d71 perf(arkfpv): remove COMMON_LIGHT and MAGNETOMETER_QMC5883L to free up flash (#27770) 2026-06-29 13:18:15 -06:00
Hyunduk Shin
3660130a13 feat(boards): add fmu-v6x airship build variant
Add a focused airship build target (make px4_fmu-v6x_airship) on the
reference flagship, mirroring the existing spacecraft and uuv
experimental-vehicle variants on the same board. It enables
control_allocator and airship_att_control and keeps land_detector
(the airship startup runs `land_detector start airship`), and disables
the fixed-wing, multicopter and VTOL controllers an airship does not use.

Builds at 86.76% flash with the Cloudship airframe included.

Signed-off-by: Hyunduk Shin <hyunduk@icarus-airship.com>
2026-06-29 11:39:17 -07:00
Claudio Chies
fec1c7c9f0 fix(sensor_baro_sim): update barometer timestamp handling in simulation (#27761)
Co-authored-by: Claudio Chies <chiesc@chies.com>
2026-06-29 12:38:34 -06:00
Eric Katzfey
30cdf15ff5 fix(posix): make pxh app map initialization thread-safe
Pxh lazily initializes the builtin app map from client handler threads. Concurrent first commands can both enter init_app_map() and mutate the static std::map at the same time.

Use pthread_once so the map is populated exactly once before process_line() or tab completion read it.
2026-06-29 11:36:39 -07:00
PX4BuildBot
85deba5f49 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-29 15:06:18 +00:00
elisaaferraraa
96038adb6b fix(failsafe): allow orbit on the first command after a failsafe (#27673)
* fix(failsafe): allow orbit on the first command after a failsafe

modifyUserIntendedMode() downgrades a requested Orbit to Loiter when
releasing control after an active failsafe action, to avoid silently
auto-resuming a stale Orbit intention. It could not distinguish that auto-resume
from a fresh, explicit DO_ORBIT the operator sends right after resolving the
failsafe: two DO_ORBIT commands where needed to actually re-start an orbit.

Now using user_intended_mode_updated signal, the downgrade is skipped when the orbit is explicitely requested.

* fix(failsafe): fix ITCM symbol and test names after orbit fix

The added modifyUserIntendedMode() parameter changed its mangled name,
breaking the ITCM check (fmu-v6xrt, mr-tropic, tropic-community). Update the
symbol and rename the two new tests to CamelCase for clang-tidy.

* fix(failsafe): suggestion for a simpler approach to solve the divverted Orbit after failsafe problem

* fix(failsafe_test): inherit from Failsafe instead of FailsafeBase to not duplicate modifyUserIntendedMode()

Also change all test names to consistent camel case.

---------

Co-authored-by: Matthias Grob <maetugr@gmail.com>
2026-06-29 16:59:50 +02:00
PX4 Build Bot
dc2868132b docs(i18n): PX4 guide translations (Crowdin) - ko (#27755)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-06-28 14:47:28 +10:00
PX4 Build Bot
d7bd51a86d docs(i18n): PX4 guide translations (Crowdin) - uk (#27756)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-06-28 14:47:21 +10:00
PX4 Build Bot
ed84d04bfc docs(i18n): PX4 guide translations (Crowdin) - zh-CN (#27757)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-06-28 14:47:14 +10:00
Silvan Fuhrer
3266323abb chore(ark_fpv): remove diagnostic tools to save flash (#27753)
* chore(ark_fpv): remove diagnostic tools to save flash

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

* add back sd_bench

---------

Signed-off-by: Silvan <silvan@auterion.com>
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
2026-06-26 22:12:04 -06:00
jmackay2
a2e5ee6b5c optical flow bump (#27752)
Co-authored-by: jmackay2 <jmackay2@gmail.com>
2026-06-26 16:53:01 -06:00
PX4BuildBot
efc10f0a20 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-26 20:50:04 +00:00
Michael Fritsche
bcbaaa3a18 feat(ice_controller): add a FF-PI controlled idle RPM governor (#27650)
Disabled if ICE_IDLE_RPM is 0. 
The idle state is entered when the commanded throttle is close to zero
or the measured RPM drops below the idle threshold.
The idle state is exited if the commanded thrust is increased to above 
the last needed throttle to keep idle. 

Signed-off-by: Silvan <silvan@auterion.com>
Co-authored-by: Silvan <silvan@auterion.com>
2026-06-26 22:43:47 +02:00
PX4BuildBot
8184116c7f docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-26 09:04:11 +00:00
Gennaro Guidone
2a0e048171 feat(mc_att_control): feedforward filtered q_d derivative on rate sp (#27255)
Add a 2nd-order critically-damped attitude reference model whose angular-velocity output is fed forward onto the rate setpoint, removing the steady-state ramp-tracking lag of the pure-P attitude law. The model uses an exact closed-form discretisation, so it is unconditionally stable.

Parameters:
- MC_REF_W_N     reference-model bandwidth [rad/s]
- MC_REF_FF      feedforward gain [0..1]; 0 disables the anticipation
- MC_REF_FF_MAX  per-axis feedforward saturation [deg/s]

The commanded yaw rate is always fed forward at unity (it is a setpoint, not a model prediction), so MC_REF_FF scales only the error-driven anticipation and MC_REF_FF=0 is the exact legacy pure-P law. Shipped disabled by default to avoid changing behaviour on existing platforms; enable per-airframe. Includes docs and the updated controller diagram.
2026-06-26 10:57:48 +02:00
Jaeyoung Lim
171f0f38cf fix(fw_mode_manager): Fix regression with offboard gliding setpoints (#26538)
* Fix regression with gliding setpoints

* Remove speed weight handling

* Require valid position setpoint for path setpoint

* Fix altitude assignment
2026-06-25 20:02:35 -07:00
PX4BuildBot
b885ad65a0 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-25 22:57:55 +00:00
Davide Iafrate
6ddf60c7b4 feat(sim): add RotorPy simulator support (#27116)
* Add rotorpy simulator and integrate with main simulator script

* docs: add rotorpy simulator instructions

* docs(update): subedit

* docs: address RotorPy review comments

---------

Co-authored-by: Davide Iafrate <dvde.iafrate98@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-06-25 15:51:55 -07:00
Ramon Roche
3db36cb022 ci(macos): trust PX4 brew taps for Homebrew 6.0
Homebrew 6.0 (2026-06-11) makes tap-trust mandatory and refuses to load
formulae from untrusted third-party taps. This broke every macOS build:
brew install aborted with "Refusing to load formula px4/px4/fastdds from
untrusted tap px4/px4" before pouring any package, so ccache (and the
rest of the toolchain) was never installed and setup-ccache failed with
"ccache: command not found".

Trust the three required taps non-interactively before installing from
them. Guarded behind a brew trust capability check so older Homebrew,
which has no trust gate, skips it.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-06-25 13:23:29 -07:00
alexcekay
c92a7e2bd2 feat(boards_v6s): add NOR flash 2026-06-25 16:20:19 +02:00
Marin Doetterer
4065b05930 feat(heater): heater-modul in cannode does now also publish pitot_temperature via raw-air-data,
pitot_temperature added to uORB-msg differential_pressure
2026-06-25 16:15:47 +02:00
Jacob Dahl
6849612e97 fix(boards): update STM32H7 bootloaders with ECC scrub and enable bl_update (#27715)
* fix(boards): update STM32H7 bootloaders with ECC scrub and enable bl_update

The committed extras/*_bootloader.bin for every STM32H7 flash-parameter
target predate #27642, so none carry the uncorrectable-flash-ECC scrub
that keeps a torn parameter-flash write from bricking the board on every
boot. Rebuild each bootloader from current main with the release
toolchain (GCC 13.2.1) and enable CONFIG_SYSTEMCMDS_BL_UPDATE so the fix
can be applied in the field via SYS_BL_UPDATE without a debugger; the
~40-45 KB image is embedded in ROMFS only when the option is on.

ark/fpv drops LANDING_TARGET_ESTIMATOR to fit the embedded image,
x-mav/ap-h743v2 gets its first committed bin, and a stray duplicate
bootloader bin is removed from kakuteh7dualimu/extras.

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>

* fix(boards): remove SCH16T from ARK FPV mavlink-dev.px4board

---------

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>
2026-06-24 13:41:19 -06:00
Jacob Dahl
0c452ada7c fix(boards): change ARK Flow MR board ID to 94 to fix conflict 2026-06-24 11:19:28 -07:00
Matthias Grob
c05cc47b75 fix(mc_defaults): remove 2m instead of 10m acceptance radius (#27738)
This setting comes from a time where takeoff was accepted immediately if the acceptance radius was too big and also the mission behavior was completely different:

95a8414895
2026-06-24 10:06:26 -06:00
alexcekay
246484e91b feat(mtd): allow bulk erase 2026-06-24 15:32:44 +02:00
alexcekay
6f1f7035a5 feat(mtd): add NOR FLASH support 2026-06-24 15:32:44 +02:00
Balduin
b5f69ac4e8 fix(commander): only set geofence_breached failsafe flag if failsafe action needed
The previous behaviour was equal to this (we only sent the
geofence_result at all if GF_ACTION != 0).

If we set the failsafe flag even if a geofence is triggered but no
action is configured, the failsafe state machine does not trigger the
failsafe action (only on rising edge).

This means the geofence_breached failsafe flag has, and used to have,
the meaning of "geofence breached and action needed", which would change
if we set it always when a geofence was breached.
2026-06-24 14:27:07 +02:00
Balduin
4f02ee1ee2 refactor(commander): remove unused instance of parameter 2026-06-24 14:27:07 +02:00
Balduin
43ab9128b3 refactor(navigator): consolidate hrt_absolute_time calls 2026-06-24 14:27:07 +02:00
Balduin
f0225bb50c fix(navigator): publish geofence result also if GF_ACTION==0
Currently there is the this bug:
 - Set GF_ACTION=2, breach a geofence
 - While the breach is still occurring, set GF_ACTION=0
 - Fly out of the geofence
 - The warning from GeofenceChecks::checkAndReport sticks around

This is because the entire section is gated by GF_ACTION != 0, so if it
is changed to 0, no geofence_result message is published again.
All consumers are then left with stale data.

Solution: Do not gate on GF_ACTION != 0. Regularly send geofence_result
with the configured action in geofence_action. The individual
`geofence_*_triggered` flags are still populated - consumers ignore them
if GF_ACTION is 0.
2026-06-24 14:27:07 +02:00
Gregor Hohl
852e164269 mavlink: retune low_bandwidth stream rates for manual fixed-wing flight
The low_bandwidth mode (mavlink start -m low_bandwidth) targets telemetry
over constrained RF links, but as tuned it wasted bandwidth on high-rate
redundant streams (e.g. TIMESYNC at 10 Hz, which normal mode does not stream
at all) while updating flight instruments too slowly to fly by.

Speed up flight-critical streams for manual instrument flight and to catch
transient states:
- ATTITUDE_QUATERNION  2   -> 4   Hz  (artificial horizon responsiveness)
- VFR_HUD              1.5 -> 4   Hz  (primary instrument; matches normal mode)
- BATTERY_STATUS       0.5 -> 1   Hz  (catch transient states)
- RAW_RPM              1   -> 2   Hz  (catch transient states; matches normal)

Slow down or drop redundant/low-value traffic for a net bandwidth decrease:
- TIMESYNC            removed       (mirrors normal mode, which does not stream
                                     it; the stream only makes PX4 initiate
                                     timesync to align incoming external
                                     estimator inputs that a GCS link does not
                                     carry. PX4 still responds to GCS-initiated
                                     timesync via the receiver, and SYSTEM_TIME
                                     still carries the wall clock for GCS log
                                     alignment)
- SYSTEM_TIME          2  -> 0.5 Hz  (kept low for vehicle/GCS clock alignment)
- RC_CHANNELS          5  -> 1   Hz  (vehicle->GCS echo of RC, not control uplink)
- GPS_RAW_INT          2  -> 1   Hz  (fix type / sat count; 1 Hz fine)
- GPS2_RAW             2  -> 1   Hz  (was above normal mode's 1 Hz)
- ESC_STATUS           2  -> 1   Hz  (was above normal mode's 1 Hz)
- GPS_GLOBAL_ORIGIN    1  -> 0.1 Hz  (EKF origin set once at init, ~static)

ALTITUDE stays at 1 Hz: VFR_HUD at 4 Hz already carries altitude and climb
rate, and normal mode also keeps it at 1 Hz. Only the
MAVLINK_MODE_LOW_BANDWIDTH case is touched; onboard_low_bandwidth and all
other modes are unaffected.

Signed-off-by: Gregor Hohl <gregor.hohl@auterion.com>
2026-06-24 11:29:38 +02:00
Phil-Engljaehringer
dc3636eed0 docs(docs): serial passthrough (#27654)
* feat: added docs

* feat: some more documentation

* fix: worked on docs again

* fix: added doc to summary.md

* fix: adjusted docs to requests

* docs(docs): Subedit

* feat: added release notes to 1.18.md

* docs(docs): subedit

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-06-24 17:20:46 +10:00
PX4BuildBot
28b0d415cd docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-24 06:22:01 +00:00
Beniamino Pozzan
4c3b41d43e docs(uxrce): add support for DDS v3, ROS 2 lyrical and humble (#27705) 2026-06-24 16:16:00 +10:00
PX4BuildBot
d31c692347 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-24 05:46:21 +00:00
Valentin Bugrov
29a2315dc9 docs(update): InertialLabs fixes (#27662) 2026-06-24 15:40:57 +10:00
Aditya Bidwai
0861ba0088 fix(docs): invert vectorized diagram SVGs in dark mode (#27574)
* fix(docs): invert vectorized diagram SVGs in dark mode

* docs(docs): Apply fix as a class

* Add yarn lock to fix CI

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-06-24 14:20:57 +10:00
Hamish Willee
41c6dcaf70 Update Ubuntu EOL/LTS (#27728) 2026-06-24 11:03:48 +10:00
Jacob Dahl
6cc16ff251 fix(i2c_spi): prevent use-after-free when stopping driver instances (#27723)
* fix(i2c_spi): prevent use-after-free when stopping driver instances

module_stop() deleted each instance before unlinking it from the global
i2c_spi_module_instances list. The instance *is* the intrusive list node,
so removeInstance()/List::remove() then dereferenced the freed node to fix
up the links. If another thread reused that heap block in the window, the
list got corrupted, sporadically leaving instances linked (a later start
reports "already running") or hard-faulting. This regressed in the 2020
array->linked-list refactor: the old array version only nulled an array
slot after delete, which was safe.

Unlink each instance before freeing it. Also only delete/unlink when the
task actually exited: if request_stop_and_wait() times out the work queue
may still reference the object, so leave it allocated and listed rather
than freeing it. module_stop() now returns -1 when an instance failed to
stop.

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>

* Update platforms/common/i2c_spi_buses.cpp

* Update platforms/common/i2c_spi_buses.cpp

---------

Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>
2026-06-23 17:24:06 -06:00
PX4BuildBot
1fbceac99f docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-23 22:06:15 +00:00
Eurus
2082caa6c9 fix(commander): failsafe prevent manual fallback without RC (#27408)
* failsafe: prevent manual fallback without RC

* fix(commander): consolidate manual fallback RC loss handling

Use NAV_RCL_ACT from a single post-cascade check for manual fallback modes,
and add coverage for non-default NAV_RCL_ACT behavior.
2026-06-23 14:59:25 -07:00
PX4BuildBot
3e4977903f docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-23 21:44:20 +00:00
M3nglin
8c532db6b3 orbit: fix roll stick control inversion problem.
Co-authored-by: lqs66 <liuqiaosen666@163.com>
2026-06-23 14:38:57 -07:00
onelittlechildawa
d88af50767 fix(commander): gate checks on topic advertisement
Signed-off-by: onelittlechildawa <onelittlechild@outlook.com>
2026-06-23 14:37:45 -07:00
Silvan
d5b966c37b fix(sih): fix velocity in body direction
Signed-off-by: Silvan <silvan@auterion.com>
2026-06-23 14:34:46 -07:00
Wang Jiayue
150e03cec3 fix(fw_att_control): only persist q_d from attitude setpoint 2026-06-23 14:32:20 -07:00
Wang Jiayue
d61ee886db fix(fw_att_control): clear stale data in stabilized setpoint
Clear stale thrust_body and yaw_sp_move_rate before publishing FW stabilized attitude setpoints.
2026-06-23 14:32:20 -07:00
Jacob Dahl
4edb7d49e2 feat(tools): add DroneCAN sensor latency calibration scripts
Cross-correlation scripts to measure CAN transport delay from flight
logs. Compares CAN sensor signals against the FC's directly-connected
IMU to estimate the total pipeline latency.

- range_sensor_latency.py: cross-correlates range rate with IMU-derived
  vertical velocity
- flow_sensor_latency.py: cross-correlates flow sensor gyro with FC gyro
2026-06-23 14:27:11 -07:00
Baardrw
9864a58fb7 chore: typos 2026-06-23 14:25:46 -07:00