private boolean stepStart = false;
+ /* Integrated positions */
+ private Vect position = new Vect();
+ private Quat rotation = new Quat();
+
+ /* Test data */
+ private long time1hz = 0;
+ private Vect gyr1hz = new Vect();
/* Private methods */
private void tellMain(CMD.Response cmd, Object value)
// Reset heading
case RSTHEAD:
Util.debug("Sensors: handle - reset heading");
+ this.rotation = new Quat();
currentHeading = 0;
displayData(CMD.Data.HEADING);
break;
currentHeading%=360;
displayData(CMD.Data.HEADING);
}
+
+ // Integrate rotations
+ Vect rpy = new Vect(event.values[1], event.values[0], -event.values[2]);
+ rpy.mul((double)snsInterval_ns/1E9);
+ Quat rot = new Quat(rpy.x, rpy.y, rpy.z);
+ this.rotation.mul(rot);
+ displayData(CMD.Data.ROTATION);
+
+ // Calculate 1 second gryo data
+ this.gyr1hz.add(rpy);
+ if (currentTime_ns > time1hz+1E9) {
+ displayData(CMD.Data.GYR1HZ);
+ this.gyr1hz.set(0, 0, 0);
+ time1hz = currentTime_ns;
+ }
+
break;
data[1] = currentPosX;
data[2] = currentPosY;
break;
+ case ROTATION:
+ Vect rpy = new Vect();
+ this.rotation.get(rpy);
+ data[1] = (float)(rpy.x * (180/Math.PI));
+ data[2] = (float)(rpy.y * (180/Math.PI));
+ data[3] = (float)(rpy.z * (180/Math.PI));
+ break;
case GYR:
data[1] = gyrValues[0];
data[2] = gyrValues[1];
data[3] = gyrValues[2];
break;
+ case GYR1HZ:
+ data[1] = (float)(gyr1hz.x * (180/Math.PI) * 60 * 60);
+ data[2] = (float)(gyr1hz.y * (180/Math.PI) * 60 * 60);
+ data[3] = (float)(gyr1hz.z * (180/Math.PI) * 60 * 60);
+ break;
case HEADING:
data[1] = currentHeading;
break;