Commit Graph

102 Commits

Author SHA1 Message Date
unlogisch04
ee48341c30 Feat BNO085 temp (#417)
* BNO085 add more Features and Readouts to the lib

* BNO085 add
- Experimental compiler flags for disable Calibration
- Temp Readout (all 1 sec)
- Inspection only send when updated
- added conginue as 1 imu.dataAvailable() only reads out 1 packet of data

* BNO085 add source of info
2025-04-17 19:15:47 +03:00
Meia
39545d7ae7 Remove OTA timeout (#419)
* Remove OTA timeout

* Make it toggleable from debug.h
2025-04-17 16:23:36 +03:00
gorbit99
9a6813457d Implement SensorInterfaceManager (#415)
* Implement a sensor interface manager

* Add missed return true

* Formatting
2025-04-07 00:12:05 +03:00
gorbit99
77221577ca Dynamic Sfusion Attempt 2 (#375)
* Move temperature reading into the FIFO whenever possible (no love for MPU)

* Calculate gradient and feed into VQF

* Per sensor VQF params

* Split out classic softfusion calibration

* Cleanup

* Nonblocking calibration implemented

* Oops

* Formatting

* Make sure it actually compiles

* Use calibrated ZRO values

* Fix compilation errors and warnings

* Send temperature in correct place

* Add DELCAL command

* Slightly optimize ICM45 fifo handling

* Implement time taken measurer

* Precalculate nonblocking zro change

* Adjusted debug.h

* Reduced ICM45 accel rate to 102.4Hz

* Poll sensor at the same time we send data

* I hate git again

* Undo icm45 optimization

* Don't copy memory on ICM45 reads

* Change relevant doubles to floats

* Remove unnecessary union

* Fix guards to profiler

* Move temperature reading into the FIFO whenever possible (no love for MPU)

* Calculate gradient and feed into VQF

* Per sensor VQF params

* Split out classic softfusion calibration

* Cleanup

* Nonblocking calibration implemented

* Oops

* Formatting

* Make sure it actually compiles

* Use calibrated ZRO values

* Fix compilation errors and warnings

* Send temperature in correct place

* Add DELCAL command

* Slightly optimize ICM45 fifo handling

* Implement time taken measurer

* Precalculate nonblocking zro change

* Adjusted debug.h

* Reduced ICM45 accel rate to 102.4Hz

* Poll sensor at the same time we send data

* Undo icm45 optimization

* Don't copy memory on ICM45 reads

* Change relevant doubles to floats

* Remove unnecessary union

* Fix guards to profiler

* Fixes after rebase

* Fix after rebase

* Fix formatting

* Make SPI work

* Revert "Make SPI work"

This reverts commit 92bc946eaa.

* Rename to RuntimeCalibration

* Disable profiling

---------

Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
2025-02-20 00:25:15 +03:00
Eiren Rain
cdb6e4b39f Glove (#371)
* Add calibration reading commands for BNO08X

* Disable accelerometer calibration 1 minute after start up on BNO08X

Also save dynamic calibration periodically

* Work on new sensor interface to abstract I2C hardware

* Fix compile errors

* Abstract int pin and add multiplexer libraries

* Update IMU list to use new interfaces

* Make other IMUs definable, not only BNOx

* Fix build for ESP32

* Add TPS tracking code

Rename IMU_DESC_LIST to SENSOR_DESC_LIST
Start work on many-imu glove support

* Add PCA9546A support & glove imus list

* WIP use pointers properly

* I love C++ <3

* c++ is magic

* Fix build error because of typo

* Fix warnings

* Fix pinouts and some other issues

* Fix I2C with multiplexer

* Implement sending bone position

Implement sending flex data,
Minor refactoring

* Add tracker type to the protocol

* Work on analog sensors support

* Fix build errors

* Fix rebase conflict

* Apply formatting

* Update protocol to match server

* Fix thumb bone names

* Add an important comment

* Fix protocol compatibility

* Update defines for default configuration

* Minor comments and cleanups

* Format defines

* Formatting

* Formatting with proper clang

* Fucking clang

* Minor fixes after merge

* Fix formatting

* Remove unnecessary virtual keyword

* Remove delay on I2C clear error so OTA doesn't break

* Address some of the review comments

* Fix formatting

* Minor include imporvement

* Make new defines enums

* Fix build for sfusion
2025-02-06 17:46:09 +02:00
Meia
38c180c561 Make I2Cscan non-blocking (#378)
* Make I2Cscan non-blocking

* Address suggestions

* Use portExclude again

* Re-add some comments

* It's 8 AM and I'm allowed to be stupid

* No more while(true)

* More cleanup

* ...and more

* even more!

* Thanks clang-format

* Do not scan the same port twice

---------

Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
2025-02-04 23:16:13 +02:00
Spacefish
457fe2cfc9 ESP32-C6 support (#327)
* Designate all initializer clauses to fix compiler errors with newer
compilers

* ESP32C6 support

* fshelper: fixed ESP8266 regression caused by abstracting FS access #321 (#328)

* fshelper: fixed ESP8266 regression caused by abstracting FS access #321

* Removing not needed ifdef

l0ud spotted that this is not need.

Co-Authored-By: Przemyslaw Romaniak <przemyslaw.romaniak@intel.com>

---------

Co-authored-by: Przemyslaw Romaniak <przemyslaw.romaniak@intel.com>

* Fix enabling motion bias estimation (#325)

* fix pre-processor warning

* add macro for calculating radians (#317)

* feat: add macro for calculating radians

* style: silence unused variable warning

* remove unnecessary float cast in macro

* SoftFusion sensor framework with BMI, ICM, LSM6, MPU sensor implementations (#322)

* Update readme to mention BMI270 support.

* Soft fusion sensor initial code, wip

* Soft fusion ICM-42688-P lazy WIP implementation.

* sfusion: Cleanup, implemented sensor frequency calibration

* icm42688: add more comments, basic driver (no hw filtering) should be working

* sfustion: compilation fix

* sfusion: start calibration when upside down

* cleanup: remove confusing had data flag

* sensor manager: use unique_ptr instead of raw pointers

* sfusion: big refactoring wip

* sfusion: make aux work, at least sfusion sensors should now be functional

* sfusion: lightweight implementation of BMI270 sensor, no sensitivity cal yet

* sfusion: BMI270: added CRT and gyro zx factor. should be functionally equivalent to the old driver

* Added lsm6dsv

* Trying to work around esp32c3 compilation problem, not liking that solution

* sfusion: fix problems found after rebase

* Update README.md

* Bump Arduino core to 3.0 to match GCC12

* Remove fast pin swapping that is no longer compatible with arduino core v3

* Bring back fast pin swapping

* Update platformio-tools.ini

* Fix accel timescale (calibration no longer takes forever)

* Fix non-sfusion sensors

* Added LSM6DSO and DSR support and refactored DSV support

* Removed template float param from the implementation

* sfusion: port MPU6050 driver wip, not expecting to be functional yet

* sfusion: add headers specifying main code owners

* connection: fix warning

* update README.md

* fshelper: fixed ESP8266 regression caused by abstracting FS access

* sfusion: fix error on merge

* bno080: differentiate bno080, bno085, bno086 again

* sfusion: final touches

* restore hadData functionality, implementing it in every sensor, made configured flag bno-only

* fix address supplement in non-sfusion sensors, do i2c bus reset for all sensors

* sfusion: make MPU6050 driver use normal MPU6050 ImuID, change eatSamplesAndReturn function to take ms instead of seconds

* sfusion: hotfix, don't apply sensorOffset, it's applied in sensor base

* Log FIFO overruns on LSMs

* Reset the soft watchdog while eating or collecting calibration samples

Resolves an issue where the soft watchdog would trigger.

* Fix missing word in comment, switch to constexpr

* Update esp32/esp8266

---------

Co-authored-by: Gorbit99 <gorbitgames@gmail.com>
Co-authored-by: nekomona <nekomona@nekomona.com>
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: unlogisch04 <98281608+unlogisch04@users.noreply.github.com>
Co-authored-by: kounocom <meia@kouno.xyz>
Co-authored-by: Kubuxu <oss@kubuxu.com>

* Add Haritora to consts (#333)

Add haritora consts, fix misspelling

* dont double scan i2c address on bus for ESP32C6

* add custom portmap for ESP32C6

* update to latest tasmota tools for ESP32C6

* serial over USB

* remove change that does nothing

* remove 2s wait in main.cpp it´s not required

* make it change neutral

* more change neutrality

---------

Co-authored-by: unlogisch04 <98281608+unlogisch04@users.noreply.github.com>
Co-authored-by: Przemyslaw Romaniak <przemyslaw.romaniak@intel.com>
Co-authored-by: Meia Kouno <71262281+kounocom@users.noreply.github.com>
Co-authored-by: Fredrik Hatletvedt <32248439+Pespiri@users.noreply.github.com>
Co-authored-by: Przemyslaw Romaniak <loudpl@gmail.com>
Co-authored-by: Gorbit99 <gorbitgames@gmail.com>
Co-authored-by: nekomona <nekomona@nekomona.com>
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: kounocom <meia@kouno.xyz>
Co-authored-by: Kubuxu <oss@kubuxu.com>
Co-authored-by: JovannMC <jovannmc@femboyfurry.net>
Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
2024-12-11 17:00:06 +02:00
Przemyslaw Romaniak
ea00bebedd SoftFusion sensor framework with BMI, ICM, LSM6, MPU sensor implementations (#322)
* Update readme to mention BMI270 support.

* Soft fusion sensor initial code, wip

* Soft fusion ICM-42688-P lazy WIP implementation.

* sfusion: Cleanup, implemented sensor frequency calibration

* icm42688: add more comments, basic driver (no hw filtering) should be working

* sfustion: compilation fix

* sfusion: start calibration when upside down

* cleanup: remove confusing had data flag

* sensor manager: use unique_ptr instead of raw pointers

* sfusion: big refactoring wip

* sfusion: make aux work, at least sfusion sensors should now be functional

* sfusion: lightweight implementation of BMI270 sensor, no sensitivity cal yet

* sfusion: BMI270: added CRT and gyro zx factor. should be functionally equivalent to the old driver

* Added lsm6dsv

* Trying to work around esp32c3 compilation problem, not liking that solution

* sfusion: fix problems found after rebase

* Update README.md

* Bump Arduino core to 3.0 to match GCC12

* Remove fast pin swapping that is no longer compatible with arduino core v3

* Bring back fast pin swapping

* Update platformio-tools.ini

* Fix accel timescale (calibration no longer takes forever)

* Fix non-sfusion sensors

* Added LSM6DSO and DSR support and refactored DSV support

* Removed template float param from the implementation

* sfusion: port MPU6050 driver wip, not expecting to be functional yet

* sfusion: add headers specifying main code owners

* connection: fix warning

* update README.md

* fshelper: fixed ESP8266 regression caused by abstracting FS access

* sfusion: fix error on merge

* bno080: differentiate bno080, bno085, bno086 again

* sfusion: final touches

* restore hadData functionality, implementing it in every sensor, made configured flag bno-only

* fix address supplement in non-sfusion sensors, do i2c bus reset for all sensors

* sfusion: make MPU6050 driver use normal MPU6050 ImuID, change eatSamplesAndReturn function to take ms instead of seconds

* sfusion: hotfix, don't apply sensorOffset, it's applied in sensor base

* Log FIFO overruns on LSMs

* Reset the soft watchdog while eating or collecting calibration samples

Resolves an issue where the soft watchdog would trigger.

* Fix missing word in comment, switch to constexpr

* Update esp32/esp8266

---------

Co-authored-by: Gorbit99 <gorbitgames@gmail.com>
Co-authored-by: nekomona <nekomona@nekomona.com>
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: unlogisch04 <98281608+unlogisch04@users.noreply.github.com>
Co-authored-by: kounocom <meia@kouno.xyz>
Co-authored-by: Kubuxu <oss@kubuxu.com>
2024-06-25 13:57:18 +03:00
sctanf
1ed8d63e65 Add ICM-42688 imu and MMC5983MA magnetometer (#242) 2023-09-22 17:30:25 +03:00
0forks
41f57bce5b BMI160: Fix magnetometer error check (#285)
Fix BMI160 error register checks
2023-09-22 16:11:23 +03:00
Przemyslaw Romaniak
54e5167f15 Ability to set sensor to be mandatory or not. (#282)
Ability to set sensor to be mandatory or not. Adjusted ESP32C3 workaround.
2023-09-18 22:34:39 +03:00
Przemyslaw Romaniak
6144f01799 BNO080: Try to handle reset better (#268) 2023-09-18 17:04:18 +03:00
Przemyslaw Romaniak
b7e87bd543 ESP32C3 stability improvements (#265) 2023-09-18 17:03:10 +03:00
nekomona
9991412efe Unifying Sensor Fusion Code to Abstract Between Sensors And Fusion Algorithms (#248)
Co-authored-by: DevMiner <tobigames200@gmail.com>
2023-07-28 20:58:43 +03:00
Eiren Rain
fe6c25316d Minor firmware refactoring (#250) 2023-07-02 14:34:13 +03:00
Ryan Butler
ab6d42642c Added unenforced autoformatter (#235) 2023-05-16 18:14:45 +03:00
Alice King
34870e08f3 Add support for new variants of BMI160 (#243) 2023-05-16 18:14:07 +03:00
0forks
56848cc2a2 Improved BMI160 support (#220) 2023-03-25 01:37:58 +03:00
Ryan
62ee873dfd Adjusted startup sequence of BNO08X sensors to be more flexible regar… (#223) 2023-01-25 13:25:54 +02:00
Kitlith
65df578bfc Make magneto take a constant amount of memory, regardless of the number of samples. (#200) 2023-01-19 01:12:28 +03:00
Eiren Rain
cb188cfd7a Fix tests 2022-12-25 21:21:38 +01:00
unlogisch04
9d93df6e6a ESP32-C3 integration (#178) 2022-09-13 03:19:00 +03:00
unlogisch04
509622ba50 fixing error on ESP32 using BMI160 (#179) 2022-07-19 00:01:56 +03:00
Ryan Butler
6886e11054 Fix esp32c3 build (#163) 2022-07-04 02:28:12 +03:00
Inku Xuan
fcbd4ff911 Fix MPU-6500 cannot connect (#173) 2022-07-04 00:45:57 +03:00
Yury
aac00d813d Update i2cdev lib (#157)
* Update I2Cdev library
2022-06-28 20:08:00 +03:00
Eiren Rain
44a9c55413 Merge pull request #135 from LETS-BEE/main
MPU9250: Calibration Routine Optimization
2022-03-31 16:54:34 +03:00
unlogisch04
b0b264479a Using avr/pgmspace for ESP8266 for DMP 2022-03-31 04:28:13 +02:00
LETBBI
52f1010e17 Calibration routine optimization
and fix register in MPU9250 library
2022-03-30 00:27:37 +09:00
LETBBI
befeb3e972 Fix MAG Device ID 2022-03-29 00:34:26 +09:00
Eiren Rain
58638027d2 Report last error for BNO08X if it times out 2022-03-05 20:09:07 +02:00
Yury
9a00c6ba67 Improve CalculateCalibration
* Allocate long-living arrays on heap and deallocate them ASAP
* Scope short-living arrays and variables to deallocate them from stack ASAP
* Refactor code to avoid unused variables and better variables reuse
2022-02-27 02:34:15 +03:00
Yury
51f21dca40 Remove unused variables, init arrays 2022-02-27 02:30:54 +03:00
LETBBI
550c59f457 Communicate mag as I2C slave 2022-02-24 00:46:45 +09:00
Kamilake
2738cc2b7b Clean up Serial log 2022-02-16 08:40:24 +09:00
LETBBI
0f9deb3762 MPU9250 : Add FIFO Corrupted
and return DMP's gyro setting. that was wrong.
2022-02-08 00:29:21 +09:00
LETBBI
fbd74e9a97 Fix dmp sample rate 2022-02-05 23:34:56 +09:00
Yury
a80534e144 Use inverse square root function with better precision 2022-02-03 12:49:25 +03:00
Yury
8e1bba7633 Refactor mahony functions 2022-02-03 12:49:15 +03:00
Eiren Rain
2e88f06aae Merge branch 'main' of https://github.com/ThreadOfFate/SlimeVR-Tracker-ESP-ICM20948 into ThreadOfFate-main
# Conflicts:
#	src/consts.h
#	src/defines.h
#	src/main.cpp
#	src/sensor.h
2022-02-02 19:07:54 +02:00
Yury
cacbc47651 Use strict device ID check for MPUs 2022-02-02 18:52:33 +03:00
LETBBI
6f3feae76e Change testConnection function
getDeviceID() > 0; to
getDeviceID() == 0x71;
2022-02-01 21:30:21 +09:00
LETBBI
7f797d035c Fix mahony param 2022-02-01 18:29:39 +09:00
LETBBI
2f2d23e27c Change mahony filter code and Orientations of axies
see https://github.com/jremington/MPU-9250-AHRS
2022-02-01 18:24:07 +09:00
LETBBI
b5374035e5 Merge remote-tracking branch 'upstream/main' into upstream_code 2022-02-01 17:55:34 +09:00
LETBBI
dd923a77e8 upgrade DMP 4.1 to 6.12 with raw mag
Original SilmeVR-Tracker-ESP code. but add something
2022-01-31 20:50:21 +09:00
LETBBI
3599b23d9d Merge remote-tracking branch 'upstream/main' into upstream_code 2022-01-31 20:29:34 +09:00
Yury
0830faf9ef Fix compilation with multiple usage of magneto library 2022-01-31 14:14:34 +03:00
Yury
d12cca6e03 Add BMI160 support 2022-01-31 14:14:19 +03:00
Boronare
02a7f354c2 fix ESP32 define errors 2022-01-30 20:01:47 +09:00