Commit Graph

50514 Commits

Author SHA1 Message Date
PX4BuildBot
06900086ea docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-07-02 06:41:57 +00:00
Balduin
7f81902001 fix(navigator): report correct number of geofence polygon vertices
Currently, this bogus number of vertices is reported:

nsh> navigator status
INFO  [navigator] Running
INFO  [navigator] Geofence: 1 inclusion, 6 exclusion polygons, 0 inclusion circles, 2 exclusion circles, 83345 total vertices

The code that reports it accumulates _polygons[i].vertex_count. But for
circles, that field is a float (union), so we get a random large integer
from casing it implicitly.

struct PolygonInfo {
	uint16_t fence_type; ///< one of MAV_CMD_NAV_FENCE_*
	uint16_t dataman_index;
	union {
		uint16_t vertex_count;
		float circle_radius;
	};
};

Solution: only add vertex_count if we are dealing with a polygon.

Also shorten the overall string slightly, and reorder to make it clear
the vertices belong to the polygons rather than the circles.
2026-07-02 08:36:47 +02:00
PX4BuildBot
99d1d96301 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-07-02 01:54:20 +00:00
PX4 Build Bot
5cd950bfe0 docs(i18n): PX4 guide translations (Crowdin) - ko (#27781)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-07-02 11:48:50 +10:00
PX4 Build Bot
2d04a309b2 docs(i18n): PX4 guide translations (Crowdin) - zh-CN (#27783)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-07-02 11:46:40 +10:00
PX4BuildBot
a86306a146 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-07-01 22:17:34 +00:00
bvrtoverfitprimes
cd900a8973 fix(mavlink): reject unsupported params in commands and missions (#27541)
* fix(mavlink): reject unsupported params in commands and missions

PX4 accepted any non-NaN value in params it does not use for a given
MAV_CMD, silently storing or ignoring them. This made it impossible for
a GCS to detect that a mission item or command was malformed, and risked
unexpected behaviour if the param meaning is assigned in a future update.

Add mavlink_command_params.h: a header-only sorted lookup table mapping
each supported MAV_CMD to uint8 bitmasks (one for mission items, one for
commands) indicating which of params 1-4 are valid.  check_params() does
a binary search and returns the 1-based index of the first offending
param, or 0 if all unsupported params are unset.

A param is considered unset when it is NaN (the MAVLink standard) or 0.0
(the conventional GCS default for unused float fields).  Any other value
in an unsupported slot is rejected:

- Mission uploads (MISSION_ITEM / MISSION_ITEM_INT): NACK with
  MAV_MISSION_INVALID_PARAMn for the offending param index.
- Commands (COMMAND_LONG / COMMAND_INT): ACK with MAV_RESULT_DENIED.

Validation is placed at the MAVLink ingress boundary
(parse_mavlink_mission_item and handle_message_command_both) before any
downstream processing, keeping Commander and Navigator unmodified.

The table covers all 45 MAV_CMDs handled by PX4's mission and command
parsers.  The static_assert enforces sort order at compile time.

Fixes #27483

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): split mission/command p5-7 masks, fix int_mode branch, add vehicle overrides

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): fix 142-char lines and Python CI type/style errors

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): pack p5-7 bits into mission/command byte, fix astyle/type-limits/mypy

* fix(mavlink): range-for over VehicleParamOverrides, fix mypy ignore code

* fix(mavlink): wire check_params_for_vehicle, add int variant, drop non-vehicle check_params

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): suppress clang unused-function on check_params_*_for_vehicle

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): rename local vs to avoid shadow in handle_message_command_both

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): cache vehicle_type_bitmask as member, update on vehicle_status change

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): use named VEHICLE_TYPE_* consts, fix masks, drop WARN spam, fix int_mode cast

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): normalize INT32_MAX to 0 for MAV_FRAME_MISSION p5/p6 in int_mode

For MAV_FRAME_MISSION items, x/y are generic p5/p6 params (not lat/lon),
so GCS tools send 0 for unused params — not INT32_MAX. Using
check_params_int_for_vehicle here caused int_param_is_unset(0)=false,
which rejected valid DO_LAND_START and similar items with x=y=0.

Fix by normalizing INT32_MAX to 0.0f before calling check_params_for_vehicle,
so both the MISSION_ITEM_INT sentinel and the conventional float zero are
treated as unset. This restores acceptance of zero-param items like
DO_LAND_START while still correctly rejecting items that carry non-zero,
non-sentinel values in unsupported param slots.

Signed-off-by: Himaghna <pen314paper@gmail.com>

* fix(mavlink): address review feedback on VTOL masks, NaN sentinel, dead enum, and RTL test frame

* fix(mavlink): move param validation test out of mavsdk_tests, rename header to .hpp

* fix(mavlink): dedupe param-scan loop shared by check_params_for_vehicle variants

---------

Signed-off-by: Himaghna <pen314paper@gmail.com>
2026-07-02 10:11:56 +12:00
Hamish Willee
ad10373383 feat(mavlink): MAV_CMD_DO_SET_GLOBAL_ORIGIN added (#24697) 2026-07-02 10:08:52 +12:00
Anil Kircaliali
a1cd2866d2 chore(msg): fix spaces in comments 2026-07-01 15:05:46 -07:00
Anil Kircaliali
5a7d3e4692 chore(msg): allow dB/MHz/Hz/KiB/s units and UINT max invalid value 2026-07-01 15:05:46 -07:00
Anil Kircaliali
b7d7a36cf0 fix(msg): correct @invalid casing in FixedWingLateralGuidanceStatus 2026-07-01 15:05:46 -07:00
Anil Kircaliali
4cda189739 feat(mavlink): add extended CELLULAR_STATUS fields to cellular_status 2026-07-01 15:05:46 -07:00
Onur Özkan
afa4170acb rover: reuse offboard control timestamp
Setpoints published from the same offboardControl() call come from the
same offboard input update.

Use one timestamp for all of them so messages from the same update do
not get slightly different timestamps.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
2026-07-01 15:03:38 -07:00
Matthias Grob
25b7d627da fix(ROMFS): Safe flash pruning more unnecessary characters from ROMFS (#27775)
* refactor(ROMFS): remove trailing zeros from all airframes

* refactor(ROMFS): remove allignment whitespace from all startup scripts

* feat(romfs_pruner): strip end of line comments in startup scripts

and airframes to not waste any flash.

* feat(romfs_pruner): strip inline multi-whitespace

* fix typo

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

---------

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-01 11:53:21 -08:00
Sean Hickey
e47a2411f1 fix(drivers): handle AS-DT1 Max Distance Bins (#27778)
Co-authored-by: Sean Hickey <sean@ascendengineer.com>
2026-07-01 10:55:51 -04:00
Balduin
f17f70be6f fix(airframes/10042): correct sihsim_xvert sign error
The sihsim_xvert currently tumbles immediately on takeoff. Here is why:

generate_ts_aerodynamics in sih.cpp calculates elevon torques.
everything is rotated into the fixed-wing frame, in which
 - positive _u[4] (configured as CA_SV_CS0) generates positive FW roll
   torque (left wing pushed up)
 - positive _u[5] (configured as CA_SV_CS1) generates positive FW roll
   torque (right wing pushed down, note the additional minus)

So in the FW frame, they work like this:
 - positive _u[4] + _u[5] -> positive FW roll torque
 - positive _u[4] - _u[5] -> positive FW pitch torque

The airframe file however configures all of these in the multicopter
frame. So accounting for the frame conversion, we have:
 - MC yaw = -FW roll = -_u[4] - _u[5]
     - because FW x points nose-forward while MC z points nose-backward
 - MC pitch = FW pitch = _u[4] - _u[5]

or in matrix form:

[  MC yaw  ]   [ -1  -1 ] [ _u[4] ]
[ MC pitch ] = [ 1   -1 ] [ _u[5] ]

and as this matrix is basically (up to scaling)

[ CS0_TRQ_Y CS1_TRQ_Y ]
[ CS0_TRQ_P CS1_TRQ_P ]

we have to change the CS1_TRQ_* coefficients to be negative.
2026-07-01 15:51:28 +02:00
PX4BuildBot
f0c127e5f7 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-07-01 13:06:45 +00:00
Gennaro Guidone
b8c5f66af0 feat(manual_control): replace stick override threshold with double-flick gesture (#27041)
* feat(manual_control): trigger RC override on stick velocity

COM_RC_STICK_OV is now a velocity threshold (1/s) instead of a deflection percentage.
Default 3.0, range [1.0, 10.0]. A stick held statically cannot trigger override.

* docs(manual_control): update COM_RC_STICK_OV description for velocity-based override

* feat(manual_control): gate RC override with sign-consistency check

* fix(ManualControl): lower threshold and filter constant for RC override, add tests for MovingDiff

* refactor(commander): merge RC override params into COM_RC_OVR_SPEED

Replace the COM_RC_OVERRIDE bitmask + COM_RC_STICK_OV threshold with a
single float COM_RC_OVR_SPEED (stick override velocity, 0 = disabled).
Override now applies uniformly in auto and offboard modes.

- ManualControl: rename param, treat 0 as disabled (FLT_EPSILON guard)
- Commander: drop the per-mode bitmask gate and the RcOverrideBits enum
- param_translation: migrate COM_RC_OVERRIDE on import (enabled -> 1.0,
  disabled -> 0.0) and drop the unit-incompatible COM_RC_STICK_OV value
- docs: collapse the two params into one across the mode pages

* fix(manual_override): Move configuration to manual_control module

with MAN_OVERRIDE_SPD parameter and a negative value disabling the feature. All other logic stays in Commander.

* docs(releases): add release note for RC override rework (MAN_OVERRIDE_SPD)

---------

Co-authored-by: Matthias Grob <maetugr@gmail.com>
2026-07-01 14:59:52 +02:00
PX4 Build Bot
3b9a5a6ada docs(i18n): PX4 guide translations (Crowdin) - uk (#27782)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-07-01 18:54:18 +10:00
PX4BuildBot
515d0f6f17 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-07-01 08:48:44 +00:00
Alireza Ghaderi
b885c2d7e9 feat(sim): add X-Plane SITL airframes (#22493) 2026-07-01 18:42:33 +10:00
Hamish Willee
a7a6f4c4d7 docs(docs): Typo in CAN three to there (#27780) 2026-07-01 17:01:37 +10:00
Farhang
8859bf44a2 ci(dev-call): weekly Discourse post automation (#27087)
---------

Signed-off-by: FARHANG <farhang.nba@gmail.com>
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
2026-06-30 12:36:13 -07:00
jamming
f0a2fa9369 Add iim42653 imu support for v6x_rev8 2026-06-30 10:26:24 -07:00
PX4BuildBot
0b47f41d7c docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-30 13:41:37 +00:00
Claudio Chies
f937bd5818 refactor(failure_injection): centralize MAV_CMD_INJECT_FAILURE behind a manager module (#27572)
* feat(failure_injection): add failure_injection topic and helper library

* feat(failure_injection): add failure injection manager module

* refactor(commander): route motor failure injection through the manager

* refactor(simulation): route sensor sim failure injection through the manager

* refactor(simulation): route SimulatorMavlink failure injection through the manager

* feat(failure_injection): start the manager in the SITL startup

* docs(failure_injection): document per-simulator failure support

* feat(failure_injection): enhance failure injection management and configuration

* fix(rebase): baro failure injectionb

* refactor(failure_injection): simplify FailureInjectionManager and FailureTable implementations

* refactor(failure_injection): replace Subscriber with Config in various modules and add update method

* update(uorb): FailureInjection.msg to docs standard

* docs(docs): subedit

* fix(failure_injection): correct comment formatting in FailureInjection.msg

* feat(failure_injection): add failure injection manager support across multiple boards and modules

* feat(mavlink): implement failure injection functionality

---------

Co-authored-by: Claudio Chies <chiesc@chies.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-06-30 15:33:39 +02:00
bresch
b792109de8 feat(ekf2_gnss_hgt): allow GNSS hgt to be hgt ref if starting w/o reset
When GNSS height is configured as height reference and GNSS mode is set
to dead-reckoning, it is now able to be the height reference if starting
can be done without reset.
2026-06-30 14:34:42 +02:00
PX4BuildBot
1ed3860991 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-30 09:45:20 +00:00
bresch
326bad2f6e feat(fw-rate-ctrl): scale negative FF quadratically 2026-06-30 11:37:56 +02:00
Julian Oes
84ddad88e3 feat(atomic): drop the dead dmb barrier on single-core targets
A seq_cst px4::atomic emits a hardware `dmb` on ARM. That barrier only orders
accesses as seen by a second observer (another CPU core or DMA); for inter-thread
synchronisation on a single-core (uniprocessor) target there is no second core, so
the `dmb` is dead weight - only the compiler ordering is required.

On a NuttX build without CONFIG_SMP, keep full seq_cst semantics but emit a
compiler-only fence (__atomic_signal_fence, zero instructions) instead of the
`dmb`. This mirrors Linux, where smp_mb()/smp_rmb()/smp_wmb() collapse to a
compiler barrier on uniprocessor builds. SMP NuttX and POSIX are unchanged (real
barriers, so SITL under ThreadSanitizer keeps full ordering). 64-bit types (not
lock-free on a 32-bit core) keep the existing interrupts-off critical section,
which already provides both atomicity and ordering.

The public API is unchanged - no per-call ordering knob. Verified on
arm-none-eabi Cortex-M7 that the single-core path emits no `dmb` while keeping
atomicity, and that SMP/POSIX is unchanged:

  load  (single-core): ldr                      (signal_fence: 0 instr)
  store (single-core): str
  fadd  (single-core): ldrex/strex loop, no dmb
  load  (seq_cst/SMP): dmb ish; ldr; dmb ish
  store (seq_cst/SMP): dmb ish; str; dmb ish
  fadd  (seq_cst/SMP): dmb ish; ldrex/strex; dmb ish

Shrinks fmu-v6x by ~2.8 KB (dead barriers removed from atomics already in use),
with no behaviour change. Note: inter-thread ordering only - DMA/device sync
still needs explicit barriers.
2026-06-30 09:34:36 +02:00
Onur Özkan
034069866f fix(make): register aggregate check targets into .PHONY
These targets are currently broken and needs to be marked
registered into `.PHONY`.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
2026-06-29 19:35:48 -07:00
Hamish Willee
d2df0a73e9 docs(docs): Subscription handle is orb_sub_t type in example 2026-06-29 19:34:17 -07:00
Matthias Grob
a808eeec97 fix(math): add countTrailingZeros with unit tests also use compiler builtin function for countSetBits 2026-06-29 19:33:46 -07:00
Julian Oes
545f6568a2 fix(boards): add esc_battery to AirBrainH743 (#27744)
This should translate ESC data into the battery status, so it shows up
in CRSF telemetry.
2026-06-30 14:14:14 +12:00
Jacob Dahl
1cde309317 fix(ekf2): preserve EV position bias on reset when GNSS inactive (#26794)
---------

Co-authored-by: henrykotze <henry.kotze1996@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
2026-06-29 19:13:40 -07:00
Shara
71b9c42c3a fix(ekf2): prevent GNSS height fusion re-enable after runtime disable (#27149)
* fix(ekf2): disable GNSS height and yaw fusion when GPS is not intended

* feat(ekf2): logging info, remove gnss_yaw no GNSS redundancy check

* feat(ekf2): move gps fusion check after bias_est, added test cases refs #27149
2026-06-29 19:12:17 -07:00
CUAV Chen
73c51abfe3 feat(boards): cuav/x25-mega board support (#26664)
---------

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-06-29 19:04:51 -07:00
Ramon Roche
230cfe33ee fix(septentrio): bounds-check port name offset in detect_serial_port
The serial port autodetect computed an offset relative to a ">" prompt
without verifying that there were enough preceding bytes in the read
buffer. When the prompt landed near the start of the buffer the size_t
offset arithmetic underflowed and the subsequent copy read before the
buffer.

Replace the buffer_offset heuristic with a direct check that the prompt
sits at least four bytes into the read buffer before computing the port
name offset, and use signed pointer arithmetic on the address difference
so the underflow is no longer reachable.

Refs: GHSA-v78g-fxg8-gv3j
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-06-29 18:34:45 -07:00
Ramon Roche
d8a2aeb4ae docs(hardware): expand USB VID/PID options in board support guide (#27771)
List the VID/PID sourcing options in order of preference: buy your own
from USB-IF, obtain a free pair from a community registry or chip-vendor
program, or use the Dronecode VID. Add a note clarifying that Dronecode
membership is not required to get a board supported in PX4.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-06-30 08:42:13 +10:00
PX4BuildBot
27bdea32b5 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-29 22:05:40 +00:00
Valentin Bugrov
4ac868e984 fix(drivers/ins): remove duplicate "status" usage command in ILabs/VectorNav 2026-06-29 17:44:09 -04:00
PX4BuildBot
9138ab7452 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-29 21:43:07 +00:00
Vincello
9ef2131d3b feat(boards): add corvon_v5 flight controller (#26286)
* add files

* add corvon_V5 docs

docs: fix connectors image path

* docs: address Copilot formatting suggestions

* Subedit

* docs: add radio control wiring details for corvon_V5

* Update docs/en/flight_controller/corvon_V5.md

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

* boards/corvon: rename V5 subdirectory to v5

This renames the corvon_V5 board to corvon_v5 to conform to PX4 lowercase naming conventions as requested by @mrpollo. Renames target files, docs, and assets accordingly.

* Apply suggestion from @hamishwillee

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

* docs: add DSU7 debug port pinout and warnings for corvon_v5

This addresses reviewer feedback to include debug port information, placed immediately after the Radio Control section as requested.

* Apply suggestion from @hamishwillee

* fix(boards/corvon_v5): remove unused heater and temperature_compensation

- heater: board has no IMU heater; fixes build after #26325 (requires HEATER_NUM)
- temperature_compensation: modern IMU doesn't need it, follow #27015

Signed-off-by: holydust <holydust@live.ca>

* docs(update): Subedit. Add pwm outputs and gps

* Update docs/en/flight_controller/corvon_v5.md

* Update docs/en/flight_controller/corvon_v5.md

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

* docs(corvon_v5): add UART flow control, power details, fix broken links

* docs(corvon_v5): fix UART table typo

* fix(boards/corvon_v5): remove unused PX4IO macros. Board has no PX4IO co-processor

Signed-off-by: holydust <holydust@live.ca>

* Apply suggestions from code review

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

* docs(corvon_v5): update board images

Signed-off-by: holydust <holydust@live.ca>

* fix(corvon_v5): drop unused dshot, fix can3 and adc comments

- Remove CONFIG_DRIVERS_DSHOT=y from default.px4board: DShot is not
  supported on this board (no IO timer is DShot-configured) and the
  docs already state it as unsupported.
- Fix ADC1_IN8 GPIO list comment from PB8 to PB0 (PB0 is the correct
  pin on STM32F765; matches GPIO_RSSI_IN definition below).
- Clarify CAN3 comment in nuttx-config board.h: the pins are unused
  on CORVON_V5 (no transceiver populated). manifest.c already marks
  CAN3 as not present.
- Update corvon_v5_pinout.xlsx 'All Pinouts' sheet so PA7 (HEATER)
  and PA8/PA15/PH4 (CAN3 RX/TX/SILENT) read 'Unused', matching the
  actual hardware.

Signed-off-by: holydust <holydust@live.ca>

* fix(corvon_v5): use MCS Electronics USB VID/PID

Set VID/PID to 0x16D0/0x152A (MCS Electronics) in the app defconfig
and regenerate the bootloader binary, replacing the 3DR FMUv5 IDs
inherited from the reference config.

Signed-off-by: holydust <holydust@live.ca>

---------

Signed-off-by: holydust <holydust@live.ca>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-06-29 14:37:40 -07:00
Sean Hickey
a1d8a605e8 feat(drivers): add Sony AS-DT1 distance sensor driver (#27769)
* Add Sony AS-DT1 Distance Sensor and Documentation

* Ensuring Rotation Parameter works

* Sony ASDT1 Sensor and Documentaiton

* Fixed formatting and added additional comments

* Forgot to stage 1 formatting issue

* fix(drivers): use AS-DT1 parameters consistently

remove the Sony-ASDT1 -R command line rotation, as well as some other small fixes. Updated the docs to reflect this as well.

* refactor(drivers): clarify Sony AS-DT1 variable names

---------

Co-authored-by: Sean Hickey <sean@ascendengineer.com>
Co-authored-by: Andrew Brahim <35986980+dirksavage88@users.noreply.github.com>
2026-06-29 14:33:20 -07:00
Jacob Dahl
e895f43792 feat(uavcannode): stamp Fix2.timestamp from PPS-anchored HRT
Subscribe to pps_capture on the node, learn the offset (rtc_timestamp -
timestamp) per PPS edge, and stamp fix2.timestamp = hrt_now + offset so it
is UTC-coherent with gnss_timestamp. Unfired or stale (>5 s) PPS leaves
timestamp zero, so the FC guard falls through to SENS_GPS*_DELAY.
2026-06-29 14:28:38 -07:00
Jacob Dahl
2d1e2a3b4a feat(boards/ark/can-rtk-gps): capture ZED-F9P TIMEPULSE on PB2
PB2 has no timer alternate function on the F412, so declare
PPS_CAPTURE_GPIO for the EXTI path, enable CONFIG_DRIVERS_PPS_CAPTURE, and
start pps_capture from rc.board_sensors.
2026-06-29 14:28:38 -07:00
Jacob Dahl
2ee2ecf762 feat(pps_capture): support raw GPIO mode for boards without io_timer
When PPS_CAPTURE_GPIO is defined, init() configures the pin directly with
px4_arch_gpiosetevent and skips io_timer, so CAN nodes (no PWM outputs, no
timer AF on the pin) can capture PPS over EXTI. FMU boards keep the
unchanged io_timer path.
2026-06-29 14:28:38 -07:00
Jacob Dahl
9f6a714bac feat(uavcan): correct GNSS timestamp_sample using node send timestamp
Map Fix2.timestamp into HRT with the clock-offset estimator and subtract
the node-reported processing delay (timestamp - gnss_timestamp) to set
timestamp_sample. Nodes that leave timestamp zero or non-UTC fail the
guard and fall through to the SENS_GPS*_DELAY path.
2026-06-29 14:28:38 -07:00
Jacob Dahl
e3727fa71a feat(clock_offset_estimator): add leaky-min clock-offset estimator
Estimates the offset between a remote node clock and FC HRT by tracking
the minimum of (local - remote), then maps remote timestamps into HRT;
residual bias is the minimum observed transport latency. Unit-tested for
convergence, jitter hold, and clock-discontinuity reset.
2026-06-29 14:28:38 -07:00
PX4BuildBot
5413e039ff docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-06-29 19:41:04 +00:00