import vrml.*; import vrml.Browser; import vrml.field.*; import vrml.node.*; import vrml.Event; import sms.*; public class InstantMotion extends Script { public SFVec3f acceleration; public SFRotation rotation_x, rotation_y, rotation_z; public int ref_x, ref_y, ref_z; public float acc_x, acc_y, acc_z; public float div = 0.01f; public void initialize() { acceleration = (SFVec3f)getField("acceleration"); rotation_x = (SFRotation)getField("rotation_x"); rotation_y = (SFRotation)getField("rotation_y"); rotation_z = (SFRotation)getField("rotation_z"); calibrate(); } public void shutdown() { } public void processEvent( Event e ) { if (e.getName().equals("set_time")) { get_sensordata(); } else if (e.getName().equals("set_calibration")) { calibrate(); } } public void get_sensordata() { acc_x = (ref_x - Unimotion.getSMSX()) * div; acc_y = (ref_y - Unimotion.getSMSY()) * div; acc_z = (ref_z - Unimotion.getSMSZ()) * div; acceleration.setValue(acc_x, acc_z, acc_y); rotation_x.setValue(1, 0, 0, -acc_y); rotation_y.setValue(0, 1, 0, acc_z); rotation_z.setValue(0, 0, 1, -acc_x); } public void calibrate() { ref_x = Unimotion.getSMSX(); ref_y = Unimotion.getSMSY(); ref_z = Unimotion.getSMSZ(); System.out.println("calibrate"); } }