BNO055 - Orientation Sensor
.
1) Overview
Sensor has 3 sensor functions, accelerometer, gyroscope and geomagnetic function.
One of the most valuable feature is that sensor includes ARM Cortex-M0+ and fusion software function.
This means you can just use it without deep knowledge for motion control algorithm.
Please refer following wed page.
https://www.bosch-sensortec.com/en/homepage/products_3/sensor_hubs/iot_solutions/bno055_1/bno055_4
Fortunately, I got chip sample and evaluated it.
It's very easy to use from software point of view but it's very difficult to build up the hardware from chip because size is very small (5.2mm x 3.8mm x 1.1mm) and you need to solder over 16 pins.
2) Picture
3) Hardware Circuit
/media/uploads/kenjiArai/mbed_bno055_1.pdf
Above schematic has a mistake.
Please refer followings.
/media/uploads/kenjiArai/breakout.pdf
(Added on March 20th, 2016)
4) Software
BNO055 Fusion control library
Import libraryBNO055_fusion
BNO055 Intelligent 9-axis absolute orientation sensor by Bosch Sensortec. It includes ACC, MAG and GYRO sensors and Cortex-M0+ processor.
Sample program
Import programBosch_BNO055_Fusion_example
Based on F401 example.Changed reset sequence and added RESET control and Power On/Off control. Check several mbed, LPC1768, LPC1114, NucleoF401RE, F411RE, L152RE and GR-PEACH
Another sample (old version)
/users/kenjiArai/code/Nucleo_F401_BNO055_example/
Known Bugs
As of April 8th, 2015
1) Power-on sequence and/or Reset sequence has a trouble. BNO055 nRESET control does NOT work well.
-> After reset, mbed cannot recognize BNO055 chip.
-> Added RESET pin control and Power ON/OFF control. (Done on April 7th, 2015)
2) For Nucle L152RE, I2C clock cannot set 400KHz due to reading data is not stable.
Tera Term output example (mbed board is at a standstill)
Euler Angles data
Heading:+227.0 [deg], Roll: +0.0 [deg], Pich: +0.0 [deg], #00
Heading:+227.0 [deg], Roll: +0.0 [deg], Pich: +0.0 [deg], #01
Quaternion data
W:6583, X:-48, Y:6, Z:15003, #00
W:6583, X:-48, Y:6, Z:15003, #01
Linear accel data
X: +0.0 [m/s*s], Y: +0.0 [m/s*s], Z: +0.0 [m/s*s], #00
X: +0.0 [m/s*s], Y: +0.0 [m/s*s], Z: +0.0 [m/s*s], #01
Gravity vector data
X: +0.0 [m/s*s], Y: +0.0 [m/s*s], Z: +9.0 [m/s*s], #00
X: +0.0 [m/s*s], Y: +0.0 [m/s*s], Z: +9.0 [m/s*s], #01
Chip temperature data
Acc chip:+28 [degC], Gyr chip:+28 [degC], #00
Acc chip:+28 [degC], Gyr chip:+28 [degC], #01
5) Calibration
This is only my Fusion setting condition, Fusion mode is NDOF.
I have NOT tried any other Fusion modes.
Data sheet said
Though the sensor fusion software runs the calibration algorithm of all the three sensors (accelerometer, gyroscope and magnetometer) in the background to remove the offsets, some preliminary steps had to be ensured for this automatic calibration to take place.
My understanding is that manual calibration is not mandatory but I implemented manual calibration method as an example in the above program.
Here is a result PDF file of the calibration execution.
/media/uploads/kenjiArai/bno055_calib_f401_20150410.pdf
Calibration Status Register
CALIB_STAT(0x35) is 4 calib. status. ->SYS Calib., GYR Calib., ACC Calib. and MAG Calib.
Gyro Calibration is very easy, just keep stable condition. It takes less than one second.
For Magnetometer Calibration, random moving (e.g. writing an 8 in the air) is required. It takes few seconds.
Accelerometer Calibration is difficult to done.If you rotate the BNO055 quickly, it's never done.
6) Stability
Data drift at stationary condition
/media/uploads/kenjiArai/bno055_logging_data_20150416.pdf
Data writing an 8 in the air
Logging data: page 1 & 2, Graph: page 3
/media/uploads/kenjiArai/bno055_logging_data_8inthe_air_20150411.pdf
7 comments on BNO055 - Orientation Sensor:
Please log in to post comments.
Hi Kenji san,
I am also using the BNO055 but I am stuck already during chip id reading. It seems that I have same symptoms as you described "After reset, mbed cannot recognize BNO055 chip", did you solve this by adding a regulator and doing a power cycle?
Somehow the I2C interface of the BNO055 seems stuck, there is no ACK from the BNO during I2C communication. Unfortunately, I did not added the HW on the PCB to do a power cycle so i tried cutting the complete power of the board and sometimes I am able to read the correct chip-id but very unreliable.
Thanks, Bas