This project began in the spring of 2017, and I finally felt I had made enough progress to publish what I have been doing. It started while I was taking a Bayesian Robotics course, and I thought it would be interesting to apply what I have learned. The only issue was there was no embedded Linux system that had the computing power to run large particle filters for a reasonable cost, and also had the required sensors (GPS, IMU) of a reasonable quality built-in, so I decided to make one.
- The board will host multiple MEMS IMU on different buses for redundancy and to allow the implementation of a multiple-sensor Bayesian filter
- The board will host a single GNSS receiver to allow localization accuracy of +-2.5m when outdoors. GNSS was picked for access to both US GPS and Russian GLONASS systems, and a quicker cold start time
- The board will support an analog front end capable of measuring voltages up to 20V for battery voltage monitor
- The board will support an analog front end capable of scaling a -5V to 5V signal to 0 to 1.8V
- The board will host an XBee Pro module
- The board will support direct PWM outputs for control of external devices
- The board shall not provide power for these external devices
BNO055 was selected for two of the IMUs, mainly due to its use in Pixhawk controllers. LSM9DS1 was selected as the third sensor for redundancy, a different I2C address, and because it looked interesting.
Version 1 is the currently completed PCB show in the photo above. Version 4 is the next version of the board that is currently under work.
BNO055 leaves some things to be desired. Electrical noise from the rest of the system causes noise on the magnetometer, so the BNO080 will be used instead. It is approximately three times more accurate due to the superior fusion algorithm used onboard. It also provides an estimate of how accurate the provided data is, which is important for the GPS/IMU filter I am working on. It also supports an external barometric pressure sensor.
- 5.2mm x 3.8mm x 1.1mm
- Up to 1KHz
- 3.0° - Dynamic 1.0° - Static
- ± 2000°/sec
BHI160 will also be used as the second IMU. The sensors are comparable in accuracy to the BNO080, but the resulting sensor fusion is not as good. However, this IMU does support an external I2C magnetometer sensor, for which I will design a carrier board and remote away from sources of electrical noise. This will allow me to accurately determine magnetic north. BMM150 is the external magnetometer, which is supported as a direct input into the fusion algorithm in the BHI160. It is actually quite nice as sensors go, although it is a BGA, which will be fun to reflow.
The XU4 IO voltage is 1.8V, and thus logic level conversion is needed. The TXB0108-PW was selected due to OEM recommendation. An A5100-A was selected from Maestro Wireless Solutions since it is a GNSS capable receiver, with active antenna support. It is an all-in-one module with minimal external components.