Skip to content

Commit

Permalink
Updating IMU comparison and schematics (#312)
Browse files Browse the repository at this point in the history
* Update schematics.js

* Update tracker-schematics.md

* Added 3 IMUs to tracker schematics

* Updated IMU comparisons with new info and more IMU's

* Updated IMU comparisons

* Update src/diy/imu-comparison.md

Co-authored-by: Eiren Rain <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Eiren Rain <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Eiren Rain <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/imu-comparison.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/tracker-schematics.md

Co-authored-by: Meia <[email protected]>

* Update src/diy/tracker-schematics.md

Co-authored-by: Meia <[email protected]>

* Updated BMI270 as not experimental

* Updated IMU comparison prices as i forgot to convert from EUR to USD. Also added new IMUs to components guide

---------

Co-authored-by: Aed <[email protected]>
Co-authored-by: Eiren Rain <[email protected]>
Co-authored-by: Meia <[email protected]>
  • Loading branch information
4 people authored Dec 6, 2024
1 parent 3aa2052 commit 815f589
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 42 deletions.
35 changes: 28 additions & 7 deletions src/assets/js/diy.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,30 +21,51 @@
{
'name': 'BNO085',
'amount': (set) => set,
'cost': 12,
'costAll': (set) => set * 12 + 6,
'links': '<a href="https://shop.slimevr.dev/products/slimevr-imu-module-bno085">Official SlimeVR BNO085</a> or <a href="https://www.mouser.com/c/?q=BNO085">Adafruit BNO085</a>.'
'cost': 11,
'costAll': (set) => set * 11 + 6,
'links': '<a href="https://shop.slimevr.dev/products/slimevr-imu-module-bno085" target="_blank">Official SlimeVR BNO085</a> or <a href="https://www.mouser.com/c/?q=BNO085" target="_blank>Adafruit BNO085</a>.'
},
{
'name': 'LSM6DSV',
'amount': (set) => set,
'cost': 8.47,
'costAll': (set) => set * 8.47 + 5.45,
'links': '<a href="https://moffshop.deyta.de/products/lsm6dsv-module" target="_blank">Moffshop LSM6DSV</a>.'
},
{
'name': 'ICM-45686',
'amount': (set) => set,
'cost': 6.35,
'costAll': (set) => set * 6.35 + 6.35,
'links': '<a href="https://store.kouno.xyz/products/icm-45686-module">KOUNOLAB ICM-45686</a>, <b>experimental</b>.'
},
{
'name': 'LSM6DSO',
'amount': (set) => set,
'cost': 3.71,
'costAll': (set) => set * 3.71 + 6.35,
'links': '<a href="https://shop.slimevr.dev/products/slimevr-imu-module-bno085">KOUNOLAB LSM6DSO</a>, <b>experimental</b>.'
},
{
'name': 'BMI270',
'amount': (set) => set,
'cost': 2.71,
'costAll': (set) => set * 2.71 + 5.45,
'links': '<a href="https://store.kouno.xyz/products/bmi270-breakout-board">KOUNOLAB BMI270</a>, <b>experimental</b>.'
'costAll': (set) => set * 2.71 + 6.35,
'links': '<a href="https://store.kouno.xyz/products/bmi270-breakout-board">KOUNOLAB BMI270</a>'
},
{
'name': 'BMI160',
'amount': (set) => set,
'cost': 1.42,
'costAll': (set) => set * 1.42 + 2.67,
'links': '<a href="https://www.aliexpress.com/wholesale?SearchText=BMI160">AliExpress BMI160</a>'
'links': '<a href="https://www.aliexpress.com/wholesale?SearchText=BMI160">AliExpress BMI160</a>, <b>Not recommended for new designs.</b>'
},
{
'name': 'ICM20948',
'amount': (set) => set,
'cost': 17.40,
'costAll': (set) => set * 17.40 + 8.89,
'links': '<a href="https://www.mouser.com/c/?q=ICM20948">Mouser ICM20948</a>. The most commonly chosen options are either the Pimoroni or Adafruit ICM20948. Please note that any orders you place will be <b>backordered</b>, potentially meaning a wait of <u>upwards of 3 months</u> before shipping.'
'links': '<a href="https://www.mouser.com/c/?q=ICM20948">Mouser ICM20948</a>. The most commonly chosen options are either the Pimoroni or Adafruit ICM20948. Please note that any orders you place will be <b>backordered</b>, potentially meaning a wait of <u>upwards of 3 months</u> before shipping. <b>Not recommended for new designs.</b>'
},
{
'name': 'MPU9250',
Expand Down
8 changes: 7 additions & 1 deletion src/assets/js/schematics.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@
'bno': 'd1_BNO-Main.png',
'bno_slimevr': 'd1_BNO_SlimeVR-Main.png',
'bno_ada': 'd1_BNO_Ada-Main.png',
'mpu9250': 'd1_MPU9250-Main.png',
'DSV': 'd1_BMI270-Main.png',
'bmi160': 'd1_BMI160-Main.png',
'ICM45': 'd1_BMI270-Main.png',
'DSO': 'd1_BMI270-Main.png',
'bmi270': 'd1_BMI270-Main.png',
'bmi270': 'd1_BMI270-Main.png',
'qmc': 'd1_MPU+QMC-Main.png'
})[imu] || "d1_MPU-Main.png"
Expand All @@ -29,6 +32,9 @@
'mpu9250': 'd1_MPU9250-Aux.png',
'bmi160': 'd1_BMI160-Aux.png',
'bmi270': 'd1_BMI270-Aux.png',
'ICM45': 'd1_BMI270-Aux.png',
'DSO': 'd1_BMI270-Aux.png',
'DSV': 'd1_BMI270-Aux.png',
'qmc': 'd1_MPU+QMC-Aux.png'
})[box.value] || "d1_MPU-Aux.png"
}
Expand Down
122 changes: 95 additions & 27 deletions src/diy/imu-comparison.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ A survey was held within the DIY community for a clearer picture of the current
This page is based on user feedback and weighed against the survey, with scores showing the average answer given to the chip.
Following completing your own trackers, you can complete an extended version of that original survey yourself, or view previous responses on the [SlimeVR Experience Survey page](../misc/survey.md).

## Index
## Index (in order of best to worst with current firmware)
- [BNO085](#bno085)
- [LSM6DSV](#lsm6dsv)
- [ICM-45686](#icm-45686)
- [LSM6DSO](#lsm6dso)
- [BMI270](#bmi270)
- [BMI160](#bmi160)
- [ICM20948](#icm20948)
Expand All @@ -22,9 +25,14 @@ These factors are meant to give a quick indication as to what to expect from var
For clarification purposes: If 3 out of 10 chips are dead on arrival or die during early use, we refer to that as poor build quality.

## General Recommendations
At the moment, the BMI160 (stable) and BMI270 (experimental) are the best price-to-performance options, far surpassing other IMUs such as the MPU6050. Neither BMI requires a stable magnetic environment, making them a suitable option for many more people than 9DOF IMUs, such as the MPU9250 or ICM20948, or even the MPU6050+QMC5883L. BNO085s, while offering greater reset times, come at a significant price premium.
At the moment there is no general IMU recomended for all price ranges. Although below there will be a short, general guide on what to get depending on your price range:

Low range budget - BMI270 or LSM6DSO

Mid range budget - ICM-45686 or LSM6DSV

High range budget - BNO085

When referring to the order of the IMUs on this page, bear in mind that they're listed roughly in order of best to worst.

---
## BNO085
Expand All @@ -34,60 +42,120 @@ They are reliable and stable chips, but at the time of writing, they remain diff

|Reset time |Cost |Availability|Build quality|
|:---------:|:---:|:----------:|:-----------:|
|30 - 45 min|~$13 |Sufficient |Excellent |
|30-45 min |~$11 |Sufficient |Excellent |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>

|Pros |Cons |
|--------------|---------------------------------------|
|Accurate |Expensive |
|Reliable |Extra wiring required compared to MPUs |
|Reliable |Big |
|Smooth | |

> Please note, if you are looking for BNO085s SlimeVR may have [spares for sale that can be found here](https://shop.slimevr.dev/products/slimevr-imu-module-bno085).
---
## LSM6DSV
The LSM6DSV is a very good IMU for DIY SlimeVR.
It seems to perform just as well as the BNO for a lower cost.


|Reset time |Cost |Availability|Build quality |
|:---------:|:----:|:----------:|:-----------:|
|45-60 min |~$8.47|Insufficient|Great |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>

|Pros |Cons |
|--------------|---------------------------------------|
|Accurate |Expensive |
|Reliable |Experimental |
|Smooth | |


---
## ICM-45686
The ICM-45686 is a potentially very good and <b>very experimental</b> IMU for DIY SlimeVR.
So far it is shown to be testing on around the same level as the BNO/DSV but has only been tested by a few people so results are not entirely conclusive yet.


|Reset time |Cost |Availability|Build quality|
|:---------:|:---:|:----------:|:-----------:|
|45-60 min|~$6.35 |Sufficient |Great |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>

|Pros |Cons |
|--------------|-------------------------------------------------------------------------|
|Cheap |Very Experimental |
|Reliable |Only available in module form from a single source |
|Smooth | |


---
## LSM6DSO
The LSM6DSO is a good IMU for DIY SlimeVR.
It has been shown to be slightly better than the BMI270 at a slightly higher cost.

|Reset time |Cost |Availability|Build quality |
|:---------:|:----:|:----------:|:-----------:|
|25-35 min |~$3.71|Sufficient |Great |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o" ></i>

|Pros |Cons |
|--------------|-------------------------------------------------------------------------|
|Cheap |Experimental |
|Reliable |Only available in module form from a single source |
|Smooth |Poor sensitivity |

---
## BMI270
The BMI270 is a relatively new and <b>experimental</b> IMU for DIY SlimeVR.
The BMI270 is a good IMU for DIY SlimeVR.
It seems to perform significantly better than the BMI160 while still being affordable.

|Reset time |Cost |Availability|Build quality|
|:---------:|:----:|:----------:|:-----------:|
|20 - 30min |~$2.7 |Sufficient |Great |
|20 - 30min |~$2.71|Sufficient |Great |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o" ></i>

|Pros |Cons |
|-----------------------|----------------------------------------------------------------|
|Cheap | [Requires manual calibration the first time](#imu-calibration) |
|Reliable | Only available in module form from a single source |
|Smooth | Experimental, still in testing |
|Single time calibration| Performance data not taken from survey |
|Cheap | Only available in module form from a single source |
|Reliable | |
|Smooth | |
|Single time calibration| |

---
## BMI160
The BMI160 is the current go-to IMU for DIY SlimeVR.
It is an easily available chip with decent performance and good reliability.

It does not have a magnetometer, but external chips such as QMC5883L/HMC5883L can be used,
in the same way [as with MPU](#mpuqmc5883l). Like any other setup with magnetometers, this is highly experimental.
Reset times and yaw accuracy with a magnetometer will depend on your build quality and magnetic environment.
<b>Not recommended for new designs.</b>


The BMI160 is currently not recomended for new slime trackers.
It is very outdated with a lot of newer IMUs surpassing it in price to performance.

> It is important to note that around 2/10 BMI160s come DOA (Dead On Arival)
|Reset time |Cost |Availability|Build quality|
|:---------:|:----:|:----------:|:-----------:|
|10 - 20min |~$1.50|Sufficient |Good |
|5 - 15min |~$1.50|Sufficient |Good |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o" ></i>
Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o" ></i>

|Pros |Cons |
|-----------------------|----------------------------------------------------------------|
|Cheap | [Requires manual calibration the first time](#imu-calibration) |
|Reliable | |
|Smooth | |
|Single time calibration| |
|Smooth | Short drift time |
|Single time calibration| high rate of DOA |

---
## ICM20948

<b>Not recommended for new designs.</b>


The ICM 20948 is a comparatively modern chip.
While initial testing seems positive, this chip has not had enough field time for conclusive results.

Expand All @@ -105,7 +173,7 @@ There are quite a few variants of the ICM-20948, most of which operate at 3.3v.
|:---------:|:---:|:----------:|:-----------:|
|15 - 60 min|~$15 |Insufficient|Good |

Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>
Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>

|Pros |Cons |
|-----------------|--------------------------------------|
Expand All @@ -118,7 +186,7 @@ Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"
---
## MPU9250

<b>Not recommended for new designs.</b>
<b>Do not buy for new designs.</b>

The MPU9250 (currently ran in several modes) is a newer installment of the MPU lineup.

Expand All @@ -139,7 +207,7 @@ Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-
---
## MPU+QMC5883L

<b>Not recommended for new designs.</b>
<b>Do not buy for new designs.</b>

This is a highly experimental setup that approximately matches an MPU9250.
Unlike other IMUs which consist of a single PCB, this instead relies on connecting a magnetometer to an MPU6050 or MPU6500.
Expand Down Expand Up @@ -188,7 +256,7 @@ Score: <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-
---
## MPU6500

<b>Not recommended for new designs.</b>
<b>Do not buy for new designs.</b>

The MPU6500 is the middle ground of the MPU chips available.
The drift time of this IMU may be a slight improvement over the MPU6050.
Expand All @@ -211,7 +279,7 @@ Score: <i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa f
---
## MPU6050

<b>Not recommended for new designs.</b>
<b>Do not buy for new designs.</b>

The MPU6050 will get you started with SlimeVR for cheap.

Expand Down Expand Up @@ -264,6 +332,6 @@ Some IMUs, such as the BMI270, BMI160, MPU9250, and MPU+QMC5883L, require manual

---
### Credits
*Created by smeltie, edited by calliepepper and nwbx01*
*Created by smeltie, edited by calliepepper, nwbx01 and Aed*

A big thanks to everyone who took the time to fill out the survey.
17 changes: 10 additions & 7 deletions src/diy/tracker-schematics.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@

## Wemos D1 Mini

* IMU
* IMUs ranked from best - worst
- <input id="bno_slimevr" type="radio" name="d1-imu" value="bno_slimevr" checked="checked"> <label for="bno_slimevr">BNO085 (SlimeVR)</label> - SlimeVR version of BNO085 from SlimeVR Store.
- <input id="bno" type="radio" name="d1-imu" value="bno"> <label for="bno">BNO085</label> - Great but expensive $$$.
- <input id="bno_ada" type="radio" name="d1-imu" value="bno_ada"> <label for="bno_ada">BNO085 (Adafruit)</label> - Adafruit version of BNO085.
- <input id="bmi270" type="radio" name="d1-imu" value="bmi270"> <label for="bmi270">BMI270</label> - <b>Experimental</b>, but better than BMI160 while still being cheap.
- <input id="bmi160" type="radio" name="d1-imu" value="bmi160"> <label for="bmi160">BMI160</label> - Cheap and good performance.
- <input id="mpu" type="radio" name="d1-imu" value="mpu"> <label for="mpu">MPU6050</label> - Cheap but drifts quite a bit. <b>Not recommended for new designs.</b>
- <input id="mpu9250" type="radio" name="d1-imu" value="mpu9250"> <label for="mpu9250">MPU9250 (GY-91)</label> - Good but plagued with fakes. <b>Not recommended for new designs.</b>
- <input id="qmc" type="radio" name="d1-imu" value="qmc"> <label for="qmc">MPU6050 + QMC5883L</label> - <b>Experimental</b> cheaper MPU9250 equivalent. <b>Not recommended for new designs.</b>
- <input id="DSV" type="radio" name="d1-imu" value="DSV"> <label for="DSV">LSM6DSV</label> - Very good and slightly cheaper than BNO <b>Experimental</b>
- <input id="ICM45" type="radio" name="d1-imu" value="ICM45"> <label for="ICM45">ICM-45686</label> - Great and cheaper than DSV. <b>VERY Experimental</b>
- <input id="DSO" type="radio" name="d1-imu" value="DSO"> <label for="DSO">LSM6DSO</label> - Good but a little bit more expensive than BMI270. <b>Experimental</b>
- <input id="bmi270" type="radio" name="d1-imu" value="bmi270"> <label for="bmi270">BMI270</label> - Better than BMI160 while still being cheap.
- <input id="bmi160" type="radio" name="d1-imu" value="bmi160"> <label for="bmi160">BMI160</label> - Very cheap but not very good performance <b>DO NOT USE!</b>
- <input id="mpu" type="radio" name="d1-imu" value="mpu"> <label for="mpu">MPU6050</label> - Cheap but drifts quite a bit. <b>DO NOT USE!</b>
- <input id="mpu9250" type="radio" name="d1-imu" value="mpu9250"> <label for="mpu9250">MPU9250 (GY-91)</label> - Not terrible but plagued with fakes. <b>DO NOT USE!</b>
- <input id="qmc" type="radio" name="d1-imu" value="qmc"> <label for="qmc">MPU6050 + QMC5883L</label> - <b>Experimental</b> cheaper MPU9250 equivalent. <b>DO NOT USE!</b>
* <input id="d1-aux" type="checkbox" name="d1-aux"> <label for="d1-aux">Auxiliary tracker</label> - Allows for a second motion sensor to be connected.
* <input id="d1-battery-sense" type="checkbox" name="d1-battery-sense"> <label for="d1-battery-sense">Battery sense</label> - The device is able to sense the battery life remaining using a 180k resistor.
* <input id="d1-charge-diodes" type="checkbox" name="d1-charge-diodes" checked="checked"> <label for="d1-charge-diodes">Charge diodes (1N5817)</label> - Allows for usage even when charging, and is a **recommended safety measure**.
Expand Down Expand Up @@ -52,6 +55,6 @@ If you are using a twisted pair cable or similar layout, use the following cable

![Twisted pair cable I2C layout](../assets/img/twisted_pair.png)

*Code put together by Carl (<https://github.com/carl-anders>), with images made by Lune#0241, nwbx01, and Reclusious#2022 thanks to the help of the whole DIY community. Doc page integration by emojikage. Edited by calliepepper. Thanks to snapchat_hotdog for the testing on the extension lengths.*
*Code put together by Carl (<https://github.com/carl-anders>), with images made by Lune#0241, nwbx01, and Reclusious#2022 thanks to the help of the whole DIY community. Doc page integration by emojikage. Edited by calliepepper and Aed. Thanks to snapchat_hotdog for the testing on the extension lengths.*

<script src="../assets/js/schematics.js"></script>

0 comments on commit 815f589

Please sign in to comment.