Commit Graph
16 Commits
Author SHA1 Message Date
4e8f38ff87 fix(ekf2): reject GNSS samples with vel above EKF2_VEL_LIM in EKF instead of in the on ground GNSS checks (#28663)
* fix(ekf2): reject GNSS samples with vel above EKF2_VEL_LIM in EKF instead of in the on ground GNSS checks

* fix(ekf2): drop the GNSS yaw coupling from the velocity limit skip path

GNSS yaw fusion has had its own buffer and stopped-data timeout since the heading moved to its own topic, and stopGnssFusion() no longer clears gnss_yaw. Keeping gnss_yaw in using_gnss left it true after the first stop, so stopGnssFusion() and the EKF-GSF reset re-fired on every skipped sample while yaw fusion was active, and the yaw-only timeout test could no longer pass.

Assisted-by: Claude:claude-fable-5-1

* fix(ekf2): keep the GNSS checks running while over-limit samples are skipped

Short-circuiting the checks on an over-limit sample froze the published fail flags and checks_passed at the last evaluated sample for the whole timeout window, and the eventual stop was reported as poor quality. The checks now run on every sample so their status stays truthful, the velocity limit is its own skip reason with its own stop message, and the skipped samples are counted in an EKF2 perf counter so the ulog shows why nothing was fused until estimator_status gains a fusion-state flag.

Assisted-by: Claude:claude-fable-5-1

* fix(ekf2): apply EKF2_VEL_LIM per axis to GNSS velocity samples

constrainStates() clamps each velocity component to EKF2_VEL_LIM, so the state can hold a horizontal speed up to sqrt(2) times the limit. Testing the horizontal norm rejected samples the filter could represent, and a vehicle between 100 and 141 m/s ground speed lost GNSS after the timeout. The gate now uses the same per-axis test as the clamp, and the parameter description says that samples beyond it are rejected.

Assisted-by: Claude:claude-fable-5-1

* fix(ekf2): stop GNSS height fusion when the checks time out

Height control only evaluates its fusion timeout under _gps_data_ready and its no-data branch keys on the buffer push time, which keeps advancing while samples are skipped. With HPOS and VEL disabled, a sustained check failure or over-limit velocity therefore left gps_hgt latched with nothing fused and the height reference never released. Including gps_hgt in the skip-path timeout stops it with the other GNSS aiding.

Assisted-by: Claude:claude-fable-5-1

* fix(ekf2): drop the parameter name from the velocity limit stop message

No other ECL message names a parameter.

Assisted-by: Claude:claude-fable-5-1

* refactor(ekf2): drop the velocity limit skip counter

The skipped sample still reaches updateGnssVel(), so its velocity is logged in estimator_aid_src_gnss_vel.observation with fused false while the check flags stay clear, which already names the cause. The count-delta between the EKF library and the module was scaffolding for a rare case, and a fusion-state flag in estimator_status is the planned indication. The tests observe the behaviour instead: a skipped sample stops the fusion after the timeout, an accepted one at the limit resets to it and continues.

Assisted-by: Claude:claude-fable-5-1

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
2026-09-30 10:46:23 -06:00
Jonas Perolini e9e11c507c fix(navigator): parse polygons correctly after geofence circles (#28745)
Build all targets / Scan for Board Targets (push) Canceled after 0s
Build all targets / Seed [${{ matrix.chip_family }}] (push) Canceled after 0s
Build all targets / Build [${{ matrix.runner }}][${{ matrix.group }}] (push) Canceled after 0s
Build all targets / Upload Artifacts (push) Canceled after 0s
Checks / Gate Checks [check_format] (push) Canceled after 0s
Checks / Gate Checks [check_newlines] (push) Canceled after 0s
Checks / Gate Checks [module_documentation] (push) Canceled after 0s
Checks / Gate Checks [shellcheck_all] (push) Canceled after 0s
Checks / Gate Checks [validate_module_configs] (push) Canceled after 0s
Checks / Unit Tests (push) Canceled after 0s
MacOS build / build (macos-15) (push) Canceled after 0s
MacOS build / build (macos-latest) (push) Canceled after 0s
Ubuntu environment build / Build and Test (ubuntu:22.04) (push) Canceled after 0s
Ubuntu environment build / Build and Test (ubuntu:24.04) (push) Canceled after 0s
Container build / Set Tags and Variables (push) Canceled after 0s
Container build / Build Container (amd64) (push) Canceled after 0s
Container build / Build Container (arm64) (push) Canceled after 0s
Container build / Deploy To Registry (push) Canceled after 0s
Docs - Orchestrator / T1: Detect Changes (push) Canceled after 0s
Docs - Orchestrator / T2: PR Metadata (push) Canceled after 0s
Docs - Orchestrator / T2: Metadata Sync (push) Canceled after 0s
Docs - Orchestrator / T2: Link Check (push) Canceled after 0s
Docs - Orchestrator / T3: Build Site (push) Canceled after 0s
Docs - Orchestrator / T4: Deploy (push) Canceled after 0s
Failsafe Simulator Build / build (failsafe_web) (push) Canceled after 0s
ITCM check / Checking nxp_mr-tropic (push) Canceled after 0s
ITCM check / Checking nxp_tropic-community (push) Canceled after 0s
ITCM check / Checking px4_fmu-v5x (push) Canceled after 0s
ITCM check / Checking px4_fmu-v6xrt (push) Canceled after 0s
ROS Development Container / Build ROS Development Image (humble, amd64) (push) Canceled after 0s
ROS Development Container / Build ROS Development Image (jazzy, amd64) (push) Canceled after 0s
ROS Development Container / Build ROS Development Image (humble, arm64) (push) Canceled after 0s
ROS Development Container / Build ROS Development Image (jazzy, arm64) (push) Canceled after 0s
ROS Development Container / Publish Multi-Architecture ROS Development Image (humble) (push) Canceled after 0s
ROS Development Container / Publish Multi-Architecture ROS Development Image (jazzy) (push) Canceled after 0s
ROS Integration Tests / build (push) Canceled after 0s
ROS Translation Node Tests / Build and test [humble] (push) Canceled after 0s
ROS Translation Node Tests / Build and test [jazzy] (push) Canceled after 0s
SITL Tests / Testing PX4 quadx (push) Canceled after 0s
SITL Tests / Testing PX4 standard_vtol (push) Canceled after 0s
SITL Tests / Testing PX4 hex (push) Canceled after 0s
SITL Tests / Testing PX4 xvert (push) Canceled after 0s
FLASH usage analysis / Analyzing px4_fmu-v5x (push) Canceled after 0s
FLASH usage analysis / Analyzing px4_fmu-v6x (push) Canceled after 0s
Python CI Checks / build (push) Canceled after 0s
FLASH usage analysis / Publish Results (push) Canceled after 0s
Static Analysis / Clang-Tidy (push) Canceled after 0s
2026-09-18 07:32:10 +02:00
Jonas PeroliniandJonas e53ff6b3ff feat(navigator): mission route planning library (#28248)
* feat(navigator): mission route planning library

* fix(navigator): account for implicit FT with VTOL_TAKEOFF, properly inverse projections, and handle terminal jumps

* feat(navigator): handle stacked waypoints above takeoff and land (to avoid extra climbs)

---------

Co-authored-by: Jonas <jonas.perolini@rigi.tech>
2026-09-09 11:14:26 -06:00
Jonas Peroliniandjonas 10d4c80551 feat(navigator): precision takeoff with the vision target estimator (#28552)
* feat(navigator): precision takeoff with the vision target estimator

* fix(navigator): only remove the liftoff freeze when an actual target is detected

* feat(logger): log prec_takeoff_status as optional topic

* chore(vte): minor format

* fix(logger): move to topic behind CONFIG_MODULES_VISION_TARGET_ESTIMATOR

* fix(navigator): preserve corrected position on takeoff handoff

* docs(vte): rephrase VTE_AID_MASK

* rework(vte): clarify that home is used as the pad's abs position during prec takeoff

* fix(vte): clear cached relative mission position once task starts

* fix(takeoff): keep xy freez until TAKEOFF_STATE_FLIGHT

* feat(navigator): delay prec takeoff corrections by MIS_TKO_PREC_DLY

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
2026-09-09 10:16:12 -06:00
Jonas Peroliniandjonas d537fd1ec9 fix(perf): run perf_iterate_all callbacks without the list mutex (#28411)
Co-authored-by: jonas <jonas.perolini@rigi.tech>
2026-09-01 09:11:43 +12:00
Jonas Peroliniandjonas 4b30b2b615 feat(navigator): Implement a full mission route cache (#27707)
* feat(navigator): cache complete mission route data

* refactor(navigator): pack mission requests into a single struct

* rework(navigator): set pending to false instead of full struct reset

* refactor(navigator): remove missionExceedsCacheLimit

* chore(navigator): clean comments

* perf(navigator): syncMissionItem do not fully restart if not needed

* refactor(navigator): better naming and remove unreachable retry

* refactor(navigator): comments

* refactor(navigator): do not restart from scratch on single read failure, restart from failure

* refactor(navigator): use navigator poll to load mission cache and move full mission cache into its own class

* perf(mission-cache): add perf counter for the full mission load

* fix(navigator): keep route cache in sync with DO_JUMP counters

* feat(navigator): add min rate for full navigator update

* docs(docs): add docs for mission route cache

* docs(docs): revert change to auto-generated file

---------

Co-authored-by: jonas <jonspero@me.com>
2026-08-13 16:54:56 +02:00
5ea3cf8cb9 feat(navigator): extend detect and avoid module to follow regulatory standards such as ASTM F3442 (#26815)
* feat(navigator): extend detect and avoid module to follow regulatory standards such as ASTM F3442

* docs(docs): minor subedit

* refactor(navigator): reduce flash by grouping notif into same events

* docs(daa): Improve docs readability with ::: details blocks

* fix(navigator): single event when on ground with conflict

* refactor(boards): increase flash length from 4M - 128k to 5M - 128k

* rework(general): define DAA standard at build with new CONFIG_NAVIGATOR_ADSB_F3442

* clean(navigator): minor changes to clean the PR

* feat(boards): add CONFIG_NAVIGATOR_ADSB_FAKE_TRAFFIC in visionTargetEstStatic.px4board

* rework(daa): reduce amount of abstractions and minor cleaning

* refactor(boards): allyes revert flash length to 4M-128K

* refactor(boards): allyes increase flash length to 5M-128K

* rework(daa): rework event notifications to improve clarity

* docs(docs): move details inside of ::: details block

* docs(docs): run npx prettier

* refactor(daa): avoid void mutator functions

* docs(docs): Improve Python helper to decode daa unique id

* rework(daa): move encoded id handling to the adsb lib and refactor on_active

* refactor(daa): naming and zero init

* fix(daa): move dataman dep from daa level to unit test level

* refactor(daa): define common daa_input and rework process_transponder_report

* fix(daa): remove stale todo

* refactor(daa): rename crosstrack_based_daa to crosstrack_standard

* refactor(daa): rename F34_ params to DAA_

* docs(docs): revert changes to autogenerated docs

* docs(docs): Add Detect And Avoid in index.md

* refactor(daa): update message on init failed

* refactor(daa): only publish most_urgent conflict once in on_active()

* refactor(daa): move conflict buffer handling in the adsb lib

* refactor(daa): move notifications into new class ConflictNotifier and only notify once per cycle

* refactor(daa): uninit _cycle_changes to store into .bss (and save flash)

* docs(docs): remove unused image link

* refactor(daa): move automated action policy to the adsb lib

* refactor(daa): move self detection into adsb lib as DaaTrafficFilter

* refactor(daa): minor changes in unit tests

* refactor(daa): merge DaaTrafficFilter and DaaEncoding

* fix(daa): fix CI by removing navigator from the DAA deps

* refactor(daa): reduce stack size

* fix(daa): advertise _fake_traffic_pub in constructor

* refactor(daa): Comments only,  simplify and reduce comments

* fix(daa): brief comment missing end star

* Disable CONFIG_NAVIGATOR_ADSB in ark_fpv_default board

* docs(docs): General clarifications and remove the 1.18 badge

* refactor(daa): cleaning

* refactor(daa): minor cleaning

* refactor(adsb): simplify conflict tracker assuming push_back cannot fail

* build(cmake): cleaner fix to protect regex alternations

* refactor(daa): Crosstrack, remove unit test requiring finite yaw (yaw not used by standard)

* refactor(daa): minor cleaning and fix callsign to uint64

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-07-13 16:14:42 -06:00
Jonas Peroliniandjonas 5184d66239 perf(sensors): Add config to only build specific GPS drivers to save flash (#27883)
* build(gps): add one config per gnss driver to reduce flash

* minor cleaning

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
2026-07-13 18:43:42 +02:00
Jonas Perolini 50c57be15f fix(navigator): rtl compute wind angle to select best land approach based on rally point location instead of home location (#27004) 2026-06-04 13:55:31 +10:00
Jonas Perolini 29903b1a63 docs(vte): fix rendering in equations (#27471) 2026-05-28 11:51:52 +10:00
Jonas Peroliniandjonas dd604072c4 feat(new_module): Static and moving vision-based target esitmator (Kalman Filter) (#23726)
Co-authored-by: jonas <jonas.perolini@rigi.tech>
2026-05-26 07:27:49 +10:00
80557b32ee feat(mavlink): reassemble GPS_RTCM_DATA before GPS injection (#27084)
* mavlink: reassemble GPS_RTCM_DATA before GPS injection

* Apply minor comment requested changes

* Simplification: remove _completed_sequence asymetric protection

* Handle RTCM payload length which is an exact multiple of 180

* update docs

* lib gnss: new GpsRtcmMessageFragmenter to send RTCM via GPS_RTCM_DATA.hpp

* fix clang

* Remove RTCM fragmenter

* update docs

* Compatibility fallback for older QGroundControl builds that omit the final zero-length fragment

* mavlink receiver, remove while loop to avoid dead lock

* docs(update): Subedit

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

* docs(docs): format

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-05-21 12:23:50 -06:00
a182072792 fix(various): Fix hardfaults when running out of memory (nullptr check) (#26516)
Build all targets / Scan for Board Targets (push) Has been cancelled
Checks / Gate Checks [check_format] (push) Has been cancelled
Checks / Gate Checks [check_newlines] (push) Has been cancelled
Checks / Gate Checks [module_documentation] (push) Has been cancelled
Checks / Gate Checks [shellcheck_all] (push) Has been cancelled
Checks / Gate Checks [validate_module_configs] (push) Has been cancelled
Checks / Unit Tests (push) Has been cancelled
Static Analysis / Clang-Tidy (push) Has been cancelled
MacOS build / build (push) Has been cancelled
Ubuntu environment build / Build and Test (ubuntu:22.04) (push) Has been cancelled
Ubuntu environment build / Build and Test (ubuntu:24.04) (push) Has been cancelled
Container build / Set Tags and Variables (push) Has been cancelled
Docs - Orchestrator / T1: Detect Changes (push) Has been cancelled
Docs - Orchestrator / T2: Metadata Sync (push) Has been cancelled
Docs - Crowdin - Upload Guide sources (en) / upload-to-crowdin (push) Has been cancelled
Failsafe Simulator Build / build (failsafe_web) (push) Has been cancelled
FLASH usage analysis / Analyzing px4_fmu-v5x (push) Has been cancelled
FLASH usage analysis / Analyzing px4_fmu-v6x (push) Has been cancelled
ITCM check / Checking nxp_mr-tropic (push) Has been cancelled
ITCM check / Checking nxp_tropic-community (push) Has been cancelled
ITCM check / Checking px4_fmu-v5x (push) Has been cancelled
ITCM check / Checking px4_fmu-v6xrt (push) Has been cancelled
MAVROS Tests / MAVROS Mission (push) Has been cancelled
MAVROS Tests / MAVROS Offboard (push) Has been cancelled
Python CI Checks / build (push) Has been cancelled
ROS Integration Tests / build (push) Has been cancelled
ROS Translation Node Tests / Build and test [humble] (push) Has been cancelled
ROS Translation Node Tests / Build and test [jazzy] (push) Has been cancelled
SITL Tests / Testing PX4 iris (push) Has been cancelled
Build all targets / Seed [${{ matrix.chip_family }}] (push) Has been cancelled
Build all targets / Build [${{ matrix.runner }}][${{ matrix.group }}] (push) Has been cancelled
Build all targets / Upload Artifacts (push) Has been cancelled
Container build / Build Container (amd64) (push) Has been cancelled
Container build / Build Container (arm64) (push) Has been cancelled
Container build / Deploy To Registry (push) Has been cancelled
Docs - Orchestrator / T2: PR Metadata (push) Has been cancelled
Docs - Orchestrator / T2: Link Check (push) Has been cancelled
Docs - Orchestrator / T3: Build Site (push) Has been cancelled
Docs - Orchestrator / T4: Deploy (push) Has been cancelled
FLASH usage analysis / Publish Results (push) Has been cancelled
Fuzzing / Fuzzing (push) Has been cancelled
SBOM Monthly Audit / audit (push) Has been cancelled
Handle stale issues and PRs / stale (push) Has been cancelled
* Fix hardfault in mavlink stream strcpy

* prevent more OOM hardfaults

* revert mavlink fallback

* delete _interpreter in mc_nn_control module

* fix build

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
Co-authored-by: Julian Oes <julian@oes.ch>
2026-04-19 18:08:39 -08:00
Jonas Perolini 83f2b96954 fix(navigator): goToNextPositionItem skip loops when required (#26993) 2026-04-15 09:40:13 +10:00
Jonas Peroliniandjonas bea52104b7 AirspeedValidator: fix course over ground computation for NED frame (#26304)
* AirspeedValidator, fix course over ground computation for NED frame

* fix potential out of bounds call

---------

Co-authored-by: jonas <jonas.perolini@rigi.tech>
2026-02-26 09:18:09 +01:00
e31304d7d5 Quadchute param update (#19351)
New parameter for actions after a quadchute (COM_QC_ACT)

Co-authored-by: Jonas <jonas.perolini@rigi.tech>
Co-authored-by: Matthias Grob <maetugr@gmail.com>
2022-03-24 10:27:32 +01:00