Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HealthCheck] Logger (is_logging?) #22781

Merged
merged 4 commits into from
May 29, 2024
Merged

[HealthCheck] Logger (is_logging?) #22781

merged 4 commits into from
May 29, 2024

Conversation

dakejahl
Copy link
Contributor

Solved Problem

I have a piece of companion software that automatically downloads flight logs from the vehicle over mavlink and uploads them to a server. I need to know when the logger is running or not so that I don't try to download a log file which is being actively written to (results in a partial log download and repeated downloads).

Solution

The mavlink SYS_STATUS message can tell us if the logger is running or not. We just need to check the LoggerStatus in the health and arming checks and set the MAV_SYS_STATUS_LOGGING bit.

@AlexKlimaj AlexKlimaj requested a review from dagar March 11, 2024 21:22
@dakejahl
Copy link
Contributor Author

I plan on adding the same logic for a precision landing system using MAV_SYS_STATUS_SENSOR_VISION_POSITION

@bkueng Can you please review? Thanks :)

@DronecodeBot
Copy link

This pull request has been mentioned on Discussion Forum for PX4, Pixhawk, QGroundControl, MAVSDK, MAVLink. There might be relevant details there:

https://discuss.px4.io/t/px4-sync-q-a-may-15-2024/38773/1

@mrpollo mrpollo requested a review from bkueng May 15, 2024 16:15
@mrpollo
Copy link
Contributor

mrpollo commented May 15, 2024

@bkueng we would appreciate a quick glance at this PR

@dakejahl
Copy link
Contributor Author

The one thing I don't understand is how the HealthAndArmingCheck can set the present/enabled/healthy status. The only option in setHealth() is the is_present flag. Ideally we should be able to directly set all 3 flags corresponding to SYS_STATUS

For the logger I think enabled/health are the same thing... Unless of course the SD card runs out of space after the logger has already been running. We probably need to audit the logger and ensure it's not lying about its state. LoggerStatus.msg might need a flag to indicate health, since is_logging doesn't differentiate between an error or normal stoppage.

  • present: is the logger present (check if logger_status topic exists and is not stale)
  • health: is the logger logging

The reason this matters at all is because LOG_REQUEST_LIST and log download will hog the CPU, which could cause a crash, see issue #22998

@DronecodeBot
Copy link

This pull request has been mentioned on Discussion Forum for PX4, Pixhawk, QGroundControl, MAVSDK, MAVLink. There might be relevant details there:

https://discuss.px4.io/t/px4-sync-q-a-may-22-2024/38872/1

Copy link
Member

@bkueng bkueng left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a piece of companion software that automatically downloads flight logs from the vehicle over mavlink and uploads them to a server. I need to know when the logger is running or not so that I don't try to download a log file which is being actively written to (results in a partial log download and repeated downloads).

Why aren't you using log streaming (e.g. via mavlink router)?

The one thing I don't understand is how the HealthAndArmingCheck can set the present/enabled/healthy status. The only option in setHealth() is the is_present flag

The health is set based on the error flag: https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/streams/SYS_STATUS.hpp#L76

@dakejahl
Copy link
Contributor Author

@bkueng Thanks for the review!

The health is set based on the error flag: https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/streams/SYS_STATUS.hpp#L76

I guess I was confused that they didn't map 1:1. Mavlink has present/enabled/health and the health report has present/warning/error. It's fine for now, this accomplishes the goal of detecting if the logger is running or not. Down the road we can add reporting for logger errors, such as full SD card.

Why aren't you using log streaming (e.g. via mavlink router)?

For a number of reasons

  1. If a vehicle crashes and loses power your streamed log will cut off early and you won't have all of the data. Same goes for hardfaults. On systems without easy SD card access this is a big problem, especially if the primary mechanism of retrieving logs is via streaming.

  2. Needlessly using bandwidth while flying. The majority of cases you don't need real time log data.

  3. Simplicity. There's already a logger and a log file. I'll just download the One True Log™ when the vehicle lands.

Happy to hear your thoughts

@bkueng
Copy link
Member

bkueng commented May 29, 2024

For a number of reasons

I think none of these would stop you from using log streaming, but of course it's up to you.
In power loss cases you get roughly the same amount of data (sometimes even more) with log streaming. For hardfault logs, you're right you'd need a specific service for downloading those.

@bkueng bkueng merged commit a4650fd into main May 29, 2024
88 of 93 checks passed
@bkueng bkueng deleted the pr-logging_status branch May 29, 2024 09:56
chiara-septentrio pushed a commit to flyingthingsintothings/PX4-Autopilot that referenced this pull request Jul 3, 2024
chiara-septentrio pushed a commit to flyingthingsintothings/PX4-Autopilot that referenced this pull request Jul 4, 2024
chiara-septentrio pushed a commit to flyingthingsintothings/PX4-Autopilot that referenced this pull request Jul 10, 2024
PX4:ver Add base type compare

px4_fmu-v6x:Use hwbasecmp

px4_fmu-v6x:HAVE_PM2 set by PX4_MFT_PM2 in manifest

px4_fmu-v6x:rc.board_sensors Use BOARD_HAS_HW_SPLIT_VERSIONING

nxp Support BOARD_HAS_HW_SPLIT_VERSIONING

px4_fmu-v6xrt:Use BOARD_HAS_HW_SPLIT_VERSIONING & common PAB manifest

px4_fmu-v5x:Use BOARD_HAS_HW_SPLIT_VERSIONING & common PAB manifest

boards: arkv6x migrate to split versioning

dataman: Move before using variable definitions

check: Changing the order of messages and events

ekf2-agp: reset to measurement on fusion timeout

ekf2-agp: ensure logging of AGP aid_src topic

ekf2-agp: follow measurement reset

dataman: use correct size for dataman compat key

mission: renaming dataman_id to mission_dataman_id

dataman: extend for double storage geofence and safe points

mavlink_mission: add alternating storage for geofence and safe points on upload

This way the old points are kept on an upload error.

mavlink_mission: publish mission topic at startup

mission_base: make sure to always update state on mission topic update

mission_base: fix validity on abort landing

ina238: set shunt calibration to desired value if readback is incorrect (#22237)

* refactor driver to dynamically check registers and do reset if register does not match desired value
* have seen various times where shunt calibration was reset in air

---------

Signed-off-by: RomanBapst <bapstroman@gmail.com>

gimbal: Change the IF statement to a SWITCH statement

matrix: fix internal include chain

AxisAngle use Vector3<T> instead of Vector<T, 3>

matrix: return value simplifications

matrix: Slice templated on const and non-const matrix cases

to avoid casting const to non-const with
`const_cast<Matrix<Type, M, N>*>(data)`

NuttX with h7 adc clock Backports

stm32h7:ADC STM32_RCC_D3CCIPR_ADCSEL->STM32_RCC_D3CCIPR_ADCSRC

stm32h7:adc Dynamically set clock prescaler & BOOST

   The ADC peripheral can only support up to
   50MHz on rev V silicon and 36MHz on Y silicon.
   The existing driver always used no prescaler
   and kept boost setting at 0.

cpuload: Fix wrong idle thread load

When the CPU load monitor is started while already running, then the
idle thread last_times[0] is reset to the last 1 second, rather than
since when the CPU load monitor was last started. The remaining threads
are not impacted, since their last_times[i] is reset to zero here.

This results in the idle thread having a lower than real CPU load, with
the remaining CPU time being wrongly attributed as scheduler load.

fmu-6x: fix Telem2 without flow control

When flow control is used together with DMA, we need to add a pulldown
to CTS. Without it, it assumes flow control and gets stuck when
CTS is not connected.

Signed-off-by: Julian Oes <julian@oes.ch>

px4_fmu-v6x:Add Sensor set 8

Change FMU-v6x REV 6 IMU Order

Change IMU Order, make adis16470 in 1st priority.

ICP201: Fix B2 version not return in bootup config

fix FunctionActuatorSet: if a param is set to NaN, it should be ignored

MAVLink spec: https://mavlink.io/en/messages/common.html#MAV_CMD_DO_SET_ACTUATOR
Previously, a command was overwriting all other indexes.

commander: send ack for VEHICLE_CMD_DO_SET_ACTUATOR

fmu-v6xrt: hotfix for sdio crash when reading multiblock to unaligned memory

ekf2: let drag fusion affect the complete state vector

This improves tilt estimation and can extend the inertial dead-reckoning
validity period

ekf2-drag: do not generate Kalman gain to save flash

Bugfix removed conversion from rpm to rad s

bat_sim: parameter for disabling battery simulator

drivers/uavcannode: add indicated airspeed

Signed-off-by: dirksavage88 <dirksavage88@gmail.com>

battery: make time remaining estimation dependent on level flight cha… (#22401)

* battery: make time remaining estimation dependent on level flight characteristis for FW

* battery: fix that FW flight is also correctly detected when vehicle_status is not updated

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

* FixedwingPositionControl: Move constant to header file

* flight phase estimation: use tecs height rate reference to check for level flight

---------

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

mc_att_control: remove direct setting of att sp in Stabilized

Instead of directly setting the attitude setpoint for usage inside the same module
only publish it to the uorb topic, which is subscribed to in the same module.

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

mc_attitude_control: move attitude setpoint pulling to right before usage

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

params: change return type of param_modify_on_import to enum

Return early in param_import_callback() with 1 if we do a param_set in the param translation.

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

FLightTaskAuto: limit nudging speed based on distance sensor

v6x board_sensors: publish system_power if ADC_ADS1115_EN is enabled

PWMOut/px4io: correct automatic servo/motor configuration messages

Lanbao driver: correct rangefinder type to IR

boards: new ARK Septentrio GPS CAN node(ark_septentrio-gps)

* update gps submodule with sbf fix
* ARK Septentrio GPS initial commit

Auto: Change 1G to a more accurate value

tuning_tools: Change 1G to a more accurate value

update all px4board kconfig

Differential Drive Guidance: Add guidance

also add dependency on control allocation parameter CA_R_REV

Differential Drive Guidance: Added mission logic

Differential Drive Guidance

Differential Drive Guidance

Differential Guidance: Inlcude library

Differential Guidance: Compiles, does not work though

Differential Guidance: Works somewhat

Differential Guidance: Temp

Differential Guidance: Tuning

Differeital Drive Guidance: Remove waypoint mover

Differential Guidance: Fixed accuracy issue by converting from float to double

Differential Guidance: rebased on differentialdrive and improved waypoint accuracy

Temp

Differential Guidance: cleanup

temp

DifferentialDriveControl: only save required parts of uORB message

Rename differential drive setpoint topics

Rename module differential_drive_control -> differential_drive

DifferentialDrive: remove trailing zeros from prameter metadata

DifferentialDrive: Rework structure

3 Components Guidance - Control - Allocation
with their corresponding uORB interface.

Fixed guidance logic and added feedforward term to compute the angular velocity

added acro mode

Acro mode is manual mode, but with rate control

Fixed bug in the guidance logic

After smoothing the linera velocity setpoint, the EKF has trouble initializing, becuase the acceleration is too smooth, to combat this issue, there is a 1 second delay when initializing the mission mode

cleanup + updated acro

Added spoolup and removed temporary timeout for EKF

DifferentialDrive: move spoolup consideration to the main module

Update submodule GPSDrivers to latest Mon Feb 12 12:39:19 UTC 2024

    - GPSDrivers in PX4/Firmware (17ff40898c683e1fe96ff9e2d2790594d188f872): https://github.com/PX4/PX4-GPSDrivers/commit/3393191fbb842f8e13a3f296218efec832640112
    - GPSDrivers current upstream: https://github.com/PX4/PX4-GPSDrivers/commit/f48cc01d31607baa4963bde090f530b44df3de12
    - Changes: https://github.com/PX4/PX4-GPSDrivers/compare/3393191fbb842f8e13a3f296218efec832640112...f48cc01d31607baa4963bde090f530b44df3de12

    f48cc01 2024-02-08 Julian Oes - ubx: separate config for jamming monitor
bc72f55 2024-02-08 Julian Oes - sbf: simplify odd define

Co-authored-by: PX4 BuildBot <bot@px4.io>

boards: update all NuttX defconfigs

RTL: change when to set a heading setpoint, generally leave it up to the executer

-remove RTL_HDG_MD
-only set heading setpoint in Navigator::RTL once above landing point,
or when RTL is triggered close to it
-never set a heading during RTL if weather vane is enabled

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

RTL: use dest.yaw instead of a separate heading_sp

RTL: clean up naming of function arguments

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

RTL: write out weather vane in comments (instead of WV)

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

Update src/modules/navigator/mission_block.cpp

Co-authored-by: Matthias Grob <maetugr@gmail.com>

simulation/gz_bridge: enable navsat plugin for accurate positioning of real life maps in Gazebo (#22638)

* publish the global groundtruth from the navsat callback and rearrange the local groundtruth as the altitude reference now has a dependency on the global groundtruth being initialized

---------

Signed-off-by: frederik <frederik.anilmarkus@gmail.com>

Update submodule gz to latest Tue Feb 13 12:39:17 UTC 2024

    - gz in PX4/Firmware (c9ad60e3cceedc218fa7b94ca1ae3632fda68b60): https://github.com/PX4/PX4-gazebo-models/commit/c78f7f01417168e8faab7a83ade2129c0d26b39d
    - gz current upstream: https://github.com/PX4/PX4-gazebo-models/commit/f1c461fffb8567d6f0af770fb533f60f6ec62c22
    - Changes: https://github.com/PX4/PX4-gazebo-models/compare/c78f7f01417168e8faab7a83ade2129c0d26b39d...f1c461fffb8567d6f0af770fb533f60f6ec62c22

    f1c461f 2024-02-08 frederik - increase monocam clipping distance
6d5db73 2024-02-07 Sergei Grichine - Added Zero Turn Lawnmower model (#27)
5332071 2024-02-06 Frederik Markus - add navsat plugin to worlds and navsat sensor to models (#26)

ROMFS: rc.simulator EKF2 setup specific to gazebo classic

FixedwingPositionControl: Only warn user when roll is reduced for a longer period of time

FixedwingPositionControl: Used corrected npfg roll output in path mode

Update GPS drivers to contain the astyle fix

rover build: correct differential drive kconfig name

ekf2: only populate gnss pos aid src status if ref initialized

- this is a minor logging improvement when plotting the position from the beginning of the log (often a replay session)

drivers/batt_smbus: fix BQ40Z80 timeout problem (#22751)

Co-authored-by: cyril.calvez <c.calvez@elistair.com>

RTL: publish a status message on currently chosen RTL point

FeasibilityChecker: Add new TakeoffLandAvailable option

ADd a new misison feasiblity checker option to check if a proper landing approach is defined when in air. There must be at least a mission landing or a VTOL approach defined in order for the mission to be accepted. Else, use the same logic as in MIS_TKO_LAND_REQ=4

ekf: fix measurementUpdate comment typo

Navigator: fix VTOL land waypoint calculation

The setpoint.yaw can be NAN, and this made the calculated land point NAN
as well. Looking at the current yaw is anyway a better way to approximate
the course over ground that fundamentally should be used.

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

StickTiltXY: Fix too high maximum tilt problem

And add unit tests.

ekf2: set attitude validity flag using centralized function

ekf2: fix EV height bias predict call

 - needs to be called every iteration

ekf2: move fuseVelPosHeight() -> fuseDirectStateMeasurement()

 - don't bother keeping bad_vel_{N,E,D} and bad_pos_{N,E,D} fault status bits

ekf2: split vel_pos_fusion.cpp

ekf2: velocity/position fusion helper minor consistency cleanup

ekf2: move vel/pos reset helpers

Navigator: Prevent busy-looping if Dataman read/write times out

MissionBase did not initialize its mission data, thus could enter an
infinite loop in updateDatamanCache() if the initMission() failed to
read the mission off, for example, due to the SDCard storage task taking
longer than the timeout to respond.

This change constrains the loading loop and resets the mission data even
if the data write failed.

ekf2: declination fusion don't use uninitialized parameter (EKF2_MAG_DECL)

Added special muorb startup ordering in px4_init for posix platform

Fix build error for Qurt platform in pab_manifest.c

Fixed unresolved symbol error for qurt platform due to missing sbus library

Changed order of service startup in SLPI DSP muorb since parameter library now needs work queues

Fixed and added Qurt platform dsp_hitl driver

Added param system command to voxl2 slpi build

Fix fly_forward_in_posctl() timing

MAVSDK test: increase offboard position threshold

This is a workaround to hotfix CI but the root cause is #22792
(MAVSDK test failing after EKF change, accelerometer simulation issues not learned anymore?)

MAVSDK test: Fix fly_forward_in_altctl() timing

MAVSDK tests: shorten Position, Altitude control flights

We get more than 5 meter away much quicker.

Added Zero Turn Lawnmower model (#22717)

* Added Lawnmower airframe

* Update 5005_gz_lawnmower

Works all right

* Update 5005_gz_lawnmower

RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED

* Update ROMFS/px4fmu_common/init.d-posix/airframes/5005_gz_lawnmower

Co-authored-by: Per Frivik <94360401+PerFrivik@users.noreply.github.com>

* Update ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt

Co-authored-by: Per Frivik <94360401+PerFrivik@users.noreply.github.com>

* Renamed 5005_gz_lawnmower to 4011_gz_lawnmower

also pulled latest GZ models hash

---------

Co-authored-by: Per Frivik <94360401+PerFrivik@users.noreply.github.com>

baro static pressure compensation tuning: remove dependency to baro bias

`estimator_baro_bias` requires to have GNSS and baro hgt active and GNSS as the reference. This is quite restrictive. Instead, we can simply use a high-passed version of the baro error.

ROMFS: respect kconfig for including romfs files (airframes, etc) (#22571)

* ROMFS: respect kconfig for including romfs files (airframes, etc)

* ROMFS: only add R1 airframe with differential drive control

* ROMFS: adapt to differential drive module renaming

---------

Co-authored-by: Matthias Grob <maetugr@gmail.com>

matrix: remove bold printing of diagonal elements

As this was not working in NSH.

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

Update injectxmlparams.py

Add extraction of Boolean attributes in injectxmlparams.py.

ekf2: use Joseph stabilized covariance update

ekf2: use Joseph stabilized update in direct state observations

update EKF2 change indicator

ekf2: ZeroGyroUpdate move to fuseDirectStateMeasurement

fmu-v6xrt: Increase lpwork stack size

geo: correct unit test

fix gimbal driver for mavlink gimbal v2 input and AUX output

The main problem was that during initial negotiation the client would
request the gimbal_manager_information from px4 but px4 would never send
it because in this configuration the device_compid was set to 0.

Jenkinsfile: correct typo, missing comma

Introduced in
2c81c9fdea0f589f4021a549d86969dc317327fa

ekf2: allow wind dead-reckoning after manual position reset

Reset velocity using airspeed and start navigating

FW Attitude Controller: fix manual yaw rate setpoint limit (#22812)

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

ekf2-mag_auto: always use mag 3D after takeoff

ekf2 sensor_sim: set correct world mag field

ekf2: fix unit tests failing due to mag fusion changes

ekf2: update change indicator

Update to latest sitl gazebo camera

bmp388: Driver print out start BMP390 identifier when detected

mantis-edu: remove duplicate RC define

netman: generate default config if file doesn't exist

ENOENT returns if the file doesn't exist yet, when using mtd /fs/mtd_net always exist.
On a filesystem you've to generate the file so if ENOENT returns we've to regenerate the default config as well.

nuttx: update apps

Add minimal Skynode RC13 config to the PAB manifest

mag calibration: minor cleanup (#22830)

fmu-v6xrt: update px4board enables vtol

v6x-rt: fix rover build regression

Update submodule gz to latest Tue Mar  5 12:39:22 UTC 2024

    - gz in PX4/Firmware (5f8f0213a807d327a30a7df05e58f7887cf936ab): https://github.com/PX4/PX4-gazebo-models/commit/222833656802532ec2271986a65fd198cfa48259
    - gz current upstream: https://github.com/PX4/PX4-gazebo-models/commit/6b4ed09d1b495fbff663f098979cc046df013abd
    - Changes: https://github.com/PX4/PX4-gazebo-models/compare/222833656802532ec2271986a65fd198cfa48259...6b4ed09d1b495fbff663f098979cc046df013abd

    6b4ed09 2024-02-23 Sergei Grichine - Added IMU sensor noise to the model, to avoid STALE messages (#34)
953e02b 2024-02-22 frede791 - add imu sensor model noise

yaw_est: force set gyro bias when at rest

The gyro bias estimate from EFK2 is really good when at rest and should
be used by the yaw estimator to prevent heading drifts due to poor
heading observability.

FW Position Controller: do not publish roll angle constrain warning in VTOL transition (#22842)

* FW Position Control: some cosmetical changes

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

* FW Position Control: disable roll constraining warning in VTOL transition

In transitions it is expected that the roll is constrained, and
instead of defining an aribitrary threshold let's rather disable
the user warning in that case.

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

* FW Pos C: define magic numbers for roll constraining warning as constants

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

---------

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

sensor/vehicle_magnetometer: sensor update loop limit iterations

 - place upper bound to prevent looping indefinitely (high publish rate, etc)

mag_bias_estimator: sensor update loop limit iterations

sensors/vehicle_acceleration: sensor update loop limit iterations

sensors/vehicle_air_data: sensor update loop limit iterations

sensors/vehicle_angular_velocity: sensor update loop limit iterations

sensors/vehicle_imu: sensor update loop limit iterations

ICP201: increase config delay

VTOL: treat Descend mode as Land (#22843)

* vtol_type: enable pusher assist also in Descend mode

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

* vtol_type: treat Descend as Land for pusher assist

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

---------

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

ekf2: fix joseph covariance update for Schmidt-Kalman filter

If part of the Kalman gain is zeroed, the first step of the joseph
update does not produce a symmetrical matrix.

ekf2: update change indicator

ekf2: fix mag and wind covariance prediction

ekf2: update change indicator

Moving from Qurt specific icm4266p driver to mainline version

FW Pos Controller: do not publish roll angle constrained warning if landed (#22850)

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

Navigator: remove vtol_takeoff special handling for RTL (#22844)

We had a special handling for RTL triggered in vtol_takeoff state.
The idea is to wait until the VTOL Takeoff is completed and only
then switch to RTL. On a second thought this special handling isn't
really necessary and for the sake of simplicity should be removed.
This also removes the side effect of the indicated flight mode
after RTL being set to VTOL_Takeoff again.

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

mission_base: Do not initialize mission from dataman. only listen on mission topic

mission_base: clean up mission check evaluation

geofence: publish status of loaded geofence

mission_base: Only run mission feasibility if the geofence module is ready

mission_base: check mission feasibility again, if geofence has changed.

MissionResult uorb: fix wrong int types

MissionFeasibiltyChecker: Do not delete uorb data on reset.

mission_base: Run feasibility checker only after first global position has been published

missionFeasibilityChecker: Fix tests

mission_base: Force mission validity check on activation

FW Position Control: control_backtransition():  always track line from start (#22853)

Remove option to track from previous wp to reduce complexity and fix
case where prev=current point and the line following broke down.

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

boards/mro/ctrl-zero-classic: corrections for mRo Control Zero Classic Board (#22745)

- Build target changed from STM32H743II to STM32H743ZI
- Missing external SPI interface added
- Nonexistent  I2C3 interface removed
- I2C4 pins changed
- Red and Green LED lights remapped
- Missing ADC inputs added and already present ones corrected
- CAN Silent interfaces corrected
- Power pins corrected and Level Shifter pin added to enable ICM20948
- Buzzer pin remapped
- HRT channel and PPM pin changed
- RSSI input remapped
- ICM20602 and BMI088 pins corrected
- Serial ports remapped

uORB: make queue size (ORB_QUEUE_LENGTH) completely static (#22815)

Previously uORB queue size was an awkward mix of runtime configurable (at advertise or IOCTL before allocate), but effectively static with all queue size settings (outside of test code) actually coming from the topic declaration (presently ORB_QUEUE_LENGTH in the .msg). This change finally resolves the inconsistency making the queue size fully static.

Additionally there were some corner cases that the muorb and orb communicator implementation were not correctly handling. This PR provides fixes for those issues. Also correctly sets remote queue lengths now based on the topic definitions.

* Made setting of uORB topic queue size in based on topic definition only
* Fixes to the ModalAI muorb implementation
* Removed libfc sensor from format checks
* msg/TransponderReport.msg ORB_QUEUE_LENGTH 8->16 (was set to higher in AdsbConflict.h

---------

Co-authored-by: Eric Katzfey <eric.katzfey@modalai.com>
Co-authored-by: Daniel Agar <daniel@agar.ca>

drivers: broadcom AFBR update to API 1.5.6

boards: ARK Flow fix typo

mission_base: land_start_item invalid only when negative. (#22856)

rtl: land_start_item invalid only when negative.

Update src/modules/navigator/rtl.cpp

rtl_direct: Move the time estimation calculation into a separate helper class

rtl_direct_mission_land: add time estimation for RTL mission land

rtl: reduce time estimate calculations

rtl_direct_mission: rtl_estimate for fixedwing land is diagonal

rtl_direct: Rtl estimate only needs valid destination, not home position

rtl_direct_mission_land: fix abs/rel usage of item.altitude

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

rtl direct: fix setting of previous altitude (abs vs rel)

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

mission: The mission check on activation should only be performed for a mission, not RTL.

We need to make sure that when the RTL is triggered, it should not reevaluate it, as when it was valid but evaluated to false on activation, it can't do a RTL.

parameters: support for an optional remote parameter database (#22836)

The voxl2 has a split architecture. PX4 runs on a posix platform and a Qurt platform. The two communicate uorb topics back and forth with the muorb module. But each has it's own parameters database and they need to stay in sync with each other. This PR adds support to keep the 2 parameter databases in sync. The main parameters database running on Linux has file system support while the Qurt one does not. The Linux side is considered the primary and the Qurt side is considered the remote.

boards/modalai/voxl2: Add new capabilities to Qurt platform HITL driver

* Added new sensor control options and test capability in dsp_hitl
* HITL working in VIO mode only
* Fixed units on GPS HIL input

mavlink: OPEN_DRONE_ID_SYSTEM stream publish operator altitude in geodetic frame (#22866)

Tiltrotor: disable MC yaw fade out during front transition blending

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

rtl_direct: fix on_inactive()

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

 Commander: make low remaining flight time configurable and fix clearing condition (#22863)

* Commander: make low remaining flight time configurable and do not clear

- add _ACT param to disable/warning/RTL this feature
- publish rtl flight time estimate also in RTL, and thus fix re-validation
- make failure message clearer, distinguish from battery low

* battery check: add hysteresis for declaring battery_low_remaining_time false again

---------

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: KonradRudin <98741601+KonradRudin@users.noreply.github.com>

vtol: only publish generic warning through mavlink to safe flash (#22870)

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

uxrce_dds_client: refactor init to retry indefinitely

 - move init from UxrceddsClient to init() method so that retry is
   possible for both serial and UDP init

uxrce_dds_client: optimizations and instrumentation

 - skip ping session if data flowing bidirectionally
 - add perf counters for loop time and interval
 - skip blocking poll if there's input data to read

dataman: Add client sync perf counter and increase default timeout to 5s

update msg_files to PARENT_SCOPE (#22800)

add load_mon support for Qurt platform (#22883)

 - Added check in commander to see if CPU load monitoring has been disabled before signalling overload

mro-zero classic: remove gyro fft module to save flash (#22878)

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

commander: low flight time failsafe: set UserTakeoverAllowed::Auto to enter Hold first (#22887)

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

ekf2: new yaw derivation

Instead of euler angles, compute measurement jacobian using a small
global perturbation around the vertical axis

update change indicator

ekf2: remove old yaw 321 and 312 derivations

mc_wind_estimator_tuning: optionally use GNSS velocity

Sometimes GNSS is logged but not used

Commander: set vehicle_status.failsafe flag only if action for failed check is more than warning

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

EstimatorCheck: GNSS data fusion stopped as INFO if local position is already invalid

Helps to reduce spamming of less important warnings.

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

Commander: trigger warning when arming denied due to check failure

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

Commander enums: capitalize flight mode names

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

Commander enums: capitalize battery level key words

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

Commander enums: shorten failsafe event messages

Such that the focus is on the important keywords.

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

failsafe: set cause to generic when fallback mode is activated

Previously when triggering low battery RTL and then losing GPS, the fallback
to Descend would still have low battery as cause.

EKF: Change a typo

mpc: add possibility to generate tilt using full 3D accel

Using full 3D acceleration provides better horizontal acceleration
tracking but also creates a sometimes unwanted behavior because the tilt
is directly coupled with the vertical acceleration setpoint.

SMART_BATTERY_INFO to BATTERY_INFO (#22875)

* Update submodule mavlink to latest Wed Mar 13 01:02:16 UTC 2024

    - mavlink in PX4/Firmware (497327e916103ef05ff8f08f47d33b9a19bc28d7): https://github.com/mavlink/mavlink/commit/c4a5c497379ca873f73abe691a033641a6a5a817
    - mavlink current upstream: https://github.com/mavlink/mavlink/commit/a3558d6b335d930fc01816fd168d16b3f38ed434
    - Changes: https://github.com/mavlink/mavlink/compare/c4a5c497379ca873f73abe691a033641a6a5a817...a3558d6b335d930fc01816fd168d16b3f38ed434

    a3558d6b 2024-03-07 Hamish Willee - common - DO_FENCE_ENABLE/PARACHUTE fix (#2090)
b9730e0f 2024-03-06 olliw42 - update RADIO_RC_CHANNELS to latest, remove all mlrs from storm32.xml (#1919)
7fed0268 2024-03-06 Patrick José Pereira - common: MAV_CMD_DO_SET_SYS_CMP_ID: Add first version (#2082)
2909b481 2024-03-06 Hamish Willee - Update Pymavlink (#2089)
e9b532a9 2024-03-05 Randy Mackay - common: add set-camera-source command (#2079)
bcdbeb7f 2024-03-01 auturgy - Allow individual fences to be enabled and disabled (#2085)
2f8403d1 2024-02-29 Hamish Willee - MAV_CMD_ODID_SET_EMERGENCY -  (#2086)
daa59c02 2024-02-22 Peter Barker - common.xml: add a command to deal with safety switch (#2081)
977332e2 2024-02-14 Hamish Willee - COMPONENT_INFORMATION_BASIC - add manufacturer date (#2078)
4fef7de2 2024-02-07 Randy Mackay - Common: rename SMART_BATTERY_INFO to BATTERY_INFO and add SOH (#2070)
3865b311 2024-02-01 Hamish Willee - FLIGHT_INFORMATION - description to match PX4 (#2067)
f80e6818 2024-01-31 KonradRudin - development.xml: merge both MAV_CMD enums together (#2074)

* SMART_BATTERY_INFO to BATTERY_INFO on new mavlink module

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

* fix trivial whitespace

---------

Co-authored-by: PX4 BuildBot <bot@px4.io>
Co-authored-by: Daniel Agar <daniel@agar.ca>

sd_bench: Display maximum time for maximum write time

navigator: update mission after changing home position (#22834)

ekf2: fix gnss yaw unit test

ekf2: add no gyro bias estimate test case

This makes the ekf unstable and creates NANs during initialization

ekf2: fix direct state measurement update for suboptimal K case

The duration of a unit test had to be increased because the incorrect
covariance matrix update, was making the unit test passing faster
(over-optimistic variance).

ekf: update change indicator

mpc: fix PositionControl unit test

The unit test assumes the position controller is in "decoupled" mode

mathlib: utilities refactor float to function template (for optional double precision usage)

Co-authored-by: Mathieu Bresciani <brescianimathieu@gmail.com>

boards: ark septentrio update flash size and enable ekf2

boards/px4/fmu-v5x: default remove systemcmds/sd_stress to save flash

uavcan: publish new can interface status as uorb topic (#22873)

uORB: SubscriptionBlocking purged the broken attempt to set the mutex protocol in constructor

uORB: fix for uORB communicator, only send most recent data for new subscription (#22893)

add `.editorconfig` for consistent code style across editors (#22916)

EditorConfig is a well-known convention to share style settings across
different editors. Adding one will make it easier for new contributors
or people who like to use a different editor to contribute.

boards/px4/fmu-v5x: remove sd_stress & reflect to reduce flash usage

gps: fix incorrect task id in module startup

New platform independent Serial interface (#21723)

boards/px4/fmu-v5x: remove legacy rover_pos_control to reduce flash usage

VOXL2: HRT updates for synchronization with Qurt time (#22881)

- Added offset to Posix hrt time to account for synchronization with Qurt hrt time
- Added new Kconfig to configure synchronization of HRT timestamps on VOXL2
- Moved voxl2 libfc sensor library submodule from muorb module to boards directory
- Added check to make sure hrt_elapsed_time can never be negative

code: add more style options in `.editorconfig`

px4io: don't output on disabled PWM pins

Same logic as on the FMU PWM updateOutputs() in PWMOut.cpp

px4iofirmware: don't switch to disarmed or failsafe value on disabled PWM outputs

If the output is set to 0 then the FMU had this channel disabled/no function mapped
to it. In that case we do not want to suddenly start outputing failsafe or disarmed
signals.

mixer_module: send a last sample out after all outputs were disabled

This matters for PWM when the last output gets disabled on either FMU or IO
it would just keep on running.

Also when rebooting with a parameters reset or new airframe with no mapped outputs
it would previously keep outputting PWM with the disarmed value of the new airframe
e.g. 1000us which is a safety hazard because servos could break the physical limit of the
model or miscalibrated ESCs spinning motors.

Signal generator (#22666)

Add option to generate sine chirp signals for fixed-wing system identification

Add SYS_AUTOSTART touch in voxl-px4-start

boards/holybro/kakuteh7: fix icm42688p IMU

 - the mass-produced kakuteH7 did not use ICM20689 IMU

ekf2: gps control lazily check yaw_failure() only after in_air

fw_att_control: bitwise and should be logical and (#22933)

Signed-off-by: Julian Oes <julian@oes.ch>

Battery parameters: clarify empty, full voltage description

boards: unify comments for voltage deviders

NuttX with pr-h7-serial-logic-error backport

commander: improve failsafe messaging

Signed-off-by: Claudio Micheli <claudio@auterion.com>

failsafe framework: inform about failsafe action

Additions to the Serial UART API (#22953)

- Added an empty constructor, setPort, and validatePort functions for Serial API
- Changed GPS to not allocate Serial object dynamically
- Moved access check on serial port name into the Serial API
- Improved the Qurt platform validatePort Serial function to implement a more rigorous check. Added safety check
to the setPort Serial function to make sure it isn't called after the port has been already opened.

Qurt termios decoy (#22954)

* Added decoy termios support to Qurt so that ghst parser in RC library can be used. No termios is actually needed but has to be there for the parser to work

gps: fix Septentrino serial read (#22936)

For Septententrino we seem to sometimes fill the buffer pretty full.

If we ask for too much, readAtLeast will fail completely and make the
GPS discovery logic fall over. Therefore, let's not ask for too much and
just read what we can given the available buffer.

Signed-off-by: Julian Oes <julian@oes.ch>

drivers: barometer: ms5837 fix compilation error

Fixes MS5837.cpp:343:29: error: 'T' was not declared in this scope by using last temperature instead

drivers: tap_esc: fix Werror=maybe-uninitialized compilation

examples: matlab_csv_serial: fix compilation

Update uORB definition and sprintf float formatting

systemcmds: microbench: %s doesn't except nullptr use "null" instead

systemcmds: reflect: write return needs to be used for werror checks

drivers: transponder: don't free pre-allocated memory

drivers: uavcan: fix werror uninitialized error

drivers: vector: Fix PX4 SITL x86 compilation

drivers: bmi088_i2c: Enforce I2C driver can only be used when SPI version isn't selected

Solves multiple references compilation errors

drivers: cyphal: Fix ARM/x86 printf werror portability error

v6x-rt: Split ITCM static and auto-generated functions

kconfig: Add dependencies

modules: zenoh: remove broken serial config and update topics

cmake: all allyes target for better CI coverage

Currently only v6x-rt and SITL are supported
But targets with label allyes will try to enable all kconfig symbols

Port CRSF RC driver to new Serial UART API (#22917)

* Added implementations of Rx Tx swap and single wire for new UART API needed by CRSF driver
* Added inverted mode to Serial interface API

boards: new hkust nxt-fc board support (#22961)

logger: make logging of rtl_status not optional

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

logger: reduce interval of rtl_status logging

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

px4io: remove special handling for HITL

In HITL the actuators should not be mapped
and they are in lockdown.

We should not reconfigure disarmed, min, max PWM values
without updating the actual output values because the IO
will consider the last outputs before the FMU was rebooted
with the configuration of the new boot. This can result
in spinning motors when switching to SIH.

px4iofirmware: refactor to only have one PWM output code path

This removes the duplication with unexpected differences
and allows to consistently handle the output instead of
overriding the output for some specific cases which
leads to unexpected corner cases. E.g. disabled outputs
suddenly outputing PWM in lockdown.

px4iofirmware: simplify lockdown logic

px4iofirmware: reuse existing disarmed logic for lockdown and `should_always_enable_pwm`

The existing disarmed logic already handles disabled outputs
it makes sense to reuse it and not have lockdown handled
differently resulting in unexpeced corner cases.

Build new IO firmware binaries

battery: weigh voltage based estimate more when it's low

This is a minimal change to make it harder to crash a
vehicle with an empty battery if the capacity was set wrong.

The disadvantage is that the state of charge estimate will
fluctuate more under load.

We need better documentation and improvements to the estimation.

boards/modalai/voxl2: added device specifier to gps start line

Jenkinsfile - dual-deploy uorb graph and failsafe to vitepress (#22943)

px4io: Fix dependency problem caused by #22957

Serial: removed the validateBaudrate function from nuttx and posix platforms and just send out a warning it baudrate is non-standard (#22969)

- Fix some Qurt platform build issues uncovered when changing the posix version of SerialImpl

gz-bridge: use correct prev_timestamp for dt calc

- with the addition of the navsat plugin in PR#22638, the callback would
reassign the previous timestamp used in the calculations of the
angular_velocity causing derivative type noise in the groundtruth
measurements

Memsic MMC5983MA magnetometer driver

msg: update VehicleCommand.msg MAV_CMD_DO_REPOSITION comment

Added missing MAV_CMD_DO_REPOSITION parameters, from MAVlink Docs.

ekf2: use global definition of quaternion error

ekf2: improve tilt leveling speed

Starting with no yaw uncertainty makes the tilt more observable when
using fake position fusion during the quasi-stationary alignment phase.

ekf2: integrate mag heading into mag 3D

ekf2: limit mag heading fusion to prevent heading overconfidence

ekf2: do not continuously use mag decl fusion when GNSS fusion is active

This prevents over-constraining the heading from mag fusion. An
incorrect mag yaw rotation can be absorbed as a declination error.

ekf2: remove option to continuously fuse mag declination

Declination fusion is only used when not observable (no global aiding).

ekf2: update change indicator

Navigator: remove unused method

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

FeasibilityChecks: only require both or neither TO/LND when landed

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

Mission params: update description of MIS_TKO_LAND_REQ

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

drivers: rc_input only publish if more than 0 rc channels filled (fixes GHST auto scan)

px4_fmu-v6x:Add Holybro Pixhawk Jetson Baseboard ver 0x100

Send mavlink manual control buttons field in manual control input topic (#22988)

Pass along button states from manual control mavlink message in new buttons field in manual control input topic

Vuepress removal /changes for vitepress (#22972)

* Vuepress removal /changes for vitepress

* generate_msg_docs.py - README is index in vitepress

Update NuttX

Move Voxl from microdds client to uxrce dds client

Enabled voxl2-slpi dsp_sbus driver in build

drivers: broadcom AFBR fix close to ground false readings

mission_base: fix to set the end of mission item always, if the mission can't be properly loaded or started

FW position control: catapult/hand-launch: do not cut throttle if not landed

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

FW position control: catapult/hand-launch: enable without launch detection

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

TECS: check if integrator update is finit prior applying

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

MissionBase: hasMissionLandStart should only return true if mission is valid

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

RT: only chose mission RTL if mission is valid

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

remove PGA460 from COMMON_DISTANCE_SENSOR

remove LIS2MDL from COMMON_MAGNETOMETER

boards: ARK Pi6X Initial Commit

airframes: Droneblocks DEXI 5

delete SYS_MC_EST_GROUP

 - introduce per module parameters (EKF2_EN, LPE_EN, ATT_EN)
 - add basic checks to prevent EKF2 + LPE running simultaneously

Added high rate esc_status logging to the high rate logging category along with actuator_outputs_debug. Both of these
really help diagnosing odd flight behavior / crashes on VOXL2. Also changed the logger start commands in the VOXL2
standard and HITL startup scripts.

lib/rc/dsm: update proto init to have reset incorporated as well (#22995)

* update voxl2-slpi spektrum_rc driver

Voxl new board specific module (voxl_save_cal_params) to save calibration parameters (#22993)

* Added Voxl board specific module to save calibration parameters in QGC format

Document vehicle attitude message

Add python script to translate C param to new yaml file

order yaml fileds

ekf2: migrate param to yaml

logger: add timesync_status to default logged topics

Signed-off-by: Beniamino Pozzan <beniamino.pozzan@gmail.com>

Update CMakeLists.txt - included lawn world

Added lawn world to make process to allow gz sim building like "make px4_sitl gz_r1_rover_lawn"

Updated GZ submodule to the latest hash (d754381)

remove clip_limit contraint on INT16_MAX

Fix up notes boxes for docs (#22999)

* Fix up notes boxes for docs

* Update markdownout.py

* Update markdownout.py

* Update markdownout.py

ekf2: set horizon using specific parameter

Some sensors can have their delay included in the timestamp. In this
case, the buffer cannot be sized using the _DELAY parameter.

Voxl ESC driver update (#23022)

* Made Serial API open the UART in NON BLOCKING mode
* Updated voxl_esc driver to latest from ModalAI fork
* Ported voxl_esc driver over to new Serial UART API
* Removed voxl_esc serial abstraction since new Serial API is already a serial abstraction

ekf2: move yaw_estimator and derivation to dedicated folder

drivers/optical_flow/paw3902: fix RegisterRead udelay

drivers/optical_flow/paa3905: fix RegisterRead udelay

fw offboard control mode: altitude control enabled (#23041)

adsb: warnings fixes & remove UTM_GLOBAL_POSITION (#21663)

- warn about full traffic conflict buffer at 1/60hz.
- add conflict expiry for buffer.
- use only events for buffer full warning. mavlink_log_critical no longer needed.
- use icao address for conflict warnings id, stop using uas_id. UTM_GLOBAL_POSITION assumed deprecated.
- stop spamming when buffer is full
- fix warning wording if buffer is full.
- remove UTM_GLOBAL_POSITION

Fixes failing unit test:
* [adsbTest] Reduce conflict timestamps - not enough time has passed in ci
- failed ci output - (passes locally with make tests TESTFILTER=AdsbConflict)
- Timestamp: 6000000000
- Time now: 457720038
- Time since timestamp: 0
- Old Conflict warning expired: 0
- --------------------
- adsb_conflict._traffic_state 0
- ../../src/lib/adsb/AdsbConflictTest.cpp:244: Failure
- Value of: adsb_conflict._traffic_state == TRAFFIC_STATE::REMIND_CONFLICT
-   Actual: false
- Expected: true

bmp388: check bus return code after register read

Check I2C/SPI bus transfer function return code after register
read operation.

Signed-off-by: Tero Salminen <tero.salminen@unikie.com>

baro comp: set hpf optional

CMakeLists: install_python_requirements allow --break-system-packages

PM Selector Auterion: remove INA226_SHUNT value reset (skynode only)

autopilot_tester: use normal VTOL mission for airspeed blockage test

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

autopilot_tester: reduce mission distance for wind world

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

autopilot_tester: for mission end timeout check take speed factor into account

And increase the (simulation time) timeouts.

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

ekf2_params: reduce "short" description

imu consistency: don't scale param threshold

simulation/gz_bridge: eliminate implicit float conversion

VSCode: add EditorConfig extension to recommended and devcontainer.json

fix to orientation offsets for scaled yaw, removed unused param

Signed-off-by: dirksavage88 <dirksavage88@gmail.com>

Shift vertical orientation above scaling yaw operation, cp angle sign change

Signed-off-by: dirksavage88 <dirksavage88@gmail.com>

drivers/magnetometer: new ST IIS2MDC Magnetometer driver

commander: set correct health component when reporting errors

commander: fix check for availability of high latency link

Signed-off-by: RomanBapst <bapstroman@gmail.com>

high_latency_stream: fixed bug where fields were not updating

- topic update was checked twice in the same loop and thus
the second time the topic would never indicate to have updated

Co-authored-by: RomanBapst <bapstroman@gmail.com>

mavlink: fix handling of transmission enable/disable

Co-authored-by: RomanBapst <bapstroman@gmail.com>

commander: improve handling high latency link lost/regain

mavlink: use high_latency_data_link_lost as backup to normal data_link

mavlink: don't send events over Iridium

mavlink: don't send command ACK for internal commands over Iridium

iridiumsbd: update logic for detecting if the modem is not responsive

mavlink: use high_latency_data_link_lost as backup to normal data_link

telemetry: enable iridium

high_latency_stream: heading taken from vehicle_attitude topic

commander: fixed format

mavlink: added back gimbal v1 protocol command

high_latency_stream: minor PR fix

telemetry: removed iridium driver

mavlink: fixed compilation error after var renaming

MC Auto: add fixed yaw mode

estimatorCheck: get param only if handle is valid

px4_cli: Added px4_get_parameter_value function overload for float type

mavlink: Added parsing of CLI option to configure HL frequency

mavlink: Added MAV_{i}_HL_FREQ parameter

boards: removed CONFIG_SYSTEMCMDS_REFLECT from Sky-Drones AIRLink board support

FW Position Controller: fix Altitude mode without valid z reference (e.g. no GPS)

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

imxrt: flexpwm remove 1:1 mapping requirement

LogMessage.msg - expand out descriptive string (#23054)

commander: Use PX4_STACK_ADJUSTED to increase stack for 64-bit targets

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>

ekf2: Only reset to GNSS heading if necessary

When North-East (e.g.: GNSS pos/vel) aiding is active, the heading
estimate is constrained and consistent with the vel/pos aiding. Reset to
GNSS heading should only occur if no N-E aiding is active or if the
filter is not yes aligned. Otherwise, just wait for the consistency
check to pass again (will pass at some point if the heading uncertainty
of the filter is getting too high).

libevents: update submodule

And remove obsolete libevents_definitions.h

ekf2: GPS yaw only invalidate yaw_align if stopping due to fusion failure

boards: update ark_pi6x EKF delays

boards: add iis2mdc mag to ark pi6x

gps: add ZED-F9P-15B

boards: ark rtk gps safety led open drain

gps: split enum after rebase

Signed-off-by: Julian Oes <julian@oes.ch>

drivers/ins/vectornav: add missing sensor_gps velocity magnitude

NuttX with imxrt_sd-preflight backport

px4_fmu-v6xrt:Support_MMCSD_MULTIBLOCK with preflight

sensors/vehicle_angular_velocity: silence gyro selection fallback warning (PX4_WARN -> PX4_DEBUG)

 - this warning was to catch any potential errors in sensor selection
   relative to what's actually available, we don't need to complain
   about initial selection before the EKF selector is available

sd_bench: Add U option for forcing byte aligned

Co-authored-by: David Sidrane <david.sidrane@nscdg.com>

ekf2: move EV files to aid_sources/external_vision

ekf2: move auxvel file to aid_sources/auxvel

ekf2: move drag_fusion file to aid_sources/drag

ekf2: move GNSS files to aid_sources/gnss

ekf2: move optical flow files to aid_sources/optical_flow

ekf2: move gravity fusion file to aid_sources/gravity

ekf2: move baro height file to aid_sources/barometer

ekf2: move sideslip fusion file to aid_sources/sideslip

ekf2: move airspeed fusion file to aid_sources/airspeed

ekf2: move range finder files to aid_sources/range_finder

ekf2: move output predictor to output_predictor/

ekf2: move mag fusion to aid_sources/magnetometer

ekf2: move aux global position fusion to aid_sources/aux_global_position

ekf2: move bias estimators to bias_estimtor/

ekf2: move fake_height, fake_pos, zero_innovation_heading to aid_sources/

ekf2: move terrain estimator and derivation to terrain_estimator/

ekf2: move IMU down sampler to imu_down_sampler/

ekf2: move baro dynamic pressure compensation to aid_sources/barometer

ekf2: delete unused Ekf::resetImuBias()

ekf2: move Ekf::resetQuatStateYaw() to yaw_fusion.cpp

ekf2: move gyro/accel/wind covariance reset helpers to covariance.cpp

ekf2: ekf_helper.cpp remove duplicate method comments (comment on declaration only, not definition)

drivers: adis16507 reschedule reset after failed self test

fix mavlink: cmd_logging_{start,stop}_acknowledgement flags were not reset

Regression from https://github.com/PX4/PX4-Autopilot/pull/23043

Also avoids a race condition by making sure the command ack is handled
before sending out the mavlink message (in case an external component
reacts immediately to the mavlink message).

Tools: skip submodule check in CLion

Same as what's required for VSCode.

Signed-off-by: Julian Oes <julian@oes.ch>

mavlink_ftp: handle relative paths correctly

by ensuring there's a '/' in between when concatenating the path with
_root_dir.

mavlink_ftp: ensure there's enough space for the 2. path in _workRename

Prevents accessing invalid memory when reading ptr + oldpath_sz + 1 and
oldpath_sz fills out the whole or N-1 bytes of the payload.

mavlink_ftp: do not store reply on kErrNoSessionsAvailable

This would interfere with an existing ongoing session

TECS: allow for fast descend up to maximum airspeed. Use pitch control loop to control max airspeed while giving minimal throttle.

TECS: increase airspeed control limit for fast descend

TECS: enable specific energy weights to have a value up to 2

TECS:use tas_setpoint instead of measured tas for specific kinetic energy calculation

gps: Change the IF statement to a SWITCH statement

quadchute: fixed sign for handling altitude resets

Signed-off-by: RomanBapst <bapstroman@gmail.com>

boards: ark septentrio gps add iis2mdc

increased uxrce-dds stack size to prevent overflow

gps: add note to param

This notes the reference yaw angle for the Septentrio Mosaic-H.

It's unfortunately a bit tricky in that Unicore has the main antenna
in front by default while Septentrio decided to put the aux antenna in
front.

Signed-off-by: Julian Oes <julian@oes.ch>

fmu-v6xrt: Enable debug features for more verbose hardfault output

fmu-v6xrt: Add I2C driver launcher

Removed obsolete voxl 2 board default parameter setting

Minor updates to the VOXL 2 board README file

uxcre_dds_client: use topic name as defined in the dds_topics.yaml to register stream

VectorNav.cpp - fix docs link to usage guide

increase lp default stack to 2000

Signed-off-by: dirksavage88 <dirksavage88@gmail.com>

style(editorconfig): update newline setting

The setting wasn't consistent with the one used in the Visual Studio
Code settings, which caused different newline formatting depending on
whether the user uses Visual Studio Code or another editor that uses
EditorConfig.

boards: ark cannode add ADIS16507 driver

mRo Control Zero Classic: Definition for GPS2 by default added

px4/fmu-v6x: set mavlink dialect to development

wind_est_replay: fix cov matrix format and data indexing

wind_est_replay: allow setting the initial scale factor

ekf2: merge mag_3d_control + mag_control

ekf2: mag control always populate estimator aid src

ekf2: mag fusion don't update all states or tilt by default

 - cleanup some of the legacy mag flags

integrationtests: mavros/mission_test.py bump yaw_error_std threshold (heading init is delayed, but not wrong)

mag_ctrl: do not fuse synthetic mag but do not zero the innovation

mag_ctrl: combine common conditions for mag_hdg and mag_3d

ekf2: symforce zero more efficiently (#23133)

 - increase symforce CppConfig zero_initialization_sparsity_threshold so
   that a Matrix setZero() call is performed instead of individually zeroing

Co-authored-by: bresch <brescianimathieu@gmail.com>

Update NuttX

Fixes imxrt1170 mpu config for extra checks

dronecan: SocketCAN driver check size before copying

Avoids memory corruption if we get packets to big

hardfault_log: Add jump to 0x0 & write 0x0 faults

[mavlink] Parameter to always start on USB (#22234)

* usb: Added parameter to enable always starting mavlink on USB.

    Refactored cdcacm_init into a module and added a paramter to allow always starting mavlink on
    USB, also added a paramter to choose the mode. The current default behavior is to wait and listen
    for data on USB and auto-detect the protocol (mavlink, nsh, ublox). This results in the mavlink
    stream not starting until something else on the mavlink network sends a packet first. The new
    default behavior is to always start mavlink.

    Added parameters
    MAV_USB_ENABLE -- default 1 (always start mavlink on USB)
    MAV_USE_MODE -- default 3 (onboard)

* added 3 retries for opening serial port in mavlink, removed sleep before sercon

* added DRIVERS_CDCACM_AUTOSTART to ark-v6x default.px4board

* added CONFIG_DRIVERS_CDCACM_AUTOSTART=y to default.px4board for boards with CONFIG_CDCACM in their nsh/defconfig

* format

* remove PGA460 from COMMON_DISTANCE_SENSOR to save flash

* remove LIS2MDL from COMMON_MAGNETOMETER to save flash

* disable CONFIG_DRIVERS_CDCACM_AUTOSTART for fmu-v5 protected.px4board

* moved and renamed parameters, removed mode logic in mavlink

* changed parameter names, added mode none

* remove parameters from mavlink

drivers/imu: new Murata SCH16T IMU driver (#22914)

---------

Co-authored-by: alexklimaj <alex@arkelectron.com>

boards: arkv6x ark_pi6x change mavlink dialect to development

HomePosition: Add minimum position change needed to be recognised as new home position

boards: ark: pi6x: CONFIG_DRIVERS_CDCACM_AUTOSTART=y (#23163)

tools/bootloader: add force-erase option

If the STM32H7 fails to program or erase a full chunk of 256 bytes, the
ECC check will trigger a busfault when trying to read from it.

To speed up erasing and optimize wear, we read before erasing to check
if it actually needs erasing. That's when a busfault happens and the
erase time outs.

The workaround is to add an option to do a full erase without check.

Credit goes to:
https://github.com/ArduPilot/ardupilot/pull/22090

And the protocol option added to the bootloader is the same as for
ArduPilot, so compatible.

Signed-off-by: Julian Oes <julian@oes.ch>

bootloader: add bootloader version

This adds a new protocol extension which allows to get the bootloader
version.

The bootloader version is different from the bootloader protocol
revision which has stabilized at 5 and is not easy to update unless a
bootloader is actually breaking the protocol. The reason being that both
the Python script as well as the uploader used in QGC will not attempt
to load firmware if they don't know the bootloader version, so it could
basically be considered a "breaking" protocol revision.

Signed-off-by: Julian Oes <julian@oes.ch>

px_uploader.py: clean up various tidbits

Includes:
- Remove some of the outdated Python2 checks and compatibility.
- Try not catch all exceptions but only the expected ones. Otherwise,
  this makes it really hard to debug if anything unexpected actually
  goes wrong.
- Make use of fstrings.
- Make output slightly prettier.

Signed-off-by: Julian Oes <julian@oes.ch>

bootloader: track ArduPilot protocol

Just so we don't conflict on these commands in the future.

bootloader: remove unused/duplicate defines

px_uploader: catch serial exception correctly

Signed-off-by: Julian Oes <julian@oes.ch>

boards: update all bootloaders

commander: add check for 5V overcurrent

Docs for camera_feedback module (#23103)

* Docs for camera_feedback module

* Update src/modules/camera_feedback/CameraFeedback.cpp

* Update src/modules/camera_feedback/CameraFeedback.cpp

wind_est_replay: report scale instead of inverse_scale

The estimator internally estimates the scale inverse, but the interface
should be the scale as "airspeed_corrected = scale * airspeed"

cdcacm_autostart: handle USB power only (#23183)

msg-rates-setpoint: fix frame name NED -> FRD

RTL_mission_fast: continue mission if RTL is triggered while in Mission

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

RTL_mission_reverse: start from previous WP if RTL is triggered while in Mission

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

RTL_status: improve comment

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

MAVLink: remove never used `_mavlink_link_termination_allowed`

VTOL Standard: fix transition pusher motor slew rate

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

VTOL: remove _dt passing as it's no longer used (and was wrong)

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

CameraFeedback: shorten line length such that documentation parser works

This broke in 4f64acb3524d39967bd7f516ae2ebfe4be5246bc and was also flagged by CI in the pr and since then.

camera_trigger: module docs for camera trigger driver (#23104)

HealthCheck: added health check for logger to report if it's running (#22781)

Jankinsfile-compile: add missing comma after `ark_pi6x_default`

nxp/imxrt_common/main:Fix Breakage from  a9962dc

bootloader/common/bl.c:Fixed Wrong vec_base caculation - only effects imxrt

px4_fmu-v6xrt & bootloader:Bootloader enusres that ITCM memory is writable before jump to APP

Update px4_fmu-v6xrt Bootloader

integrationtests: mavros increase threshold for yaw_error_std

boards: px4_fmu-v5x_test disable payload_deliverer module to save flash

boards: px4_fmu-v6c_default disable gyro_fft module to save flash

boards: sky-drones_smartap-airlink_default disable gyro_fft module to save flash

QuRT: Increased the size of the memory heap available to qurt platform (#23194)

* Increased the size of the memory heap available to qurt platform

mavsdk_tests: increase acceptance radius for position check on offboard landing

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

ekf2: only trigger position timeout reset when hpos fusion is active

Navigator: increase default of MIS_DIST_1WP to 10km

The previous default of 900m leads to many warnings if left
unchanged, especially if the vehicle is already in-air when
the Mission is started.

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

ROMFS: remove MIS_DIST_1WP customizations in airframes

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

[Fix][hkust_nxt-dual]:board hkust_nxt-dual fix hw_config.h missing APP_RESERVATION_SIZE param (#23204)

px4_fmuv6xrt: bidirectional dshot driver

drivers: dshot: prepare to extend for bidrectional dshot

imxrt: dshot add 1060 support and use channels instead of timers

dshot: fix clearing out esc status

imxrt: dshot improve state machine reduce's no response count

dshot: bdshot fix esc offline/online checks

imxrt: move flexio irq handler to itcm

imxrt: dshot fix erpm calculation by implementing 3-bit exponent and 9-bit period

dshot: refactoring

dshot: telemetry esc_status use sequential numbering for each motor

channel != telemetry_index, we've to count from 0 and increment for each enabled ESC

bsondump: add check if bson document size is set to zero and set to decoded size (#23088)

uORB: ORBSet don't allow duplicate insertion

* fixes a small memory leak in uORBManager.cpp (if using ORB_COMMUNICATOR)

ekf2-mag: always add process noise until initial value

ekf2-mag: turn around update_all_states condition

Non-functional

ekf2-mag: remove immediate declination fusion after reset

ekf2-mag: do not use yaw emergency estimator to reset mag states

On slowly moving vehicles (e.g.: boats, rovers), the yaw estimator has
worse convergence than the main EKF. Resetting the mag states using the
yaw estimator as reference can lead to poor heading. Also, the EKF can
recover really well from initially incorrect mag states.

ekf2-mag: do not limit the earth mag field estimate

The EKF can recover from an initial bad earth mag field estimate.
Constraining the field is not necessary and can lead to an unpredicted
behavior of the filter.
Declination fusion is safe to run even when the horizontal field is 0

ekf2-mag: do not reset when NE aiding is active

ekf2-mag: do not reset on WMM change when NE aiding is active

The mag field states are observed. No need to reset them.

ekf2-mag: with NE aiding, constrain heading drift only before takeoff

After takeoff, the heading is easily observable

fix commander: make sure to count all valid mags in preflight check

Previously, if a mag was not required (not index 0 and not used by ekf),
it was not counted in num_enabled_and_valid_calibration.
If a user set SYS_HAS_MAG to e.g. 3, it would then trigger a preflight
failure, even if there were 3 calibrated and enabled mags.

ekf2: add mag type init

In this mode, the mag is used to inilialize the heading.
During flight, the heading is predicted using gyros and corrected
by GNSS measurements if available.

fmu-v6xrt: Fix flash configuration

Fixes correct dummy cycle count of 20

fmu-v6xrt: Support RC telemetry

Patch for issue #22818 (#23170)

When calling "differential_drive stop" a missing return statement was causing a segmentation fault due to access to already freed memory.

vscode cmake-variants fix ark_septentrio-gps (#23222)

Fix float and uint64_t comparison (#23199)

fix: ControlAllocator float and int comparison bug

There was an incorrect comparison between a float variable `dt` and a `uint64_t` value representing 5 milliseconds (`5_ms`). As a result, `do_update` could never become true even if the last torque setpoint was received more than 5 milliseconds before.

To solve this, the `5_ms` value has been converted to seconds (0.005f) for the comparison with `dt`.

boards: ark-pi6x remove ekf delay param defaults (#23177)

drivers/imu: sch16t improvements (#23221)

* individual perf counters for frame errors
* don't treat saturation as an error
* added parameters for gyro/accel LPF and decimation ratio

lib/world_magnetic_model: fetch_noaa_table.py refactor and scaling improvements

 - upate to NOAA grid API to build WMM table in one pass
 - refactor declination/inclination/totalintensity table printing to
   shared method
 - compute scaling factor to maximize resolution

simplify world_magnetic_model interface (degrees in, degrees out)

 - this hopefully helps avoid accidental mis-use
 - try to clarify units everywhere

mavlink_receiver: put all message handling in the same function

mavlink: use reference instead of pointer to access the MAVLink instance from protocol classes

Only close server when errno is not EINTR

ekf2: merge mag yaw angle observability into heading consistency

 - the additional hyteresis logic for "yaw angle observable" was
   needed when it controlled time dependent mag_3d

ekf2: stopMagFusion() reset yaw_align if mag heading was active

 - we also need to clear mag_aligned_in_flight

Remove argparse from the requirements.txt.

The argparse module has been builtin to Python since
Python 3.2, released in 2011 (see
https://docs.python.org/3/whatsnew/3.2.html).  Further,
the argparse pip module has not been released or updated
since 2015, and lacks some of the features of the modern,
built-in argparse.  Drop the pip installed version in
favor of the built-in version.

Signed-off-by: Chris Lalancette <clalancette@gmail.com>

Makefile: add missing bootloader targets

Quite a few were missing, and everything on one line was hard to diff.

boards: update all bootloaders

arch.sh: Fix syntax error

Fix error of script failing with following error:
PX4-Autopilot/Tools/setup/arch.sh: line 99: syntax error near unexpected token `;'

battery: reset current filter when transitioning to FW (#22256)

VTOLs consume a lot more power in hover copared to fixed-wing fligt.
The remaining flight time thus should reset if one switches from MC to FW,
as otherwise it takes several minutes until the estimate goes down.

AttitudeSetpoint.msg: FRD instead of NED for body frame

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

FW position control: specify modes where FW_PN_R_SLEW_MAX applies

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

VTOL tailsitter: fix motor spike to 0 when finishing front transition

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

VTOL Tailsitter: add front transition throttle blending

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

VTOL Tailsitter: fix motor spikes to 0 when starting back transition

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

VTOL Tailsitter: set differential thrust to 0 in first 50ms of front transition

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

VTOL Tailsitter: add back transition throttle blending

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

VTOL Tailsitter: treat back transition abort like a front transition

for throttle blending.

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

VTOL Tailsitter: remove throttle spike also for quad-chute

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

Rover Ackermann module (#23024)

New module handling Ackermann rover guidance and control.
Only enabled in SITL and in the rover builds for now.

platforms: nuttx: SerialImpl: fix hang if baudrate is 0 (#23238)

Update ubuntu.sh with Linux Mint 21.3 version

boards/px4/fmu-v{5,6}x: do not enable mavlink on ethernet for skynode

boards/px4/fmu-v{5,6}x: enable uxrce_dds_client on ethernet by default

boards: change default IP from 192.168.0.3 to 10.41.10.2

192.168.0.x is often used by routers for WIFI/ethernet networks, and thus
can create conflicts.
This can happen for example if a companion is connected to the …
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants