ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
BNO055.cpp
Go to the documentation of this file.
1#include "BNO055.h"
2
4 previousMicros = micros();
5
6 pinMode(18, INPUT_PULLUP);
7 pinMode(19, INPUT_PULLUP);
8
9 Wire.setClock(100000);
10 if (!bno.begin()) {
11 Serial.println("No BNO055 detected");
12 } else {
13 Serial.println("BNO055 was detected");
14 }
15
16 delay(1000);
17
18 bno.setExtCrystalUse(true);
19}
20
22 bno.getEvent(&magnetometerData, Adafruit_BNO055::VECTOR_MAGNETOMETER);
23 return Vector3D(magnetometerData.magnetic.x, magnetometerData.magnetic.y, magnetometerData.magnetic.z);
24}
25
27 bno.getEvent(&accelerometerData, Adafruit_BNO055::VECTOR_ACCELEROMETER);
28 return Vector3D(accelerometerData.acceleration.x, accelerometerData.acceleration.y, accelerometerData.acceleration.z);
29}
30
32 bno.getEvent(&angVelocityData, Adafruit_BNO055::VECTOR_GYROSCOPE);
33 return Vector3D(angVelocityData.gyro.x, angVelocityData.gyro.y, angVelocityData.gyro.z);
34}
35
37 bno.getEvent(&gravityData, Adafruit_BNO055::VECTOR_GRAVITY);
38 return Vector3D(gravityData.acceleration.x, gravityData.acceleration.y, gravityData.acceleration.z);
39}
40
42 float dT = ((float)micros() - (float)previousMicros) / 1000000.0f;
43
45 Vector3D orthoGravity = orthogonal.CrossProduct(localForce); // use for absolute yaw position
46
47 // use orthogonal for X axis -> east/west
48 // use orthogravity for Y axis -> north/south
49 // use gravity vector for Z axis -> up/down
50 Quaternion magForceQ = Rotation(orthogonal.UnitSphere(), orthoGravity.UnitSphere(), localForce.UnitSphere()).GetQuaternion().UnitQuaternion();
51
52 // complementary filter join both the gyro integration to angular position with the absolute orientation from mag and force
54
56
57 previousMicros = micros();
58}
59
63
67
71
75
79
83
A class for interfacing with the Adafruit BNO055 sensor.
Quaternion GetAbsoluteOrientation()
Retrieves the absolute orientation as a quaternion.
Definition BNO055.cpp:84
Vector3D GetLocalAcceleration()
Retrieves the raw local acceleration vector.
Definition BNO055.cpp:76
Quaternion absoluteOrientation
Computed absolute orientation.
Definition BNO055.h:40
Vector3D GetLocalForce()
Retrieves the computed local force vector.
Definition BNO055.cpp:64
Adafruit_BNO055 bno
BNO055 sensor instance.
Definition BNO055.h:33
VectorRunningAverageFilter< 10 > localAngulKF
Filter for angular velocity.
Definition BNO055.h:43
Vector3D ReadMagneticField()
Reads the magnetic field vector from the sensor.
Definition BNO055.cpp:21
Vector3D GetLocalAngularVelocityFiltered()
Retrieves the filtered local angular velocity vector.
Definition BNO055.cpp:72
VectorRunningAverageFilter< 10 > localGraviKF
Filter for gravity vector.
Definition BNO055.h:45
Vector3D localAngularVelocity
Raw local angular velocity data.
Definition BNO055.h:37
BNO055()
Constructs a BNO055 instance.
Definition BNO055.cpp:3
sensors_event_t magnetometerData
Definition BNO055.h:32
Vector3D GetLocalAccelerationFiltered()
Retrieves the filtered local acceleration vector.
Definition BNO055.cpp:68
sensors_event_t angVelocityData
Definition BNO055.h:32
Vector3D localForce
Computed local force.
Definition BNO055.h:34
Vector3D ReadLocalAcceleration()
Reads the local acceleration vector from the sensor.
Definition BNO055.cpp:26
sensors_event_t accelerometerData
Definition BNO055.h:32
Vector3D ReadLocalAngularVelocity()
Reads the local angular velocity vector from the sensor.
Definition BNO055.cpp:31
VectorRunningAverageFilter< 10 > localAccelKF
Filter for acceleration.
Definition BNO055.h:44
Vector3D GetLocalAngularVelocity()
Retrieves the raw local angular velocity vector.
Definition BNO055.cpp:80
Vector3D localMagneticField
Raw local magnetic field data.
Definition BNO055.h:36
sensors_event_t gravityData
Sensor event data.
Definition BNO055.h:32
long previousMicros
Timestamp of the previous sensor update.
Definition BNO055.h:41
Vector3D localAcceleration
Raw local acceleration data.
Definition BNO055.h:35
Vector3D ReadLocalGravityVector()
Reads the local gravity vector from the sensor.
Definition BNO055.cpp:36
void Update()
Updates the sensor data and applies filtering.
Definition BNO055.cpp:41
Vector3D localGravityVector
Raw local gravity vector data.
Definition BNO055.h:38
Vector3D GetLocalMagneticField()
Retrieves the local magnetic field vector.
Definition BNO055.cpp:60
A mathematical construct representing a rotation in 3D space.
Definition Quaternion.h:30
static Quaternion SphericalInterpolation(const Quaternion &q1, const Quaternion &q2, const float &ratio)
Performs spherical linear interpolation (slerp) between two quaternions.
Quaternion UnitQuaternion() const
Returns a unit quaternion (normalized) version of this quaternion.
Quaternion DeltaRotation(const Vector3D &angularVelocity, const float &timeDelta) const
Computes a small rotation quaternion given an angular velocity and time delta.
Handles 3D rotations and conversions between various rotation representations.
Definition Rotation.h:32
Quaternion GetQuaternion()
Gets the quaternion representation of the rotation.
Definition Rotation.cpp:234
Represents a 3D vector (X, Y, Z) and provides methods for vector arithmetic.
Definition Vector3D.h:26
Vector3D CrossProduct(const Vector3D &vector) const
Computes the cross product of this vector with another Vector3D.
Definition Vector3D.cpp:98
Vector3D UnitSphere() const
Normalizes this vector such that its magnitude is 1 (if non-zero).
Definition Vector3D.cpp:106
Vector3D Filter(Vector3D input)
Filters a 3D vector input using the running average filter.