The breadboard circuit has been attached attached to the end of a rotating arm and it’s streaming data back to a PC.
So just as a recap, the breadboard contains a teensy 3.6, a BNO55 9DOF IMU sensor and a serial bluetooth adapter. At the moment the only values streaming to the computer are linear acceleration for the x,y and z axis. In the image above, the z axis is perpendicular to the surface of the BNO55 breakout board (parallel to gravity).The z-axis will be the main focus for initial signal analysis in order to try and get vertical displacement measurements. Before we get in to the signal analysis, check out this video of the arm rotating:
It’s useful to first see how the breadboard moves as the rotating arm rotates. It doesn’t stay perfectly horizontal which may not be a bad thing as it is slightly closer to real world data.
First lets take a look at the z-axis linear acceleration:
This graph contains acceleration data from about four and a half rotations. The good news is you an see a clear periodic element to the data which does roughly coincide with how long the rotations take (for this set of data each full rotation was around 4 seconds).
It’s a bit puzzling the way the acceleration dips a bit before increasing and then dropping down to around -4m/s^2. One possible explanation is this occurs when the IMU is near the top of the rotation, the mount does not stay completely horizontal as there is some friction with the rotating arm. This causes the rotating mount to rather quickly flick from one position to another when near the top of a rotation. This flicking action may momentary cancel out the z-acceleration before the imu starts to properly descend once again. This action can be seen in the video above. Another contributing factor may be that the rotating arm is weighted in an unbalanced way. If the counterweight is a bit heavier than the breadboard it would have a slight catapult effect when the IMU is near the top part of the rotation.
In the graph above, the minima where the acceleration drops to around -4m/s^2 represents the IMU at the lowest part of the rotation (6 o clock on a clock dial).
So if we integrate from one minima to a neighboring one this will give us the instantaneous velocity for each point in one rotation. For the displacement data experiment, the acceleration was taken from one half rotation which was from the 6 o clock position to the 12 o clock position. In reality it was a bit off so it’s a bit more than one half but it doesn’t really matter as you will see in the graphs below.
If we integrate this velocity once more, displacement can be obtained.
See below for the graphs of acceleration, velocity and displacement:
This initial test has shown quite encouraging results. The length of the rotating arm is 1.5 meters and the IMU is mounted right at the end of the arm. This means going from the 6 o clock position to the 12 o clock position, the IMU will travel through a vertical distance of 1.5 meters which you can see is roughly the maximum displacement on the displacement graph.
The Integration Problem:
From the graph above you can see the issue related to absolute 3d position tracking with IMU sensors. The fact that to get velocity you have to integrate an acceleration measurement means that even tiny errors will accumulate. Then performing another integration of the velocity to get displacement means that any errors in the acceleration measurement are integrated twice and so the error accumulates in an exponential fashion. As a result, the general consensus is that IMU devices are not suitable for absolute 3d position tracking.
The reason why wave sensors can get away with this is they use a statistical measurement approach. Measuring the height of a single wave may have a relatively large error margin but measuring the heights of say 1000 waves and reporting the significant or average wave height has been achieved by many commercial wave sensors. One step needed is to periodically reset the integration counter. In the first graph in this post of z-axis acceleration, the minima stand out on the graph as easy spots to reset the integration counter. This means that any error that accumulates would only have around 4 seconds to do so.
It’s early days in terms of algorithm development. This post is a quick record of some analysis on the first data set of linear acceleration from the rotating arm.