Move in MSRAbot simulation software

This commit is contained in:
David Baumert 2020-04-24 00:29:31 -07:00
Родитель a8eff36620
Коммит 706b621821
44 изменённых файлов: 49529 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,54 @@
#![MARR_logo.png](/docs/MARR_logo.png)[Microsoft Applied Robotics Research Library: Labanotation Suite](/README.md)
# **MSRAbot Simulation Software**
## **Description**
The MSRAbot Simulation Software uses javascript and html code to implement an animated 3D model of the robot and a user interface for selecting and rendering gestures described in the JSON format. A temporary local HTTP server invoked with python or an existing server can be used to host the software and the simulation is run within a modern web browser. The user can choose from a collection of sample gestures, or select a new gesture captured and created using this project's Gesture Authoring Tools.
## **Installation**
Copy the entire **MSRAbotSimulation** folder into a convenient folder on your local computer.
**Note:** If you are already running or have access to an HTTP server, you can copy this folder into that server's file tree.
## **Starting Up**
1. Open a command prompt or terminal session with access to your python installation
1. Navigate to the MSRAbotSimulation folder containing the file index.html
1. Run the following command (for python 2.3):
```
> python -m SimpleHTTPServer
```
**Note:** If you are running python version 3 or higher, run this command:
```
> python3 -m http.server
```
4. Open your favorite browser and open the URL http://localhost:8000
**Note:** If you have installed the folder into an existing HTTP server, you do not need to run the previous python commands but will need to adjust the URL for that particular server. For example: http://[your_server_name/your_installation_path]/MSRAbotSimulation/index.html:8000
**MSRAbot Model Running in a Browser**
![LabanotationSuite_MSRAbot_in_browser.png](docs/LabanotationSuite_MSRAbot_in_browser.png)
## **Viewing Gestures**
Animated gestures are viewed in the browser by selecting and loading JSON files. View angle, panning, and zoom are available by clicking and holding mouse buttons and scroll wheels within the scene. Animation speed can be adjusted with a slider bar in the upper-right control panel.
**Select a Gesture**
Changing the gesture to be viewed is performed by clicking the drop-down text box in the upper-right corner of the browser screen. A selection of sample gestures are available, as well as an ability to load a newly created gesture stored on the local computer:
![LabanotationSuite_Gesture_selection.png](docs/LabanotationSuite_Gesture_selection.png)
**Select a Local Gesture File**
New gesture files created by the user can be viewed by selecting Import/Upload JSON File in the drop-down text box and then navigating to the file on the local computer:
![LabanotationSuite_Gesture_File_selection.png](docs/LabanotationSuite_Gesture_File_selection.png)
**Show Model Helpers**
In the future, different robot models may be made available for rendering gestures. Until then, viewing skeletal components of the selected robot model is possible by opening the Robot menu, clicking the showHelpers box, and adjusting the opacity of the model surface as desired.
![LabanotationSuite_Show_Helpers.png](docs/LabanotationSuite_Show_Helpers.png)

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 146 KiB

Двоичные данные
MSRAbotSimulation/docs/LabanotationSuite_Gesture_selection.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 179 KiB

Двоичные данные
MSRAbotSimulation/docs/LabanotationSuite_MSRAbot_in_browser.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 752 KiB

Двоичные данные
MSRAbotSimulation/docs/LabanotationSuite_Show_Helpers.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 839 KiB

Двоичные данные
MSRAbotSimulation/images/Logo_RobotHandshake.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 58 KiB

Просмотреть файл

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>MSRAbot</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<script type="text/javascript" src="js/libs/three.min.js"></script>
<script type="text/javascript" src="js/libs/stats.min.js"></script>
<script type="text/javascript" src="js/libs/dat.gui.min.js"></script>
<script type="text/javascript" src="js/libs/Tween.js"></script>
<script type="text/javascript" src="js/libs/loaders/GLTFLoader.js"></script>
<script type="text/javascript" src="js/libs/controls/DragControls.js"></script>
<script type="text/javascript" src="js/libs/controls/OrbitControls.js"></script>
<script type="text/javascript" src="js/libs/controls/TransformControls.js"></script>
<script>
var dev_version = '' + Math.floor(Math.random() * 100);
var js_files = ['utils', 'msrabot', 'labanotation', 'app'];
for (var i = 0; i < js_files.length; i++) {
document.write('<script src="js/' + js_files[i] + '.js?rand=' + dev_version + '"\><\/script>');
}
</script>
</head>
<body style="touch-action: none;">
<main id="app" style="width: 100%; height: 100%; "></main>
<div style="z-index:10001; position:fixed; left: 0; top: 0; color: #000; "><img src="images/Logo_RobotHandshake.png" width="64px" /></div>
<div style="z-index:10001; position:fixed; left: 80px; top: 0; color: #000;">
<div style="font-size: 1.8em; font-weight: bold; margin-bottom: -0.3em">Microsoft Applied Robotics Research Library</div><br />
<div style="font-size: 1.5em; font-weight: normal; margin-top: -0.3em"><a href="https://github.com/microsoft/LabanotationSuite">Labanotation Suite</a>: JSON Gesture Performance</div>
</div>
<script>
//
// no scrollbars
document.body.style.overflow = 'hidden';
run();
//--------------------------------------------------------------------------------------------
function run() {
_app = new APP(document.getElementById('app'));
if (_app) {
_app.initialize();
animate();
}
}
//--------------------------------------------------------------------------------------------
function animate() {
requestAnimationFrame(animate);
_app.update();
_app.render();
}
</script>
</body>
</html>

566
MSRAbotSimulation/js/app.js Normal file
Просмотреть файл

@ -0,0 +1,566 @@
//--------------------------------------------------------------------------------------------
// Copyright(c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
'use strict';
var _app = null;
//--------------------------------------------------------------------------------------------
var APP = function (domTarget)
{
this.self = this;
this.container = domTarget;
this.clock = null;
this.renderer = null;
this.scene = null;
this.camera = null;
this.enableStats = false;
this.stats = null;
this.nativeWidth = 0;
this.nativeHeight = 0;
this.screenWidth = window.innerWidth;
this.screenHeight = window.innerHeight;
this.hiding = null;
this.eventDoneInit = null;
//
// objects & modules
this.msrabot = null;
this.labanotation = null;
//
// input events
this.mouse = new THREE.Vector3(0, 0, 0);
this.touches = [];
}
//--------------------------------------------------------------------------------------------
APP.prototype.constructor = APP;
//--------------------------------------------------------------------------------------------
APP.prototype.initialize = function initAPP()
{
this.setupRenderer();
this.setupDomEvents();
this.setupMiscellaneous();
this.createDebugLabels();
this.initializeScene();
//
// load default labanotation file
this.loadNewFile(this.params.gesture);
}
//--------------------------------------------------------------------------------------------
APP.prototype.setupRenderer = function ()
{
this.clock = new THREE.Clock();
this.renderer = new THREE.WebGLRenderer({ antialias: true });
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.setSize(this.screenWidth, this.screenHeight);
this.renderer.setClearColor(0x000080, 1);
this.renderer.shadowMap.enabled = true;
this.container.appendChild(this.renderer.domElement);
this.nativeWidth = this.renderer.domElement.clientWidth;
this.nativeHeight = this.renderer.domElement.clientHeight;
//
// stats
if (this.enableStats) {
this.stats = new Stats();
this.container.appendChild(this.stats.dom);
}
}
//--------------------------------------------------------------------------------------------
APP.prototype.setupDomEvents = function ()
{
window.addEventListener('resize', this.onWindowResize.bind(this), false);
document.addEventListener('keydown', this.onDocumentKeyDown.bind(this), false);
document.addEventListener('mousedown', this.onDocumentMouseDown.bind(this), false);
document.addEventListener('mousemove', this.onDocumentMouseMove.bind(this), false);
document.addEventListener('mouseup', this.onDocumentMouseUp.bind(this), false);
document.addEventListener('wheel', this.onDocumentMouseWheel.bind(this), false);
document.addEventListener('touchstart', this.onDocumentTouchStart.bind(this), false);
document.addEventListener('touchmove', this.onDocumentTouchMove.bind(this), false);
document.addEventListener('touchend', this.onDocumentTouchEnd.bind(this), false);
document.addEventListener('contextmenu', this.onContextMenu.bind(this), false);
}
//--------------------------------------------------------------------------------------------
APP.prototype.setupMiscellaneous = function ()
{
var scope = this;
//
// create form element to support uploading of local files
var form = document.createElement('form');
form.style.display = 'none';
document.body.appendChild(form);
this.fileInput = document.createElement('input');
this.fileInput.multiple = true;
this.fileInput.type = 'file';
this.fileInput.addEventListener('change', function () {
scope.importFile(scope.fileInput.files);
form.reset();
});
form.appendChild(this.fileInput);
//
// dat.GUI
var gui = new dat.GUI({ width: 400 });
var files = ['Ges01_wavehand', 'Ges02_balancinghands', 'Ges03_drawlines', 'Ges04_comehere', 'Ges05_demopoint', 'Ges06_chickenwing'];
var fileNames = [];
fileNames.push("-- Import/Upload JSON File --");
for (var i = 0; i < files.length; i++) {
fileNames.push(files[i] + ".naive");
fileNames.push(files[i] + ".total");
fileNames.push(files[i] + ".parallel");
}
this.params = {
gesture: fileNames[2],
animationSpeed: 1,
opacity: 0.4,
staticElbow: true,
showHelpers: false,
};
var folder = gui.addFolder('Labanotation');
folder.add(this.params, 'gesture', fileNames).onChange(function () {
if (scope.params.gesture == fileNames[0]) {
scope.fileInput.click();
} else
scope.loadNewFile(scope.params.gesture);
});
folder.add(this.params, 'animationSpeed', 0.0, 3.0).step(0.01).onChange(function () {
});
folder.open();
folder = gui.addFolder('MSRAbot');
folder.add(this.params, 'staticElbow').onChange(function () {
if (scope.msrabot)
scope.msrabot.setStaticElbow(scope.params.staticElbow);
});
folder.add(this.params, 'showHelpers').onChange(function () {
if (scope.msrabot)
scope.msrabot.setShowHelpers(scope.params.showHelpers);
});
folder.add(this.params, 'opacity', 0.0, 1.0).step(0.01).onChange(function () {
scope.changeMSRAbotOpacity(scope.params.opacity);
});
// folder.open();
}
//--------------------------------------------------------------------------------------------
APP.prototype.initializeScene = function ()
{
var scope = this;
this.scene = new THREE.Scene();
this.scene.background = new THREE.Color(0xf0f0f0);
this.camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 10000);
this.camera.position.set(0, 260, 600);
this.camera.lookAt(0, 160, 0);
this.scene.add(this.camera);
this.scene.add(new THREE.AmbientLight(0x707070));
//
// lights
{
var intensity = 1.5;
var distance = 0;
var angle = Math.PI / 4;
var penumbra = 0.5;
var shadow_mapsize = 4096;
var shadow_bias = -0.0000222;
var light = new THREE.SpotLight(0x606060, intensity, distance, angle, penumbra);
light.position.set(-430, 825, 1000);
light.castShadow = true;
light.shadow = new THREE.LightShadow(new THREE.PerspectiveCamera(120, 1, 20, 5000));
light.shadow.bias = shadow_bias;
light.shadow.mapSize.width = shadow_mapsize;
light.shadow.mapSize.height = shadow_mapsize;
this.scene.add(light);
var light = new THREE.SpotLight(0x303030, intensity, distance, angle, penumbra);
light.position.set(-430, 825, -1000);
light.castShadow = true;
light.shadow = new THREE.LightShadow(new THREE.PerspectiveCamera(120, 1, 20, 5000));
light.shadow.bias = shadow_bias;
light.shadow.mapSize.width = shadow_mapsize;
light.shadow.mapSize.height = shadow_mapsize;
this.scene.add(light);
}
//
// create plane MSRAbot stands on
var planeGeometry = new THREE.PlaneBufferGeometry(2000, 2000);
var planeMaterial = new THREE.MeshPhongMaterial({ color: 0xf0f0f0, flatShading: true, side: THREE.FrontSide });
var plane = new THREE.Mesh(planeGeometry, planeMaterial);
planeGeometry.rotateX(-Math.PI / 2);
plane.receiveShadow = true;
this.scene.add(plane);
var helper = new THREE.GridHelper(2000, 100);
helper.position.y = plane.position.y + 1;
helper.material.opacity = 0.25;
helper.material.transparent = true;
this.scene.add(helper);
//
// create camera and scene panning controls
this.controls = new THREE.OrbitControls(this.camera, this.renderer.domElement);
this.controls.damping = 0.2;
this.controls.addEventListener('change', function () {
scope.render();
});
this.controls.addEventListener('start', function () {
scope.cancelHideTransorm();
});
this.controls.addEventListener('end', function () {
scope.delayHideTransform();
});
this.controls.target.set(0, 160, 0);
this.controls.update();
this.transformControl = new THREE.TransformControls(this.camera, this.renderer.domElement);
this.transformControl.showZ = false;
this.transformControl.addEventListener('change', function () {
scope.render();
});
this.transformControl.addEventListener('dragging-changed', function (event) {
scope.controls.enabled = !event.value;
});
this.scene.add(this.transformControl);
// Hiding transform situation is a little in a mess :()
this.transformControl.addEventListener('change', function () {
scope.cancelHideTransorm();
});
this.transformControl.addEventListener('mouseDown', function () {
scope.cancelHideTransorm();
});
this.transformControl.addEventListener('mouseUp', function () {
scope.delayHideTransform();
});
//
// set up custom event used by labanotation and msrabot modules
// signaling they''re done initializing
this.eventDoneInit = new CustomEvent('doneInit', { "bubbles": true, "cancelable": false });
document.addEventListener('doneInit', function (e) {
if ((scope.msrabot != null) && (scope.msrabot.doneInitializing) && (scope.labanotation != null) && (scope.labanotation.doneInitializing))
scope.doneInitializing();
});
//
// create MSRAbot module
this.msrabot = new MSRAbot(this);
if (this.msrabot != null)
this.msrabot.initialize(plane.position);
//
// create labanotation handling module
this.labanotation = new Labanotation(this);
if (this.labanotation != null)
this.labanotation.initialize();
}
//--------------------------------------------------------------------------------------------
APP.prototype.createDebugLabels = function ()
{
var x = 10;
var y = 86;
this.dbgLabel1 = this.createDebugLabel('dbgLabel1', x, y);
y += 28;
//this.dbgLabel2 = this.createDebugLabel('dbgLabel2', x, y);
//y += 28;
//this.dbgLabel3 = this.createDebugLabel('dbgLabel3', x, y);
}
//--------------------------------------------------------------------------------------------
APP.prototype.createDebugLabel = function (name, x, y)
{
var dbgLabel = document.createElement('div');
dbgLabel.id = name;
dbgLabel.textContent = '';
dbgLabel.style.left = '' + x + 'px';
dbgLabel.style.top = '' + y + 'px';
dbgLabel.style.opacity = "0.8";
dbgLabel.style.padding = "4px";
dbgLabel.style.borderBottom = "1px solid #363636";
dbgLabel.style.fontFamily = "Monospace";
dbgLabel.style.color = "#000";
dbgLabel.style.zIndex = 10002;
dbgLabel.style.position = "fixed";
document.body.appendChild(dbgLabel);
return dbgLabel;
}
//--------------------------------------------------------------------------------------------
APP.prototype.doneInitializing = function ()
{
}
//--------------------------------------------------------------------------------------------
APP.prototype.loadNewFile = function (filename)
{
if (this.labanotation != null)
this.labanotation.loadNewFile(filename);
}
//--------------------------------------------------------------------------------------------
APP.prototype.changeMSRAbotOpacity = function (opacity)
{
if (this.msrabot != null)
this.msrabot.changeOpacity(opacity);
}
//--------------------------------------------------------------------------------------------
APP.prototype.importFile = function (files)
{
if (files.length < 1)
return;
var scope = this;
var map = {};
var file = files[0];
map[file.name] = file;
var manager = new THREE.LoadingManager();
manager.setURLModifier(function (url) {
var file = filesMap[url];
if (file) {
console.log('Loading', url);
return URL.createObjectURL(file);
}
return url;
});
for (var i = 0; i < files.length; i++) {
scope.loadFile(files[i], manager);
}
}
//--------------------------------------------------------------------------------------------
APP.prototype.loadFile = function (file, manager)
{
var scope = this;
var filename = file.name;
var extension = filename.split('.').pop().toLowerCase();
var reader = new FileReader();
reader.addEventListener('progress', function (event) {
var size = '(' + Math.floor(event.total / 1000).toFixed(0) + ' KB)';
var progress = Math.floor((event.loaded / event.total) * 100) + '%';
console.log('Loading', filename, size, progress);
});
if (extension != 'json') {
alert("please import a file with extension .json");
return;
}
//
// read json file
reader.addEventListener('load', function (event) {
var contents = event.target.result;
if (contents.indexOf('postMessage') !== - 1) {
var blob = new Blob([contents], { type: 'text/javascript' });
var url = URL.createObjectURL(blob);
var worker = new Worker(url);
worker.onmessage = function (event) {
event.data.metadata = { version: 2 };
scope.labanotation.loadLabanotationData(filename, event.data);
};
worker.postMessage(Date.now());
return;
}
// >= 3.0
var data;
try {
data = JSON.parse(contents);
} catch (error) {
alert(error);
return;
}
scope.labanotation.loadLabanotationData(filename, data);
}, false);
reader.readAsText(file);
}
//--------------------------------------------------------------------------------------------
APP.prototype.delayHideTransform = function ()
{
this.cancelHideTransorm();
this.hideTransform();
}
//--------------------------------------------------------------------------------------------
APP.prototype.hideTransform = function ()
{
var scope = this;
this.hiding = setTimeout(function () {
scope.transformControl.detach(scope.transformControl.object);
}, 2500);
}
//--------------------------------------------------------------------------------------------
APP.prototype.cancelHideTransorm = function ()
{
if (this.hiding) {
clearTimeout(this.hiding);
this.hiding = null;
}
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentKeyDown = function (event)
{
switch (event.keyCode) {
case 0x41: // 'A'
break;
case 0x44: // 'D'
break;
}
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentMouseDown = function (event)
{
// event.preventDefault();
this.mouse.x = (event.clientX / this.nativeWidth) * 2 - 1;
this.mouse.y = -(event.clientY / this.nativeHeight) * 2 + 1;
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentMouseMove = function (event)
{
// event.preventDefault();
this.mouse.x = (event.clientX / this.nativeWidth) * 2 - 1;
this.mouse.y = -(event.clientY / this.nativeHeight) * 2 + 1;
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentMouseUp = function (event)
{
// event.preventDefault();
this.mouse.x = (event.clientX / this.nativeWidth) * 2 - 1;
this.mouse.y = -(event.clientY / this.nativeHeight) * 2 + 1;
}
//--------------------------------------------------------------------------------------------
APP.prototype.convertTouchEvents = function (touches)
{
this.touches = [];
for (var i = 0; i < event.touches.length; i++) {
this.touches.push(
new THREE.Vector2(
( touches[i].pageX / this.nativeWidth) * 2 - 1,
(-touches[i].pageY / this.nativeHeight) * 2 + 1));
}
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentTouchStart = function (event)
{
// event.preventDefault();
this.convertTouchEvents(event.touches);
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentTouchMove = function (event)
{
// event.preventDefault();
this.convertTouchEvents(event.touches);
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentTouchEnd = function (event)
{
// event.preventDefault();
this.convertTouchEvents(event.touches);
}
//--------------------------------------------------------------------------------------------
APP.prototype.onDocumentMouseWheel = function (event)
{
// event.preventDefault();
}
//--------------------------------------------------------------------------------------------
APP.prototype.onContextMenu = function (event)
{
// event.preventDefault();
}
//--------------------------------------------------------------------------------------------
APP.prototype.onWindowResize = function ()
{
this.nativeWidth = this.renderer.domElement.clientWidth;
this.nativeHeight = this.renderer.domElement.clientHeight;
this.screenWidth = window.innerWidth;
this.screenHeight = window.innerHeight;
if (this.camera) {
this.camera.aspect = window.innerWidth / window.innerHeight;
this.camera.updateProjectionMatrix();
}
if (this.renderer)
this.renderer.setSize(this.screenWidth, this.screenHeight);
this.render();
}
//--------------------------------------------------------------------------------------------
APP.prototype.update = function ()
{
var delta = this.clock.getDelta();
TWEEN.update();
if (this.stats)
this.stats.update();
if (this.labanotation != null)
this.labanotation.update(this.clock);
if (this.msrabot != null)
this.msrabot.update(this.clock);
}
//--------------------------------------------------------------------------------------------
APP.prototype.render = function ()
{
this.renderer.clear();
this.renderer.render(this.scene, this.camera);
}
//--------------------------------------------------------------------------------------------

Просмотреть файл

@ -0,0 +1,307 @@
//--------------------------------------------------------------------------------------------
// Copyright(c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
Labanotation = function (app)
{
this.app = app;
this.filename = null;
this.labanotationName = "";
this.duration = 0;
this.animationStart = 0;
this.start_time = 0;
this.end_time = 0;
this.animationTestIndex = 0;
this.doneInitializing = false;
}
Labanotation.prototype.constructor = Labanotation;
//--------------------------------------------------------------------------------------------
Labanotation.prototype.initialize = function initLabanotation()
{
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.loadNewFile = function (filename)
{
var gesture_file = "labanotation/" + filename + ".json";
this.loadLabanotation(gesture_file);
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.loadLabanotation = function (filename)
{
var scope = this;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (event) {
if (xhr.readyState == XMLHttpRequest.DONE) {
if (xhr.status == 200 || xhr.status == 0) {
if (xhr.responseText.length > 0) {
var data = undefined;
try {
data = JSON.parse(xhr.responseText);
} catch (error) {
console.warn("FAILED to parse Labanotation buffer.");
console.error(error);
}
if (data) {
scope.loadLabanotationData(filename, data);
scope.doneInitializing = true;
//
// done. Fire init complete event
if (scope.app.eventDoneInit != null)
document.dispatchEvent(scope.app.eventDoneInit);
}
data = undefined;
}
} else {
console.error("Couldn't load Labanotation json file [code " + xhr.status + "]");
}
}
}
xhr.addEventListener("abort", function () {
console.warn("XMLHttpRequest abort.");
}, false);
xhr.addEventListener('error', function (event) {
console.warn("XMLHttpRequest error.");
}, false);
xhr.overrideMimeType("text/xml;");
xhr.open("GET", filename, true);
xhr.send(null);
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.loadLabanotationData = function (filename, data)
{
this.parseLabanotation(data);
this.filename = filename;
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.parseLabanotation = function (data)
{
var scope = this;
this.labanotation = null;
this.labanotationName = "";
this.animationStart = 0;
this.duration = 0;
//
// get node with labanotation information
for (var key in data) {
if (data.hasOwnProperty(key)) {
scope.labanotation = data[key]
scope.labanotationName = key;
var min, max;
for (var position in scope.labanotation) {
if (scope.labanotation.hasOwnProperty(position)) {
var obj = scope.labanotation[position];
var time = obj["start time"];
if (min === undefined) {
min = time;
max = time;
} else {
min = Math.min(min, time);
max = Math.max(max, time);
}
scope.convertLabanotation2Vec(obj, "right elbow");
scope.convertLabanotation2Vec(obj, "right wrist");
scope.convertLabanotation2Vec(obj, "left elbow");
scope.convertLabanotation2Vec(obj, "left wrist");
}
}
scope.start_time = min;
scope.end_time = max;
scope.duration = (max - min);
}
}
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.convertLabanotation2Vec = function (data, key)
{
var obj = data[key];
var dir = obj[0].toLowerCase();
var lv = obj[1].toLowerCase();
var phi = 0;
var theta = 180;
switch (lv) {
case "high":
theta = 45;
break;
case "normal":
theta = 90;
break;
case "low":
theta = 135;
break;
default:
theta = 180
console.log("Unknown level '" + lv + "' for '" + key + "'.");
break;
}
switch (dir) {
case "forward":
phi = 0;
break;
case "right forward":
phi = -45;
break;
case "right":
phi = -90;
break;
case "right backward":
phi = -135;
break;
case "backward":
phi = 180;
break;
case "left backward":
phi = 135;
break;
case "left":
phi = 90;
break;
case "left forward":
phi = 45;
break;
case "place":
if (lv == "high") {
theta = 5;
phi = 0;
} else if (lv == "low") {
theta = 175;
phi = 0;
} else {
theta = 180;
phi = 0;
console.log("Unknown place for '" + key + "'.");
}
break;
default:
phi = 0;
console.log("Unknown direction for '" + key + "'.");
break;
}
theta = THREE.MathUtils.degToRad(theta);
phi = THREE.MathUtils.degToRad(phi);
// length of the limb
y = Math.cos(theta);
x = Math.sin(theta) * Math.sin(phi);
z = Math.sin(theta) * Math.cos(phi);
//
// write data back into object
obj["theta"] = theta;
obj["phi"] = phi;
obj["vector"] = new THREE.Vector3(x, y, z);
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.getRotation = function (theta, phi)
{
var result = [];
result["theta"] = theta;
result["phi"] = phi;
var y = Math.cos(theta);
var x = Math.sin(theta) * Math.sin(phi);
var z = Math.sin(theta) * Math.cos(phi);
result["vector"] = new THREE.Vector3(x, y, z);
return result;
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.interpolateRotation = function (obj1, obj2, s, name)
{
var theta, phi;
if (obj1 == null) {
theta = obj2[name]["theta"];
phi = obj2[name]["phi"];
} else {
theta = THREE.MathUtils.lerp(obj1[name]["theta"], obj2[name]["theta"], s);
phi = THREE.MathUtils.lerp(obj1[name]["phi"], obj2[name]["phi"], s);
}
return this.getRotation(theta, phi);
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.updateAnimation = function (time)
{
var scope = this;
var objPrevious = null;
var timePrevious = 0;
for (var position in scope.labanotation) {
if (scope.labanotation.hasOwnProperty(position)) {
var obj = scope.labanotation[position];
var start_time = obj["start time"];
if ((timePrevious <= time) && (time <= start_time)) {
var s = (time - timePrevious) / (start_time - timePrevious)
var re = this.interpolateRotation(objPrevious, obj, s, "right elbow");
var rw = this.interpolateRotation(objPrevious, obj, s, "right wrist");
var le = this.interpolateRotation(objPrevious, obj, s, "left elbow");
var lw = this.interpolateRotation(objPrevious, obj, s, "left wrist");
if (scope.app.msrabot) {
scope.app.msrabot.updateBody(re, rw, le, lw);
}
return;
}
objPrevious = obj;
timePrevious = start_time;
}
}
}
//--------------------------------------------------------------------------------------------
Labanotation.prototype.update = function (clock)
{
if (!this.doneInitializing)
return;
var elapsedTime = clock.getElapsedTime() * 1000.0;
if (this.animationStart == 0)
this.animationStart = elapsedTime;
var timeIndex = (elapsedTime - this.animationStart) * this.app.params.animationSpeed;
if (timeIndex > this.duration) {
//
// reset
timeIndex = 0;
this.animationStart = elapsedTime;
}
if (this.app.dbgLabel1)
this.app.dbgLabel1.textContent = "time: " + timeIndex.toFixed(0) + "ms, duration: " + this.duration.toFixed(0) + "ms";
this.updateAnimation(this.start_time + timeIndex);
}

Просмотреть файл

@ -0,0 +1,889 @@
/**
* Tween.js - Licensed under the MIT license
* https://github.com/tweenjs/tween.js
* ----------------------------------------------
*
* See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.
* Thank you all, you're awesome!
*/
var TWEEN = TWEEN || (function () {
var _tweens = [];
return {
getAll: function () {
return _tweens;
},
removeAll: function () {
_tweens = [];
},
add: function (tween) {
_tweens.push(tween);
},
remove: function (tween) {
var i = _tweens.indexOf(tween);
if (i !== -1) {
_tweens.splice(i, 1);
}
},
update: function (time, preserve) {
if (_tweens.length === 0) {
return false;
}
var i = 0;
time = time !== undefined ? time : TWEEN.now();
while (i < _tweens.length) {
if (_tweens[i].update(time) || preserve) {
i++;
} else {
_tweens.splice(i, 1);
}
}
return true;
}
};
})();
// Include a performance.now polyfill
(function () {
// In node.js, use process.hrtime.
if (this.window === undefined && this.process !== undefined) {
TWEEN.now = function () {
var time = process.hrtime();
// Convert [seconds, microseconds] to milliseconds.
return time[0] * 1000 + time[1] / 1000;
};
}
// In a browser, use window.performance.now if it is available.
else if (this.window !== undefined &&
window.performance !== undefined &&
window.performance.now !== undefined) {
// This must be bound, because directly assigning this function
// leads to an invocation exception in Chrome.
TWEEN.now = window.performance.now.bind(window.performance);
}
// Use Date.now if it is available.
else if (Date.now !== undefined) {
TWEEN.now = Date.now;
}
// Otherwise, use 'new Date().getTime()'.
else {
TWEEN.now = function () {
return new Date().getTime();
};
}
}).bind(this)();
TWEEN.Tween = function (object) {
var _object = object;
var _valuesStart = {};
var _valuesEnd = {};
var _valuesStartRepeat = {};
var _duration = 1000;
var _repeat = 0;
var _repeatDelayTime;
var _yoyo = false;
var _isPlaying = false;
var _reversed = false;
var _delayTime = 0;
var _startTime = null;
var _easingFunction = TWEEN.Easing.Linear.None;
var _interpolationFunction = TWEEN.Interpolation.Linear;
var _chainedTweens = [];
var _onStartCallback = null;
var _onStartCallbackFired = false;
var _onUpdateCallback = null;
var _onCompleteCallback = null;
var _onStopCallback = null;
// Set all starting values present on the target object
for (var field in object) {
_valuesStart[field] = parseFloat(object[field], 10);
}
this.to = function (properties, duration) {
if (duration !== undefined) {
_duration = duration;
}
_valuesEnd = properties;
return this;
};
this.start = function (time) {
TWEEN.add(this);
_isPlaying = true;
_onStartCallbackFired = false;
_startTime = time !== undefined ? time : TWEEN.now();
_startTime += _delayTime;
for (var property in _valuesEnd) {
// Check if an Array was provided as property value
if (_valuesEnd[property] instanceof Array) {
if (_valuesEnd[property].length === 0) {
continue;
}
// Create a local copy of the Array with the start value at the front
_valuesEnd[property] = [_object[property]].concat(_valuesEnd[property]);
}
// If `to()` specifies a property that doesn't exist in the source object,
// we should not set that property in the object
if (_valuesStart[property] === undefined) {
continue;
}
_valuesStart[property] = _object[property];
if ((_valuesStart[property] instanceof Array) === false) {
_valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings
}
_valuesStartRepeat[property] = _valuesStart[property] || 0;
}
return this;
};
this.stop = function () {
if (!_isPlaying) {
return this;
}
TWEEN.remove(this);
_isPlaying = false;
if (_onStopCallback !== null) {
_onStopCallback.call(_object);
}
this.stopChainedTweens();
return this;
};
this.end = function () {
this.update(_startTime + _duration);
return this;
};
this.stopChainedTweens = function () {
for (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {
_chainedTweens[i].stop();
}
};
this.delay = function (amount) {
_delayTime = amount;
return this;
};
this.repeat = function (times) {
_repeat = times;
return this;
};
this.repeatDelay = function (amount) {
_repeatDelayTime = amount;
return this;
};
this.yoyo = function (yoyo) {
_yoyo = yoyo;
return this;
};
this.easing = function (easing) {
_easingFunction = easing;
return this;
};
this.interpolation = function (interpolation) {
_interpolationFunction = interpolation;
return this;
};
this.chain = function () {
_chainedTweens = arguments;
return this;
};
this.onStart = function (callback) {
_onStartCallback = callback;
return this;
};
this.onUpdate = function (callback) {
_onUpdateCallback = callback;
return this;
};
this.onComplete = function (callback) {
_onCompleteCallback = callback;
return this;
};
this.onStop = function (callback) {
_onStopCallback = callback;
return this;
};
this.update = function (time) {
var property;
var elapsed;
var value;
if (time < _startTime) {
return true;
}
if (_onStartCallbackFired === false) {
if (_onStartCallback !== null) {
_onStartCallback.call(_object);
}
_onStartCallbackFired = true;
}
elapsed = (time - _startTime) / _duration;
elapsed = elapsed > 1 ? 1 : elapsed;
value = _easingFunction(elapsed);
for (property in _valuesEnd) {
// Don't update properties that do not exist in the source object
if (_valuesStart[property] === undefined) {
continue;
}
var start = _valuesStart[property] || 0;
var end = _valuesEnd[property];
if (end instanceof Array) {
_object[property] = _interpolationFunction(end, value);
} else {
// Parses relative end values with start as base (e.g.: +10, -3)
if (typeof (end) === 'string') {
if (end.charAt(0) === '+' || end.charAt(0) === '-') {
end = start + parseFloat(end, 10);
} else {
end = parseFloat(end, 10);
}
}
// Protect against non numeric properties.
if (typeof (end) === 'number') {
_object[property] = start + (end - start) * value;
}
}
}
if (_onUpdateCallback !== null) {
_onUpdateCallback.call(_object, value);
}
if (elapsed === 1) {
if (_repeat > 0) {
if (isFinite(_repeat)) {
_repeat--;
}
// Reassign starting values, restart by making startTime = now
for (property in _valuesStartRepeat) {
if (typeof (_valuesEnd[property]) === 'string') {
_valuesStartRepeat[property] = _valuesStartRepeat[property] + parseFloat(_valuesEnd[property], 10);
}
if (_yoyo) {
var tmp = _valuesStartRepeat[property];
_valuesStartRepeat[property] = _valuesEnd[property];
_valuesEnd[property] = tmp;
}
_valuesStart[property] = _valuesStartRepeat[property];
}
if (_yoyo) {
_reversed = !_reversed;
}
if (_repeatDelayTime !== undefined) {
_startTime = time + _repeatDelayTime;
} else {
_startTime = time + _delayTime;
}
return true;
} else {
if (_onCompleteCallback !== null) {
_onCompleteCallback.call(_object);
}
for (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {
// Make the chained tweens start exactly at the time they should,
// even if the `update()` method was called way past the duration of the tween
_chainedTweens[i].start(_startTime + _duration);
}
return false;
}
}
return true;
};
};
TWEEN.Easing = {
Linear: {
None: function (k) {
return k;
}
},
Quadratic: {
In: function (k) {
return k * k;
},
Out: function (k) {
return k * (2 - k);
},
InOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k;
}
return - 0.5 * (--k * (k - 2) - 1);
}
},
Cubic: {
In: function (k) {
return k * k * k;
},
Out: function (k) {
return --k * k * k + 1;
},
InOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k * k;
}
return 0.5 * ((k -= 2) * k * k + 2);
}
},
Quartic: {
In: function (k) {
return k * k * k * k;
},
Out: function (k) {
return 1 - (--k * k * k * k);
},
InOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k * k * k;
}
return - 0.5 * ((k -= 2) * k * k * k - 2);
}
},
Quintic: {
In: function (k) {
return k * k * k * k * k;
},
Out: function (k) {
return --k * k * k * k * k + 1;
},
InOut: function (k) {
if ((k *= 2) < 1) {
return 0.5 * k * k * k * k * k;
}
return 0.5 * ((k -= 2) * k * k * k * k + 2);
}
},
Sinusoidal: {
In: function (k) {
return 1 - Math.cos(k * Math.PI / 2);
},
Out: function (k) {
return Math.sin(k * Math.PI / 2);
},
InOut: function (k) {
return 0.5 * (1 - Math.cos(Math.PI * k));
}
},
Exponential: {
In: function (k) {
return k === 0 ? 0 : Math.pow(1024, k - 1);
},
Out: function (k) {
return k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);
},
InOut: function (k) {
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
if ((k *= 2) < 1) {
return 0.5 * Math.pow(1024, k - 1);
}
return 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);
}
},
Circular: {
In: function (k) {
return 1 - Math.sqrt(1 - k * k);
},
Out: function (k) {
return Math.sqrt(1 - (--k * k));
},
InOut: function (k) {
if ((k *= 2) < 1) {
return - 0.5 * (Math.sqrt(1 - k * k) - 1);
}
return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
}
},
Elastic: {
In: function (k) {
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
return -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);
},
Out: function (k) {
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
return Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;
},
InOut: function (k) {
if (k === 0) {
return 0;
}
if (k === 1) {
return 1;
}
k *= 2;
if (k < 1) {
return -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);
}
return 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;
}
},
Back: {
In: function (k) {
var s = 1.70158;
return k * k * ((s + 1) * k - s);
},
Out: function (k) {
var s = 1.70158;
return --k * k * ((s + 1) * k + s) + 1;
},
InOut: function (k) {
var s = 1.70158 * 1.525;
if ((k *= 2) < 1) {
return 0.5 * (k * k * ((s + 1) * k - s));
}
return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
}
},
Bounce: {
In: function (k) {
return 1 - TWEEN.Easing.Bounce.Out(1 - k);
},
Out: function (k) {
if (k < (1 / 2.75)) {
return 7.5625 * k * k;
} else if (k < (2 / 2.75)) {
return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;
} else if (k < (2.5 / 2.75)) {
return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;
} else {
return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;
}
},
InOut: function (k) {
if (k < 0.5) {
return TWEEN.Easing.Bounce.In(k * 2) * 0.5;
}
return TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;
}
}
};
TWEEN.Interpolation = {
Linear: function (v, k) {
var m = v.length - 1;
var f = m * k;
var i = Math.floor(f);
var fn = TWEEN.Interpolation.Utils.Linear;
if (k < 0) {
return fn(v[0], v[1], f);
}
if (k > 1) {
return fn(v[m], v[m - 1], m - f);
}
return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);
},
Bezier: function (v, k) {
var b = 0;
var n = v.length - 1;
var pw = Math.pow;
var bn = TWEEN.Interpolation.Utils.Bernstein;
for (var i = 0; i <= n; i++) {
b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);
}
return b;
},
CatmullRom: function (v, k) {
var m = v.length - 1;
var f = m * k;
var i = Math.floor(f);
var fn = TWEEN.Interpolation.Utils.CatmullRom;
if (v[0] === v[m]) {
if (k < 0) {
i = Math.floor(f = m * (1 + k));
}
return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
} else {
if (k < 0) {
return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);
}
if (k > 1) {
return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
}
return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);
}
},
Utils: {
Linear: function (p0, p1, t) {
return (p1 - p0) * t + p0;
},
Bernstein: function (n, i) {
var fc = TWEEN.Interpolation.Utils.Factorial;
return fc(n) / fc(i) / fc(n - i);
},
Factorial: (function () {
var a = [1];
return function (n) {
var s = 1;
if (a[n]) {
return a[n];
}
for (var i = n; i > 1; i--) {
s *= i;
}
a[n] = s;
return s;
};
})(),
CatmullRom: function (p0, p1, p2, p3, t) {
var v0 = (p2 - p0) * 0.5;
var v1 = (p3 - p1) * 0.5;
var t2 = t * t;
var t3 = t * t2;
return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
}
}
};
// UMD (Universal Module Definition)
(function (root) {
if (typeof define === 'function' && define.amd) {
// AMD
define([], function () {
return TWEEN;
});
} else if (typeof module !== 'undefined' && typeof exports === 'object') {
// Node.js
module.exports = TWEEN;
} else if (root !== undefined) {
// Global variable
root.TWEEN = TWEEN;
}
})(this);

Просмотреть файл

@ -0,0 +1,250 @@
/**
* @author zz85 / https://github.com/zz85
* @author mrdoob / http://mrdoob.com
* Running this will allow you to drag three.js objects around the screen.
*/
THREE.DragControls = function ( _objects, _camera, _domElement ) {
var _plane = new THREE.Plane();
var _raycaster = new THREE.Raycaster();
var _mouse = new THREE.Vector2();
var _offset = new THREE.Vector3();
var _intersection = new THREE.Vector3();
var _worldPosition = new THREE.Vector3();
var _inverseMatrix = new THREE.Matrix4();
var _selected = null, _hovered = null;
//
var scope = this;
function activate() {
_domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );
_domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );
_domElement.addEventListener( 'mouseup', onDocumentMouseCancel, false );
_domElement.addEventListener( 'mouseleave', onDocumentMouseCancel, false );
_domElement.addEventListener( 'touchmove', onDocumentTouchMove, false );
_domElement.addEventListener( 'touchstart', onDocumentTouchStart, false );
_domElement.addEventListener( 'touchend', onDocumentTouchEnd, false );
}
function deactivate() {
_domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );
_domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );
_domElement.removeEventListener( 'mouseup', onDocumentMouseCancel, false );
_domElement.removeEventListener( 'mouseleave', onDocumentMouseCancel, false );
_domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false );
_domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false );
_domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false );
}
function dispose() {
deactivate();
}
function onDocumentMouseMove( event ) {
event.preventDefault();
var rect = _domElement.getBoundingClientRect();
_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
_raycaster.setFromCamera( _mouse, _camera );
if ( _selected && scope.enabled ) {
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );
}
scope.dispatchEvent( { type: 'drag', object: _selected } );
return;
}
_raycaster.setFromCamera( _mouse, _camera );
var intersects = _raycaster.intersectObjects( _objects, true );
if ( intersects.length > 0 ) {
var object = intersects[ 0 ].object;
_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );
if ( _hovered !== object ) {
scope.dispatchEvent( { type: 'hoveron', object: object } );
_domElement.style.cursor = 'pointer';
_hovered = object;
}
} else {
if ( _hovered !== null ) {
scope.dispatchEvent( { type: 'hoveroff', object: _hovered } );
_domElement.style.cursor = 'auto';
_hovered = null;
}
}
}
function onDocumentMouseDown( event ) {
event.preventDefault();
_raycaster.setFromCamera( _mouse, _camera );
var intersects = _raycaster.intersectObjects( _objects, true );
if ( intersects.length > 0 ) {
_selected = intersects[ 0 ].object;
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
_inverseMatrix.getInverse( _selected.parent.matrixWorld );
_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
}
_domElement.style.cursor = 'move';
scope.dispatchEvent( { type: 'dragstart', object: _selected } );
}
}
function onDocumentMouseCancel( event ) {
event.preventDefault();
if ( _selected ) {
scope.dispatchEvent( { type: 'dragend', object: _selected } );
_selected = null;
}
_domElement.style.cursor = _hovered ? 'pointer' : 'auto';
}
function onDocumentTouchMove( event ) {
event.preventDefault();
event = event.changedTouches[ 0 ];
var rect = _domElement.getBoundingClientRect();
_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
_raycaster.setFromCamera( _mouse, _camera );
if ( _selected && scope.enabled ) {
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );
}
scope.dispatchEvent( { type: 'drag', object: _selected } );
return;
}
}
function onDocumentTouchStart( event ) {
event.preventDefault();
event = event.changedTouches[ 0 ];
var rect = _domElement.getBoundingClientRect();
_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
_raycaster.setFromCamera( _mouse, _camera );
var intersects = _raycaster.intersectObjects( _objects, true );
if ( intersects.length > 0 ) {
_selected = intersects[ 0 ].object;
_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {
_inverseMatrix.getInverse( _selected.parent.matrixWorld );
_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );
}
_domElement.style.cursor = 'move';
scope.dispatchEvent( { type: 'dragstart', object: _selected } );
}
}
function onDocumentTouchEnd( event ) {
event.preventDefault();
if ( _selected ) {
scope.dispatchEvent( { type: 'dragend', object: _selected } );
_selected = null;
}
_domElement.style.cursor = 'auto';
}
activate();
// API
this.enabled = true;
this.activate = activate;
this.deactivate = deactivate;
this.dispose = dispose;
};
THREE.DragControls.prototype = Object.create( THREE.EventDispatcher.prototype );
THREE.DragControls.prototype.constructor = THREE.DragControls;

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

14
MSRAbotSimulation/js/libs/dat.gui.min.js поставляемый Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Разница между файлами не показана из-за своего большого размера Загрузить разницу

5
MSRAbotSimulation/js/libs/stats.min.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,5 @@
// stats.js - http://github.com/mrdoob/stats.js
var Stats=function(){function h(a){c.appendChild(a.dom);return a}function k(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?"block":"none";l=a}var l=0,c=document.createElement("div");c.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";c.addEventListener("click",function(a){a.preventDefault();k(++l%c.children.length)},!1);var g=(performance||Date).now(),e=g,a=0,r=h(new Stats.Panel("FPS","#0ff","#002")),f=h(new Stats.Panel("MS","#0f0","#020"));
if(self.performance&&self.performance.memory)var t=h(new Stats.Panel("MB","#f08","#201"));k(0);return{REVISION:16,dom:c,addPanel:h,showPanel:k,begin:function(){g=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();f.update(c-g,200);if(c>e+1E3&&(r.update(1E3*a/(c-e),100),e=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){g=this.end()},domElement:c,setMode:k}};
Stats.Panel=function(h,k,l){var c=Infinity,g=0,e=Math.round,a=e(window.devicePixelRatio||1),r=80*a,f=48*a,t=3*a,u=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=f;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,f);b.fillStyle=k;b.fillText(h,t,u);b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(f,
v){c=Math.min(c,f);g=Math.max(g,f);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=k;b.fillText(e(f)+" "+h+" ("+e(c)+"-"+e(g)+")",t,u);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,e((1-f/v)*p))}}};"object"===typeof module&&(module.exports=Stats);

1036
MSRAbotSimulation/js/libs/three.min.js поставляемый Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -0,0 +1,547 @@
//--------------------------------------------------------------------------------------------
// Copyright(c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
MSRAbot = function (app)
{
this.app = app;
this.objBase = null;
this.objects = [];
this.path = null;
this.animations = [];
this.staticElbow = true;
this.staticElbowAngleLeft = -(Math.PI/2) - 0.25;
this.staticElbowAngleRight = -(Math.PI/2) + 0.25;
this.groupElbowLeft = null;
this.groupElbowRight = null;
this.meshHelperLeft = null;
this.meshHelperRight = null;
this.helperMaterial = new THREE.MeshLambertMaterial({ color: 0xffff00, side: THREE.DoubleSide });
this.doneInitializing = false;
}
MSRAbot.prototype.constructor = MSRAbot;
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.initialize = function initMSRAbot(vReference)
{
//
// see https://threejs.org/docs/index.html#examples/en/loaders/GLTFLoader
//
var scope = this;
this.materials = [
new THREE.MeshPhongMaterial({ color: 0xEBEAE2, opacity: 0.6, transparent: true, flatShading: true }),
new THREE.MeshPhongMaterial({ color: 0x87B5C9, opacity: 0.6, transparent: true, flatShading: true }),
new THREE.MeshPhongMaterial({ color: 0x404040, opacity: 0.6, transparent: true, flatShading: true }),
new THREE.MeshPhongMaterial({ color: 0xff0000, opacity: 0.6, transparent: true, flatShading: true }),
new THREE.MeshPhongMaterial({ color: 0x00ff00, opacity: 0.6, transparent: true, flatShading: true }),
new THREE.MeshPhongMaterial({ color: 0x0000ff, opacity: 0.6, transparent: true, flatShading: true }),
new THREE.MeshPhongMaterial({ color: 0xfff0f0, opacity: 0.6, transparent: true, flatShading: true })
];
var loader = new THREE.GLTFLoader().setPath('./models/');
loader.load('MSRAbot.v0.7.glb', function (gltf) {
gltf.scene.traverse(function (child) {
var pn = child.parent ? (child.parent.name) : "";
scope.objects[child.name] = child;
if (child.name == 'Base') {
scope.objBase = child;
child.position.set(0, vReference.y, 0);
}
if (child.name == 'Hood')
child.material = scope.materials[1];
else if (child.name == 'Eye')
child.material = scope.materials[2];
else if (child.name == 'SensorPlate')
child.material = scope.materials[1];
else if (child.name == 'MicrophonePlate')
child.material = scope.materials[2];
else
child.material = scope.materials[0];
if (child.isMesh) {
child.castShadow = true;
child.receiveShadow = true;
}
});
scope.initializeModelObjects();
scope.setShowHelpers(scope.app.params.showHelpers);
//
// done. fire init complete event
scope.doneInitializing = true;
if (scope.app.eventDoneInit != null)
document.dispatchEvent(scope.app.eventDoneInit);
});
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.initializeModelObjects = function ()
{
if (this.objBase) {
this.objBase.updateMatrix();
this.objBase.updateMatrixWorld(true);
this.app.scene.add(this.objBase);
}
var strExpectedObjects = [ 'Shoulder_Left', 'Upper_Arm_Left', 'Elbow_Left', 'Shoulder_Right', 'Upper_Arm_Right', 'Elbow_Right' ];
for (var i = 0; i < strExpectedObjects.length; i++) {
var name = strExpectedObjects[i];
var obj = this.objects[name];
if (!isObject(obj)) {
console.error("The MSRAbot 3D model does not contain required object of name '" + name + "'!");
window.alert("The MSRAbot 3D model does not contain required object of name '" + name + "'!");
}
}
//
// calculate arm segement lengths
{
var pos1, pos2;
var arm_length = 50;
//
// left arm
pos1 = this.getWorldPosition("Upper_Arm_Left");
pos2 = this.getWorldPosition("Hand_Left"); // "Elbow_Left");
this.seg1_left_len = pos2.sub(pos1).length();
this.seg2_left_len = arm_length;
//
// right arm
pos1 = this.getWorldPosition("Upper_Arm_Right");
pos2 = this.getWorldPosition("Hand_Right"); // "Elbow_Right");
this.seg1_right_len = pos2.sub(pos1).length();
this.seg2_right_len = arm_length;
}
this.initializeHelpers();
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.initializeHelpers = function ()
{
//
// elbow helpers
this.groupElbowLeft = new THREE.Group();
this.app.scene.add(this.groupElbowLeft);
this.groupElbowLeft.parent = this.objects['Upper_Arm_Left'];
this.groupElbowLeft.position.x = 0.0;
this.groupElbowLeft.position.y = 0.0;
this.groupElbowLeft.position.z = this.seg1_left_len;
this.groupElbowRight = new THREE.Group();
this.app.scene.add(this.groupElbowRight);
this.groupElbowRight.parent = this.objects['Upper_Arm_Right'];
this.groupElbowRight.position.x = 0.0;
this.groupElbowRight.position.y = 0.0;
this.groupElbowRight.position.z = this.seg1_right_len;
//
// spheres
var sphereGeometry = new THREE.SphereBufferGeometry(8, 16, 16);
var sphereMaterial1 = new THREE.MeshPhongMaterial({ specular: 0x333333, shininess: 5, color: 0x0000ff });
this.helperSphereL1 = new THREE.Mesh(sphereGeometry, sphereMaterial1);
this.app.scene.add(this.helperSphereL1);
this.helperSphereL1.parent = this.groupElbowLeft;
this.helperSphereL1.position.x = 0.0;
this.helperSphereL1.position.y = 0.0;
this.helperSphereL1.position.z = 0.0;
this.helperSphereR1 = new THREE.Mesh(sphereGeometry, sphereMaterial1);
this.app.scene.add(this.helperSphereR1);
this.helperSphereR1.parent = this.groupElbowRight;
this.helperSphereR1.position.x = 0.0;
this.helperSphereR1.position.y = 0.0;
this.helperSphereR1.position.z = 0.0;
var sphereMaterial2 = new THREE.MeshPhongMaterial({ specular: 0x333333, shininess: 5, color: 0x00ff00 });
this.helperSphereL2 = new THREE.Mesh(sphereGeometry, sphereMaterial2);
this.app.scene.add(this.helperSphereL2);
this.helperSphereR2 = new THREE.Mesh(sphereGeometry, sphereMaterial2);
this.app.scene.add(this.helperSphereR2);
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.setStaticElbow = function (static)
{
this.staticElbow = static;
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.setShowHelpers = function (show)
{
if (this.helperSphereL1)
this.helperSphereL1.visible = show;
if (this.helperSphereR1)
this.helperSphereR1.visible = show;
if (this.helperSphereL2)
this.helperSphereL2.visible = show;
if (this.helperSphereR2)
this.helperSphereR2.visible = show;
if (!show && this.meshHelperLeft) {
this.app.scene.remove(this.meshHelperLeft);
disposeObject(this.meshHelperLeft, false);
this.meshHelperLeft = undefined;
}
if (!show && this.meshHelperRight) {
this.app.scene.remove(this.meshHelperRight);
disposeObject(this.meshHelperRight, false);
this.meshHelperRight = undefined;
}
for (var i = 0; i < this.materials.length; i++) {
if (this.materials && this.materials[i]) {
this.materials[i].transparent = show;
this.materials[i].needsUpdate = true;
}
}
this.setObjectMaterial('Shoulder_Cover_Right_A', this.materials[show ? 3 : 0]);
this.setObjectMaterial('Shoulder_Cover_Right_B', this.materials[show ? 4 : 0]);
this.setObjectMaterial('Elbow_Cover_Right_A', this.materials[show ? 3 : 0]);
this.setObjectMaterial('Elbow_Cover_Right_B', this.materials[show ? 4 : 0]);
this.setObjectMaterial('Shoulder_Cover_Left_A', this.materials[show ? 3 : 0]);
this.setObjectMaterial('Shoulder_Cover_Left_B', this.materials[show ? 4 : 0]);
this.setObjectMaterial('Elbow_Cover_Left_A', this.materials[show ? 3 : 0]);
this.setObjectMaterial('Elbow_Cover_Left_B', this.materials[show ? 4 : 0]);
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.setObjectMaterial = function(name, material)
{
var obj = this.objects[name];
if (isObject(obj))
obj.material = material;
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.changeOpacity = function (opacity)
{
for (var i = 0; i < this.materials.length; i++) {
if (this.materials && this.materials[i]) {
this.materials[i].opacity = opacity;
this.materials[i].needsUpdate = true;
}
}
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.getWorldPosition = function (name)
{
var obj = this.objects[name];
if (obj == undefined)
return null;
var mat = obj.matrixWorld;
var pos = new THREE.Vector3();
pos.setFromMatrixPosition(mat);
return pos;
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.createHelperTubes = function (re, rw, le, lw)
{
if (!this.doneInitializing)
return;
if (this.meshHelperLeft) {
this.app.scene.remove(this.meshHelperLeft);
disposeObject(this.meshHelperLeft, false);
this.meshHelperLeft = undefined;
}
if (this.meshHelperRight) {
this.app.scene.remove(this.meshHelperRight);
disposeObject(this.meshHelperRight, false);
this.meshHelperRight = undefined;
}
var vec_le = le["vector"].clone().normalize().multiplyScalar(this.seg1_left_len);
var vec_lw = lw["vector"].clone().normalize().multiplyScalar(this.seg2_left_len);
var vec_re = re["vector"].clone().normalize().multiplyScalar(this.seg1_right_len);
var vec_rw = rw["vector"].clone().normalize().multiplyScalar(this.seg2_right_len);
var positions;
var pos;
//
// left arm
positions = [];
pos = this.getWorldPosition("Upper_Arm_Left");
positions.push(pos);
pos = pos.clone().add(vec_le);
positions.push(pos);
pos = pos.clone().add(vec_lw);
positions.push(pos);
this.meshHelperLeft = this.createHelperTube(positions);
this.app.scene.add(this.meshHelperLeft);
//
// right arm
positions = [];
pos = this.getWorldPosition("Upper_Arm_Right");
positions.push(pos);
pos = pos.clone().add(vec_re);
positions.push(pos);
pos = pos.clone().add(vec_rw);
positions.push(pos);
this.meshHelperRight = this.createHelperTube(positions);
this.app.scene.add(this.meshHelperRight);
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.createHelperTube = function (positions)
{
var curve = new THREE.CurvePath();
for (var i = 0; i < (positions.length-1); i++) {
var lineCurve = new THREE.LineCurve3(positions[i], positions[i + 1]);
curve.add(lineCurve);
}
var extrudePath = curve;
var extrusionSegments = 100;
var radius = 6;
var radiusSegments = 14;
var closed = false;
var tubeGeometry = new THREE.TubeBufferGeometry(extrudePath, extrusionSegments, radius, radiusSegments, closed);
curve = undefined;
var mesh = new THREE.Mesh(tubeGeometry, this.helperMaterial);
return mesh;
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.to_sphere = function (v)
{
var radius = v.length();
var theta, phi;
if (radius == 0)
return [0.0, 0.0, 0.0];
theta = Math.acos(v.z / radius);
// phi is from - 180~+180
if (v.x != 0.0)
phi = Math.atan(v.y / v.x);
else {
if (v.y > 0)
phi = THREE.MathUtils.degToRad(90);
else
phi = THREE.MathUtils.degToRad(-90);
}
if ((v.x < 0) && (v.y > 0))
phi = THREE.MathUtils.degToRad(180) + phi;
else if ((v.x < 0) && (v.y < 0))
phi = THREE.MathUtils.degToRad(-180) + phi;
else
phi = phi;
return [radius, theta, phi];
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.getFromShoulderSphericalCoords = function (radius, phi, theta)
{
//
// zyx shoulder coordinate space
var z = radius * Math.cos(theta);
var y = radius * Math.sin(theta) * Math.sin(phi);
var x = radius * Math.sin(theta) * Math.cos(phi);
return new THREE.Vector3(x, y, z);
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.getFromElbowSphericalCoords = function (radius, phi, theta)
{
//
// yxz elbow coordinate space
var y = radius * Math.cos(theta);
var x = radius * Math.sin(theta) * Math.sin(phi);
var z = radius * Math.sin(theta) * Math.cos(phi);
return new THREE.Vector3(x, y, z);
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.getFromCartesianCoords = function (v)
{
var radius = Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
var theta, phi;
if (radius === 0) {
theta = 0;
phi = 0;
} else {
theta = Math.atan2(v.x, v.z);
phi = Math.acos(THREE.MathUtils.clamp(v.y / radius, - 1, 1));
}
return [radius, theta, phi];
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.updateBody = function (re, rw, le, lw)
{
if (!this.doneInitializing)
return;
var obj, theta, phi;
if (this.app.params.showHelpers) {
this.createHelperTubes(re, rw, le, lw);
}
{
//
// convert theta and phi world to local
var v = this.getFromShoulderSphericalCoords(this.seg1_left_len, le["phi"], le["theta"]);
var k = this.getFromCartesianCoords(v);
theta = Math.PI - k[1];
phi = k[2];
obj = this.objects['Shoulder_Left'];
if (isObject(obj)) {
obj.rotation.order = 'XYZ';
obj.rotation.z = theta;
}
obj = this.objects['Upper_Arm_Left'];
if (isObject(obj)) {
obj.rotation.order = 'XYZ';
obj.rotation.y = phi;
}
}
{
//
// convert theta and phi world to local
this.groupElbowLeft.updateWorldMatrix(true, false);
this.groupElbowLeft.updateMatrixWorld(true);
var vElbowWorld = new THREE.Vector3().setFromMatrixPosition(this.groupElbowLeft.matrixWorld);
var v = this.getFromElbowSphericalCoords(this.seg2_left_len, lw["phi"], lw["theta"]);
var worldPos = vElbowWorld.clone().add(v);
var vLocal = this.groupElbowLeft.worldToLocal(worldPos.clone());
if ((this.app.params.showHelpers) && (this.helperSphereL2)) {
this.helperSphereL2.parent = this.groupElbowLeft;
this.helperSphereL2.position.x = vLocal.x;
this.helperSphereL2.position.y = vLocal.y;
this.helperSphereL2.position.z = vLocal.z;
}
var v = new THREE.Vector3(vLocal.x, vLocal.z, vLocal.y); // re-map to xzy coordinate space
var k = this.getFromCartesianCoords(v);
theta = Math.PI / 2 + k[1];
phi = - k[2];
obj = this.objects['Elbow_Left'];
if (isObject(obj)) {
obj.rotation.order = 'XYZ';
obj.rotation.y = (this.staticElbow) ? this.staticElbowAngleLeft : theta;
}
obj = this.objects['Hand_Left'];
if (isObject(obj)) {
obj.rotation.order = 'ZXY';
obj.rotation.z = phi;
}
}
{
//
// convert theta and phi world to local
var v = this.getFromShoulderSphericalCoords(this.seg1_right_len, re["phi"], re["theta"]);
var k = this.getFromCartesianCoords(v);
theta = Math.PI + k[1];
phi = Math.PI - k[2];
var quaternion = new THREE.Quaternion();
quaternion.setFromUnitVectors(new THREE.Vector3(0, 0, 0), v);
obj = this.objects['Shoulder_Right'];
if (isObject(obj)) {
obj.rotation.order = 'XYZ';
obj.rotation.z = theta;
}
obj = this.objects['Upper_Arm_Right'];
if (isObject(obj)) {
obj.rotation.order = 'XYZ';
obj.rotation.y = phi;
}
}
{
//
// convert theta and phi world to local
this.groupElbowRight.updateWorldMatrix(true, false);
this.groupElbowRight.updateMatrixWorld(true);
var vElbowWorld = new THREE.Vector3().setFromMatrixPosition(this.groupElbowRight.matrixWorld);
var v = this.getFromElbowSphericalCoords(this.seg2_right_len, rw["phi"], rw["theta"]);
var worldPos = vElbowWorld.clone().add(v);
var vLocal = this.groupElbowRight.worldToLocal(worldPos.clone());
if ((this.app.params.showHelpers) && (this.helperSphereR2)) {
this.helperSphereR2.parent = this.groupElbowRight;
this.helperSphereR2.position.x = vLocal.x;
this.helperSphereR2.position.y = vLocal.y;
this.helperSphereR2.position.z = vLocal.z;
}
var v = new THREE.Vector3(vLocal.x, vLocal.z, vLocal.y);
var k = this.getFromCartesianCoords(v);
theta = Math.PI / 2 + k[1];
phi = - k[2];
obj = this.objects['Elbow_Right'];
if (isObject(obj)) {
obj.rotation.order = 'XYZ';
obj.rotation.y = (this.staticElbow) ? this.staticElbowAngleRight : theta;
}
obj = this.objects['Hand_Right'];
if (isObject(obj)) {
obj.rotation.order = 'ZXY';
obj.rotation.z = phi;
}
}
}
//--------------------------------------------------------------------------------------------
MSRAbot.prototype.update = function (clock)
{
}

Просмотреть файл

@ -0,0 +1,79 @@
//--------------------------------------------------------------------------------------------
// Copyright(c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// --------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
(function ()
{
if (typeof window.CustomEvent === "function") return false;
function CustomEvent(event, params) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
return evt;
}
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();
//--------------------------------------------------------------------------------------------
function isObject(val)
{
if (val === null) { return false; }
return ((typeof val === 'function') || (typeof val === 'object'));
}
//--------------------------------------------------------------------------------------------
function disposeMaterial(mat)
{
if (!mat)
return;
if (mat.map) {
mat.map.dispose();
mat.map = undefined;
}
if (mat.materials) {
for (i = 0; i < mat.materials.length; i++) {
if (mat.materials[i].map) {
mat.materials[i].map.dispose();
mat.materials[i].map = undefined;
}
mat.materials[i].dispose();
}
} else {
mat.dispose();
}
mat = undefined;
}
//--------------------------------------------------------------------------------------------
function disposeObject(obj, disposeMaterial)
{
if (obj !== null) {
for (var i = 0; i < obj.children.length; i++) {
disposeObject(obj.children[i]);
}
if (obj.geometry) {
obj.geometry.dispose();
obj.geometry = undefined;
}
if (disposeMaterial && obj.material) {
disposeMaterial(obj.material, disposeMaterial);
obj.material = undefined;
}
if (obj.texture) {
obj.texture.dispose();
obj.texture = undefined;
}
}
obj = undefined;
}
//--------------------------------------------------------------------------------------------

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,356 @@
{
"Ges01_wavehand": {
"Position0": {
"start time": [
"232"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"826"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1420"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1882"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2641"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3334"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"High"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3598"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"High"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"3862"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"4555"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"4984"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position155": {
"start time": [
"5116"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,292 @@
{
"Ges01_wavehand": {
"Position0": {
"start time": [
"67"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"826"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1387"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1915"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"High"
],
"right wrist": [
"Left",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2641"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3532"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"High"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"4357"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"5083"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position155": {
"start time": [
"5116"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,356 @@
{
"Ges02_balancinghands": {
"Position0": {
"start time": [
"298"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"760"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1552"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2113"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2410"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"2872"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3400"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Right Forward",
"Normal"
],
"left elbow": [
"Left",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"3928"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"4885"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"5248"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position162": {
"start time": [
"5347"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,324 @@
{
"Ges02_balancinghands": {
"Position0": {
"start time": [
"166"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"859"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1585"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2278"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2905"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3433"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Right Forward",
"Normal"
],
"left elbow": [
"Left",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3994"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Left Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4786"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5314"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position162": {
"start time": [
"5347"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,420 @@
{
"Ges03_drawlines": {
"Position0": {
"start time": [
"265"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"958"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1288"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"High"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1915"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2707"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Left Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3466"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Right Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3829"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4357"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Low"
],
"right wrist": [
"Left Forward",
"Normal"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5314"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right Forward",
"Low"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"6337"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"6667"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position11": {
"start time": [
"7063"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position217": {
"start time": [
"7162"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,420 @@
{
"Ges03_drawlines": {
"Position0": {
"start time": [
"496"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"1354"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"High"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"2014"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2773"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Left Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"3565"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Normal"
],
"right wrist": [
"Right Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"4258"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Low"
],
"right wrist": [
"Left Forward",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"4456"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Low"
],
"right wrist": [
"Left Forward",
"Normal"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4819"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Forward",
"Normal"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5281"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right Forward",
"Low"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"5611"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right Forward",
"Low"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"6205"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position11": {
"start time": [
"6733"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position217": {
"start time": [
"7162"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,388 @@
{
"Ges04_comehere": {
"Position0": {
"start time": [
"100"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"463"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1519"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1717"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2278"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"2839"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3400"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4159"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"4522"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right Forward",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"5281"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"5644"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position176": {
"start time": [
"5809"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,388 @@
{
"Ges04_comehere": {
"Position0": {
"start time": [
"562"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"1255"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Place",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1618"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2245"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2839"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3532"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"4126"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Right",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4423"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right Forward",
"Low"
],
"left elbow": [
"Left Forward",
"Normal"
],
"left wrist": [
"Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5050"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Right Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"5479"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"5578"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position176": {
"start time": [
"5809"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,420 @@
{
"Ges05_demopoint": {
"Position0": {
"start time": [
"199"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"958"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1387"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1915"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2476"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3070"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Right Forward",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3862"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4324"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"4357"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"4687"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"5512"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position11": {
"start time": [
"6040"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position191": {
"start time": [
"6304"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,324 @@
{
"Ges05_demopoint": {
"Position0": {
"start time": [
"364"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"958"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1420"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1948"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2542"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3763"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"4456"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Forward",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"5413"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"6040"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position191": {
"start time": [
"6304"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,324 @@
{
"Ges06_chickenwing": {
"Position0": {
"start time": [
"628"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"1387"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"Low"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Right",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1915"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2509"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"Normal"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"3037"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3499"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"Normal"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3994"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4852"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5149"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position160": {
"start time": [
"5281"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,324 @@
{
"Ges06_chickenwing": {
"Position0": {
"start time": [
"628"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"1387"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"Low"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Right",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1915"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2509"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"Normal"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"3037"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3499"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Left",
"Normal"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"3994"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"Low"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Left Forward",
"Low"
],
"left wrist": [
"Right",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"4852"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5149"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position160": {
"start time": [
"5281"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,452 @@
{
"joints - Arms halfcircle motion": {
"Position0": {
"start time": [
"67"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Left Backward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"397"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1057"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Backward",
"Low"
],
"right wrist": [
"Right Backward",
"Low"
],
"left elbow": [
"Left Backward",
"Low"
],
"left wrist": [
"Left Backward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1915"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"High"
],
"right wrist": [
"Right",
"High"
],
"left elbow": [
"Left",
"High"
],
"left wrist": [
"Left",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2311"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left Forward",
"High"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"2377"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Right Forward",
"High"
],
"left elbow": [
"Left Forward",
"High"
],
"left wrist": [
"Left Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"2971"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"High"
],
"right wrist": [
"Place",
"High"
],
"left elbow": [
"Right Forward",
"High"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"3367"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"High"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Right Forward",
"High"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"3499"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"High"
],
"right wrist": [
"Left Forward",
"High"
],
"left elbow": [
"Forward",
"High"
],
"left wrist": [
"Right Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"4192"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right Forward",
"High"
],
"right wrist": [
"Right",
"High"
],
"left elbow": [
"Left Forward",
"High"
],
"left wrist": [
"Left",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"4951"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left",
"Normal"
],
"left wrist": [
"Left",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position11": {
"start time": [
"5050"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Low"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Left",
"Low"
],
"left wrist": [
"Left",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position12": {
"start time": [
"5809"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position181": {
"start time": [
"5974"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,420 @@
{
"joints - Arms tri motion": {
"Position0": {
"start time": [
"364"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"1090"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1684"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Right",
"Normal"
],
"right wrist": [
"Right",
"Normal"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"2476"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Forward",
"Normal"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2938"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Forward",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position5": {
"start time": [
"3763"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position6": {
"start time": [
"4291"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position7": {
"start time": [
"5017"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Left",
"Normal"
],
"left wrist": [
"Left",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position8": {
"start time": [
"5413"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Left",
"Normal"
],
"left wrist": [
"Left",
"Normal"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position9": {
"start time": [
"6337"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Forward",
"Normal"
],
"left wrist": [
"Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position10": {
"start time": [
"6733"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Forward",
"Normal"
],
"left wrist": [
"Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position11": {
"start time": [
"7525"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position235": {
"start time": [
"7756"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,196 @@
{
"joints -Left Arm Up&Down": {
"Position0": {
"start time": [
"67"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"364"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"991"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Forward",
"High"
],
"left wrist": [
"Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1552"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Left Forward",
"High"
],
"left wrist": [
"Forward",
"High"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"2113"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position70": {
"start time": [
"2311"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Просмотреть файл

@ -0,0 +1,196 @@
{
"joints -Right Arm Up&Down": {
"Position0": {
"start time": [
"67"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position1": {
"start time": [
"364"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Forward",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Place",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position2": {
"start time": [
"1024"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Forward",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position3": {
"start time": [
"1255"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Forward",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position4": {
"start time": [
"1585"
],
"duration": [
"1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Forward",
"Normal"
],
"right wrist": [
"Forward",
"High"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
},
"Position72": {
"start time": [
"2377"
],
"duration": [
"-1"
],
"head": [
"Forward",
"Normal"
],
"right elbow": [
"Place",
"Low"
],
"right wrist": [
"Place",
"Low"
],
"left elbow": [
"Place",
"Low"
],
"left wrist": [
"Forward",
"Low"
],
"rotation": [
"ToLeft",
"0"
]
}
}
}

Двоичные данные
MSRAbotSimulation/models/MSRAbot.v0.7.glb Normal file

Двоичный файл не отображается.

Двоичные данные
docs/LabanSuite_BlockDiagram.jpg

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 465 KiB

После

Ширина:  |  Высота:  |  Размер: 417 KiB

Двоичные данные
docs/LabanSuite_Modules.jpg

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 114 KiB

После

Ширина:  |  Высота:  |  Размер: 106 KiB