Closed brightproject closed 2 months ago
If the x-axis mag data is always 0 (do the other axis mag values change?) but the mag is working fine (verified by other means) then the sketch is not reading the magnetometer properly. I do not know why, could be a lot of reasons.
Wrong I2C address, improper calibration, some error in the sketch (although it has worked fine for me and others)....
That particular sketch is intended to run on a Teensy 3.2...is that what you are using? If not, then the I2C API is likely the problem.
On Mon, Jun 17, 2024 at 5:28 AM Vladislav @.***> wrote:
Hello mr. @kriswiner https://github.com/kriswiner I use BNO055 and this sketch
https://github.com/kriswiner/BNO055/blob/master/BNO_055_Nano_Basic_AHRS_t3.ino
The resulting roll and pitch angles from the BNO055 fusion and those calculated by the Madgwick or Mahony algorithm are similar. But the yaw in Hardware is displayed according to turns, and in Software it is yaw. Commenting a line:
// yaw *= 180.0f / PI;
Doesn't give results... because... there was a suspicion that yaw is somehow calculated in radians/sec.
void readMagData(int16_t * destination) { uint8_t rawData[6]; // x/y/z gyro register data stored here readBytes(BNO055_ADDRESS, BNO055_MAG_DATA_X_LSB, 6, &rawData[0]); // Read the six raw data registers sequentially into data array destination[0] = ((int16_t)rawData[1] << 8) | rawData[0] ; // Turn the MSB and LSB into a signed 16-bit value destination[1] = ((int16_t)rawData[3] << 8) | rawData[2] ; destination[2] = ((int16_t)rawData[5] << 8) | rawData[4] ; } // readMagData
Output data
System Status = 0x5 Sensor fusion algorithm running ax = 7 ay = -39 az = 1011 mg gx = 0.00 gy = 0.06 gz = 1.37 deg/s mx = 0 my = 66 mz = 8 mG qx = 0.71 qy = 0.01 qz = 0.01 qw = -0.71 Gyro temperature is 41.0 degrees C Software Roll, Pitch, Yaw: 0.14, -1.09, -1.57 Hardware Roll, Pitch, Yaw: 1.31, -2.06, 57.19 Hardware x, y, z linear acceleration: 15.00, -57.00, 9.00 Hardware x, y, z gravity vector: -35.00, 22.00, 979.00 rate = 307.44 Hz
The magnetic strength of the X axis is always 0, no matter how I rotate the board with the sensor. The magnetometer sensor itself is fine, I ran the adafruit code and everything appears fine. mag_telemetry_ok.png (view on web) https://github.com/kriswiner/BNO055/assets/1788098/a5178dbe-c3d7-43bb-8de3-accd2ca9482b I would appreciate your clarification if you find the time.
— Reply to this email directly, view it on GitHub https://github.com/kriswiner/BNO055/issues/14, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKRWCD3QBRHP6JTRLVTZH3I6BAVCNFSM6AAAAABJN45K66VHI2DSMVQWIX3LMV43ASLTON2WKOZSGM2TOMRSGU2DMOA . You are receiving this because you were mentioned.Message ID: @.***>
Wrong I2C address, improper calibration, some error in the sketch (although it has worked fine for me and others)....
Yes, I agree.
Any reason is possible, from modification of the sensor itself, to the specific device on which the code is running.
I use stm32f411.
And by the way, while I was writing this issue
, I was doing the figure eight
movement with a board with a sensor and... the mx axis suddenly showed the value 78 mG
.
And in general I noticed that the period for updating the magnetometer values is about 10-15 seconds.
Although all other values are updated according to those set here
#define PERIOD_UPDATE (100)
if (delt_t > PERIOD_UPDATE) { // update LCD once per half-second independent of read rat
// check BNO-055 error status at 10 Hz rate
}
Adafruit used this feature
/* Magnetometer offset range = +/- 6400 LSB where 1uT = 16 LSB */
offsets_type.mag_offset_x =
(read8(MAG_OFFSET_X_MSB_ADDR) << 8) | (read8(MAG_OFFSET_X_LSB_ADDR));
offsets_type.mag_offset_y =
(read8(MAG_OFFSET_Y_MSB_ADDR) << 8) | (read8(MAG_OFFSET_Y_LSB_ADDR));
offsets_type.mag_offset_z =
(read8(MAG_OFFSET_Z_MSB_ADDR) << 8) | (read8(MAG_OFFSET_Z_LSB_ADDR));
This I2C API:
is written specifically for the Teensy 3.2 and will not work for the STM32, or will not work well....
So if you are seeing strange results, that is likely the reason.
On Mon, Jun 17, 2024 at 10:07 AM Vladislav @.***> wrote:
Wrong I2C address, improper calibration, some error in the sketch (although it has worked fine for me and others)....
Yes, I agree. Any reason is possible, from modification of the sensor itself, to the specific device on which the code is running. I use stm32f411. And by the way, while I was writing this essay, I was doing the “figure eight” movement with a board with a sensor and... the mx axis suddenly showed the value 78 mG. And in general I noticed that the period for updating the magnetometer values is about 10-15 seconds. Although all other values are updated according to those set here
define PERIOD_UPDATE (100)
if (delt_t > PERIOD_UPDATE) { // update LCD once per half-second independent of read rat // check BNO-055 error status at 10 Hz rate }
Adafruit used this feature
/* Magnetometer offset range = +/- 6400 LSB where 1uT = 16 LSB */ offsets_type.mag_offset_x = (read8(MAG_OFFSET_X_MSB_ADDR) << 8) | (read8(MAG_OFFSET_X_LSB_ADDR)); offsets_type.mag_offset_y = (read8(MAG_OFFSET_Y_MSB_ADDR) << 8) | (read8(MAG_OFFSET_Y_LSB_ADDR)); offsets_type.mag_offset_z = (read8(MAG_OFFSET_Z_MSB_ADDR) << 8) | (read8(MAG_OFFSET_Z_LSB_ADDR));
— Reply to this email directly, view it on GitHub https://github.com/kriswiner/BNO055/issues/14#issuecomment-2173914471, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKUKALFELEQLTBTV6VLZH4JTTAVCNFSM6AAAAABJN45K66VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNZTHEYTINBXGE . You are receiving this because you were mentioned.Message ID: @.***>
This I2C API: #include
is written specifically for the Teensy 3.2 and will not work for the STM3
I'm used only Wire.h
// #include <i2c_t3.h>
// #include <SPI.h>
#include <Wire.h>
The question is, what Wire.h. ANyway, I would suspect problems here. Either the API has buffer limitations, extra delays, race conditions, or some other problem.
Why not just use the Adafruit BNO055 library and be done with it?
On Mon, Jun 17, 2024 at 12:37 PM Vladislav @.***> wrote:
This I2C API: #include
is written specifically for the Teensy 3.2 and will not work for the STM3 I'm used only Wire.h
// #include
// #include include
— Reply to this email directly, view it on GitHub https://github.com/kriswiner/BNO055/issues/14#issuecomment-2174274845, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKVBJ7QW5PBU4J2EPH3ZH43GNAVCNFSM6AAAAABJN45K66VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNZUGI3TIOBUGU . You are receiving this because you were mentioned.Message ID: @.***>
Hello mr. @kriswiner I use
BNO055
and this sketchThe resulting roll and pitch angles from the
BNO055
fusion and those calculated by theMadgwick
orMahony
algorithm are similar. But the yaw inHardware
is displayed according to turns, and inSoftware
it is yaw. Commenting a line:Doesn't give results... because... there was a suspicion that yaw is somehow calculated in
radians/sec
.Output data
The magnetic strength of the X axis is always 0, no matter how I rotate the board with the sensor. The magnetometer sensor itself is fine, I ran the adafruit code and everything appears fine.
I would appreciate your clarification if you find the time.