* Applying PR #17084
* Comitting missing changes
* Adding incoming SETUP_SIGNING handling
* Adding proper message decoding for SETUP_SIGNING
* Adding persistance of sign key in chunks of 32 bits into parameters
* Allowing SETUP_SIGNING to be handled only on usb_uart
* Removing unused type and variable
* Changing the default for Mavlink Timestamp
* Fixing styling
* Merging
* Merging submodules
* Replacing parameters with sdcard storage for secured key and ts
* Fixing styles
* Isolating signing related items in separate class
* Adding new files
* Syncing with main
* Fixing styles
* Changing the signing logic to work only if key and ts properly initialized, adding store the ts on stop
* Updated submodules to latest versions
* Updated gz to proper version
* libfc-sensor-api to proper version
* libcanard to proper version
* Updated fuzztest to proper version
* Updated public_regulated_data_types to proper version
* Updated mip_sdk to proper version
* Updated pydronecan to proper version
* Updated rosidl to proper version
* Fixing styles
* Fixing cyclonedds version
* initializing sign control in the member declaration
* Update src/modules/mavlink/mavlink_main.h
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* Fixing comments
* Fixing duplicate method
* Fixing defines
* Fixing styles
* Fixing the define errors
* replace duplicate logic with write_key_and_timestamp() function
* add docs
* Update docs/en/mavlink/message_signing.md
Co-authored-by: Julian Oes <julian@oes.ch>
* Update src/modules/mavlink/mavlink_sign_control.cpp
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* Update src/modules/mavlink/mavlink_sign_control.h
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* Update docs/en/mavlink/message_signing.md
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* rename to MAV_SIGN_CFG, fix copyright dates, fix docs SHA type, rename secrets file
* fix newlines
---------
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
Co-authored-by: Julian Oes <julian@oes.ch>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Add a new parameter to map a MAVLink MANUAL_CONTROL button to turtle
mode activation. When the manual control data source is a MAVLink
instance, the driver uses the buttons field directly instead of aux
channels. When the source is RC, the existing aux channel behavior
via VOXL_ESC_MODE is preserved. Set to -1 (default) to disable.
So transitions between stopped/not stopped respect the slew rate.
- Remove previous stopped motor handling in publish_actuator_controls
- Replace with handle_stopped_motors, called in Run() before slew
- Introduce ApplyNanToActuators in ControlAllocation to stop
- Refactor ice shedding slightly to fit new structure
Add CI enforcement of conventional commit format for PR titles and
commit messages. Includes three Python scripts under Tools/ci/:
- conventional_commits.py: shared parsing/validation library
- check_pr_title.py: validates PR title format, suggests fixes
- check_commit_messages.py: checks commits for blocking errors
(fixup/squash/WIP leftovers) and advisory warnings (review-response,
formatter-only commits)
The workflow (.github/workflows/commit_checks.yml) posts concise
GitHub PR comments with actionable suggestions and auto-removes them
once issues are resolved.
Also updates CONTRIBUTING.md and docs with the conventional commits
convention.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
migrateFWFromRoot held the SD root directory open via opendir/readdir
while performing heavy file I/O (getFileInfo, copyFw, unlink) inside the
loop. Between readdir calls the FAT semaphore is released, allowing
other tasks (e.g. logger) to dirty the shared FAT sector cache. When
the next FAT operation needed a different sector, fat_fscacheflush
would write the dirty data followed by an immediate read — triggering
a write-busy to read transition in the SDMMC WRCOMPLETE path that
kills the SD card on STM32H7.
Split into two phases: first collect .bin filenames with the directory
open, then close it before doing any file I/O. This also fixes a
missing closedir on the mkdir error path and avoids modifying directory
entries (via unlink) while iterating them with readdir.
On Linux targets with high-rate external sensor data (>1000Hz), all
sensor calibrations (gyro, accel, mag) can freeze PX4 by starving
other threads of CPU. Normal flight is unaffected — only calibration
triggers the problem.
Two compounding issues in the calibration worker threads:
1. calibrate_cancel_check() creates a new uORB::Subscription on every
call, which triggers getDeviceNodeLocked() — an O(n) linear strcmp
scan through all uORB nodes. In gyro/mag calibration this was called
on every sensor sample, consuming the majority of CPU in strcmp alone.
2. SubscriptionBlocking::updatedBlocking() returns immediately when data
is already available (it only blocks when no data is pending). With
continuous high-rate sensor data, the calibration loops never yield,
spinning at 100% CPU.
These problems are addressed with this patch as follows:
- Throttle calibrate_cancel_check() to once per 200ms in gyro
and mag calibration loops.
- Add 1ms px4_usleep() yield before updatedBlocking()/updateBlocking()
in all calibration loops (gyro, accel, mag, orientation detection).
This caps the effective loop rate at ~1000Hz — still far above what
calibration needs (250-750 samples).
- Force Commander main loop to sleep during calibration so it does not
compete with calibration worker threads for CPU.
Tested under Linux (x64, aarch64) both with RT and non-RT scheduling,
with sensor data arriving at ~3600Hz. Calibration completes normally
and no longer results in a deadlocked process.
* refactor: use parseDefaultArguments
* style: reverted changes to docs (should be auto-generated)
* refactor: use parseDefaultArguments
* style: reverted changes to docs (should be auto-generated)
In the CA_ICE_PERIOD param description, a '>' was at the start of a
line. This is interpredeted by markdown as a quotation type indented
block which applies not only to that line, but to all following ones.
Changing the line breaks to only occur after full stops fixes it.
* SIH: explicitly use local velocity for all aerodynamic calculations
no functional change
* SIH: add param & vars for wind and apparent vel
no functional change
* SIH: replace all relevant vels with apparent vel
Only places where _v_E is remaining:
- ecefToNed to calculate _v_N
- generate_rover_ackermann_dynamics
- equations_of_motion
- parameters_updated, init_variables
and _v_N:
- ecefToNed
- print_status
- publish_ground_truth
- generate_rover_ackermann_dynamics
- equations_of_motion
- parameters_updated, init_variables
which are all not relevant for aerodynamics.
* sih: wind review suggestions
* sih wind: switch direction to global wind source direction convention
* SIH: clean up variable declarations
* SIH: rename variables for consistency
* docs: SIH: document new wind parameters
* Release notes: note for SIH wind settings
---------
Co-authored-by: Matthias Grob <maetugr@gmail.com>
When the PI controller computed zero on-time (e.g. temperature already
above target), the heater was still momentarily turned on every cycle
before being immediately turned off. Skip the on/off toggle entirely
when the computed on-time is zero.
* fix(dataman_client): fail fast when dataman is unavailable
Check client_id before every DatamanClient operation to avoid waiting
for a response timeout when dataman was never running.
- Adds CLIENT_ID_NOT_SET guard to all sync and async methods
- Avoids cross-module linkage between dataman_client lib and dataman module
Supersedes #26128
* better init
* test: add StickYaw unit test for unaided_yaw NaN transition bug
Adds a functional gtest that verifies the yaw setpoint does not jump
discontinuously when unaided_yaw transitions from finite to NaN.
Reproduces the bug fixed in #25710.
* test(StickYaw): clarify unaided_yaw NaN root cause in test comment
NaN originates from corrupted IMU delta_angle propagating through
OutputPredictor::calculateOutputStates() Euler extraction.
* boards: cuav/x25-super: add multi-instance heater support
Restore heater support removed in #26621 using the generic
multi-instance heater driver from #26325. Defines HEATER_NUM 2
for the two IMU heater outputs (PB10, PE6).
* boards: cuav/x25-super: fix heater IMU IDs and temp from hw test
Update defaults per @cuav-chen2 hardware testing:
- HEATER1_IMU_ID: 2818066 (SCH16T)
- HEATER2_IMU_ID: 3014698 (IIM42653)
- HEATER2_TEMP: 65°C
* Update boards/cuav/x25-super/init/rc.board_defaults
* navigator:MissionFeasibility rename checkFixedWindLandApproach() to checkFixedWingLandApproach()
Renames checkFixedWindLandApproach() to checkFixedWingLandApproach() to fix a typo in the function name.
This improves code readability and makes the function name consistent with the intended FixedWing landing approach logic, without changing behavior.
* navigator:MissionFeasibility rename checkFixedWindLandApproach() to checkFixedWingLandApproach()
Renames checkFixedWindLandApproach() to checkFixedWingLandApproach() to fix a typo in the function name.
This improves code readability and makes the function name consistent with the intended FixedWing landing approach logic, without changing behavior.
* heater: add multi-instance support, refactor parameter handling, remove legacy params file
This change introduces multi-instance heater support to allow independent temperature control for multiple IMUs.
Main changes:
- Add support for multiple heater instances
- Refactor parameter handling to use per-instance parameters
- Remove the legacy parameter file and migrate to the updated parameter structure
This improves scalability and makes heater configuration consistent across setups with multiple sensors.
* Refactor heater configuration across multiple boards
- Updated heater GPIO definitions to introduce a new naming convention for better clarity and consistency.
- Replaced `GPIO_HEATER_OUTPUT` with `GPIO_HEATER1_OUTPUT` and adjusted the corresponding output enable macros.
- Changed parameter names from `SENS_TEMP_ID` to `HEATER1_IMU_ID` in various board default configurations to reflect the new heater setup.
- Ensured all affected board configurations are updated to maintain functionality with the new heater definitions.
* heater: fix missing HEATER1_OUTPUT_EN control
* heater: fix more missing HEATER1_OUTPUT_EN control
* heater: tidy config, docs, and instance handling
- Remove unused controller period member and use CONTROLLER_PERIOD_DEFAULT
- Improve HEATER${i}_IMU_ID description and instance-related logging/behavior
- Add a guard when HEATER_NUM exceeds HEATER_MAX_INSTANCES
Note: drop intermediate/reverted change around the 'celsius' spelling.
* heater: refactor constructor to remove unused parameter and add instance name function
- Remove unused ModuleParams argument from Heater constructor
- Add heater_instance_name() helper to provide per-instance work queue task names
- Use instance-specific parameter lookup (HEATER{n}_*) during initialization
Use heater_instance_name() to label each instance (heater_1/2/3) in work queue.
Also drop unused ModuleParams argument from constructor and keep per-instance
parameter handle lookup in initialization.
* format
* board: update GPIO configuration for multiple heater instances, add HEATER_NUM for boards using PX4IO
* heater: update heater control to use HEATER1_OUTPUT_EN when using PX4IO for consistency
* heater: add a TODO for px4io multi-instance
* heater: update missing GPIO_HEATER1_OUTPUT in sky-drones
* heater: fix multiple newlines at EOF (resolve CI check failure)
* heater: switch to PublicationMulti for heater_status and log multi-instance
- Changed _heater_status_pub from Publication to PublicationMulti to support independent per-instance publications without overwriting.
- Updated logged_topics.cpp to use add_optional_topic_multi("heater_status")
This fixes the issue where multiple heater instances were writing to the same heater_status topic, causing data overwriting and incorrect update rates in logs.
---------
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* Fixes potential bug if unaided yaw becomes nan during execution:
if unaided yaw becomes nan during execution the yaw correction would jumpt to 0 causing a large jump in yaw
the change removes this jump by holding the current yaw correction instead
* Remove Python extra paths from settings.json
Removed Python extra paths from VS Code settings.
The core_heater driver was written against the old CRTP ModuleBase<T>
pattern which was removed in ce3e62841f. Replace with the
descriptor-based API matching src/drivers/heater/.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Fix logic error where `mnt_mode_in` (value) was checked against `PARAM_INVALID`
instead of `param_handle`. This caused `param_get` to be called with an invalid
handle if the parameter was missing.
The SLPI drivers dsp_hitl and mavlink_rc_in hardcoded an include path
into the voxl2-default build output for MAVLink headers. This created
an undeclared cross-target dependency that required voxl2-default to be
built first.
Generate the MAVLink common dialect headers directly during the SLPI
build using mavgen.py, outputting to the SLPI build's own directory.
An INTERFACE library (mavlink_common_headers) propagates the include
paths and warning suppression flags to both drivers.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* mavlink: add GLOBAL_POSITION message handling
- Add handler for incoming GLOBAL_POSITION MAVLink messages
- Publish received positions to aux_global_position uORB topic
- Update GLOBAL_POSITION stream to use aux_global_position topic
* correctly handle multi AGP in mavlink pub
* move from GLOBAL_POSITION to GLOBAL_POSITION_SENSOR
* mavlink: update submodule to include GLOBAL_POSITION_SENSOR in common.xml
os.scandir() returns entries in non-deterministic order, which caused
voxl2-slpi to sometimes build before voxl2_default (which it depends
on). Sort all os.scandir() calls lexicographically by name so the
shorter prefix voxl2 always precedes voxl2-slpi.
* AirspeedValidator, fix course over ground computation for NED frame
* fix potential out of bounds call
---------
Co-authored-by: jonas <jonas.perolini@rigi.tech>
* fix(mathlib): correct MedianFilter comparator to satisfy strict-weak ordering
- Add explicit NaN handling before comparison operators
- NaN sorted to high end, ensuring finite values cluster at median index
- Guard NaN checks with if constexpr for non-floating-point types
- Replace float equality check with < and > to avoid -Wfloat-equal
Fixes#25917
* fix(mathlib): remove type_traits dependency in MedianFilter
Replace std::is_floating_point_v<T> with a self-contained template
specialization to avoid <type_traits> header, which is unavailable
on NuttX targets compiled with -nostdinc++.
* fixed formating
* test(mathlib): add majority-finite and majority-NaN window tests for MedianFilter
* Moved structs inside namespace math
* clean up
* add two more tests
---------
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
* lightware_grf_serial: disable flow control
This might fix serial comms with the Lightware sensor.
* update sf45 to disable hw flow control
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
---------
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
Co-authored-by: dirksavage88 <dirksavage88@gmail.com>
long is a 32-bit signed integer, which means the maximum it will hold is 0x7FFFFFFF.
strtol is overflowing, resulting in clamping the value to LONG_MAX (or 0x7FFFFFFF) and returns that instead.
Fixes by using strtoul, which corrects the returned value.
Can be tested by building a UAVCAN Node on the tag v1.16.1, flashing and checking the value displayed in dronecan_gui_tool. Screenshot added for convenience.
Fix return value bug in px4_task_spawn_internal returning the arg-parsing
loop variable instead of the task index. Add pthread_attr_destroy calls
to prevent resource leaks on task creation failure, deletion, and exit.
Fix race condition in px4_task_delete by unlocking the mutex before
pthread_join and properly joining after pthread_cancel. Fix mutex unlock
placement in px4_task_exit to only unlock when the mutex was acquired.
Protobuf-generated code in gz_msgs triggers -Wdouble-promotion warnings
from the Abseil library. Since this is external code we cannot modify,
disable the warning for this specific target.
Fixes#26533
* removed commented out parts
* changed the height controller to work in Altitude mode and moved the controller to the uuv_pos_control.hpp instead of uuv_att_control.hpp
* Updated format changes etc. Removed one parameter, that is not used anymore(UUV_HGT_MODE) added my correct email
* added a rotation to the thrust, that with different roll and pitch values, x y z thrust is still working as if roll/pitch is zero.
* fixed constant roll/pitch to be 0.0 again
* added parameter for maximum distance between controlled des height and current height.
Added state observation to reset the desired height to current height when altitude mode is turned on.
* added first short descriptions of manual modes.
* update descriptions
* removed vector dependency
* feat: updated gz submodule
* fix: newline
* fix: gz submodule
---------
Co-authored-by: Pedro Roque <roque@caltech.edu>
Fix generate_msg_docs.py IndexError when a .msg file declares a single
topic that does not match the camel_to_snake default (e.g.
AuxGlobalPosition.msg). The error message referenced self.topics[1]
(out of bounds) instead of self.topics[0].
Fix camel_to_snake() regex to correctly convert names like
"AuxGlobalPosition" to "aux_global_position". The previous regex
produced "aux_globalposition" because it failed to insert an underscore
between a lowercase letter and an uppercase letter mid-word.
Also remove stderr redirection (2>&1) from all make targets in
metadata_sync.sh so that errors are visible in CI logs even in
non-verbose mode, making failures easier to diagnose.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Refactor auxiliary global position fusion to support multiple AGP
sources. Add AgpSourceControl manager class that routes AGP messages
to the correct AgpSource instance based on configured source IDs.
Only instantiate AgpSource slots that have a configured ID on boot.
Move AGP subscriptions to manager class for correct message routing.
When switching modes, navigator resets the position setpoint triplet to
idle. In the case of entering RTL, it is not replaced immediately by the
correct triplet, but published once and only corrected a split second
later. This causes zero thrust to come from control_idle in
FixedWingModeManager
Fix by calling run(true) on the appropriate sub-mode at the end of
RTL::on_activation(), same as in the on_active just below.
The submode is in inactive at that point, but run(true) triggers:
- on_activation of the submode
- set_rtl_item, which calls:
- mission_item_to_position_setpoint
- _navigator->set_position_setpoint_triplet_updated
and therefore the navigator publishes the position setpoint triplet
immediately (which was already being correctly set).
Navigator: RTL: also update subs on actiavation
Navigator: RTL: also disable mission RTL if direct RTL
matching the logic in on_active exactly
* Remove `MPC_USE_HTE` and always use hover thrust for altitude control
Note the separate module can still be not run but I have not seen a case where the hover thrust estimate is not useful for altitude control hence I don't expect anyone to have the parameter disabled or planning on not running the module.
This parameter was used to experimentally introduce the hover thrust estimator. First it was just logging its status and you could opt in to use it:
f9794e99f8
but soon after it became the default and you had to opt out of using it:
a8063ac948
AFAIK we haven't seen problems requiring to disable it in the last 5 years and hence I suggest to remove the parameter to reduce the configuration space.
* Update src/modules/land_detector/MulticopterLandDetector.cpp
Co-authored-by: Mathieu Bresciani <brescianimathieu@gmail.com>
* undo docs changes
* change redundant update() calls to copy()
---------
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
Co-authored-by: Mathieu Bresciani <brescianimathieu@gmail.com>
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
* ark fpv board_config: update battery ADC current filter time constant to 0.5s
* battery: add configurable voltage and current filter time constants
---------
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* Initial changes
* index fix
* gz index fix2
* gz index fix 3
* updates
* Run prettier
* zsh env
removed gz classic
* Corrections 2
* Cleanups
* Update docs/en/dev_setup/dev_env_mac.md
* Apply suggestions from code review
* Minor subedit and prettier
* small correction
* cleanups gz harmonic brew formula
* fix(macos.sh): invert px4-sim install condition for --sim-tools
The condition checked if px4-sim WAS installed before running
brew install, meaning it would never install on a fresh system.
Add the missing negation so it installs when NOT already present.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* docs: rewrite macOS dev environment setup guide
- Add Xcode Command Line Tools as prerequisite
- Default to ~/.zshrc (macOS default since Catalina)
- Explain why ulimit change is needed and why in startup file
- Add reminder to open new terminal after shell config changes
- Remove broken pip3 alias workaround
- Split git clone into clone + submodule update (canonical form)
- Recommend --sim-tools flag since first build uses gz_x500
- Document what macos.sh installs and its --reinstall flag
- Clarify Gazebo comes from --sim-tools / px4-sim formula
- Add XQuartz requirement for Gazebo display
- Add verification section with key tool checks and smoke test
- Remove outdated video guide comment block
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* conventions
---------
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
It was added at a time where the triplet target was directly fed as position setpoint to the controller.
Since the smoothing improvements to FlightTaskAuto(SmoothVel) and removing the previous "aggressive" FlightTaskAuto variant there should be no need anymore for this logic. It can sometimes lead to unexpected sideffects. E.g. the vehicle would suddenly change direction when exceeding some arbitrary threshold.
Persistent flaky failures (timeouts, erratic transitions) make these
tests unreliable in CI. Commented out from the workflow matrix so they
can be re-enabled once the test infrastructure is stabilized. The test
definitions in sitl.json are preserved for local use.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* FWModeManager: add option to set flag for disabling actuators during launch
Signed-off-by: Silvan <silvan@auterion.com>
* Allocation: add option to each control surface to be locked for launch
Signed-off-by: Silvan <silvan@auterion.com>
* FW rate control: reset integral while control surfaces are locked
Signed-off-by: Silvan <silvan@auterion.com>
---------
Signed-off-by: Silvan <silvan@auterion.com>
Co-authored-by: mahima-yoga <mahima@auterion.com>
* Creating a base for grf lidar
* Serial Drive is working, need to work out distance publish
* WIP Getting Range Data in cm
* Working Rand Distance Values for GRF 250 and GRF500
* Review Changes
* Compiler fixes
* Update to date
* small update
* Fix typo and remover unused libs
* removing unused enum
* Update to the Documentation
* Fiving scaling issue
* update to the logic
* [Feature] Adding I2C driver for the GRF250 and GRF500 models (#26425)
* Adding the GRF I2C driver
* I2C Driver Working
* Removing a lot of unnecessary code
* fixing names
* Changing the i2c Driver to be in the lightware laser
* remove the old driver
* formatting fix
* Adding Ligthware GRF to documentation
* Update to the Documentation
* Ensuring sample_perf ends
* Updating Docs
* uavcannode: implement hardpoint commands (#26334)
* implement cannode hardpoint commands
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
* Update src/drivers/uavcannode/Subscribers/HardpointCommand.hpp
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* Update src/drivers/uavcannode/Subscribers/HardpointCommand.hpp
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* add hardpoint sub to ark cannode, simplify handling of hardpoint broadcast
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
---------
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* voxl_esc: Limit frequency of UART passthru writes to 20Hz
* voxl2_io: Added UART passthru
* docs: update link for px4 ros2 interface lib python api docs
* estimator_interface: remove unused getter
* gnss_checks: always run strict checks on ground
With the goal to never take off if the GNSS solution is not fullfilling the configured requirements still not stopping to use it in case it degrades mid air.
* ekf2 unit-tests: adapt to strict GNSS checks on ground
* escCheck: rework online check to properly report offline ESCs
previous to this
09d79b221f
set `esc_online_flags` e.g. for UAVCAN ESCs which specific one is online and that then got compared to a mask where the first `esc_count` bits were set.
So if only ESC 5 is mapped and online you get the message "ESC 156 offline" because `esc_online_flags = 0b1000` gets compared to `online_bitmask = 0b1` based on `esc_count = 1` and the motor index is `esc[0].actuator_function = 0` wrapped using `0 - actuator_motors_s::ACTUATOR_FUNCTION_MOTOR1 + 1 = 156`.
* FailureDetector: consistent timestamp naming
* FailureDetector: rework motor status check
* FailureDetector: implement upper and lower current limit with offset
* Update src/modules/commander/failure_detector/FailureDetector.cpp
Prevent Buffer overflow
* Update Format
* Subedit
* Shrink and rename image
* Apply suggestion from @hamishwillee
Sounds good
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* Apply suggestion from @hamishwillee
More universal approach
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* Update to the Documentation
* FailureDetector: rework motor status check
* FailureDetector: implement upper and lower current limit with offset
* Subedit
* docs: update parameter reference metadata
* Remove pregenerated files - that should all be tidied up next time this runs
* remover GRF parameters
* Documentation updates
* Fixing Merge Conflicts
* remove @
* Undo Changes to parameter_reference
* remove the code that will be autogen-ed
* Update the Camake File
---------
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
Co-authored-by: Andrew Brahim <35986980+dirksavage88@users.noreply.github.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
Co-authored-by: Eric Katzfey <eric.katzfey@modalai.com>
Co-authored-by: Beat Küng <beat-kueng@gmx.net>
Co-authored-by: Matthias Grob <maetugr@gmail.com>
Co-authored-by: Marco Hauswirth <marco.hauswirth@auterion.com>
Co-authored-by: Nick <145654544+ttechnick@users.noreply.github.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
Add warning message in print_info() to alert users that CAN error counter
values may increase during the function call due to internal counter reading
implementation. Users should not fully trust these counters until the
underlying issue is fixed.
Co-authored-by: ljarvela <lasse.jarvela@iceye.com>
* feat: implement UAVCAN LED control for individual light control and assignment
* uavcan led: nit-picks from review
* uavcan led: reduce maximum number of lights
to avoid unused parameters
* uavcan led: simplify anticolision on check
* uavcan led: correctly map 8-bit RGB to rgb565
* Trim param name character arrays to 17
16 characters + \0 termination
* uavcan led: final nit-picks
---------
Co-authored-by: Matthias Grob <maetugr@gmail.com>
Remove the step that uploaded every version tag to the stable/ S3
directory, which caused QGC users selecting "stable" to receive
pre-release firmware (#26340). The stable/ and beta/ directories
are now controlled exclusively by their respective branch pushes,
while version tags only upload to their versioned archive directory
(e.g., v1.16.1/). Pre-release tags are also correctly marked on
GitHub Releases.
Co-authored-by: Julian Oes <julian@oes.ch>
Fixes#26340
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* RtlTimeEstimator: Consider minimum ground speed
This fixes an issue seen when the wind is faster than the trim airspeed,
but not faster than the max airspeed.
In that case the RTL time estimator currently assumes that we always fly
at trim airspeed and are thus unable to cover ground in the upwind
direction. The result is a very large RTL time estimate, resulting in
RTL if configured by COM_FLTT_LOW_ACT.
By considering the FW_GND_SPD_MIN parameter, we correct this wrong
assumption. The RTL remaining time estimate now becomes realistic in
this situation.
* RtlTimeEstimator: assume min ground speed of 5 if param unavailable
The previous commit (6b8fd11) gated smbus and smbus_sbs behind
PX4_PLATFORM=="nuttx" to prevent clang-tidy errors on SITL, but these
libraries depend on device::I2C which has a POSIX implementation
(posix/I2C.cpp). Linux boards like bluerobotics_navigator (armhf) and
emlid_navio2 (aarch64) enable CONFIG_DRIVERS_BATT_SMBUS, which depends
on drivers__smbus — causing CMake to fail with "non-existent target".
Move smbus and smbus_sbs back to unconditional add_subdirectory() so
they are available on all platforms. Keep mcp_common gated behind NuttX
since it includes px4_platform/gpio/mcp.hpp (NuttX-only GPIO headers).
Re-add src/lib/drivers/smbus to the Makefile clang-tidy exclude list
since the SITL compilation database lacks the I2C platform headers
needed for analysis.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The failsafe_test target uses CMake Unity Builds (UNITY_BUILD ON),
which merges emscripten.cpp, failsafe.cpp, and framework.cpp into a
single generated file at:
build/.../failsafe_test.dir/Unity/unity_0_cxx.cxx
The run-clang-tidy.py exclude regex operates on compile_commands.json
paths, which reference this generated unity file — not the original
source path. The previous exclude (src/modules/commander/failsafe/
emscripten) only matched the source path and missed the unity file,
causing clang-diagnostic-error: 'emscripten/emscripten.h' not found.
Add failsafe_test\.dir to the exclude regex to catch the unity build
path in addition to the source path.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The clang-tidy CI target builds against the SITL (px4_sitl_default-clang)
compilation database. Three libraries in src/lib/drivers/ were
unconditionally added via add_subdirectory(), causing them to appear in
compile_commands.json despite requiring NuttX-only headers:
- mcp_common: includes px4_platform/gpio/mcp.hpp (NuttX platform GPIO)
- smbus: extends device::I2C which resolves to the NuttX I2C driver
- smbus_sbs: includes smbus/SMBus.hpp, same I2C dependency chain
When clang-tidy analyzed these files it failed on clang-diagnostic-error
(fatal: header not found) since the platform headers don't exist in SITL.
The previous commit worked around this by adding the paths to
CLANG_TIDY_EXCLUDE_EXTRA in the Makefile, but the proper fix is to prevent
these libraries from entering the compilation database at all.
Gate mcp_common, smbus, and smbus_sbs behind
if(PX4_PLATFORM STREQUAL "nuttx") in src/lib/drivers/CMakeLists.txt.
This follows the established pattern already used by the device/ library
in the same directory, which conditionally includes NuttX-specific sources
(CDev.cpp, I2C.cpp, SPI.cpp) while compiling posix stubs for SITL.
The other libraries in the directory (accelerometer, gyroscope, led,
magnetometer, rangefinder) are pure abstractions over uORB topics and
internal utilities with no platform-specific hardware dependencies, so
they compile fine on all platforms without any gating.
Remove the now-unnecessary mcp_common and smbus paths from
CLANG_TIDY_EXCLUDE_EXTRA, keeping only the emscripten failsafe exclusion
(requires the emscripten SDK, not a platform build issue).
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
These files depend on platform headers (px4_platform/gpio/mcp.hpp,
device::I2C, emscripten/emscripten.h) that are unavailable in the
SITL/clang build, causing clang-tidy to report compiler errors:
- src/lib/drivers/mcp_common (NuttX GPIO)
- src/drivers/gpio (MCP23009, MCP23017)
- src/lib/drivers/smbus (I2C bus driver)
- src/modules/commander/failsafe/emscripten (emscripten SDK)
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Replace the two separate echo lines ("Starting" and "(arch)") with a
single line showing architecture and UTC timestamp:
[docker-entrypoint.sh] aarch64 | 2026-02-09T15:23:45Z
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Update the local Docker convenience script to use the unified
px4io/px4-dev image instead of the retired per-toolchain images
(px4-dev-clang, px4-dev-simulation-bionic).
Usage:
./Tools/docker_run.sh make px4_sitl_default
./Tools/docker_run.sh make tests TESTFILTER=ULogMessages
PX4_DOCKER_REPO="px4io/px4-dev:custom" ./Tools/docker_run.sh make px4_fmu-v6x_default
Changes:
- Default to px4io/px4-dev:v1.17.0-beta1, remove conditional image
guessing for clang/tests targets
- Remove stale env passthrough (Travis CI, AWS, Codecov, Coveralls)
- Keep CCACHE_DIR and sanitizer flags (PX4_ASAN/MSAN/TSAN/UBSAN)
- Fix $PWD shadowing by renaming to SCRIPT_DIR
- Use "$@" instead of "$1 $2 $3" for proper argument forwarding
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Rename ULogMessageInfoTest to ULogMessagesTest and add struct-level
coverage for every message type in the ULog spec:
- File header: magic bytes, size, field offsets
- Flag Bits ('B'): size, field offsets, flag masks
- Format ('F'): size, serialization
- Info ('I'): string, int32_t, and float value layouts
- Info Multiple ('M'): string layout, continuation flag, field offsets
- Parameter ('P'): int32_t and float value layouts
- Default Parameter ('Q'): size, type bits, field offsets
- Subscription ('A'): size, field offsets, serialization
- Unsubscription ('R'): size, serialization
- Data ('D'): size, field offset
- Logging ('L'): size, field offsets, serialization
- Logging Tagged ('C'): size, field offsets
- Sync ('S'): size, magic bytes
- Dropout ('O'): size, default msg_size, serialization
- Message header: size, field offsets, ULOG_MSG_HEADER_LEN
- Enum values: all 13 ULogMessageType codes
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Guard the strncpy call with a null check to prevent undefined behavior
if the constructor is ever called with a null path pointer.
Fixes clang-analyzer-core.NonNullParamChecker diagnostic.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The 48-byte struct (6 Vector2f) is only read inside initializePattern,
so passing by value creates an unnecessary copy.
Fixes performance-unnecessary-value-param clang-tidy diagnostic.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Remove using-declarations for math::constrain, math::max, and
math::min that are never used — all call sites use the fully-qualified
form (e.g. math::constrain()).
Fixes misc-unused-using-decls clang-tidy diagnostic.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
FlightTaskManualAcceleration and FlightTaskOrbit both inherit from
FlightTaskManualAltitudeSmoothVel but were calling FlightTask and
FlightTaskManualAltitude respectively, skipping the intermediate
parent's overrides (smoothing velocity init, parameter chain).
Fix the DEFINE_PARAMETERS_CUSTOM_PARENT macro argument and the
activate() call to use FlightTaskManualAltitudeSmoothVel.
Fixes bugprone-parent-virtual-call clang-tidy diagnostic.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
clang-tidy flags the memcpy of vlen bytes as
bugprone-not-null-terminated-result because the destination buffer
region is left unterminated in memory.
Copy vlen + 1 bytes (including the source null terminator) so the
buffer is null-terminated in memory. The ULog msg_size is not
incremented for the extra byte — the null sits in the struct's
key_value_str padding and is never written to the log file, preserving
the ULog wire format which does not include a null terminator for
string values.
The bounds check (vlen < sizeof(msg) - msg_size) guarantees at least
one byte of headroom beyond vlen, so vlen + 1 is always within the
struct.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Add a gtest that validates the exact binary layout of INFO and
INFO_MULTIPLE messages against the ULog spec. This exercises the same
packing logic as write_info/write_info_multiple and will catch any
accidental changes to the wire format (e.g. including a null terminator
in msg_size).
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Rename workflow to "Static Analysis" with job name "Clang-Tidy" for
clearer GitHub Checks UI. Use Title Case action-verb step names.
Switch from runs-on/cache to actions/cache since the runs-on Magic
Cache sidecar transparently handles S3 backing.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
github.ref_name resolves to '26367/merge' for pull_request events,
causing cache misses. Use github.head_ref (PR source branch) with
fallback to github.ref_name for push events.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Use separate cache/restore and cache/save steps with if: always()
on the save step, matching the build_all_targets pattern.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Switch from addnab/docker-run-action to native container directive
- Use runs-on 16-core runner with S3 cache (extras=s3-cache)
- Add ccache setup matching build_all_targets pattern
- Run clang-tidy with -j16 to leverage all cores
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The free GitHub runner (4 vCPUs) takes ~22 minutes. Switch to a
16-core runs-on runner and bump parallelism to -j16 to reduce
clang-tidy analysis time.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Pin the container image to v1.17.0-beta1 which includes clang-tidy 18
and all required clang dependencies pre-installed. This removes the
need to install clang-tidy via apt on each workflow run.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Update .clang-tidy configuration to maintain compatibility with
clang-tidy 18 in the new px4io/px4-dev:v1.17.0-alpha1 container.
The previous CI container used clang-tidy 6.0 (2018) with ~213 checks.
The new container has clang-tidy 18 (2024) with ~537 checks - adding
~324 new checks that would fail without configuration changes.
This commit disables the new checks to preserve the existing code
quality baseline. The disabled checks can be evaluated and enabled
incrementally in future PRs as the codebase is updated to comply.
New checks disabled (partial list):
- bugprone-assignment-in-if-condition
- bugprone-casting-through-void
- bugprone-multi-level-implicit-pointer-conversion
- cppcoreguidelines-avoid-do-while
- cppcoreguidelines-avoid-goto
- cppcoreguidelines-avoid-non-const-global-variables
- misc-definitions-in-headers
- misc-header-include-cycle
- misc-no-recursion
- modernize-macro-to-enum
- modernize-type-traits
- performance-enum-size
- readability-avoid-nested-conditional-operator
- readability-convert-member-functions-to-static
- readability-redundant-string-init
- readability-simplify-boolean-expr
- (and ~35 more)
See full list in .clang-tidy. Each check is prefixed with '-' to
disable it while keeping WarningsAsErrors: '*' active for enabled
checks.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Automatically generate the clang-tidy exclusion list from .gitmodules
so new submodules are excluded without manual intervention.
Changes:
- Makefile: Generate CLANG_TIDY_SUBMODULES from .gitmodules paths
- Makefile: Add CLANG_TIDY_EXCLUDE_EXTRA for manual exclusions:
- src/systemcmds/tests (test code, looser style allowed)
- src/examples (educational code, not production)
- src/modules/gyro_fft/CMSIS_5 (vendored ARM DSP library)
- Delete src/systemcmds/tests/.clang-tidy (stale since 2019)
- Delete src/modules/gyro_fft/CMSIS_5/.clang-tidy (redundant)
Rationale: Submodules and vendored code should be linted in their
upstream repositories, not here. This reduces noise and focuses
clang-tidy on code that PX4 maintainers actually edit.
Contributors adding vendored (non-submodule) third-party code should
add their path to CLANG_TIDY_EXCLUDE_EXTRA in the Makefile.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Add regex-based file exclusion to the clang-tidy runner script.
This allows excluding paths (submodules, vendored code, tests) from
static analysis without modifying .clang-tidy files in each directory.
The -exclude argument accepts a regex pattern that is matched against
file paths from the compilation database. Matching files are skipped.
Example: -exclude="src/lib/foo|src/modules/bar"
This prepares for the clang-tidy v6 to v18 migration where we need
to exclude external code that we consume but don't maintain.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Extend the -Wno-asm-operand-widths workaround to include Linux aarch64
in addition to Apple Silicon. CMSIS DSP contains ARM Cortex-M specific
assembly that clang (but not gcc) warns about on 64-bit ARM platforms.
The assembly code is unused on POSIX builds - only the C fallback
implementations are executed in SITL.
This fixes clang-tidy CI failing on arm64 runners.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Update "Failed to import Python packages" section to reference
gz_x500 instead of jmavsim, and point to Tools/setup/requirements.txt
instead of listing individual packages
- Fix :::info admonition spacing in Ubuntu dev env docs
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The new px4-dev container replaces the old per-distro container
hierarchy from PX4/PX4-containers. It is:
- Multi-architecture (linux/amd64 + linux/arm64)
- Based on Ubuntu 24.04
- Built from the in-tree Dockerfile via GitHub Actions
- Published to both ghcr.io and Docker Hub
- Tagged with PX4 versions (e.g. px4-dev:v1.16.0)
Mark the legacy per-distro containers (px4-dev-nuttx-jammy,
px4-dev-ros2-humble, etc.) as deprecated, note that px4-sim
is planned for simulation workflows.
Update all examples to use px4-dev instead of legacy containers.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
docker.md:
- Update container hierarchy from focal to jammy
- Replace ROS Noetic/Foxy references with ROS 2 Humble
- Update docker run example to use humble container
- Update SITL example from gazebo-classic to gz_x500
- Update VM tested version from Ubuntu 14.04 to 22.04
vscode.md:
- Remove "Ubuntu 18.04" from inotify troubleshooting header
(this issue is not Ubuntu-version-specific)
dev_env_linux_centos.md:
- Update GCC warning to reference current Ubuntu LTS toolchain
instead of old Focal Docker file
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Replace "older version" collapsible with info block stating
supported versions: Ubuntu 24.04 (primary) and 22.04
- Remove Gazebo Classic references (Ubuntu 22.04 section, install step)
- Note that GCC version comes from Ubuntu package manager
- Clarify that GCC version depends on Ubuntu release
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Remove Ubuntu 18.04 troubleshooting sections (compile errors,
VSCode inotify) — Ubuntu 18.04 is no longer supported
- Remove Gazebo Classic SITL dropdown from first build section
- Update FMUv2 flash warning to reference gcc-arm-none-eabi from
current Ubuntu LTS instead of vague "CI/docker" reference
- Update flash overflow guidance to point at Ubuntu LTS toolchain
- Simplify "too many open files" error example (remove old GCC 7.2.1
path from 2017)
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Remove Gazebo Classic installation branches for Ubuntu 18.04 and 20.04.
The script now only supports Ubuntu 22.04 and 24.04 with Gazebo Harmonic.
Supported Ubuntu LTS versions going forward:
- Ubuntu 24.04 (primary, used in CI and release builds)
- Ubuntu 22.04 (secondary, still supported)
When Ubuntu 26.04 LTS releases we will bump to 26.04/24.04.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* docs: modernize README with hero logo, vehicle icons, and fixed links
Add PX4 and Dronecode SVG logos to the repo, replace broken external
Dronecode logo URL, fix SITL badge branch from master to main, and
restructure the README with centered branding, airframe icon row,
quick-start section, and consolidated documentation links.
The libfc-sensor-api submodule was not being initialized in CI,
causing the stub library build to fail silently. Use the existing
check_submodules.sh mechanism to ensure the submodule is fetched
before attempting to build, and add RESULT_VARIABLE checks so
cmake configuration and build failures are caught early.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Remove modalai_voxl2 and qurt from CI exclusion lists and add
container overrides to use the private ghcr.io/px4/px4-dev-voxl2
image which contains the Qualcomm Hexagon SDK.
- Add voxl2 build group with x64 runner for cross-compilation
- Add GHCR credentials to workflow for private container pull
- Add packages:read permission to workflow
- Auto-build libfc_sensor.so stub during cmake configure
- Handle missing .px4/.elf gracefully in artifact packaging
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Add step to replace "main (planned for:" badges with release version
when preparing release notes (hamishwillee suggestion)
- Define explicit exit criteria for alpha phase: test cards pass,
regressions fixed/triaged, documentation complete
- Differentiate beta testing from alpha: beta is community-driven
validation on extended hardware, not a repeat of alpha test cards
- Define explicit exit criteria for beta->RC transition
- Fix index.md formatting
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Move maintainer link to end of index.md in an info block
- Fix link path to use relative ../releases/ prefix
- Clarify tag stages apply to release branches
- Improve Dronecode Test Team formatting with proper link
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
When build-site uses always() in its if condition, the skipped status
from its upstream dependencies propagates to deploy-aws which lacks
always(). Add always() with explicit success checks to ensure deploy
runs when both metadata-regen and build-site succeed.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The metadata-regen job runs inside the px4io/px4-dev container which
has no Node.js. The actions/setup-node action only installs on the
host runner, not inside the container, causing yarn: not found errors.
Replace actions/setup-node with direct Node.js installation via
NodeSource and enable corepack for Yarn support.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Add a docs filter to detect-changes and gate build-site so it is
skipped when a PR only touches the workflow YAML file. Push and
dispatch triggers are unaffected.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The version guard rejects non-main/release branches, but build-site
also runs on PRs where the branch name is arbitrary. Default to "main"
for PR builds since deploy-aws is skipped anyway.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Update workflow_dispatch support, fork PR comment guard,
and branch validation in the docs-orchestrator documentation.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
- Add safe.directory + fetch-depth: 0 for container jobs
- Support workflow_dispatch in metadata-regen and deploy-aws
- Guard PR comments against fork PRs
- Add ccache save to pr-metadata-regen
- Use metadata_sync.sh --generate --sync instead of manual steps
- Fix msg_docs source path in metadata_sync.sh
- Guard set-version against non-release branches
- Clean up build-site needs list
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
It turns out ICM20602 and ICM20948 are not actually started/probed on
the px4/v6x platform. We should be able to remove them without
repercussions and save some flash.
The docs-orchestrator workflow referenced px4io/px4-dev-nuttx-focal:2024-11-07
which does not exist on Docker Hub, causing the T2: Metadata Sync job
to fail on push to main.
Use px4io/px4-dev:v1.17.0-beta1 which has all required toolchains.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The sticky-pull-request-comment action requires a non-empty file
when using the path input. When the filtered link checker finds no
broken links in changed files, it produces an empty file causing
the action to fail with "Either message or path input is required".
Ensure the results file always has content by writing a fallback
message when the file is missing or empty.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Prefix job names with T1-T4 to make the execution order and dependency
chain visible at a glance in the GitHub Actions UI.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
After a force push, GitHub evaluates path filters against only the
pushed commits, not the full PR diff. Changes to the orchestrator
workflow file itself were not matching the docs/** path filter,
preventing the orchestrator from running on the PR.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Pass the changed files JSON through an environment variable instead
of direct interpolation to avoid shell quoting issues.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Add fetch-depth: 0 to the checkout step in docs_flaw_checker.yml.
Without a full clone, tj-actions/changed-files cannot find the merge
base between main and the PR branch, causing the job to fail with
"no merge base".
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Regenerate yarn.lock to include prettier dependency that was added to
package.json but missing from the lockfile, causing CI to fail with
--frozen-lockfile. Also add package-lock.json to .gitignore since the
project uses yarn.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Add conditional metadata generation for PRs that modify both docs and
source files. This fixes broken link checker reports when a PR adds a
new module and documents it simultaneously - previously the link checker
would fail because metadata files are only generated on push to main.
Changes:
- Add docs-orchestrator.yml workflow with:
- detect-changes job to check if PR touches source paths
- pr-metadata-regen job that generates metadata and uploads as artifact
- link-check job that downloads metadata artifact when available
- build-site job for VitePress site generation
- deploy-aws and crowdin-upload jobs for push events
- Prettier formatting step before auto-commit on push
- Add Prettier for markdown formatting:
- Add prettier ^3.2.0 as devDependency in docs/package.json
- Add docs/.prettierrc with prose-preserving config
- Remove normalize_whitespace from metadata_sync.sh (Prettier handles
whitespace normalization now)
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
metadata_modules.sh — generate and sync PX4 module reference documentation
Usage:
Tools/ci/metadata_modules.sh [--test-only] [--debug]
Options:
--test-only Run make target and comparison; exit 1 if diffs found, without copying files
--debug Show full make output and debug info for file comparisons
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
metadata_airframe.sh — generate and sync PX4 airframe reference documentation
Usage:
Tools/ci/metadata_airframe.sh [--test-only] [--debug]
Options:
--test-only Run make target and comparison; exit 1 if diffs found, without copying file
--debug Show full make output and debug info for comparison
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
metadata_parameters.sh — generate and sync PX4 parameter reference documentation
Usage:
Tools/ci/metadata_parameters.sh [--test-only] [--debug]
Options:
--test-only Run make target and comparison; exit 1 if diffs found, without copying file
--debug Show full make output and debug info for comparison
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
metadata_msg_docs.sh — generate and sync uORB message reference documentation
Usage:
Tools/ci/metadata_msg_docs.sh [--test-only] [--debug]
Options:
--test-only Run make target and comparison; exit 1 if diffs found, without copying files
--debug Show full make output and debug info for file comparisons
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
context: our docs need this metadata, this script generates the metadata then
moves the files to the required destination.
docs:
update_uorb_graphs.sh — generate, compare, and sync uORB graph JSONs
Usage:
./scripts/update_uorb_graphs.sh [--test-only] [--debug]
Options:
--test-only Run generation and comparison only; exit 1 if diffs found, without copying files
--debug Echo debug info for missing or differing files
Examples:
# CI mode: fail if docs need updates
./scripts/update_uorb_graphs.sh --test-only
# Developer mode: regenerate and sync JSONs
./scripts/update_uorb_graphs.sh
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* ManualControl: Payload Power Switch: default PAYLOAD_POWER_EN false if RC_MAP_PAY_SW is configured. Apply initial switch state for Payload Power
* make format
* ManualControl: init power_en in init()
* ManualControl: Apply payload power state on first switch receipt if not armed
* simplfy
* fix idefs
* simplify
- Initialize W25N01GV NAND flash on SPI1 with littlefs.
- Enable BOARD_SMALL_FLASH_LOGGING for small flash handling.
- Increase logger buffer size for flash write performance.
This cherry-picks upstream commits adding NAND flash support for the
Winbond W25N specifically W25N01GV chip.
NAND flash is used together with littlefs, hence I updated that to 2.5.1
to match upstream NuttX.
call into a new UORB COMMUNICATOR ICHANNEL shutdown interface if it has been configured, otherwise it
does nothing. This allows ICHANNEL implementations to pass on a shutdown indication to a remote processor.
Implemented the shutdown interface in the muorb module for VOXL flight controllers.
previous to this
09d79b221f
set `esc_online_flags` e.g. for UAVCAN ESCs which specific one is online and that then got compared to a mask where the first `esc_count` bits were set.
So if only ESC 5 is mapped and online you get the message "ESC 156 offline" because `esc_online_flags = 0b1000` gets compared to `online_bitmask = 0b1` based on `esc_count = 1` and the motor index is `esc[0].actuator_function = 0` wrapped using `0 - actuator_motors_s::ACTUATOR_FUNCTION_MOTOR1 + 1 = 156`.
With the goal to never take off if the GNSS solution is not fullfilling the configured requirements still not stopping to use it in case it degrades mid air.
* Adding the GRF I2C driver
* I2C Driver Working
* Removing a lot of unnecessary code
* fixing names
* Changing the i2c Driver to be in the lightware laser
* remove the old driver
* formatting fix
* Adding Ligthware GRF to documentation
For flash constrained builds, the component metadata files are
downloaded directly from s3. For the main branch, these files are
currently still uploaded to master. Therefore, we also need to reference
master and not main.
This fixes the actuators tab in QQC for KakuteH743-Wing which is one of
the boards that did not exist in source when we briefly uploaded to main
before reverting back to master, presumably for QGC compatibility.
This feature periodically spins the unused motors on VTOL airframes, to
break off ice that has built up in the motor while it is still feasible
to do so. Each ice shedding event sends a motor ouput of 0.01 to the
unused motors for 2 seconds.
Configured by `CA_ICE_PERIOD`, the duration of the entire cycle. Set to
0 to disable.
rather than the vehicle_thrust_setpoint used previously, which includes
battery scaling which we don't want, neither for synthetic airspeed nor
for the airspeed validator.
* Tools: rewrite uploader script
This adds a script called px4_uploader.py which is a complete rewrite
using Claude Code of px_uploader.py.
The main improvements over the previous px_uploader.py script are:
- Separate smaller classes instead of one big uploader class.
- Easier debugging with --verbose or --debug flags.
- Nicer progress animation.
- No more hard to debug Exception swallowing over multiple levels.
- Auto-detection and looping of devices, removing the functionality from
cmake.
- Auto-detection of PX4 devices by USB VID/PID.
- Add noninteractive mode
- Add JSON output mode
* update uavcan hardpoint: add ability to use it via mavlink cmd and during mission and removed send_command() dedicated for usage via mavlink console
* uavcan hardpoint: allow gripper ID 0
---------
Co-authored-by: Andrew Brahim <35986980+dirksavage88@users.noreply.github.com>
Commit 5fe82aa added mutex protection in ~Mavlink() to fix a race
condition when start_helper() deleted an instance without holding the
mutex. However, this caused a deadlock because stop_command() and
destroy_all_instances() already hold mavlink_module_mutex when calling
delete, and the mutex is non-recursive.
Fix by moving instance cleanup to the callers:
- All callers now hold the mutex and remove the instance from
mavlink_module_instances BEFORE calling delete
- The destructor no longer touches mavlink_module_instances
- Event handoff remains in destructor (works because `this` is already
removed from the list when destructor runs)
This hopefully fixes the original race condition while avoiding the
deadlock that caused USB mavlink to hang on reconnect.
* Changed GZMixingInterfaceESC to GZMixingInterfaceMotor
- GZMixingInterfaceMotor checks if there are more than 8 motors configured if its less than 8 it behaves exactly the same as GZMixingInterfaceESC, else it behaves as a PWM motor interface
- This change allows drones with more than 8 motors to be simulated by Gazebo
Fixes#25080
* code quality fix
* Changed GZMixingInterfacMotor back to GZMixingInterfaceESC and changed variable names to match ESC terminology
* formatting issue resolved
* updated interface to support 16 ESCs, allowing the first 8 to report telemetry
* rebased
* Simplify bug report issue template to reduce clutter
- Reduced from 11 fields to 2 consolidated fields
- Enabled blank issues for flexibility
- Combined optional fields into single "Flight Log / Additional Information" section
- Added helpful tips at top instead of separate required fields
- Eliminates empty field clutter in submitted issues while maintaining guidance
* Fix inconsistent YAML indentation in bug report template
* moving raptor
bump
compiles and raptor mode appears
hovering with RAPTOR seems to work
Using Raptor to execute offboard commands works (using multirobot f03825a5795a77c5a095f799eeb8e0b646fe7176 to feed the trajectory_setpoint). Requires more testing
simplified rotmat
runtime inference frequency multiple
arming request response reflects actual readiness
adjusting to fit IMU gyro ratemax
relaxing control timing warning thresholds for SITL
Using mode registration to signal if offboard commands should be forwarded to trajectory_setpoint instead of just hardcoding vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_OFFBOARD
adopting new "request_offboard_setpoint" in raptor module
replace offboard seems good
mc_raptor: overwrite offboard parameter
separate raptor config
addendum
Raptor off by default
RAPTOR readme
Loading raptor checkpoint from tar works.
check if load was successful
refactoring: cutting out the pure C interface to allow direct testing of the policy input/output behavior from the file, without fully loading it into memory first
adapter not needed anymore
ripping out test observation mode (not used in a long time)
fixing warnings
bump RLtools to fix the remaining warnings
Loading RAPTOR checkpoint from sdcard seems to work on FMU-6C
embedding Raptor policy into flash works again
also printing checkpoint name when using the embedded policy
cleaner handling of the checkpoint name
back to reading from file
ripping out visual odometry checks
cleaner
more debug but no success
bump rlt
bump
pre next rebase
we can publish the no angvel update because we latch onto it with the scheduled work item anyways
this kind of runs on the 6c
still bad
SIH almost flying
saving stale traj setpoint yaw
new error. timestamp not the problem anymore
bump rlt; SIH works with executor
shaping up
bumping blob (include tar checkpoint)
cleaning up
fixing formatting
update readme
* moving raptor
bump
compiles and raptor mode appears
hovering with RAPTOR seems to work
Using Raptor to execute offboard commands works (using multirobot f03825a5795a77c5a095f799eeb8e0b646fe7176 to feed the trajectory_setpoint). Requires more testing
simplified rotmat
runtime inference frequency multiple
arming request response reflects actual readiness
adjusting to fit IMU gyro ratemax
relaxing control timing warning thresholds for SITL
Using mode registration to signal if offboard commands should be forwarded to trajectory_setpoint instead of just hardcoding vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_OFFBOARD
adopting new "request_offboard_setpoint" in raptor module
replace offboard seems good
mc_raptor: overwrite offboard parameter
separate raptor config
addendum
Raptor off by default
RAPTOR readme
Loading raptor checkpoint from tar works.
check if load was successful
refactoring: cutting out the pure C interface to allow direct testing of the policy input/output behavior from the file, without fully loading it into memory first
adapter not needed anymore
ripping out test observation mode (not used in a long time)
fixing warnings
bump RLtools to fix the remaining warnings
Loading RAPTOR checkpoint from sdcard seems to work on FMU-6C
embedding Raptor policy into flash works again
also printing checkpoint name when using the embedded policy
cleaner handling of the checkpoint name
back to reading from file
ripping out visual odometry checks
cleaner
more debug but no success
bump rlt
bump
pre next rebase
we can publish the no angvel update because we latch onto it with the scheduled work item anyways
this kind of runs on the 6c
still bad
SIH almost flying
saving stale traj setpoint yaw
new error. timestamp not the problem anymore
bump rlt; SIH works with executor
shaping up
bumping blob (include tar checkpoint)
cleaning up
fixing formatting
update readme
updating gitignore
* fixing format and declaring submodules as cmake dependencies
* adding uORB message documentation
* fixing comment alignment
* Adding option to restrict mc_raptor to not listen to the trajectory_setpoint (use the position and yaw at activation time as reference instead)
* bump RLtools; relax timing thresholds and adding real world readme
* smooth traj tracking performance
* Measuring trajectory_setpoint timing (providing stats in raptor_status); reverting accidental .gitignore modification
* More ideomatic way of setting the path to the policy checkpoint
* Reset trajectory_setpoint on raptor mode activation
* Adding internal trajectory generation (feeding trajectory_setpoint over Mavlink is too noisy). Quite agile trajectory tracking, good performance
* stable flight
* Update msg/versioned/RaptorInput.msg
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* adopting message formatting conventions
* sort raptor.px4board
* Archiving RegisterExtComponentRequestV1.msg
* Add message versioning for VehicleStatus v2 and RegisterExtComponentRequest v2
* fixing formatting
* making internal reference configurable via command
* RAPTOR docs wip
* raptor internal reference documentation
* Finishing RAPTOR docs first draft
* adding logging instructions
* Fixing missing command documentation test error
* fixing format
* adding motor layout warning
* raptor minimal subedit - prettier, images etc
* Improve intro
* Fix up Neural_Networks version
* Mentioning "Adaptive" in the RAPTOR documentation's title
* Adding clarifications about the internal reference trajectory generator
* Removing "foundation policy" wording
* Fixing new-line check
* Removing redundant (evident through directory hierarchy) raptor_ from filenames
* Unifying Neural Network docs (mc_nn_control and mc_raptor) under the "Neural Network" topic
* Fix to standard structure
* Making the distinction between mc_nn_control and mc_raptor more clear and fixing the comparison table
* Removing trajectory_setpoint forwarding flag from external mode registration request and from the vehicle status
* Trivial layout and wording fixes
* fixing docs error
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* uavcan esc: remove unused includes
* uavcan arming_status: disarm when terminated
To stay consistent with kill.
* uavcan: publish armed during actuator tests to make it possible spinning motors
* feat: added driver for tmp102 temperature sensor
* style: removed new line
* style: adjusted date in header
* style: removed duplicated logging
* fix: moved start-up command from rc.board_sensors to rc.sensors
* style: used consexpr for expected config reg value
* feat: added retry logic to probe function
* style: added _ as prefix to global variable
* style: used make format
* fix: corrected temperature calculation
* fix: mask AL-bit in probe function
* style: removed header files from CMakeLists
* style: used correct english in comments
* refactor: return error right after failure
* style: moved init call to correct place
* fix: corrected temperature calculation (again)
* refactor: removed _curr_pr variable => always have to set PR to desired register on read
* fix: add multi logged topic
* FwLateralLongitudinalControl: publish uknown flight phase if TECS not running
* FwLateralLongitudinalControl: publish flight phase with lower rate
For this we store the new flight phase in a local variable, which is
returned by tecs_update_pitch_throttle (but initialised outside to
unknown in case TECS does not run).
* rover_mecanum: enable yaw control via MAVLink SET_POSITION_TARGET commands
* Maintain the original judgment conditions
---------
Co-authored-by: V <null>
The first test makes sure the user can take over when an RTL failsafe was triggered but degraded to a Land.
The second test rules out the easiest fix of removing the condition `_selected_action == selected_action` which causes the problem for test one but is there for a reason.
When position control is disabled, clear the setpoint properly to prevent stale values. This fixes a bug where switching to position mode in the same control loop as a hover thrust estimate update could fill up the velocity integrator.
I don't think we should change the logging profile based on the type of
airframe configured. Instead, this is an option you set based on the
phase of development/testing you're in.
This came up because the KakuteH7v2 which is 4050 by default would log
excessively which is not a good idea with only 128 MB flash storage.
* FwLateralLongitudinalControl: publish flight phase
* FwLateralLongitudinalControl: consolidate hrt_absolute_time calls
* FwLateralLongitudinalControl: Name time variables correctly
* FwLateralLongitudinalControl: pass current time as argument rather than class member
* FwLateralLongitudinalControl: use local position timestamp
Replaces the legacy pure-Python lookup table CRC32 implementation with the built-in `zlib.crc32`.
The previous implementation relied on a manual loop over bytes, which was inefficient for large firmware files (taking ~0.5s for 2MB on modern CPUs). The new implementation reduces this to ~1ms.
Implementation details:
- Removed the hardcoded `crctab` array to clean up the code.
- Adjusted `zlib` initial state (0xFFFFFFFF) and final XOR operations to ensure bit-perfect compatibility with the specific CRC32 variant expected by the PX4 bootloader.
Benchmark (2MB firmware):
- Legacy: ~0.48s
- zlib: ~0.001s
This prevents PX4 from sending out the GPS_GLOBAL_ORIGIN message
immediately when a SET_GPS_GLOBAL_ORIGIN message arrives.
Instead, we apply the new origin in the EKF, and only then send out
the new origin, which is much more intuitive and doesn't confuse a user
of the API.
* init: working towards dual-action ATMOS
* fix: update gz sim to latest
* fix: add motor number max fitting Actuator
* fix: revert non-necessary changes
* fix: ensure esc count does not exceed maximum number of ESCs
* feat: update gz to latest, includes ATMOS dual action
* fix: restore dds_topics
* fix: update gazebo model commit
* reset by fusion:
* state correction with tiny observation variance
* covariance matrix upate with correct observation variance
* reset wind to 0 on hard-reset during global-position-reset
increase gate
* adjust unittest: velocity gets now reset on resetGlobalPosToExternalObservation
- avoids using invalid velocity estimate to reset wind
- do not set fusion flags if starting was impossible
- reset wind to 0 before resetting velocity using airspeed if wind data
is outdated
* driver: ist8310: add IST8310J device ID support and cross-axis compensation
IST8310J shares the same register map and initialization sequence as IST8310.
This change extends the existing IST8310 driver to:
- Accept the IST8310J device ID during probe and reset
- Load factory cross-axis calibration data from OTP
- Apply cross-axis compensation to raw magnetometer samples
The cross-axis compensation corrects factory axis misalignment only and
does not replace PX4 runtime magnetometer calibration.
Tested on Raspberry Pi using I2C with both IST8310 and IST8310J devices.
Signed-off-by: webbyeh <webbyeh@isentek.com>
* driver: ist8310: add IST8310J device ID support
IST8310J shares the same register map and initialization sequence as IST8310.
Factory cross-axis compensation support was evaluated but has been removed
in this revision due to flash size constraints on embedded targets. The
driver now focuses on device identification and stability, while relying on
the existing PX4 magnetometer calibration framework.
This commit also addresses review feedback by caching the WAI register value
to avoid redundant I2C reads during the reset wait state.
Tested on Raspberry Pi using I2C with both IST8310 and IST8310J devices.
Signed-off-by: webbyeh <webbyeh@isentek.com>
* Fix formatting issues in IST8310.cpp
---------
Signed-off-by: webbyeh <webbyeh@isentek.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* serial: add txSpaceAvailable function
* serial: txSpaceAvailable and bytesAvailable fixups
* msg: GpsDump: increase queue from 8 to 16 and replace instance with device_id
* lib: gnss: add RTCM parsing library. Generated by Claude Code.
* gps: fix RTCM injection to use inject-before-read pattern as before. Add RTCM parser to frame-align injection. Drain GpsInjectData uORB queue into RTCM parser buffer and then inject. Add GPS_UBX_PPK parameter to enable MSM7 output from the GPS module (rather than the default of MSM4) which is required for PPK workflows.
* gps: replace PX4_WARN with perf counters
* uavcannode: publishers: MovingBaselineData: publish all GpsInjectData updates during BroadcastAnyUpdates. Check and report data loss via uorb generationcounter. Only registerCallback outside of the loop.
* remove unnecessary include
* msg: GpsDump: increase queue from 8 to 16 and replace instance with device_id
* uavcan: gnss: MovingBaselineData subscriber for RTCM logging for PPK. Add uORB generation tracking to detect data loss on RTCM injection.
* add instance TODO
* Implemented driver for MCP23017
* fixed compatability with mcp23009. (naming of instantiated GPIO-Devices)
* removed some comments
* removed even more comments
* commented out instatntiation of driver since it will not be used with v6x
* removed last useless comments
* re-activated gpio_mcp23009 driver, removed useless comments and empty lines
* removed empty lines at the end of mcp23017.cpp
* removed empty line
* Implemented driver for MCP23017
* fixed compatability with mcp23009. (naming of instantiated GPIO-Devices)
* removed some comments
* removed even more comments
* commented out instatntiation of driver since it will not be used with v6x
* removed last useless comments
* re-activated gpio_mcp23009 driver, removed useless comments and empty lines
* removed empty lines at the end of mcp23017.cpp
* removed empty line
* basic working implementation
* first improved driver version with shared code base for MCP23009 & MCP23017 (built as state machine with sanity checks)
* removed unused imports
* changed module name from MCP to MCP230XX
* removed debug print statements
* adjusted auto start command of driver
* removed comments
* -added seperate main functions for both derivative modules (mcp23009 and mcp23017)
* compile common functions as shared library in src/lib/drivers
* fixed cleanup of modules
* ->unclean working version with shared common library
* used make format
* working & cleaned version
* -> Added CallbackHandler to be able to use multiple reading GPIO-expanders simultaneously
-> Removed old mcap23009 calls and pin registrations
-> Adjusted GpioIn.msg to contain MAX_INSTANCES
* ->removed unused imports
->used make format
* Fix: Re-enabled platform_mcp_gpio for accton-godwit, cuav, fmu-v5x
* Fix: enabled platform_mcp_gpio in px4/fmu-v5x
* added depency to fmu-v5x
* Fix: removed new lines
* Fix: fixed linker errors
* removed unused linkage against mcp-library
* Made mcp start calls consistent for fmu-v5x and fmu-v6x
* moved logging of comm errors to read/write function directly
* added perf_count for sanity_check
* removed error message
* ensured member variables follow naming convention
* added retries to probe function
* simplyfied state-logic
* add break to terminate loop early
* ensured clean state when register_gpios() fails
* add registered-flag to pins
* used path from top dir instead of relative path in CMakeLists
* used constexpr to set parameters instead of calculating them at runtime
* style: used make format
* fix: corrected i2c_bus assignment
* style: init input of callbackhandler to 0
* fix: mark pin as registered if successful
* style: made arguments const type
---------
Co-authored-by: Alexander Lerach <alexander@auterion.com>
* uavcan: collect node info and publish every second
* UORB: Add DeviceInformation Message
Format DeviceInformation.msg with standard comment spaces
* SENS: add getter for device_id
* UAVCAN: add publishing of DeviceInformation based on publised message type, and Node Information
* LOG: add deviceInformation
* MSG:BAT: fix comment to be inline with the max_instaces
* UAVCAN: DeviceInformation, incorporated feedback
* UAVCAN: DeviceInformation, incorporated feedback
* UAVCAN: DeviceInformation, Fixed bug with Powermonitor
---------
Co-authored-by: Beat Küng <beat-kueng@gmx.net>
* init: working towards dual-action ATMOS
* fix: update gz sim to latest
* fix: add motor number max fitting Actuator
* fix: revert non-necessary changes
* fix: ensure esc count does not exceed maximum number of ESCs
* fix: remove extra modules
* fix: sync submodules with remote
* fix: sync with main
* added vehicle command and support to remotely activate/deactivate the safety system (#26078)
* added print_status support for prearm safety status
* updated safety button to map to MAV_CMD_DO_SET_SAFETY_SWITCH_STATE = '5300'
* safety switch cmd: fixed incorrect catch-all and added commanded_state variable for easier reading
A false positive could be triggered if velocity fusion started,
then stopped after takeoff and only position fusion started again
(because velocity fusion timed out and had a timestamp > time_last_on_ground).
We now also check if the fusion timeout is due to the innovation being
rejected (and not just a temporary check failure or data interruption).
* test: increase altitude tolerance to fix flaky test
Altitude tolerance increased from 0.1f to 0.15f to handle simulation
timing variations. Test was failing at 0.201m with 0.2m tolerance.
* test: increase altitude tolerance further to 0.3m
* ci: re-add branch trigger for SITL tests
* Revert "ci: re-add branch trigger for SITL tests"
This reverts commit e5e4c9637b.
* mavlink: fix potential use-after-free
If a mavlink instance is force stopped, the main thread might be out of
scope and the receiver thread would be doing a use-after-free.
Instead the receiver thread needs to check its own _should_exit flag.
* mavlink: protect shared data by mutex in dtor
I'm not sure if this potentially fixes any of the segfaults we have seen
on stopping mavlink instances but it potentially could matter if the
mavlink_receiver thread is killed after a timeout and tries to send any
messages as a zombie.
* Adds configurable I2C address for PCA9685 PWM driver
Introduces a parameter to set the I2C address for the PCA9685 PWM output driver, enhancing flexibility for hardware variations. Updates documentation and board initialization scripts to support the new configuration and streamline device startup.
* Update src/drivers/pca9685_pwm_out/module.yaml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update src/drivers/pca9685_pwm_out/module.yaml
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
In cold weather, fuel engines need to be warmed up. Currently, this is done by switching to stabilized mode and throttle up. The issue is that when not using GNSS data, the vehicle is not detected as "at rest" due to vibrations and cannot switch into auto/takeoff modes.
If EKF2_ENGINE_WRM is enabled, and if the vehicle is armed and landed, constant position fusion is enabled.
When operating fully autonomously (i.e., without manual control or a guaranteed link to the ground station), tuning a vehicle can be difficult since the current autotune process requires either RC input or a GCS command. For these scenarios, it it useful to be able to start autotune inside a mission.
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>
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>
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>
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.
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.
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.
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
Abort publication immediately when not enough memory is available.
Zero _zenoh_publishers and _zenoh_subscribers to ensure we're not
dereferencing a wrong pointer
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.
* 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>
* 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
Barometeric pressure was changed to the SI unit Pascal instead of the non-SI unit Hectopascal/Millibar in
0c31f63896
This script stayed unchanged and suffers from assuming `sensor_baro.pressure` is still in the old unit which would be a 100 times smaller number.
MCP9808: Replaced PX4_INFO with PX4_DEBUG
MCP9808: Update date in headers
MCP9808: Define functions before variables
MCP9808: Increase logging interval for sensor_temp
MCP9808: Removed extra space
MCP9808: Remove this->
- Remove enum class Register : uint8_t
- Explicitly initialize buffer
- Explicitly initialize temp_raw
- Rename uorb publisher
- Remove overide from print_status()
- Take timestamp after read, correct measurement_time to uint64 and use hrt_elapsed_time()
- Remove exit_and_cleanup
- Move functions out of main + cleanup whitespace
MCP9808: remove exit_and_cleanup
MCP9808: Take timestamp after read, correct measurement_time to uint64 and use hrt_elapsed_time()
MCP9808: remove overide from print_status()
MCP9808: rename uorb publisher
MCP9808: explicitly initialize temp_raw
MCP9808: explicitly initialize buffer
MCP9808: Remove enum class Register : uint8_t
MCP9808: move functions out of main + cleanup whitespace
During backtransition in gusty conditions the current "pitch-up to decelerate" strategy had deficiencies as the motion is not always purely in body-x direction. Thus we replace it here with a "tilt-up to decelerate" strategy.
Secondly, in GNSS-denied environments where the position error increases, tracking a precise landing point through position feedback is not reasonable, and we now instead discard the position feedback in cases where the position error exceeds 10m.
* add eph limit check for dist-to-target VT BT deceleration
* add alphafilter for acceleration estimate in VT BT, rename constants
* explicitly set yawspeed_setpoint to 0
* replace backtransition pitch-setpoint with tilt-setpoint
* blend vtol-backtransition roll vehicle_attitude_sp based on mc_weight
* remove memcpy for v_att_sp
* rt106x: Use platform SPI hal layer
* rt106x: Add romapi support and reboot to isp/bootloader
* bootloader: imxrt_common: Add rt106x support
* NXP MR-Tropic initial commit
* Add missing file for mr-tropic bootloader
* nxp-mr-tropic:Bootloader Alow Assertion debugging & Keep Ram Vectors
* nxp-mr-tropic: Firmware Boot from bootloader
* nxp-mr-tropic:Add Bootloader bin file
* mr-tropic: Update config and linker
Fixes enet issues with write-back and some code cleanup.
Furthermore increase NOR LittleFS to 256kB to reflect on linker
* Update NuttX
* mr-tropic: fix itcm apping and add mr-tropic to itcm check
---------
Co-authored-by: David Sidrane <David.Sidrane@NscDg.com>
* pusher_assist: keep pitch setpoint VT_PITCH_MIN
resetting the pitch setpoint to zero made little sense, because we lose
the forward thrust component of the hover motors, while the pusher
throttle was calculated to be applied in addition to the hover forward
component
* pusher assist: change default min pitches to 0
To make for a smoother transition for users who don't care much about
pitch when pusher-assisting and were fine with it (mostly) being at zero
This aligns setActiveMissionItems() in rtl_direct_mission_land.cpp and in rtl_mission_fast.cpp with what was already in mission.cpp. It probably was on oversight when the RTL restructure happened. The FW landing requires the previous waypoint to be correctly set, that's why it was only noticeable there.
* Fix position setpoint update logic in Mission RTL
Currently, when proceeding to the landing point the previous setpoint is not updated, which results in an unexpected and off course landing pattern in fixed wing. (see #25436)
* Change to work more like `mission.cpp`
* Fix rtl_direct_misssion_land formatting for style guide
* rtl_mission_fast: fix FW landing by setting previous wp in landing
Signed-off-by: Silvan <silvan@auterion.com>
---------
Signed-off-by: Silvan <silvan@auterion.com>
Co-authored-by: Silvan <silvan@auterion.com>
With IMUs of higher report rate (e.g. ADIS16470), setting backup schedule timeout simply
to half of the ORB queue length may cause the backup firing before required updates are received.
Set backup schedule to queue length - 1 instead. Additionally, double-check that the backup
doesn't get too short after finding the largest integer multiple of gyro_integral_samples.
Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
* Update to latest mavlink that includes support for WIP warnings
* mavsdk_tests: pass build for now
We need this until the figure eight stuff has moved to common.
---------
Co-authored-by: Julian Oes <julian@oes.ch>
* rtl_mission_fast: make sure to set a position item on activation
* rtl_mission_fast_reverse: make sure to set a position item on activation
---------
Co-authored-by: Konrad Rudin <konrad@auterion.com>
* correct NED velocity according to yaw reset to keep "body-velocity" consistent
* add unit test velocityRotationOnYawReset
* '[AUTO COMMIT] update change indication'
* dont adjust velocity on yaw-reset when NE aiding active
---------
Co-authored-by: haumarco <haumarco@users.noreply.github.com>
The collision detection incorrectly used crosstrack_separation
(horizontal radius) for both horizontal and vertical checks.
This resulted in the vertical separation threshold being ignored,
creating a spherical detection zone instead of the intended
cylindrical "hockey puck" shape.
Fixed by using vertical_separation parameter for altitude
difference check on line 80.
The bug was likely introduced as a copy-paste error when creating
the vertical check from the horizontal check template. The existing
unit test uses identical values for both parameters (500.0f),
which masked this bug.
Testing: Code review. The existing unit tests pass, but they don't
catch this bug due to using equal values. Future test improvement
would be to use different crosstrack_separation and vertical_separation
values.
Signed-off-by: Tobias Fenner <tobyrfenner@gmail.com>
- enable building in a cmake subdirectory:
- use consistent path to "etc" in build directory
- add a quick fix for mavlink inclusion with
`mavlink/<version>/mavlink.h`, presumably the problem does not
appear normally since somewhere the build root directory is added
to include paths.
- install gazebo config and plugins, the goal is to enable packaging of
PX4 sitl binaries.
- fix dependency on dds_topics.h generation in uxrce_dds_client:
*** No rule to make target 'PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.h', needed by 'PX4-Autopilot/events/px4.json'. Stop.
https://github.com/PX4/PX4-Autopilot/issues/21788
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
- the estimator_aid_src::sample_timestamp would use its own timestamp to update, this
would cause the estimator_aid_src for ev velocity not to log, since the
timestamp_sample would always equal to zero and thus never be greater
than the previous published time
Co-authored-by: henrykotze <henry@autonosky.com>
* Changed the healthFailure call in the PowerChecks to ensure that no value above the low_error_threshold or below the high_error_threshold is reported in AMC
* fix format
* made _latest_low_failure and _latest_low_failure member variables. Only update them when hystersis state changes from false to true.
* failure_injection: improve previously vague motor faulure
Reading it again I decided adding the sentance in 4d2170c13e is not clear enough.
* docs/safety: add a motor failure detection paragraph
The functionality is in my eyes pretty basic but so far completely undocumented so I went through the code and added a paragraph based on questions I received.
* Subedit
* Apply suggestion from @hamishwillee
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* rc_update: remove 1% deadzone for all channels
this should be handled higher level.
* Remove all references to the RC{n}_DZ parameters
Regular expression: RC.{0,2}_DZ
---------
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* ROMFS: do not exit airframe loading if SYS_AUTOSTART is 0
Do not treat 0 as a magic value that skips the aiframe loading.
Instead leave it tot he rc.autostart to load an airframe that if finds
appropriate (can be defined in external aiframe).
Signed-off-by: Silvan <silvan@auterion.com>
* ROMFS: adjust airframe load spacing and message/comment wording
---------
Signed-off-by: Silvan <silvan@auterion.com>
Co-authored-by: Silvan <silvan@auterion.com>
During a mission the last waypoint is often a LAND. If the previous waypoint is not directly above the land waypoint the offtrack calculation is incorrect. This regression was introduced when the offtrack calculation switched from 2D to 3D.
* Fix formatting and capitalization in dev_env_mac.md
Updated formatting and capitalization for consistency in the macOS development environment documentation.
* Correct 'Mac OS' to 'macOS' in documentation
* Fix capitalization of 'macOS' in documentation
Move ramvectors from DTCM to ITCM, this seems to better in general.
Also ITCM is marked as RO so is safer anyhow, now that DTCM is fully
unused we add DTCM region of 256kB to memory allocator. Increases usable
memory from 1536kB to 1792kB and decrease system load a bit since DTCM
is faster
* s32k3xx: EMIOS allow independent frequencies for each channel
* mr-canhubk3: update config
* mr-canhubk344: Fix adap board detect
* mr-canhubk344: Use LPSPI1 (Port P1A) for SD card
* airframes: Add B3RB Ackermann rover config
See https://nxp.gitbook.io/mr-b3rb for more information about the NXP
B3RB platform. PX4 Support basic control for now
* Tone down the performance of some runners from 8cpu+ down to 4cpu+
* Improve and document caching on PX4 builds with an improved ccache key strategy
* Review and document artifact upload logic for binaries uploaded to S3 and github
releases
* Future Improvement, introduce runners configuration file so we can
control more precesily which instances are allocated.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
The UARTs themselves were already present, just not configured under any
alias.
Follow [ArduPilot UART naming for this
board](https://ardupilot.org/plane/docs/common-pixracer-pro.html#default-uart-order),
out of necessity: it's the only combination that makes sense and is
understood by QGroundControl.
(For example, I've attempted configuring the additional UARTs as `_EXT1`
and `_EXT2`, but only `_EXT2` was understood by QGC.)
Trying to actually use the FrSky telemetry port for anything without
configuring FrSky telemetry on a different port may be impossible without
modifying the board's `init/rc.board_extras`.
(Should that script be modified to check if the port is used for
anything else?)
Skip naming the RC input port.
Fixes#21455.
Increases signal ampltiude on a 1Hz sin input until a target rate (R/P/Y = 0.8/0.5/0.5 rad/s) is reached. Identification signal is then scaled with this ampltitude instead of the user-defined parameter.
- removed the bug where some overflow would occur on the PWM signal when
changing the duty cycle of the signal after power up. (PWM_MAIN_DIS,
PWM_MAIN_MIN or PWM_MAIN_MAX)
removed commented code
cleanup of previous cherry-pick
Co-authored-by: henrykotze <henry@autonosky.com>
* ekf2: range height skip "unhealthy" samples, but respect timeout
- we should never directly use an "unhealthy" range finder sample for
state corrections or resets, but we also shouldn't immediately abort
active rng_hgt until the timeout has passed
* check starting_conditions_passing once
* ekf2: conditional range aid change height ref
---------
Co-authored-by: Daniel Agar <daniel@agar.ca>
- if bad vertical acceleration is detected there's an emergency case
where rejected range finder observations are allowed to be used, but
this still can't happen if the sample itself is known to be bag
* ekf2: range height skip "unhealthy" samples, but respect timeout
- we should never directly use an "unhealthy" range finder sample for
state corrections or resets, but we also shouldn't immediately abort
active rng_hgt until the timeout has passed
* check starting_conditions_passing once
---------
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
- Marked as stale if no activity for 90 days
- Closed if no activity for 30 days after being marked as stale
- Helpful stale and close messages
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Co-authored-by: Daniel Agar <daniel@agar.ca>
* Add warning for known issue in FW RTL landings
Currently there is an issue in 1.15.0...main which causes a FW aircraft to veer off course during the final approach on landing. This could cause a personnel safety risk and should be noted.
* Update docs/en/flight_modes_fw/return.md
* Update docs/en/flight_modes_fw/return.md
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Using the SF30/d with the legacy protocol caused a delay of the
measurements of ~1s. This is not the case with the binary protocol anymore.
The initialization sequence used for SF20/c did not work and is therefore
updated.
Tested on both SF20/c and SF30/d.
-add new NAVIGATION_STATE_ALTITUDE_VOYAGER
-this mode does require manual control to enter
-but you can disable the manual control loss failsafe to continue
flying in case of manual control loss
-for MC: in throttle and yaw are controlled like in Altitude mode,
the tilt is controlled via integrated rate input (similar to Acro,
but with tilt limit)
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
* Acquire control until expected id s are reported
* require an updated message and allow release in case early exit of FlightTask
* FlightTask Gimbal: acquiring logic simplification suggestion
* formatting
---------
Co-authored-by: Matthias Grob <maetugr@gmail.com>
* RoverAttitudeSetpoint - whitespace
* Format RoverAttitudeStatus.msg for consistency
* Format RoverPositionSetpoint.msg for consistency
* Format msg/RoverRateSetpoint.msg for consistency
* Format msg/RoverRateStatus.msg for consistency
* Format msg/RoverSpeedSetpoint.msg for consistency
* Reformat RoverSpeedStatus.msg for consistency
* Fix formatting of pid_yaw_rate_integral field
* Fix formatting in RoverSteeringSetpoint.msg
* Fix formatting in RoverThrottleSetpoint.msg
* Apply suggestions from code review
* switched instructions for clodning Micro-XRCE-DDS from v2.4.2 to v2.4.3 since v2.4.2 references a bad fast-dds tag that doesnt build
* reverted uxrce instructions changes from docs/ko docs/uk and docs/zh sin
ce they are generated automatically and should not be changed manually
* dronecan: esc: change UAVCAN_ESC_IFACE to 2 to default to only outputting on CAN2
* revert param default and update docs
* Subedit
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* Added overloaded get_log_time util for fractional seconds
* Added write_info implementation for double info types
* Save boot time to .ulg via info message key boot_time_utc
* Changed time type from double to uint64_t, formatted
* Fixing get_log_time function doc
* platforms: Serial new dedicated writeBlocking method
* finish writeBlocking()
* add back fsync
* updated posix, added string constant for port not open error
* format
* fix build
* remove fsync
* actually remove fsync
* remove fsync from write
* review feedback
---------
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* serial: nuttx: revert tcdrain back to fsync
* serial: do not print error on EAGAIN
---------
Co-authored-by: Alexander Lerach <alexander@auterion.com>
This was apparently added 10 years ago to store metadata of UAVCAN components within the PX4 binary. The parameters in the xml are mostly early UAVCAN ESC parameters that are presumably out of date and not used. Also it does not scale to maintain metadata for all the possible UAVCAN components and it causes confusion when users read the metadata documentation because these parameters are not available in PX4. That's why I suggest to remove it.
* Add new INS driver sbgECom
Implement sbgECom messages handling to provide IMU sensors, GNSS and EKF data to the autopilot
Be able to parametrize the serial port, baudrate and the communicating mode
Clone sbgECom library only if sbgecom support is enabled and apply a patch
Be able to send SBG Systems INS settings in several ways when starting sbgecom driver
* Fix sensor airspeed simulator units
* Fix HIGHRES_IMU pressure unit
* Allow HIGHRES_IMU to support 4 IMUs
* sbgECom: Add documentation
* Use submodule instead of fetching sbgECom using CMake
* Remove patch strategy
* Fix dates
* Remove patch file
* Update SBG dev type ID
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
---------
Co-authored-by: Samuel Toledano <samuel.toledano@sbg-systems.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* Update dev_env_windows_wsl.md
Add info about enabling broadcasting or streaming to work with PX4 SITL on WSL and QGC on Windows.
* Update dev_env_windows_wsl.md
Fix links
* Update dev_env_windows_wsl.md
moved troubleshooting section at the bottom of WSL2<>Windows section.
* Move under troubleshooting
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
- The velocity constraint gets set from multiple places e.g. Position slow knob and altitude related slow down. Depending on the execution order it was overwritten with a higher value again not obeying a stricter limit.
- The slowdown used valocities as inputs instead of the ratio of available altitude.
In an effort to reduce configuration space.
I've not seen use for this option.
If a pilot flies manually in position mode he has some visual reference of the vehicle and can do better than an autonomous mode without position reference.
Also by now we have nudging in Descend mode so the pilot can still give input and the only difference is it automatically goes down instead of the pilot having to descend by stick to land.
* Create a dummy BAHRS driver
* Resolve compilation
* Switch back to cpp, fix compilation
* Create module.yaml
* Implement required module APIs and open serial port
* Revise info and error messages
* Poll serial port
* Push received bytes into the ring buffer
* Process data buffer (1)
* Process data buffer (2)
* Process data buffer (3)
* Process data buffer (4)
* Process data buffer (5)
* Process data buffer (6)
* Implement and use initialize() and deinitialize() methods
* Implement print_usage() and print_status()
* Collect all config constants in a class
* Put info about next found message into a class
* Print CRC failure count
* Remove unneeded print
* Add comments
* Disable EKF2, advertise vehicle attitude
* Decode and publish BAHRS signals (1)
* Run the driver as an additional source of sensor signals
* Add tiny noise to baro-inertial pressure signal
* Fix the sensor ID
* Add copyrights
* Fix formatting
* Remove redundant newline character
* Fix long parameter name
* Fix findings (1)
* Fix finding (2)
* Fix formatting
* Fix the timeout value
* Remove aliases
* Fix copyright
* Fix indent
* Comply with naming convention
* Rework comparison to false
* Reduce nesting (1)
* Reduce nesting (2)
* Reduce nesting (3)
* Fix BAHRS sensor ID
This allows external modes to individually check if they are flagged as
invalid/unresponsive.
Previously this was done only based on whether or not ArmingCheckRequest
was received, which does not work when multiple modes are running.
based on the message timestamp.
Previously it was possible to run into the following case:
- 2 external modes are registered (running inside the same ROS node)
- they time out due to the micro xrce agent being blocked for some reason
- PX4 removes them
- the latest arming check replies still arrive to PX4
- the application restarts
- the first mode gets registered
- PX4 handles the previous arming check reply, and clears
waiting_for_first_response, which reduces the timeout
- the second mode registers and as part of that checks for message
compatibility. This takes ~1s, triggering a timeout of the first mode
RIHS01 has the same functionality and already provides type safety with
rmw_zenoh_cpp. The user on ROS2 can compare the PX4 ros2_lv hashes with
their own px4_msgs for a mismatch
There were a number of cases where the state was not correct or not as
desired after disarming, when running an external mode 'MyMission' with
executor:
- run MyMission, which triggers Hold, then Land
- before: Mode: Hold, executor_in_charge: 1
- after: Mode: MyMission, executor_in_charge: 1
- run MyMission, then user switches to RTL
- before: Mode: MyMission, executor_in_charge: 0
- after: Mode: MyMission, executor_in_charge: 1
- run MyMission, then while in Hold mode, low battery failsafe (RTL)
- before: Mode: Hold, executor_in_charge: 1
- after: Mode: MyMission, executor_in_charge: 1
- run MyMission, then stop external mode (terminate the process)
- before: Mode: (mode not available), executor_in_charge: 0
- after: Mode: Hold, executor_in_charge: 0
This case is unchanged:
- run MyMission, then low battery failsafe (RTL)
- before: Mode: MyMission, executor_in_charge: 1
- after: Mode: MyMission, executor_in_charge: 1
* MAV_CMD_REQUEST_MESSAGE support for MESSAGE_INTERVAL
* Default should be -1 for stream
* Format
---------
Co-authored-by: PX4BuildBot <bot@pixhawk.org>
nsh console running on USB
param module running
working with i2c and common drivers
provided implementation for drv_pwm_output.h
i2cdetect working as expected with no device
mavlink started succesfully
mounts sd card and logger runs
logger to file succesfully
pwm_servo implemented without using Nuttx lib
pwm_out outputs expected waveforms
- however currently if the frequency is higher than what the pwm_out
driver runs, there will be aliasing, based on how the registers gets
resets
wifi softap working
- Seeing wifi hotspot
- cant connect due to wrong password
- problems with adjusting ssid and password
wifi ssid and password being set accordinglu
connected to wifi hotspot with dhpcd
- made some changes to nuttx to only build for SoftAP mode, however this
was effectivelyy removing the ifdef for STATION mode. Should investigate
the coexist option again
added ifdef to not use timer 0 when wifi enabled
- reverted esp32 rt_timer to make use of timer 0 by default
fix setting incorrect bit in hrt timer register
- hrt running as expected, but on startup the pwm_out driver starts up
at about 200Hz and then rises over a minute or so 250Hz. Not sure if
this was present previously, and could be due to Wifi running at time
priority on timer 0
pull xtensa compilers in setup.ubuntu.sh
revert logger stacksize and cmake argument
esp32 chip revision and PX4 UUID implemented
spi board reset implemented, formatting checked
devkit acts on startup as a wifi bridge for comms
- the most usefull setting for the general developer when buying a esp32 devkit
- testing Mavlink shell using ./Tools/mavlink_shell.py
- todo: Test mavlink messages being forward
improve wifi telemetry by increasing prio
- Remove power save mode on wifi
- increased daemon thread schedule priority to 50
compiles without Nuttx changes
- updated compiler settings to match those of nuttx on px4 side
add espressif_esp32 to excluded boards
ci: allow docker to find xtensa compilers
* mavlink: add message spacing for AVAILABLE_MODES, for low bandwidth links
* calculate delay based on rate
* fixed transmit time calc & not delay single mode send
Co-authored-by: bkueng <beat-kueng@gmx.net>
---------
Co-authored-by: bkueng <beat-kueng@gmx.net>
* ekf: always publish baro and gnss bias even if zero
* [SQUASH] ekf2: simplify hgt bias publish
---------
Co-authored-by: Daniel Agar <daniel@agar.ca>
* always reschedule from measurementReadyCallback, don't update range mode is processMeasurement fails, reschedule trigger faster if Argus_TriggerMeasurement fails, refactor mode switching logic, update perf counters
* make format
* make format exclude microstrain submodule
---------
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
The previous default of 0.55m/s was very restrictive, the
ground-minus-wind airspeed estimate was barely ever valid
with it.
Signed-off-by: Silvan <silvan@auterion.com>
There was a build error with the previous container:
CMake Error at /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Threads (missing: Threads_FOUND)
Call Stack (most recent call first):
/usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.28/Modules/FindThreads.cmake:226 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
build/px4_sitl_test/_deps/abseil-cpp-src/CMakeLists.txt:98 (find_package)
See https://github.com/PX4/PX4-Autopilot/actions/runs/16235116238/job/45844179833
* MulticopterPositionControl: Add timeout before triggering emergency setpoint on invalid TrajectorySetpoint
* Apply suggestions from code review
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* Cleanup & address review comments
* Safegaurd against using old setpoint if states aren't valid anymore
---------
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
* ekf2: allow manual position reset when horizontal aiding is active
This allows the pilot to override position esitmates manually
* mavlink sim: add support of failure gps struck
* mavlink sim: add GNSS failure "wrong" type
* ekf2-gnss: add reset mode
This allows the user to choose whether the position should immediately
be reset to GNSS on fusion timeout or if the EKF can continue with
velocity dead-reckoning.
* ekf2: fix unit test changes due to GNSS start logic
Especially because the EKF doesn't need to reset the states if the test
ratio is already passing
* rename mode enum
* reset to gps lat lon on init
* remove obsolete reset-condition (handled in #25223)
* WIP try to upgrade compiler externally
---------
Co-authored-by: bresch <brescianimathieu@gmail.com>
Co-authored-by: Niklas Hauser <niklas@auterion.com>
Currently if you configure a battery capacity the battery library calculates a remaining flight time and you by default get an RTL when the flight time - return time is running out.
Since the state of charge threshold based battery failsafes `COM_LOW_BAT_ACT` are disabled by default I was asked to also disable the flight time based failsafe to be consistent.
* Add tflm to px4 with module
- Add TensorFlow Lite Micro(TFLM) as a library in px4
- Make a module that uses neural network inference for control, which uses TFLM for inference
- Make board config files for PX4 with neural module
* Added neural flight mode
* Add posibility to read of inference times
* Fix comments from review:
- Switch ssh link to https link in submodule
- Remove mc_nn_control from startup
* Add tflm to px4 with module
- Add TensorFlow Lite Micro(TFLM) as a library in px4
- Make a module that uses neural network inference for control, which uses TFLM for inference
- Make board config files for PX4 with neural module
* Added neural flight mode
* Add posibility to read of inference times
* Remove auto start
* Add logging from neural control module
* Fix automatic startup to only be when module is included
* Switch to flight mode registration
* Add docs
* Change min/max/coeff to actual parameters
* add figures to neural network docs
* Switch to e2e network
* Remove toolchain changes and replace with instructions in docs
* Get ready for merge after toolchain upgrade
* switch back to submodule
* Try to figure out cmake
* Get CI working with new toolchain
* Remove fork dependency
* Finalize PR
* fix toolchain inclusion
* Fix ctype_base.h include
* Cleanup includes for TFLM
* Remove redundant std
* Update FW module names in board files
* Fix docs
* Remove cstdlib copy
* Copy header from nuttx
* Prettier, markup, layout
* NeuralControl.msg - update uorb comments to current standard
* Add description to neural topic
* Fix typo
* Typo
* TFLM and Module utitlities
* Neural networks top level
* Update docs
* Add manual control
* Update docs
* Revert the manual control attempt
* Update docs/en/advanced/nn_module_utilities.md
* Add posibility to set trajectory setpoint with manual control
---------
Co-authored-by: Pedro Roque <padr@kth.se>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
* rft: clean merge to PX4
* fix: formatting
* fix: extra line
* fix: moved submarine out of "is_ground_vehicle", added proper check for center-throttle
* feat: updated gazebo models to include bluerov update
* fix: use 'is_uuv_vehicle', remove FW_MM/LLC from uuv build
* fix: added saturation to thrust and torque messages via param
* doc: updated parameters documentation for uuv
* fix: formatting
* feat: matching hardware reference
* fix: thrusters kg
* rft: removed commented lines
* fix: update gz reference given hw setup
* fix: hardware references
* fix: recommendations
* fix: updated settings to match hardware
* rft: check only for fixed and rotary wing for high throttle
Co-authored-by: Daniel Agar <daniel@agar.ca>
* fix: commit oupsie
* fix: format
* rft: remove is_uuv
* fix: hw parameters, uuv build target for v6x
* feat: added support for D-pad attitude changes in stabilized position control
* fix: position setpoint update and parametrized trajectory age and att change
* fix: format
* fix: removed duplicated call to check_validity_setpoint
* fix: setpoint update on arming logic
* fix: setpoint initialization for stabilized mode
---------
Co-authored-by: Daniel Agar <daniel@agar.ca>
* rft: initial merging of controllers for spacecraft vehicles
* feat: rate controller nominal
* feat: spacecraft tooling for commander and VehicleStatus
* feat: spacecraft tooling for commander and VehicleStatus
* fix: format
* fix: format
* fix: remove iostream
* fix: remove iostream
* feat: spacecraft attitude control and minor refactoring of params
* feat: add position controller
* fix: format
* fix: moved trajectories to new message, removed derivative filters
* fix: format
* fix: removed extra newline
* fix: spacecraft allocation builds
* feat: add thrusters to effectivenes, add spacecraft build to cmake, clean comments
* feat: required changes for allocation
* feat: thruster simulation interface
* fix: update maximum and minimums
* fix: format
* fix: added newline at the end of spacecraft actuator effectiveness
* feat: configurable board pwm freq from Kconfig
* feat: mavlink compliant spacecraft definition
* feat: add orbiter to define
* boards: Increase TELEM2 rx buffer size for DDS over serial use-case (ARK Jetson)
feat: spacecraft tooling for commander and VehicleStatus
fix: format
fix: remove iostream
feat: mavlink compliant spacecraft definition
* feat: add orbiter to define
* feat: add orbiter to define
* fix: change mav_type to new spacecraft orbiter enum value
* fix: build issue
* feat: update mavlink
* feat: update mavlink to latest master with spacecraft
* feat: update mavlink
* feat: update mavlink to latest
* feat: cleanup and synchronization with new mavlink vehicle definition
* fix: get away without specifying spacecraft vehicle
* fix: removed unnecessary definition
* fix: format
* feat: cmake variant for spacecraft
* feat: proper mav_type and rc init
* fix: removed dart from build system
* add: thrusters to actuator type
* rft: reordering actuator type
* rft: initial merging of controllers for spacecraft vehicles
* feat: rate controller nominal
* fix: format
* feat: spacecraft attitude control and minor refactoring of params
* feat: add position controller
* fix: format
* fix: moved trajectories to new message, removed derivative filters
* fix: format
* fix: removed extra newline
* fix: spacecraft allocation builds
* feat: add thrusters to effectivenes, add spacecraft build to cmake, clean comments
* feat: required changes for allocation
* feat: thruster simulation interface
* fix: update maximum and minimums
* fix: format
* fix: added newline at the end of spacecraft actuator effectiveness
* feat: configurable board pwm freq from Kconfig
* feat: add orbiter to define
* feat: cleanup and synchronization with new mavlink vehicle definition
* fix: get away without specifying spacecraft vehicle
* fix: conflicts
* fix: format
* fix: remove duplicate entry
* rft: remove Kconfig changes
* rft: revert main Kconfig
* rft: revert main kcoonfig on platforms
* rft: remove changes to board PWm (go on another PR)
* rft: revert changes to commander (main is correct)
* fix: extra char on commander_helper
* rft: removed extra spaces
* rft: moved effectiveness to spacecraft
* fix: spacecraft effectiveness
* fix: extra space
* feat: preliminary version, still using thrusters
* rft: initial pipeline on PX4 side with rotors instead of thrusters
* feat: add atmos model
* feat: spacecraft with rotor pipeline tested, working
* feat: update gz
* rft: removed thruster interfaces
* fix: format
* fix: remove control allocation
* fix: thruster normalization
* fix: format
* fix: nuttx version
* fix: clang tidy error
* feat: updated gz to add atmos model
* fix: update gz
* fix: update mavlink
* fix: remove friend class from allocation lib
* fix: remove actuator_outputs/motors
---------
Co-authored-by: Alexander Lerach <alexander@auterion.com>
* feat: configurable board pwm freq from Kconfig
* feat: add board_pwm_config to submenu
* fix: define sequence correction
* fix: revert Tools/simulation/gz
* fix: track upstream gz
* fix: track upstream mavlink
* feat: adjustable pwm for multiple board types
* feat: add conditional check for CONFIG_ for correct fallback
* add: spacecraft board with correct BOARD_PWM_FREQ supporting 10Hz actuation rate
* fix: set dependencies for submenu arch chips
* fix: keep only upper arch level
* fix: proper checking - still not showing up for board config
* feat: add hidden kconfig for platforms
* Merge Nuttx config into px4board
Allows to expose nuttx into PX4 if needed
* Kconfig: Include nuttx symbols in updateconfig
Only if applicable i.e. defined in the kconfig
* fix: merged config with previously generated boardconfig
* doc: updated code comment
---------
Co-authored-by: Daniel Agar <daniel@agar.ca>
Co-authored-by: Peter van der Perk <peter.vanderperk@nxp.com>
* Added the ranges for the new ARK Murata IMUs and added the logic to the driver to handle it
* Ran make format
* sch16t fix COMP_ID
* Revert "sch16t fix COMP_ID"
This reverts commit 38bf02bc8616490a37a57257938086b8e8d5fa0f.
* sch16t add production k10 id
* Added B13 as REV_1
---------
Co-authored-by: Alex Klimaj <alex@arkelectron.com>
According to the mavlink spec we should be publishing the home attitude
as a quaternion rather than just the yaw/heading.
Additionally, this allows setting the landing roll and pitch angle using
DO_SET_HOME (this yet needs to go into the MAVLink spec though).
This time including the message versioning and translation.
* Remove Zubax Orel - not available and no other presence
* Fix up zubax product links
* Snapdragon flight - delete as no longer relevant hardware
* Delete intel aero docs
* Brushless whoop - remove docs except for link to old version
* Many link fixes
Previously, when switching from a goto setpoint into a mode that publishes
trajectory_setpoint, the previous goto setpoint was still used for 500ms,
which then caused a setpoint jump.
This change makes sure that when a trajectory_setpoint is received, any
existing goto setpoint is marked as invalid immediately.
There was a race condition: for example when an external mode disabled
failsafe deferring, that then triggered a failsafe, while the mode executor
immediately sends a command (to e.g. switch modes).
In that case the failsafe got triggered but the mode switch was still
allowed.
This was because of the processing ordering:
- mode updates (and propagating the failsafe_action_active state)
- failsafe updates
- command handling
This patch makes sure failsafe_action_active is set immediately after
updating the failsafes.
Previously, when deferring was active and e.g. RC loss was triggered, and
RC regained, the action was not cleared, as the RC loss action only clears
on mode switch/disarm (when set to RTL for example).
When deferring was then disabled, the RC loss failsafe would still trigger.
This changes the behavior to immediately remove those actions when
deferring is active.
It also ensures to reset the Hold delay when deferring is disabled and no
failsafe is being deferred.
* Doc Orbit: update and clarify configurability and behavior around limits
* run prettier
* Fix up link to table
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
dshot: fix motor test on CANnode
Also includes fixes for the DShot driver since stop_outputs is removed. The esc info command has been removed because it doesn't work with AM32, can only be used via command line, and complicates the driver
This fixes a number of issues with uavcan ESC control.
- Motor Testing when using a CANnode as a PWM expander now works by allowing the FunctionMotors class to perform prearm control
- The esc.RawCommand message is now always published for configured uavcan ESC outputs. Previously prior to arming the message would be published empty, which causes certain ESCs to enter an error state.
- Useless and redundant code has been removed and small name changes have been applied.
Even though all enum values fit into 13 bits, there's an error:
../../src/drivers/gnss/septentrio/sbf/messages.h:101:21: error: ‘septentrio::sbf::Header::id_number’ is too small to hold all values of ‘enum class septentrio::sbf::BlockID’ [-Werror]
This is with GCC 13.3.0 under Ubuntu 24.04
From https://github.com/google/fuzztest.
This will now also add gtest (via cmake FetchContent)
And requires newer cmake (container updates):
CMake 3.19 or higher is required. You are running version 3.16.3
For delivery use-case, the mission contains a land item followed by other mission items. For the
section after the land, the current sequence number is greater than the land start index. If an RTL
is triggered, then isLanding returns true and the vehicle continues with the mission instead of
executing the RTL.
The land index marks the actual landing. So, is landing should only be true for the items between
land_start_index and land_index. If there are items after the land index, then they don't belong
to the landing anymore.
code was checking for an updated MissionResult twice in a row, leading to _mission_state
not being set correctly when the second check had no new message.
Switched to SubscriptionData to safely retrieve the latest message using .get().
According to the mavlink spec we should be publishing the home attitude
as a quaternion rather than just the yaw/heading.
Additionally, this allows setting the landing roll and pitch angle using
DO_SET_HOME (this yet needs to go into the MAVLink spec though).
if [ "x$PRT_GPS1_" = "x" ]; then
^-----------^ SC2268 (style): Avoid x-prefix in comparisons as it no longer serves a purpose.
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
* removing logic from driver to send warnings when state-change to spoofing is detected, handled in estimatorChecks
* also remove jamming warnings from drivers, those are handled in the estimator checks as well
The define is used in dataman, not navigator, so this config variable
needs to be moved to the dataman module, otherwise it breaks the build
if navigator is not included in the build.
* add qmc5883p drivers
* format correction for qmc5883p
* make format
* remove extra newlines
---------
Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
When a mission finishes with an RTL command, there's a race condition
between:
1. RTL command setting user_mode_intention RTL
2. Mission completion logic forcing LOITER
The auto-loiter transition was checking current nav_state (which is
still AUTO_MISSION) instead of any pending user_mode_intention,
causing it to override the RTL request.
Fix: Only auto-transition to loiter if no mode change is already
pending.
Note: Some files are autogenerated and I did not yet
go through each source of generation to fix it there.
Instead I adjusted the filter to only exclude those
such that we can fix things in steps.
- timestamp was 0 if uavcan::BatteryInfo was received before uavcan::BatteryInfoAux
- scale was not set as unknown (-1) even though it is since it's never updated
- time_remaining was not initialized correctly and could sometimes be 0
unexpectedly which causes the drone to failsafe because there's reportedly no flight time left
There was a race condition when closing the shell:
- the main thread checks if _mavlink_shell is not nullptr (which is true)
- the receiver thread closes the shell, which clears _mavlink_shell
- the main thread continues with _mavlink_shell->available()
Within the first 2min of a flight, check if the integrated GNSS vertical velocity and the baro
measurements disagree with the reported GNSS altitude, and in that case update the
set home position altitude to cancel out GNSS altitude drift.
* prevent re-init when reaching negative altitudes
* only allow correction during the first 120 second after takeoff
* add dependency to COM_HOME_EN parameter. reset vel-integral for multiple takeoffs
I'm starting the separate battery info message because no char[32] should be published and logged
at high rate and we need a separate battery info message for static information as discussed.
_message.header.length - 4 is passed as unsigned to the CRC method, so if
_message.header.length < 4, the length wraps and causes invalid memory
access.
- Adds MSPv1 rx parsing to fetch VTX config
- Allows to inspect and change VTX channel through CLI
- Forward MSP_RC for stick commands osd
- Forward MSP_STATUS for arming status for PIT and LP mode
Freeing the DMA stream in the hrt callback causes other peripherals on that DMA controller to lock up (namely GPS). Moving the free back into thread context, right before allocation, solves the problem
Replaced the local variable landed_amid_mission with the class member _mission_in_progress for consistency and to reduce redundancy.
No functional change.
This makes sure that there is no weird line following logic executed
by the flight task when the vehicle should just come down vertical
for landing.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
6.5 is a relatively high value that was used mostly on smaller, low inertia vehicles ~250-500mm diagonal. There it works great but on larger, higher intertia vehicles this leads to problems.
After f0b05ea7cf
the control allocator only has a callback on the torque setpoint and even though this should work
I'm paranoid and would like to avoid surprises by always publishing the thrust before torque
then the samples that were published together are also allocated together.
* apply offset to baro sensors based on gnss measurements when gnss is selected as hgt-ref
* always calibrate baro with gnss if new param SENS_BAR_AUTOCAL is set accordingly
* always do baro-gnss calibration when AUTOCALIB is set, but ensure epv is small enough and gnss data is consistent with baro
* avoid update and reset in the same step
* minor change of constexpr usage
* docs: add gazebo plugins doc
* add to sidebar and summary
* prettier and link to sources
* review feedback
* Minor subedit and crosslink
* Update docs/en/sim_gazebo_gz/plugins.md
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
To separate accuracy requirements for VTOL hover and cruise.
- global_position_relaxed refers to having a valid horizontal velocity aid source
in the estimator and a set global reference position, but poses no requirements
on the accuracy of the provided position estimate.
- Auto flight modes Mission, Loiter and RTL, while in fixed-wing mode,
only require the relaxed global position going forward
- COM_POS_FS_EPH is thus no longer used on fixed-wing vehicles (resp. VTOL in FW)
- rename failsafe_flags.local_position_accuracy_low to failsafe_flags.position_accuracy_low
---------
Signed-off-by: RomanBapst <bapstroman@gmail.com>
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Silvan <silvan@auterion.com>
It currently defaults to 1g for multirotors, which works in most cases. However, during extended high-acceleration flight (e.g. in Stabilized mode), the limited dynamic model can upset the EKF, causing repeated resets due to data inconsistencies. Recovery is sometimes quick but can also be too slow to maintain position after high acceleration flight. This issue was observed on an 850mm vehicle, not a racer.
I don't think we have a way to explicitly detect if BAT1 or BAT2
"bricks" are correct, so we have to assume they are, and rely on the
voltage/current shown.
Additionally, we can now power cycle sensor power.
add RunwayControl messge to pass wheel steering controls to wheel controller
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Runway takeoff: specify that RWTO_TKOFF is directly applied during takeoff
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
msg/RateCtrlStatus: remove unused wheel_rate_integ field
The wheel rate controller is not run in the moduels that are now
running the MC/FW rate controllers, so thsi field canot be filled.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
wheel rate controller: use speed scaler quadratically on integrator
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
wheel yaw controller: use a time constant of 0.1
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
FW Attitude Controller: lock heading setpoint for wheels to initial heading
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Params that are used by FW Mode Manager
- FW NPFG: NPFG params, should be renamed to FW Lateral Control once moved to the lat/lon controller
- FW Auto Takeoff
- FW Auto Landing
Params used by Fw Lat/Long Controller:
- FW Lateral Control
- FW Longitudinal Control
Params used by both:
- FW General
Params used by Performance model:
- FW Performance (could be moerged with FW General?)
Signed-off-by: Silvan <silvan@auterion.com>
- split up old module into two, one handling setpoint generation, one control
- add lateral and longitudinal control setpoints topics that can also be
injected from companion computer
- add configuration topics that (optionally) configure the controller
with limits and momentary settings
Signed-off-by: RomanBapst <bapstroman@gmail.com>
To make sure QGC also shows a box and reads out for "low battery"
and make events and mavlink_log reports consistent.
Low - Critical
Critical - Critical
Emergency - Emergency
* docs: update module reference metadata
* Update failsafe metadata in docs
* Update parameter metadata
* Fix up uorb graphs based on main
* SUMMARY.md - and radio control for modules
* Add alternate sidebar
---------
Co-authored-by: PX4BuildBot <bot@pixhawk.org>
PX4 needs a bit of time to process an uploaded mission before it is
ready to accept the mission mode.
Therefore, we need to wait a bit.
Alternatively, we could wait on the mission progress arriving properly,
but this sleep is simple enough for now.
It turns out that we set the ADC range incorrectly leading to the
measured current being capped at a certain level as the ADC on the
sensor saturates.
Instead, we need to set the range according to the formula given in the
interface datasheet.
* adis16507: enhance driver to handle and recover from all failure modes
- Clean up driver
- Add optional hardware reset
- Fix scale and range for 125 deg/s variant
- Handle communication errors when read returns zeroes
- Improved perf counters
* change prints to PX4_DEBUG, define BURST_READ_CMD, do both soft and hard reset, use ScheduleNow instead of 1ms delay, change read/write stall period to SPI_STALL value
* ZMO airframe: update parameters
Including some parameters we found useful during the tests over the
previous months:
- various controller & transition tuning refinements
- remove battery capacity (not reliable enough w battery degradation)
- airspeed scale
- rotor configs:
- remove everything related to rotors 3 and 4 (which don't exist)
- set moment coefficients explicitly even if at default
- Increase roll limit (FW_R_LIM, FD_FAIL_R)
- min and max airspeeds
- tilt servo min and default PWM values
* ZMO airframe: address review
- explicitly set CA_ROTOR3_* to 0 (as these are set in the parent
13100 which describes a quadrotor)
- remove ASPD_SCALE_1 (close enough to default, and better to have
slightly low reading)
- remove MPC_ACC_HOR_MAX (= default)
- remove MPC_TILTMAX_AIR (was temporary)
- remove SENS_EN_SF1XX (= default)
* ZMO airframe: update tilt setup
to describe a setup where tilt servos can provide yaw torque in both
directions in multicopter mode.
* ZMO airframe: wording
* Update ulog_file_format.md
Update Known Parser Implementations with updated information for Foxglove and the typescript parser
* Update docs/en/dev_log/ulog_file_format.md
* hrt: Fix PPM input on channel 2
The CCMR1_PPM define for PPM input on channel 2 was incorrectly set to 2,
which was setting bits for channel 1 instead of channel 2. This prevented
PPM input from functioning properly on channel 2.
Changed CCMR1_PPM for channel 2 from 2 to (1 << 8), which correctly
configures the CC2S bits for input capture mode on TI2.
This fixes an issue noted in the existing code comment:
"FIXME! There is an interaction in the CCMR registers that prevents
using Chan 1 as the timer and chan 2 as the PPM"
Tested on STM32H743 with PPM input on PC7 (TIM8_CH2).
* rc_input: enable sharing serial and PPM pin
By setting RC_SERIAL_PORT_SHARED_PPM_PIN_GPIO_RX it is now possible to
use the same pin on the STM32 for PPM input as well as serial input.
* boards: Add support for Holybro KakuteH7-Wing
* gz: print version number in init, remove gst plugin spam, rename function
* fix 0 timestamp issue by waiting for clock callback before subscribing to other topics. Refactor to cleanup topic subscriptions
* format
* change gzerr to gzwarn
- only use data from airspeed_validated topic if source is SENSOR
- add 1s timeout (set to NAN if older)
- use FW_USE_AIRSPD consitently (treat the same as CAS=NAN)
Signed-off-by: Silvan <silvan@auterion.com>
Gravity fusion uses the bias corrected accelerometer data to correct the
tilt estimate. We should not continue to estimate the accel bias when
this is active as it creates an unwanted feedback loop.
* Docs: add moving platform
documenting the addition in #24471
* Moving platform docs: address review
- Release note, write release in docs
- Describe configuration also in main gazebo sim docs, syntax section
- Tip that plugin can be used in other worlds, linking to plugin readme
* Update docs/en/sim_gazebo_gz/index.md
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
---------
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
* Rescale throttle curve to HTE as option
* Add slew rate to hover thrust estimate
* Update docs to reflect changes
Fix formating
* mc_att_control: suggestions for hover thrust slewing
- Slower slew rate
- Move update of hover thrust estimate into main loop
- Make sure dt for slew rate is correct
- Apply parameter updates if hover thrust estimate not used
- Parameter description in metadata files
* fix: Rescaling cases order
* Rescale to HTE estimate by default
* Update src/modules/mc_pos_control/multicopter_position_control_params.c
Co-authored-by: Mathieu Bresciani <brescianimathieu@gmail.com>
* Fix hte sub name
* Update MPC_THR_CURVE description
* Swap thr curve values to make hte rescaling default for value 0
---------
Co-authored-by: Matthias Grob <maetugr@gmail.com>
Co-authored-by: Mathieu Bresciani <brescianimathieu@gmail.com>
The rotational speed threshold on fixed-wing vehicles is triggering easily
if the plane is lifted prior to takeoff (hand-launch), and can cause issues
for the auto takeoff state machine. Thus if either airspeed or groundspeed is valid,
it's better to rely on these for land detection, and only use the rotational
speed if they're invalid.
Signed-off-by: Silvan <silvan@auterion.com>
* feat: add attitude to trajectory setpoints
* feat: proposed new trajectory message for fully actuated vehicles
* fix: moved to unversioned and changed naming scheme
* feat: added space between translation and attitude control
* fix: change cmakelists
- **Naming:** Use `lowercase_with_underscores` for all filenames. No spaces.
- **Hierarchy:** Markdown files must reside exactly in a first-level category folder.
- Valid: `docs/en/category/file.md`
- Invalid: `docs/en/category/subcategory/file.md`
- **Text Files:** Any `.txt` or `.text` files must start with an underscore (e.g., `_notes.txt`).
- **Assets:** All images/non-docs must be in `/docs/assets/`. Deep nesting is permitted here.
- **Formats:** Prefer **SVG** for diagrams and **PNG** for screenshots. Flag JPG files.
## Markdown & Style
- **Headings:** Use Title Case ("First Letter Capitalisation").
- The Page Title must be the only H1 (`#`). All others must be `##` or lower.
- Do not apply bold or italic styling inside a heading.
- **Formatting:**
- **Bold:** Only for UI elements (buttons, menu items).
- **Inline Code:** Use backticks for file paths, parameters, and CLI commands (e.g., `prettier`).
Backticks are optional for hyperlinked CLI commands and tool names.
- **Italics (Emphasis):** Use for application names (e.g., *QGroundControl*).
Emphasis is optional for hyperlinked applications.
- **Structure:** End every line at the end of a sentence (Semantic Line Breaks).
## Linking & Navigation
- **Standard Links:** Use standard inline syntax: `[link text](../category/filename.md)`.
Note relative link.
- **Table Links:** To keep tables readable, use reference-style links.
- Definition: `[Link Name]: https://example.com` (placed below the table).
- Usage: `[Link Name]` within the table cell.
- **Images:** All image links must include a descriptive, accessible alt-text in the brackets: ``.
Note that all images should be relative references to images stored in the assets folder, which should be two folders below the any markdown file (as they are stored in a "category" subfolder)
- **Standard Links:** Use standard inline syntax: `[link text](../category/filename.md)`. Note the use of relative links.
- **Table Links:** To keep tables easier to edit, prefer reference-style links.
- Definition: `[Link Name]: https://example.com` (placed below the table).
- Usage: `[Link Name]` within the table cell.
- **Images:** All image links must include a descriptive, accessible alt-text: ``.
- **Note:** All images must be relative references to the `/docs/assets/` folder. Since documents are nested in a category folder, this is usually two levels up (`../../assets/`).
## Quality Control
- **Prettier Check:** Ensure Prettier rules have been applied. If there is evidence of inconsistent indentation or spacing, request the author run `npx prettier --write .` before merging.
- **Language:** Enforce **UK English** spelling and grammar.
close-issue-message:'This issue has been automatically closed due to 120 days of inactivity. If you believe this is still relevant, please feel free to reopen it or create a new issue.'
stale-pr-message:''
close-pr-message:'This pull request has been automatically closed due to 120 days of inactivity. If you would like to continue, please feel free to reopen it or submit a new PR.'
We follow the [Github flow](https://guides.github.com/introduction/flow/) development model.
We follow the [GitHub flow](https://guides.github.com/introduction/flow/) development model.
### Fork the project, then clone your repo
## Fork the project, then clone your repo
First [fork and clone](https://help.github.com/articles/fork-a-repo) the project project.
First [fork and clone](https://help.github.com/articles/fork-a-repo) the project.
### Create a feature branch
## Create a feature branch
*Always* branch off main for new features.
Always branch off `main` for new features.
```
git checkout -b mydescriptivebranchname
```
### Edit and build the code
## Edit and build the code
The [developer guide](https://docs.px4.io/main/en/development/development.html) explains how to set up the development environment on Mac OS, Linux or Windows. Please take note of our [coding style](https://docs.px4.io/main/en/contribute/code.html) when editing files.
### Commit your changes
## Commit message convention
Always write descriptive commit messages and add a fixes or relates note to them with an [issue number](https://github.com/px4/Firmware/issues) (Github will link these then conveniently)
PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles.
**Example:**
### Format
```
Change how the attitude controller works
- Fixes rate feed forward
- Allows a local body rate override
Fixes issue #123
type(scope): short description of the change
```
### Test your changes
| Part | Rule |
|------|------|
| **type** | Category of change (see types table below) |
| **scope** | The module, driver, board, or area of PX4 affected |
| **`!`** (optional) | Append before `:` to mark a breaking change |
| **description** | What the change does, at least 5 characters, written in imperative form |
Since we care about safety, we will regularly ask you for test results. Best is to do a test flight (or bench test where it applies) and upload the logfile from it (on the microSD card in the logs directory) to Google Drive or Dropbox and share the link.
### Types
### Push your changes
| Type | Description |
|------|-------------|
| `feat` | A new feature |
| `fix` | A bug fix |
| `docs` | Documentation only changes |
| `style` | Formatting, whitespace, no code change |
| `refactor` | Code change that neither fixes a bug nor adds a feature |
| `perf` | Performance improvement |
| `test` | Adding or correcting tests |
| `build` | Build system or external dependencies |
| `ci` | CI configuration files and scripts |
| `chore` | Other changes that don't modify src or test files |
| `revert` | Reverts a previous commit |
Push changes to your repo and send a [pull request](https://github.com/PX4/Firmware/compare/).
### Scopes
The scope identifies which part of PX4 is affected. Common scopes:
| `navigator` | Mission, RTL, Land, and other navigation modes |
| `sensors` | Sensor drivers and processing |
| `drivers` | Hardware drivers |
| `boards/px4_fmu-v6x` | Board-specific changes (use the board name) |
| `mc_att_control` | Multicopter attitude control |
| `mc_pos_control` | Multicopter position control |
| `fw_att_control` | Fixed-wing attitude control |
| `vtol` | VTOL-specific logic |
| `actuators` | Mixer and actuator output |
| `battery` | Battery monitoring and estimation |
| `logger` | On-board logging |
| `param` | Parameter system |
| `simulation` | SITL, Gazebo, SIH |
| `ci` | Continuous integration and workflows |
| `docs` | Documentation |
| `build` | CMake, toolchain, build system |
| `uorb` | Inter-module messaging |
For changes spanning multiple subsystems, use the primary one affected. Look at the directory path of the files you changed to find the right scope: `src/modules/ekf2/` uses `ekf2`, `src/drivers/imu/` uses `drivers/imu`, `.github/workflows/` uses `ci`.
### Breaking changes
Append `!` before the colon to indicate a breaking change:
```
feat(ekf2)!: remove deprecated height fusion API
```
### Good commit messages
```
feat(ekf2): add height fusion timeout
fix(mavlink): correct BATTERY_STATUS_V2 parsing
refactor(navigator): simplify RTL altitude logic
ci(workflows): migrate to reusable workflows
docs(ekf2): update tuning guide
feat(boards/px4_fmu-v6x)!: remove deprecated driver API
perf(mc_rate_control): reduce loop latency
```
### Commits to avoid
These will be flagged by CI and should be squashed or reworded before merging:
```
fix # too vague, no type or scope
update # too vague, no type or scope
ekf2: fix something # missing type prefix
apply suggestions from code review # squash into parent commit
do make format # squash into parent commit
WIP: trying something # not ready for main
oops # not descriptive
```
### PR titles
The PR title follows the same `type(scope): description` format. This is enforced by CI and is especially important because the PR title becomes the commit message when a PR is squash-merged.
### Merge policy
Commits should be atomic and independently revertable. Squash at reviewer discretion for obvious cases (multiple WIP commits, messy review-response history). When your commits are clean and logical, they will be preserved as individual commits on `main`.
### Cleaning up commits
If CI flags your commit messages, you can fix them with an interactive rebase:
```bash
# Squash all commits into one:
git rebase -i HEAD~N # replace N with the number of commits
# mark all commits except the first as 'squash' or 'fixup'
# reword the remaining commit to follow the format
git push --force-with-lease
# Or reword specific commits:
git rebase -i HEAD~N
# mark the bad commits as 'reword'
git push --force-with-lease
```
## Test your changes
Since we care about safety, we will regularly ask you for test results. Best is to do a test flight (or bench test where it applies) and upload the log file from it (on the microSD card in the logs directory) to Google Drive or Dropbox and share the link.
## Push your changes
Push changes to your repo and send a [pull request](https://github.com/PX4/PX4-Autopilot/compare/).
Make sure to provide some testing feedback and if possible the link to a flight log file. Upload flight log files to [Flight Review](http://logs.px4.io) and link the resulting report.
This repository holds the [PX4](http://px4.io) flight control solution for drones, with the main applications located in the [src/modules](https://github.com/PX4/PX4-Autopilot/tree/main/src/modules) directory. It also contains the PX4 Drone Middleware Platform, which provides drivers and middleware to run drones.
## About
PX4 is highly portable, OS-independent and supports Linux, NuttX and MacOS out of the box.
PX4 is an open-source autopilot stack for drones and unmanned vehicles. It supports multirotors, fixed-wing, VTOL, rovers, and many more experimental platforms from racing quads to industrial survey aircraft. It runs on [NuttX](https://nuttx.apache.org/), Linux, and macOS. Licensed under [BSD 3-Clause](LICENSE).
* Official Website: http://px4.io (License: BSD 3-clause, [LICENSE](https://github.com/PX4/PX4-Autopilot/blob/main/LICENSE))
**Modular architecture.** PX4 is built around [uORB](https://docs.px4.io/main/en/middleware/uorb.html), a [DDS](https://docs.px4.io/main/en/middleware/uxrce_dds.html)-compatible publish/subscribe middleware. Modules are fully parallelized and thread safe. You can build custom configurations and trim what you don't need.
Release notes and supporting information for PX4 releases can be found on the [Developer Guide](https://docs.px4.io/main/en/releases/).
**Wide hardware support.** PX4 runs on a wide range of [autopilot boards](https://docs.px4.io/main/en/flight_controller/) and supports an extensive set of sensors, telemetry radios, and actuators through the [Pixhawk](https://pixhawk.org/) ecosystem.
## Building a PX4 based drone, rover, boat or robot
**Developer friendly.** First-class support for [MAVLink](https://mavlink.io/) and [DDS / ROS 2](https://docs.px4.io/main/en/ros2/) integration. Comprehensive [SITL simulation](https://docs.px4.io/main/en/simulation/), hardware-in-the-loop testing, and [log analysis](https://docs.px4.io/main/en/log/flight_log_analysis.html) tools. An active developer community on [Discord](https://discord.gg/dronecode) and the [weekly dev call](https://docs.px4.io/main/en/contribute/).
The [PX4 User Guide](https://docs.px4.io/main/en/) explains how to assemble [supported vehicles](https://docs.px4.io/main/en/airframes/airframe_reference.html) and fly drones with PX4. See the [forum and chat](https://docs.px4.io/main/en/#getting-help) if you need help!
**Vendor neutral governance.** PX4 is hosted under the [Dronecode Foundation](https://www.dronecode.org/), part of the Linux Foundation. Business-friendly BSD-3 license. No single vendor controls the roadmap.
This [Developer Guide](https://docs.px4.io/main/en/development/development.html) is for software developers who want to modify the flight stack and middleware (e.g. to add new flight modes), hardware integrators who want to support new flight controller boards and peripherals, and anyone who wants to get PX4 working on a new (unsupported) airframe/vehicle.
<sub>…and many more: helicopters, autogyros, airships, submarines, boats, and other experimental platforms. These frames have basic support but are not part of the regular flight-test program. See the <a href="https://docs.px4.io/main/en/airframes/airframe_reference.html">full airframe reference</a>.</sub>
Developers should read the [Guide for Contributions](https://docs.px4.io/main/en/contribute/).
See the [forum and chat](https://docs.px4.io/main/en/#getting-help) if you need help!
> See the [Development Guide](https://docs.px4.io/main/en/development/development.html) for toolchain setup and build options.
The PX4 Dev Team syncs up on a [weekly dev call](https://docs.px4.io/main/en/contribute/).
## Documentation & Resources
> **Note** The dev call is open to all interested developers (not just the core dev team). This is a great opportunity to meet the team and contribute to the ongoing development of the platform. It includes a QA session for newcomers. All regular calls are listed in the [Dronecode calendar](https://www.dronecode.org/calendar/).
| Resource | Description |
| --- | --- |
| [User Guide](https://docs.px4.io/main/en/) | Build, configure, and fly with PX4 |
| [Developer Guide](https://docs.px4.io/main/en/development/development.html) | Modify the flight stack, add peripherals, port to new hardware |
| [Airframe Reference](https://docs.px4.io/main/en/airframes/airframe_reference.html) | Full list of supported frames |
See the latest list of maintainers on [MAINTAINERS](MAINTAINERS.md) file at the root of the project.
## Contributing
For the latest stats on contributors please see the latest stats for the Dronecode ecosystem in our project dashboard under [LFX Insights](https://insights.lfx.linuxfoundation.org/foundation/dronecode). For information on how to update your profile and affiliations please see the following support link on how to [Complete Your LFX Profile](https://docs.linuxfoundation.org/lfx/my-profile/complete-your-lfx-profile). Dronecode publishes a yearly snapshot of contributions and achievements on its [website under the Reports section](https://dronecode.org).
We welcome contributions of all kinds — bug reports, documentation, new features, and code reviews. Please read the [Contribution Guide](https://docs.px4.io/main/en/contribute/) to get started.
## Supported Hardware
## Governance
For the most up to date information, please visit [PX4 User Guide > Autopilot Hardware](https://docs.px4.io/main/en/flight_controller/).
The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship — no single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](LICENSE) license, so you are free to use, modify, and distribute it in your own projects.
## Project Governance
The PX4 Autopilot project including all of its trademarks is hosted under [Dronecode](https://www.dronecode.org/), part of the Linux Foundation.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.