The RTL sequence from the navigator requires the vehicle to land. This is now handled for rovers by setting its state to landed if it is within the acceptance radius of the home position when in return mode.
Special handling for LAND mode: always allow to switch into it such that if used
as emergency mode it is always available. When triggering it the user generally wants
the vehicle to descend immediately, and if that means to switch to DESCEND it is fine.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
I could not extract the open_drone_id helpers to a separate lib because
it would require the mavlink headers while the mavlink library would
also depend on it, so it ended up being a circular dependency.
Instead, I'm now just using the headers from within the mavlink module
as well as from the uavcan driver.
This will send the System message if it is already being sent by a ground
station. Otherwise, it will assemble the message itself using the
takeoff/home location.
This extracts the function mapping from MAV_TYPE to MAV_ODID_UA_TYPE to
the library, so that it can be re-used later by the remote ID
implementation over DroneCAN.
Signed-off-by: Julian Oes <julian@oes.ch>
Improve the slow down effect and add support for speed change in mission mode.
Seperate code related to turning setpoints into motor commands into its own folder and refactor code.
- default to v0.0.0 if tag isn't available
- src/lib/px_update_git_header.py use same PX4_GIT_TAG as cmake
- update lingering master branch references to main
This is similar to fake pos but is only used when the ekf has an
external information telling it that the vehicle is not changing
position. This information can then be used to keep a valid local
position even when the vehicle isn't exactly at rest.
For many failsafes, it is possible to select RTL and Land as actions.
In this commit I synchronize the clear condition for these two action
options, to always only clear on Disarm or manual mode change.
Reasoning is that for the user RTL and Land is a similar action and
I would thus expect them to be as similar as possible. And I in general
would rather not clear a failsafe state instead of too often clearing it.
Example: GF failsafe with action Land --> even if the drone is marginally
within the GF again, I want it to proceed with the Landing unless
I manually intervene.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
It previously didn't catch switches to Descend from a manual mode,
as both modes have navigation_mode_new=nullptr.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
* Update pab_manifest.c
I have rebased on main and squash my commits into 1.
* Update pab_manifest.c
I have updated pab_manifest.c:
// BASE ID 0x150 ZeroOne Pixhawk Baseboard Alaised to ID 0
{HW_BASE_ID(0x150), base_configuration_0, arraySize(base_configuration_0)}, // ZeroOne Pixhawk Baseboard ver 0x150
* FeasibilityChecker: only warn when first waypoint is too far, but still accept mission as valid
* feasiblityChecker: make distance to first waypoint check against home position instead of current position, so it is more constant during a flight
* Apply suggestions from code review
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
* feasibilityCheckerTest: update tests to not fail for first waypoint check
* feasibilityChecker: make comment for 1stwaypointcheck event
* Feasibility check unit test: fix comment
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
---------
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
As the sensor can directly report the amount of samples in the fifo, use it to simplify the logic.
Also combine the fifo empty/fifo overflow checks for interrupt and polling modes.
Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
If DRDY signal is used, the interrupt status needs to be cleared at FIFO reset
in order to make DRDY go back inactive. Otherwise there won't be a falling edge
interrupt at the next sample.
Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
* Fix: replay the mission cached items only upon reaching resume waypoint
* Refactoring
Split camera mode mission items from gimbal ones so to have a finer control over the relative replays
* Chore: fix formatting
---------
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
* Remove euler angles from attitude setpoint message
* Remove usage of euler angles in attitude setpoint messages
This commit removes the usage of euler angles in the vehicle_attitude_setpoint messages
* Fix standard vtol
This adds explicit handling for the few things we want to allow through a MAVLink instance dedicated to a gimbal/(camera) payload as per the MAVLink gimbal mode configuration.
This resets the USARTs' clock source selection to the default, in case
it has been changed by the bootloader.
This is required if booting from the ArduPilot bootloader which happens
to reset the clock selection to PLL.
Without this fix, UARTs (including the console) is garbled, so
presumably at an invalid baudrate.
* gnss: update supported baud rates
The Septentrio GNSS driver requires certain baud rates to test all the
supported baud rates of the receiver. Without these changes, certain
"non-standard" ones would print an error to the MAVLink console when the
driver was started through the console.
* platforms: add missing baudrate defines
---------
Co-authored-by: Thomas Frans <franske2000@gmail.com>
Co-authored-by: Julian Oes <julian@oes.ch>
- the module documentation parser can only resolve defines from the same file
- also it cannot deal with defines embeded in strings
- what board should it add for the general documentation anyways?
As a result of these issues I suggest to stay with the original hardcoded
/fs/microsd for the documentation. It's still the most common path as far as
I can see.
We've come accross a case where a ROS node would consistently take something
over 800 ms until the first arming check request subscription callback was
triggered.
After the first sample, the callback always triggered within the expected
timeframe.
Therefore this patch allows for more time right after registration until
timing out.
* Update Zenoh-pico from 0.7.0 to 1.0.0
* Update the zenoh-pico version to use PX4/dev/1.0.0-px4
* Remove the rostopic and rt/ prefix
* Unlike zenoh-bridge-dds we were using, zenoh-bridge-ros2dds is now adding the rt/ prefix automagically.
Avoid flying into terrain using the distance sensor.
Enable through the parameter NAV_MIN_GND_DIST.
Only active during commanded descents with vz>0 (to prevent climb-aways),
excluding landing and VTOL transitions.
It changes the altitude setpoint in the triplet to maintain the current altitude
and republish the triplet. We also change the mission item altitude used for
acceptance calculations to prevent getting stuck in a loop.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
battery failures can occur upon arming when the load gets sgnificant.
In that case the safest thing to do is prevent a takeoff before anything
worse happens.
The wind variance can be reset to a value larger than the wind init
variance (e.g.: when the reset occurs when flying close to the N or E
axis). Constraining the variance after a covariance initialization would
artificially increase the correlation and could destabilize the filter.
* added support for resetting wind states to external observation
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* moved wind related functions into separate file
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* added VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* correctly compute variances
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* ekf2: implement wind reset
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* only allow VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE during wind dead-reckoning
and increase horizontal velocity variance to allow velocity states to move
towards solution that is aligned with the newly set wind
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* only reset wind on ground
* still use wind reset using airspeed when it wasn't initialized
* exclude func for rover, change reset interface
* handle wind reset in drag-fusion
* replace state reset with variance reset in sideslip/drag fusion
* remove resetWind function
---------
Signed-off-by: RomanBapst <bapstroman@gmail.com>
Co-authored-by: Marco Hauswirth <marco.hauswirth@auterion.com>
- remove commander test ratio "tuning knobs" (COM_ARM_EKF_{HGT,POS,VEL,YAW})
- these are effectively redundant with the actual tuning (noise & gate)
in the estimator, plus most users have no idea why they'd be
adjusting these other than to silence an annoying preflight complaint
- remove ekf2 "PreFlightChecker" with hard coded innovation limits
- ekf2 preflight innovation flags are now simply if any active source
exceeds half the limit preflight
Also, as the flow makes the link between range and horizontal velocity,
only allow it to start if at least one of the two is known. Otherwise
the EKF will struggle to estimate both values at the same time.
* BMP581: Add Bosch BMP581 barometer
* Copyright:fix copyright header year
* style: not use pointers and Bool returns, Check the failed condition return
* delay: Replace usleep() with ScheduleDelayed()
* definitions: Delete unused definitions
* comment: Delet redundant comments
* constants: Change to uppercase
* BMP581: run make format
* estimator gps check fail flag for spoofing
* warn whenever spoofing state changes to true, use default hysteresis to completely stop fusion
* dont introduce more GPS namings, GNSS instead
* flash: exclude mantis for cuav_x7pro
- previously we could get stuck with optical flow still technically
active (_control_status.flags.opt_flow=true), but nothing being
updated due to excessive tilt, etc
- collapse updateOptFlow() and startFlowFusion() to avoid recomputing H
- this is a relatively expensive call we can easily avoid with the
right structure
- adjust flow sample gyro_rate immediately after popping from ring
buffer
- always update flow gyro bias (calcOptFlowBodyRateComp()) regardless
of flow quality or magnitude
* lib: add FilteredDerivative class
* AirspeedValidator: add first principle check
- filters throttle, pitch and airspeed rate, and triggers
if the airspeed rate is negative even though the vehicle
is pitching down and giving high throttle.
Check has to fail for duration defined by ASPD_FP_T_WINDOW
to trigger an airspeed failure.
* AirspeedValidator: define constants for first principle check
* FilteredDerivative: set initialised to false if sample interval is invalid
* airspeed_selector: improved comment
* increase IAS derivative filter time constant from 4 to 5
* use legacy parameter handling for FW_PSP_OFF
* handle FW_THR_MAX as well
* ROMFS/airframes: exclude some airframes for v6x and v4pro to save flash on them
---------
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Signed-off-by: RomanBapst <bapstroman@gmail.com>
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
* reset position by fusion
* handle local_pos_valid for fixed wing in gnss denied
* [WIP] ekf2: setEkfGlobalOrigin respect current height reference and vertical position aiding
* global origin, also reset vertical pos without gps as ref
* fix wo gnss, that bitcraze ci passes
* revert some changes as requested
* remove duplicate reset messages
* undo unrelated whitespace changes, I'll fix it everywhere in a followup
* [SQUASH] ekf2: add vehicle_command_ack
* resetGlobalPosToExternalObservation consolidate logic
* remove gnss check from local_pos validation check
* reset when 0<accuracy<1, otherwise fuse
* replace gps param with flag
* ekf2: dead reckon time exceeded, respect ZUPT preflight if air data or optical flow expected
* subtract timeout from last inertial dead-reck, change fake pos conditions, save flash
---------
Co-authored-by: Daniel Agar <daniel@agar.ca>
Pulls cell count, min voltage and max voltage from log file but still allows for over-rides. Also added debug info to tell user what what it found in the log and what it is using
Co-authored-by: chfriedrich98 <125505139+chfriedrich98@users.noreply.github.com>
Heading offset was configured as radians but should be configured as
degrees on Septentrio receivers. The parameter was already in degrees
but the configuration logic was changing it into radians. Also allow the
entire allowed range of heading offset values for Septentrio receivers.
The documentation for `SEP_DUMP_COMM` was quite unclear and users had to
use the user guide to find out what exactly it did. The new
documentation tries to make the purpose clearer.
This fixes an incorrect check of the device paths during instantiation
of the Septentrio driver that caused the driver to start and not print
an error message.
- track accel clipping count per axis
- only set bad_acc_clipping fault_status if at least one axis is
clipping continuously or if all have been clipping at warning level
- Note: this doesn't impact the clipping projections that boost the
accel process noise, pause bias estimation, and skip gravity fusion
on a per sample basis
- Fixes matplotlib version expression from ">=3.0.*" ro ">=3.0" which is the right syntax
Fixes issue #23329
Co-authored-by: lee wonwoo <leewonwoo@leeui-MacBookPro.local>
We had a case where someone took off with an experimental
system with 100% RAM usage on the embedded system
without noticing. This lead to problems during flight.
Since we already have a CPU load check it seems natural
to also check the reported RAM usage.
- new parameter EKF2_LOG_VERBOSE to enable (currently enabled by default)
- force advertise topics immediately (based on EKF2_LOG_VERBOSE and per aid source configuration)
- logger optionally log all estimator topics at minimal rate
When using optical flow for terrain aiding, we cannot assume that the
terrain estimate is valid if flow is fused as is can only be observed
during motion. When no direct observation is available, the terrain is
assumed to be valid if its 1sigma uncertainty is < 10% of the hagl.
Terrain is the state: terrain vertical position
Hagl (height above ground level) is the vertical distance between the
vertical position and the terrain vertical position
* mission: skip a vtol takoff mission item if already in air and a fixed wing
* MissionBase: also skip FW takeoff when already in-air
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
* mission: use setNextMissionItem to skip vtol takeoff when already in air
* mission: Only skip the VTOL takeoff in air for mission and rtl mission
If flying RTL mission reverse it must still include the takeoff point.
---------
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
Without this flag the command silently succeeds even though the logs contains
an error. It's much more developer friendly to fail early in case of an error.
The log path is then also shown in the console output.
- MPC_VEL_LP: new velocity first order low pass filter (off by default)
- MPC_VEL_NF_FRQ/MPC_VEL_NF_BW: new velocity notch filter (off by default)
- MPC_VELD_LP: existing velocity derivative low pass filter, but I've dropped the remaining controllib usage
The case where the airframe maintainer wants to enforce a reset to airframe is
not covered anymore with the `param set-default` mechanism. For products based
on PX4 this is still required to ensure proper functionality after a major update.
Having a generic interface over the GPS drivers makes dedicated
functionality for each driver harder. Move the Septentrio driver into
its own module under the `gnss` driver directory, and let it have its
own parameters for only the functionality it requires. This also helps
with adding new features because they only need to be implemented for
the driver that wants it, simplifying testing.
- these are old RC switch configuration parameters that haven't been used for
years, but were hardcoded into old versions of QGC
- RC_MAP_RATT_SW, RC_MAP_POSCTL_SW, RC_MAP_ACRO_SW, RC_MAP_STAB_SW, RC_MAP_MAN_SW deleted
-
* ist8310: do reset before WHOAMI call
Apparently, the IST8310's WHOAMI register is writeable. Presumably, this
can get corrupted by bus noise. It is only reset if powered off for 30s.
Therefore, we do a reset before doing the WHOAMI.
* ist8310: improve comment
Co-authored-by: Beat Küng <beat-kueng@gmx.net>
---------
Co-authored-by: Beat Küng <beat-kueng@gmx.net>
Compared to GNSS, alternate position observation methods are less accurate
and thus generally not good enough to do airspeed validation with.
Airspeed validation is thus disabled if no GNSS fusion is happening.
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
* AirspeedValidator: remove additional one second of hysteresis for triggering
innovation checks
- this check already uses an integrator and so adding more delay just makes
log analysis more difficult and does not really add any value
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* removed unnecessary conditions
Signed-off-by: RomanBapst <bapstroman@gmail.com>
* AirspeedValidator: only disable innov checks if ASPD_FS_INTEG is negative
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
* get rid of unnecessary check on innovation threshold parameter
Signed-off-by: RomanBapst <bapstroman@gmail.com>
---------
Signed-off-by: RomanBapst <bapstroman@gmail.com>
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
This fixes various edge cases when input is set to both: RC and
MAVLink gimbal protocol v2.
Specifically:
- We no longer immediately reset primary control if there is no update,
otherwise this will reset immediately after an commands.
- Talking of commands: GIMBAL_MANAGER_CONFIGURE no longer switches
control to MAVLink but only an actual incoming setpoint command does.
- And incoming setpoint command only triggers UpdatedActiveOnce which
means we will check RC again afterwards and if there is big movement
switch back to RC. That's the intuitive thing to do until we have
better reporting about who/what is in control.
- Also, with RC we no longer always set us to be in control but only on
major movement.
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 FMU via
ethernet and at the same time connects to a WIFI network as DHCP client.
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.
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>
- 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
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`.
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.
2024-06-03 13:28:12 +02:00
1057 changed files with 34732 additions and 14840 deletions
# All other targets are handled by PX4_MAKE. Add a rule here to avoid printing an error.
%:
$(if$(filter $(FIRST_ARG),$@), \
$(error "Make target $@ not found. It either does not exist or $@ cannot be the first argument. Use '$(MAKE)help|list_config_targets' to get a list of all possible [configuration] targets."),@#)
$(error "Make target $@ not found. It either does not exist or $@ cannot be the first argument. Use '$(MAKE) list_config_targets' to get a list of all possible [configuration] targets."),@#)
# Print a list of non-config targets (based on http://stackoverflow.com/a/26339924/1487069)
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.