Skip to content

Commit

Permalink
Merge pull request #64 from SlimeVR/ipc-upgrade
Browse files Browse the repository at this point in the history
IPC upgrade
  • Loading branch information
Eirenliel committed Oct 5, 2021
2 parents e94551d + a690447 commit f3e2b2c
Show file tree
Hide file tree
Showing 42 changed files with 6,081 additions and 2,978 deletions.
2 changes: 1 addition & 1 deletion .classpath
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-11.0.1"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry combineaccessrules="false" kind="src" path="/slime-java-commons"/>
<classpathentry kind="output" path="bin/default"/>
Expand Down
18 changes: 9 additions & 9 deletions src/main/java/dev/slimevr/autobone/AutoBone.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import io.eiren.vr.processor.HumanSkeleton;
import io.eiren.vr.processor.HumanSkeletonWithLegs;
import io.eiren.vr.processor.HumanSkeletonWithWaist;
import io.eiren.vr.processor.TrackerBodyPosition;
import io.eiren.vr.trackers.TrackerPosition;
import io.eiren.vr.trackers.TrackerUtils;

public class AutoBone {
Expand Down Expand Up @@ -93,7 +93,7 @@ public void reloadConfigValues(TrackerFrame[] frame) {
staticConfigs.put("Neck", server.config.getFloat("body.neckLength", HumanSkeletonWithWaist.NECK_LENGTH_DEFAULT));
configs.put("Waist", server.config.getFloat("body.waistDistance", 0.85f));

if(server.config.getBoolean("autobone.forceChestTracker", false) || (frame != null && TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.CHEST) != null) || TrackerUtils.findTrackerForBodyPosition(server.getAllTrackers(), TrackerBodyPosition.CHEST) != null) {
if(server.config.getBoolean("autobone.forceChestTracker", false) || (frame != null && TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.CHEST) != null) || TrackerUtils.findTrackerForBodyPosition(server.getAllTrackers(), TrackerPosition.CHEST) != null) {
// If force enabled or has a chest tracker
configs.put("Chest", server.config.getFloat("body.chestDistance", 0.42f));
} else {
Expand Down Expand Up @@ -201,7 +201,7 @@ public float getLengthSum(Map<String, Float> configs) {
public float getMaxHmdHeight(PoseFrame frames) {
float maxHeight = 0f;
for(TrackerFrame[] frame : frames) {
TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.HMD);
TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.HMD);
if(hmd != null && hmd.hasData(TrackerFrameData.POSITION) && hmd.position.y > maxHeight) {
maxHeight = hmd.position.y;
}
Expand Down Expand Up @@ -361,20 +361,20 @@ public float processFrames(PoseFrame frames, boolean calcInitError, float target

// The change in position of the ankle over time
protected float getSlideErrorDeriv(SimpleSkeleton skeleton1, SimpleSkeleton skeleton2) {
float slideLeft = skeleton1.getNodePosition(TrackerBodyPosition.LEFT_ANKLE).distance(skeleton2.getNodePosition(TrackerBodyPosition.LEFT_ANKLE));
float slideRight = skeleton1.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE).distance(skeleton2.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE));
float slideLeft = skeleton1.getNodePosition(TrackerPosition.LEFT_ANKLE).distance(skeleton2.getNodePosition(TrackerPosition.LEFT_ANKLE));
float slideRight = skeleton1.getNodePosition(TrackerPosition.RIGHT_ANKLE).distance(skeleton2.getNodePosition(TrackerPosition.RIGHT_ANKLE));

// Divide by 4 to halve and average, it's halved because you want to approach a midpoint, not the other point
return (slideLeft + slideRight) / 4f;
}

// The offset between both feet at one instant and over time
protected float getOffsetErrorDeriv(SimpleSkeleton skeleton1, SimpleSkeleton skeleton2) {
float skeleton1Left = skeleton1.getNodePosition(TrackerBodyPosition.LEFT_ANKLE).getY();
float skeleton1Right = skeleton1.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE).getY();
float skeleton1Left = skeleton1.getNodePosition(TrackerPosition.LEFT_ANKLE).getY();
float skeleton1Right = skeleton1.getNodePosition(TrackerPosition.RIGHT_ANKLE).getY();

float skeleton2Left = skeleton2.getNodePosition(TrackerBodyPosition.LEFT_ANKLE).getY();
float skeleton2Right = skeleton2.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE).getY();
float skeleton2Left = skeleton2.getNodePosition(TrackerPosition.LEFT_ANKLE).getY();
float skeleton2Right = skeleton2.getNodePosition(TrackerPosition.RIGHT_ANKLE).getY();

float dist1 = Math.abs(skeleton1Left - skeleton1Right);
float dist2 = Math.abs(skeleton2Left - skeleton2Right);
Expand Down
22 changes: 11 additions & 11 deletions src/main/java/dev/slimevr/autobone/SimpleSkeleton.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
import dev.slimevr.poserecorder.TrackerFrameData;
import io.eiren.vr.processor.HumanSkeletonWithLegs;
import io.eiren.vr.processor.HumanSkeletonWithWaist;
import io.eiren.vr.processor.TrackerBodyPosition;
import io.eiren.vr.processor.TransformNode;
import io.eiren.vr.trackers.TrackerPosition;
import io.eiren.vr.trackers.TrackerUtils;
import io.eiren.yaml.YamlFile;

Expand Down Expand Up @@ -121,7 +121,7 @@ public SimpleSkeleton(Map<String, Float> configs) {

public void setPoseFromFrame(TrackerFrame[] frame) {

TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.HMD);
TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.HMD);

if(hmd != null) {
if(hmd.hasData(TrackerFrameData.ROTATION)) {
Expand All @@ -134,24 +134,24 @@ public void setPoseFromFrame(TrackerFrame[] frame) {
}
}

TrackerFrame chest = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.CHEST, TrackerBodyPosition.WAIST);
TrackerFrame chest = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.CHEST, TrackerPosition.WAIST);
setRotation(chest, neckNode);

TrackerFrame waist = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.WAIST, TrackerBodyPosition.CHEST);
TrackerFrame waist = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.WAIST, TrackerPosition.CHEST);
setRotation(waist, chestNode);

TrackerFrame leftLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.LEFT_LEG);
TrackerFrame rightLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.RIGHT_LEG);
TrackerFrame leftLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.LEFT_LEG);
TrackerFrame rightLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.RIGHT_LEG);

averagePelvis(waist, leftLeg, rightLeg);

setRotation(leftLeg, leftHipNode);
setRotation(rightLeg, rightHipNode);

TrackerFrame leftAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.LEFT_ANKLE);
TrackerFrame leftAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.LEFT_ANKLE);
setRotation(leftAnkle, rightKneeNode);

TrackerFrame rightAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.RIGHT_ANKLE);
TrackerFrame rightAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.RIGHT_ANKLE);
setRotation(rightAnkle, leftKneeNode);

updatePose();
Expand Down Expand Up @@ -292,11 +292,11 @@ public TransformNode getNode(String node) {
return nodes.get(node);
}

public TransformNode getNode(TrackerBodyPosition bodyPosition) {
public TransformNode getNode(TrackerPosition bodyPosition) {
return getNode(bodyPosition, false);
}

public TransformNode getNode(TrackerBodyPosition bodyPosition, boolean rotationNode) {
public TransformNode getNode(TrackerPosition bodyPosition, boolean rotationNode) {
if(bodyPosition == null) {
return null;
}
Expand Down Expand Up @@ -328,7 +328,7 @@ public Vector3f getNodePosition(String node) {
return transformNode != null ? transformNode.worldTransform.getTranslation() : null;
}

public Vector3f getNodePosition(TrackerBodyPosition bodyPosition) {
public Vector3f getNodePosition(TrackerPosition bodyPosition) {
TransformNode node = getNode(bodyPosition);
if(node == null) {
return null;
Expand Down
43 changes: 43 additions & 0 deletions src/main/java/dev/slimevr/bridge/Bridge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dev.slimevr.bridge;

import io.eiren.util.ann.VRServerThread;
import io.eiren.vr.trackers.ShareableTracker;

/**
* Bridge handles sending and recieving tracker data
* between SlimeVR and other systems like VR APIs (SteamVR, OpenXR, etc),
* apps and protocols (VMC, WebSocket, TIP). It can create and manage
* tracker recieved from the <b>remote side</b> or send shared <b>local
* trackers</b> to the other side.
*/
public interface Bridge {

@VRServerThread
public void dataRead();

@VRServerThread
public void dataWrite();

/**
* Adds shared tracker to the bridge. Bridge should notify the
* other side of this tracker, if it's the type of tracker
* this bridge serves, and start sending data each update
* @param tracker
*/
@VRServerThread
public void addSharedTracker(ShareableTracker tracker);

/**
* Removes tracker from a bridge. If the other side supports
* tracker removal, bridge should notify it and stop sending
* new data. If it doesn't support tracker removal, the bridge
* can either stop sending new data, or keep sending it if it's
* available.
* @param tracker
*/
@VRServerThread
public void removeSharedTracker(ShareableTracker tracker);

@VRServerThread
public void startBridge();
}
9 changes: 9 additions & 0 deletions src/main/java/dev/slimevr/bridge/BridgeThread.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.slimevr.bridge;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(value = RetentionPolicy.SOURCE)
public @interface BridgeThread {

}
Loading

0 comments on commit f3e2b2c

Please sign in to comment.