Getracht de acceleratie normalisatie van wiigee te benaderen. Dit lukt redelijk, maar niet goed genoeg om zonder de filters te hoeven tunen direct goede herkenning te krijgen.

This commit is contained in:
2011-02-15 19:12:02 +00:00
parent 936b2872d6
commit 07cec0cb4e
11 changed files with 97 additions and 10 deletions

2
java/header.bat Normal file
View File

@@ -0,0 +1,2 @@
javah -classpath bin wiiusej.WiiUseApi
pause

Binary file not shown.

View File

@@ -17,6 +17,8 @@ import pm.macro.event.Press;
import pm.macro.event.Release;
import wiiusej.Wiimote;
import wiiusej.values.Acceleration;
import wiiusej.values.Calibration;
import wiiusej.values.RawAcceleration;
import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent;
import wiiusej.wiiusejevents.physicalevents.WiimoteButtonsEvent;
@@ -27,8 +29,8 @@ public class WiimoteDevice extends Device implements GestureListener {
protected static WiimoteService wiimoteService;
protected Wiimote wiimote;
protected Calibration calibration;
protected GestureDevice gestureDevice;
protected int gestureId = 0;
static {
@@ -109,13 +111,13 @@ public class WiimoteDevice extends Device implements GestureListener {
}
public void onMotionSensingEvent(MotionSensingEvent event) {
if (calibration == null) {
calibration = wiimote.getCalibration();
}
RawAcceleration rawAcceleration = event.getRawAcceleration();
System.out.println(event);
double[] vector = new double[] {
rawAcceleration.getX(),
rawAcceleration.getY(),
rawAcceleration.getZ()};
gestureDevice.add(vector);
Acceleration acceleration = calibration.getAcceleration(rawAcceleration);
//System.out.println(event);
gestureDevice.add(acceleration.toArray());
}
public void gestureReceived(GestureEvent event) {

View File

@@ -22,7 +22,7 @@ import wiiusej.wiiusejevents.wiiuseapievents.NunchukRemovedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.StatusEvent;
public class WiimoteService extends WiiUseApiManager implements WiimoteListener {
protected final boolean RUMBLE = true;
protected final boolean RUMBLE = false;
protected ArrayList<Integer> wiimoteList;
protected Wiimote[] wiimoteArray;
@@ -75,7 +75,6 @@ public class WiimoteService extends WiiUseApiManager implements WiimoteListener
public void onStatusEvent(StatusEvent event) {
if (event.isConnected()) {
}
}

View File

@@ -28,6 +28,7 @@ public class GestureDevice extends Device /*implements AccelerationListener */{
}
public void add(double[] vector) {
//System.out.printf("%f %f %f\n", vector[0], vector[1], vector[2]);
fireAccelerationEvent(vector);
}

View File

@@ -348,4 +348,5 @@ public class WiiUseApi {
*/
native void specialPoll(EventsGatherer gath);
native short[] getCalibration(int id);
}

View File

@@ -21,6 +21,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.event.EventListenerList;
import wiiusej.values.Calibration;
import wiiusej.values.RawAcceleration;
import wiiusej.wiiusejevents.utils.EventsGatherer;
import wiiusej.wiiusejevents.utils.WiiUseApiListener;
import wiiusej.wiiusejevents.wiiuseapievents.WiiUseApiEvent;
@@ -661,4 +663,11 @@ public class WiiUseApiManager extends Thread {
shutdown();
}
public Calibration getCalibration(int id) {
short[] data = wiiuse.getCalibration(id);
return new Calibration(
new RawAcceleration(data[0], data[1], data[2]),
new RawAcceleration(data[3], data[4], data[5]));
}
}

View File

@@ -18,6 +18,7 @@ package wiiusej;
import javax.swing.event.EventListenerList;
import wiiusej.values.Calibration;
import wiiusej.wiiusejevents.utils.WiiUseApiListener;
import wiiusej.wiiusejevents.utils.WiimoteListener;
import wiiusej.wiiusejevents.wiiuseapievents.ClassicControllerInsertedEvent;
@@ -492,4 +493,7 @@ public class Wiimote implements WiiUseApiListener {
return "Wiimote with ID : " + id;
}
public Calibration getCalibration() {
return manager.getCalibration(id);
}
}

View File

@@ -0,0 +1,33 @@
package wiiusej.values;
public class Acceleration {
protected double x;
protected double y;
protected double z;
public Acceleration(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public double getZ() {
return y;
}
public double[] toArray() {
return new double[] {getX(), getY(), getZ()};
}
public String toString() {
return "Acceleration : (" + x + ", " + y + ", " + z + ")";
}
}

View File

@@ -0,0 +1,36 @@
package wiiusej.values;
public class Calibration {
protected RawAcceleration zeroAcceleration;
protected RawAcceleration gAcceleration;
protected RawAcceleration differenceAcceleration;
public Calibration(RawAcceleration zeroAcceleration, RawAcceleration gAcceleration) {
this.zeroAcceleration = zeroAcceleration;
this.gAcceleration = gAcceleration;
differenceAcceleration = new RawAcceleration(
(short) (zeroAcceleration.getX() - gAcceleration.getX()),
(short) (zeroAcceleration.getY() - gAcceleration.getY()),
(short) (zeroAcceleration.getZ() - gAcceleration.getZ()));
System.out.println(zeroAcceleration);
System.out.println(gAcceleration);
System.out.println(differenceAcceleration);
System.out.println("<");
//System.exit(0);
}
public RawAcceleration getZeroAcceleration() {
return zeroAcceleration;
}
public RawAcceleration getGAcceleration() {
return gAcceleration;
}
public Acceleration getAcceleration(RawAcceleration rawAcceleration) {
return new Acceleration(
(rawAcceleration.getX() - zeroAcceleration.getX()),// / (double) gAcceleration.getX(),
(rawAcceleration.getY() - zeroAcceleration.getY()),// / (double) gAcceleration.getY(),
(rawAcceleration.getZ() - zeroAcceleration.getZ()));// / (double) gAcceleration.getZ());
}
}

View File

@@ -75,7 +75,7 @@ public class RawAcceleration {
@Override
public String toString() {
return "Raw acceleration : (" + x + ", " + y + "," + z + ")";
return "Raw acceleration : (" + x + ", " + y + ", " + z + ")";
}
}