From be843a0035d820fbe7527ca7119acc60ba5682ac Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 23 Oct 2015 17:32:54 -0700 Subject: [PATCH] adding a rnning average on the velocity values returned by the hydra and adding a simple js to test --- examples/controllers/handPosesDebug.js | 102 ++++++++++++++++++ .../src/input-plugins/SixenseManager.h | 2 +- 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 examples/controllers/handPosesDebug.js diff --git a/examples/controllers/handPosesDebug.js b/examples/controllers/handPosesDebug.js new file mode 100644 index 0000000000..c4e7352445 --- /dev/null +++ b/examples/controllers/handPosesDebug.js @@ -0,0 +1,102 @@ +// +// handPosesDebug.js +// examples +// +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + + + +function makeSphere(color) { + var SPHERE_SIZE = 0.05; + var sphere = Overlays.addOverlay("sphere", { + position: { x: 0, y: 0, z: 0 }, + size: SPHERE_SIZE, + color: color, + alpha: 1.0, + solid: true, + visible: true, + }); + + return sphere; +} + + +var NUM_HANDS = 2; +var NUM_SPHERES_PER_HAND = 2; +var LEFT_HAND = 0; +var RIGHT_HAND = 1; + +var COLORS = [ { red: 255, green: 0, blue: 0 }, { red: 0, green: 0, blue: 255 } ]; + +function index(handNum, indexNum) { + return handNum * NUM_HANDS + indexNum; +} + +var app = {}; + + +function setup() { + app.spheres = new Array(); + + for (var h = 0; h < NUM_HANDS; h++) { + for (var s = 0; s < NUM_SPHERES_PER_HAND; s++) { + var i = index(h, s); + app.spheres[i] = makeSphere(COLORS[h]); + print("Added Sphere num " + i + " = " + JSON.stringify(app.spheres[i])); + } + } +} + +function updateHand(handNum) { + + var pose; + var handName = "right"; + if (handNum == LEFT_HAND) { + pose = MyAvatar.getLeftHandPose(); + handName = "left"; + } else { + pose = MyAvatar.getRightHandPose(); + handName = "right"; + } + + if (pose.valid) { + //print(handName + " hand moving" + JSON.stringify(pose)); + Overlays.editOverlay(app.spheres[index(handNum, 0)], { + position: pose.translation, + visible: true, + }); + var vpos = Vec3.sum(pose.velocity, pose.translation); + Overlays.editOverlay(app.spheres[index(handNum, 1)], { + position: vpos, + visible: true, + }); + } else { + Overlays.editOverlay(app.spheres[index(handNum, 0)], { + visible: false + }); + + Overlays.editOverlay(app.spheres[index(handNum, 1)], { + visible: false + }); + } +} + +function update() { + updateHand(LEFT_HAND); + updateHand(RIGHT_HAND); +} + +function scriptEnding() { + print("Removing spheres = " + JSON.stringify(app.spheres)); + for (var i = 0; i < app.spheres.length; i++) { + Overlays.deleteOverlay(app.spheres[i]); + } +} + +setup(); +Script.update.connect(update); +Script.scriptEnding.connect(scriptEnding); diff --git a/libraries/input-plugins/src/input-plugins/SixenseManager.h b/libraries/input-plugins/src/input-plugins/SixenseManager.h index c0d908ed45..3bc82b365b 100644 --- a/libraries/input-plugins/src/input-plugins/SixenseManager.h +++ b/libraries/input-plugins/src/input-plugins/SixenseManager.h @@ -121,7 +121,7 @@ private: } }; - static const int MAX_NUM_AVERAGING_SAMPLES = 10; // At ~100 updates per seconds this means averaging over ~.1s + static const int MAX_NUM_AVERAGING_SAMPLES = 1000; // At ~100 updates per seconds this means averaging over ~.1s using MovingAverageMap = std::map< int, MovingAverage< glm::vec3, MAX_NUM_AVERAGING_SAMPLES> >; MovingAverageMap _collectedSamples;