In our previous adventure, Matt and I
defeated the dragon and rescued a fake princess who turned into a giant spider managed to get some meaningful data from both the gyrometer and the accelerometer. We also made some pretty graphs.
The next step is for us to compare the outputs from the Gyro and the Accelerometer. This is currently impossible, given that the Accelerometer is transformed into meaningul readings (degrees) already, and the gyro is just a load of “rate of change” readings.
We can get the orientation readings from the Gyro like this:
//Create variables for outputs float xGyroRate, yGyroRate, zGyroRate, xGyroRate2, yGyroRate2, zGyroRate2; long Time; //Read the x,y and z output rates from the gyroscope & correct for some innacuracy; convert to seconds xGyroRate = (gyroReadX())/57.5; yGyroRate = (gyroReadY())/57.5; zGyroRate = (gyroReadZ())/57.5; //Determine how long it's been moving at this 'rate', in seconds Time = (millis()-previousMillis); //Multiply rates by duration xGyroRate2 = -(xGyroRate/Time)/4; yGyroRate2 = -(yGyroRate/Time)/4; zGyroRate2 = -(zGyroRate/Time)/4; //Add to cumulative figure if (((xGyroRate2)>(gyroLPF))||((xGyroRate2)<(-gyroLPF))) CumulatGyroX += (xGyroRate2); if (yGyroRate2>gyroLPF||yGyroRate2<-gyroLPF) CumulatGyroY += (yGyroRate2); if (zGyroRate2>gyroLPF||zGyroRate2<-gyroLPF) CumulatGyroZ += (zGyroRate2);
Now that we’ve done this, we can measure an axis from both the Gyro and the Accelerometer at the same time, and overlay them on top of one another in gnu plot.
Ok, so there was something wrong with that. We tweaked the code some more, and got something a bit better:
Finally, we figure out where we went wrong with the code. We don’t have the old versions, so we can’t show you our idiotic mistakes. After fixing it, we get something much closer to what we were expecting:
We can see from this graph that both sensors are outputting more or less the same thing. However the gyro measurements are actually off by a bit at the start, and are slowly producing a more noticeably incorrect orientation. If we used just the gyro, we’d end up with the plane downside up. There are also “spikes” in the accelerometer readings, at 700 and 1300 – these are probably noisy readings from the sensor.
To get an idea of how much the gyro readings drift, we turned on all the gyro sensors and then left the board still for a few seconds:
This is obviously not going to work long term – we can’t be certain of either sensor. We need a way to combine the readings from both sensors, or face the consequences.