Commit Graph
835 Commits
Author SHA1 Message Date
Daniel Agar 39a33a35ae sensors/vehicle_imu: pause computing publication update rate 2020-06-07 11:23:22 -04:00
Daniel Agar 786733cd1a sensors/vehicle_imu: only publish status at 10 Hz (or on change) 2020-06-07 11:23:22 -04:00
Daniel Agar 8890ea23b7 sensors/vehicle_imu: only apply corrections once before publication 2020-06-07 11:23:22 -04:00
Daniel Agar 31fe7af454 selectively increase optimization -Os -> -O2
- targetted at modules/libraries that benefit without drastically
increasing flash usage
 - ignored on boards with CONSTRAINED_FLASH set
2020-06-04 20:59:52 -04:00
Beat Küng 32642b78bf gyro filtering: apply IMU_GYRO_CUTOFF also to D-term
Greatly improves the noise on the d-term on a Kopis 2. Apparently the order
of filtering vs differentiating matters.

Also disables the DGYRO filter by default, as the D-term now already has
a default filter of 30Hz applied.
2020-06-04 20:58:40 -04:00
Daniel Agar a9dacae57e sensors/vehicle_angular_velocity: limit scheduling to IMU_GYRO_RATEMAX 2020-06-01 15:08:50 -04:00
Daniel Agar 96f043cd62 sensors/vehicle_acceleration: limit scheduling to IMU_INTEG_RATE 2020-06-01 15:08:50 -04:00
Daniel Agar b139f48fef sensors: throttle mavlink emergency log messages
- in rare situations sending these messages multiple times in close succession can actually cause a loop of additional sensor timeouts
2020-06-01 11:25:12 -04:00
Daniel Agar 51a36f0b61 sensors/vehicle_imu: improve initial sensor interval monitoring
- add perf counters for monitoring
2020-05-31 21:41:37 -04:00
Daniel Agar e34bdb4be9 move IMU integration out of drivers to sensors hub to handle accel/gyro sync
- IMU integration move from drivers (PX4Accelerometer/PX4Gyroscope) to sensors/vehicle_imu 
 - sensors: voted_sensors_update now consumes vehicle_imu
 - delete sensor_accel_integrated, sensor_gyro_integrated
 - merge sensor_accel_status/sensor_gyro_status into vehicle_imu_status
 - sensors status output minor improvements (ordering, whitespace, show selected sensor device id and instance)
2020-05-30 11:07:54 -04:00
Daniel Agar 2bbdef205e sensors/vehicle_angular_velocity: don't remove bias twice 2020-05-10 15:30:37 -04:00
Daniel Agar ec2cd3b1be sensors: use sensor_gyro timestamp_sample for sensor_combined timestamp
The timestamp actually used by ekf2 is the sensor_combined timestamp, so we should be setting it with the actual data sample timestamp, rather than the aggregated sensors topic publication metadata.

Later the sensor_combined message will be replaced with vehicle_imu that carries a separate publication timestamp and raw sample timestamp.
2020-05-10 15:24:32 -04:00
Daniel Agar b5e25c2218 sensors: checkFailover() remove verbose failure messages
- in certain circumstances this additional logging can actually cause
further timeouts and failure
2020-05-06 09:31:09 -04:00
Daniel Agar 29f4fca7bf sensors: failover don't print remaining disabled sensors 2020-05-06 09:31:09 -04:00
Daniel Agar 692aaada31 sensors: refresh parameters on sensor init 2020-05-06 09:31:09 -04:00
Daniel Agar cb180427cd sensors: inconsistency checks explicitly skip disabled 2020-05-06 09:31:09 -04:00
Daniel Agar ca998c1822 IMU: parameterize IMU integration time (IMU_INTEG_RATE)
- default integration rate now 200 Hz (5000 us interval)
 - set update rate for all drivers and simulators using PX4Accelerometer/PX4Gyroscope
2020-05-05 20:34:09 -04:00
Daniel Agar 466b5db36f uORB::Publication improvements and cleanup (#14784)
- create common uORB::PublicationBase
 - uORB::PublicationQueued types are now type aliases
 - ORB_PRIO use enum type everywhere to avoid accidental misuse
 - PX4Accelerometer/PX4Gyroscope/etc driver libs explicitly advertise on construction, unadvertise on destruction. This is a workaround for any potential issues that might appear when accel/gyro cdev and uORB indexing doesn't align.
2020-05-04 11:09:30 -04:00
baumanta 48cf38d623 support mag power compensation with battery_status instance 1 2020-04-28 08:36:44 +02:00
Daniel Agar 326d8efc16 move attitude controllers to new wq:attitude_ctrl 2020-04-27 21:34:35 -04:00
Daniel Agar 7b4f6b6918 sensors/vehicle_angular_velocity: check filter based on time threshold instead of samples
- fixes #14303
2020-04-11 16:07:11 -04:00
Daniel Agar cf37be8c44 ekf2 handle accelerometer clipping
- track clipping per IMU axis and pass through to ecl/EKF
 - update ecl/EKF to include delta velocity clipping changes (PX4/ecl#663)
2020-04-07 20:11:08 -04:00
Daniel Agar aa2f3a6624 sensors: complete move to uORB::Subscription 2020-04-01 16:17:14 -04:00
baumanta 22ceeccc26 add library for current- or thrust-based mag compensation 2020-03-26 08:00:30 +01:00
SalimTerryLi dc8e775d8f ADC: replace ioctl with uorb message (#14087) 2020-03-20 11:23:32 +01:00
Daniel Agar 0eca583ecf sensors: move baro aggregation to new sensors/vehicle_air_data 2020-03-12 19:06:34 -04:00
Daniel Agar 093e9ba1ce mc_rate_control: use vehicle_angular_acceleration topic instead of differentiating
* mc_rate_control: use vehicle_angular_acceleration topic
* IMU_DGYRO_CUTOFF change default to 30 Hz
* improve IMU_DGYRO_CUTOFF param documentation (updated from MC_DTERM_CUTOFF)
2020-03-12 15:07:03 -04:00
Daniel Agar 9cd8bb4f88 sensors: move to WQ
Running the sensors module out of the same WQ thread as the estimator, position, and attitude controllers is a bit safer and prevents potential priority and starvation issues. There is a very small increase in latency (~50 us) between sensors and ekf2 execution (on average). This also saves a little bit of memory (~ 3 kB) and cpu (~1-1.5% depending on the board).
2020-03-11 11:34:04 -04:00
Beat Küng 3fef401e81 uorb callbacks: fix unregister ordering to avoid race conditions
The order should be: first unregister, then remove the item from the
runnable queue.
2020-03-09 08:06:00 -04:00
Daniel Agar d7c3e1066a uavcannode updates and px4_fmu-v4_cannode example
- drivers/uavcannode add baro, mag, gps publications
 - delete old px4_cannode-v1 board
 - add stripped down simple rcS for CAN nodes
2020-02-16 12:11:54 -05:00
Daniel Agar 8df22541ef sensors: filter sample rate calculate with simple interval average instead of perf count
- the perf counter intervals aren't numerically stable over extended periods (https://github.com/PX4/Firmware/pull/14046)
2020-02-07 13:04:02 -05:00
Daniel Agar 36c6e36b9d sensors: refactor common corrections and rotation code 2020-02-04 09:44:40 -05:00
Daniel Agar 2410b31662 sensors: move accel filtering to sensors/vehicle_acceleration
I've added a queue depth of 4 for sensor_accel and sensor_gyro. This is initially added because it's not always possible for the `vehicle_acceleration` to keep up with every publication of the primary accelerator as it runs in the same thread as ekf2, various controllers, etc. 

Later this mechanism will be used in a few areas
 - rate limit `vehicle_angular_velocity` and `vehicle_acceleration` without missing any raw data
 - move IMU integration to `vehicle_imu` and out of the actual driver threads, eliminating the need for sensor_accel_integrated and sensor_gyro_integrated
 - integrate raw gyro synchronized with optical flow measurements
2020-01-29 16:13:38 -05:00
Daniel AgarandJulien Lecoeur 1237402fa4 sensors: compute and publish vehicle_angular_acceleration
- introduces parameter IMU_DGYRO_CUTOFF to configure the angular acceleration low pass filter
 - the angular acceleration is computed by differentiating angular velocity after the notch filter (IMU_GYRO_NF_FREQ & IMU_GYRO_NF_BW) is applied

Co-authored-by: Julien Lecoeur <jlecoeur@users.noreply.github.com>
2020-01-27 16:44:01 -05:00
Daniel Agar 24f0c2d72a sensors: move gyro filtering to sensors/vehicle_angular_velocity
- gyro filtering (low-pass and notch) only performed on primary gyro in `sensors/vehicle_angular_velocity` instead of every gyro in `PX4Gyroscope`
 - sample rate is calculated from actual updates (the fixed value was slightly wrong in many cases, and very wrong in a few)
 - In the FIFO case the array is now averaged and published in `sensor_gyro` for filtering downstream. I'll update this in the future to use the full FIFO array (if available), but right now it should be fine.
2020-01-27 10:05:33 -05:00
Daniel Agar 10410fc868 msg: rename sensor_bias -> estimator_sensor_bias 2020-01-27 09:03:27 +01:00
Daniel Agar 697dbfb9f8 sensors/vehicle_imu: incremental step towards multi-EKF 2020-01-22 18:04:29 -05:00
Daniel Agar dc05ceaad2 create temperature_compensation module
- this is a new module for temperature compensation that consolidates the functionality previously handled in the sensors module (calculating runtime thermal corrections) and the events module (online thermal calibration)
 - by collecting this functionality into a single module we can optionally disable it on systems where it's not used and save some flash (if disabled at build time) or memory (disabled at run time)
2020-01-20 21:42:42 -05:00
Daniel Agar bb465ca5b7 sensor accel/gyro message cleanup
- split out integrated data into new standalone messages (sensor_accel_integrated and sensor_gyro_integrated)
 - publish sensor_gyro at full rate and remove sensor_gyro_control
 - limit sensor status publications to 10 Hz
 - remove unused accel/gyro raw ADC fields
 - add device IDs to sensor_bias and sensor_correction
    - vehicle_angular_velocity/vehicle_acceleration: check device ids before using bias and corrections
2020-01-18 01:15:00 -05:00
Daniel Agar de4f594937 DriverFramework purge
The bulk of this change was tightly coupled and needed to be deleted in one pass. Some of the smaller changes were things that broke as a result of the initial purge and subsequently fixed by further eradicating unnecessary platform differences. Finally, I deleted any dead code I came across in the related files I touched while going through everything.

 - DriverFramework (src/lib/DriverFramework submodule) completely removed
 - added dspal submodule in qurt platform (was brought in via DriverFramework)
 - all df wrapper drivers removed
 - all boards using df wrapper drivers updated to use in tree equivalents
 - unused empty arch/board.h on posix and qurt removed
 - unused IOCTLs removed (pub block, priv, etc)
 - Integrator delete methods only used from df wrapper drivers
 - commander: sensor calibration use "NuttX version" everywhere for now
 - sensors: update to px4_{open, read, close} instead of DevMgr wrapper (adc open for analog differential pressure)
 - battery_status: update to px4_{open, read, close} instead of DevMgr wrapper (adc open for analog differential pressure)
 - cdev cleanup conflicting typedefs and names with actual OS (pollevent_t, etc)
 - load_mon and top remove from linux boards (unused)
 - delete unused PX4_MAIN_FUNCTION
 - delete unused getreg32 macro
 - delete unused SIOCDEVPRIVATE define
 - named each platform tasks consistently
 - posix list_devices and list_topics removed (list_files now shows all virtual files)
2020-01-13 14:07:03 -05:00
Daniel Agar ceec0238c4 replace mag_report with sensor_mag_s 2020-01-10 12:15:18 -05:00
Mathieu Bresciani 5adf23a6a8 Add gyroscope notch filter - IMU_GYRO_NF_(FREQ|BW)
* NotchFilter: add NotchFilter template and test for float type
* NotchFilterTest: add test for Vector3f notch filter
* PX4Gyroscope: add notch filter with IMU_GYRO_NF_(FREQ|BW) parameters to
set the notch center frequency and bandwidth
2020-01-06 16:53:36 -05:00
Matthias Grob 904ab16558 Fix trailing whitespace, EOF newline, indentation 2019-12-09 13:22:19 +01:00
Timothy Scott 993fa5bd37 Refactored to work with new battery_status module 2019-12-05 16:38:04 +01:00
Timothy Scott d7bb5d46bb Created new AnalogBattery class 2019-12-05 16:38:04 +01:00
Timothy Scott bff1df7080 Refactored battery library for multiple instances 2019-12-05 16:38:04 +01:00
Beat Küng b973b2ca64 mag calibration: improve 4 and 2 side calibration
- if less than 6 sides are calibrated, keep the existing calibration and
  update the offsets and scales
- if 2 sides are calibrated, estimate the offsets only (as this is enough
  if a full calibration was done already, and the problem is not
  constrained enough to estimate scales and offsets)
2019-11-29 14:14:00 -05:00
Beat Küng 5ff83ef740 gyro calibration: remove unused scale parameters 2019-11-29 11:28:17 -05:00
Daniel Agar bc182e94e6 sensors split rc_update into new standalone module 2019-11-24 13:25:11 -05:00
Mohammed Kabir 00d00fdca9 drivers: heater: fix module build and startup
- Startup was broken due to unnecessary cyclic check probably introduced during transition to work_queues
- Module never used other than on Teal One which had a hacky heater input GPIO, this enables usage on general boards

drivers: heater: reduce verbosity and simplify commandline options

- We prefer the linux way of only reporting errors and staying quiet when everything is functioning as designed
- Most of the commandline options just read out the values of the system parameters, and one can just check the parameter values directly.

sensor_params: make thermal control parameters system parameters

heater_params: make thermal control parameters system parameters

drivers: heater: remove pin control hacks

- px4_arch_configgpio(GPIO_HEATER_OUTPUT) directly inits the heater pin to OFF, and as a PUSHPULL (TTL totem pole) OUTPUT

drivers: heater: set default device ID to 0
2019-11-16 11:43:42 +01:00