* 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.
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.
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
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.
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>
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>
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>
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>
* 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
- 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>
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.
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>
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).
- 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
2024-05-02 11:53:31 -04:00
566 changed files with 21354 additions and 9492 deletions
raiseRuntimeError("Board can accept larger flash images (%u bytes) than board config (%u bytes). Please use the correct board configuration to avoid lacking critical functionality."
%(self.fw_maxsize,fw.property('image_maxsize')))
raiseRuntimeError(f"Board can accept larger flash images ({self.fw_maxsize} bytes) than board config ({fw.property('image_maxsize')} bytes). Please use the correct board configuration to avoid lacking critical functionality.")
else:
# If we're still on bootloader v4 on a Pixhawk, we don't know if we
# have the silicon errata and therefore need to flash px4_fmu-v2
@@ -780,16 +809,13 @@ class uploader(object):
defmain():
# Python2 is EOL
ifnotrunningPython3:
raiseRuntimeError("Python 2 is not supported. Please try again using Python 3.")
# Parse commandline arguments
parser=argparse.ArgumentParser(description="Firmware uploader for the PX autopilot system.")
parser.add_argument('--port',action="store",required=True,help="Comma-separated list of serial port(s) to which the FMU may be attached")
parser.add_argument('--baud-bootloader',action="store",type=int,default=115200,help="Baud rate of the serial port (default is 115200) when communicating with bootloader, only required for true serial ports.")
parser.add_argument('--baud-flightstack',action="store",default="57600",help="Comma-separated list of baud rate of the serial port (default is 57600) when communicating with flight stack (Mavlink or NSH), only required for true serial ports.")
parser.add_argument('--force',action='store_true',default=False,help='Override board type check, or silicon errata checks and continue loading')
parser.add_argument('--force-erase',action="store_true",help="Do not perform the blank check, always erase every sector of the application space")
parser.add_argument('--boot-delay',type=int,default=None,help='minimum boot delay to store in flash')
parser.add_argument('--use-protocol-splitter-format',action='store_true',help='use protocol splitter format for reboot')
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.