├── mano_grasp
├── __init__.py
├── math_utils.py
├── graspit_scene.py
├── kinematics.py
├── grasp_utils.py
├── grasp_miner.py
├── graspit_process.py
└── generate_grasps.py
├── requirements.txt
├── .style.yapf
├── models
└── ManoHand
│ ├── iv
│ ├── mid1.xml
│ ├── mid2.xml
│ ├── palm.xml
│ ├── index1.xml
│ ├── index2.xml
│ ├── pinky1.xml
│ ├── pinky2.xml
│ ├── ring1.xml
│ ├── ring2.xml
│ ├── thumb1.xml
│ ├── thumb2.xml
│ ├── index3.xml
│ ├── mid3.xml
│ ├── pinky3.xml
│ ├── ring3.xml
│ ├── thumb3.xml
│ ├── thumb1.wrl
│ ├── pinky1.wrl
│ ├── mid2.wrl
│ ├── index2.wrl
│ ├── pinky2.wrl
│ ├── thumb2.wrl
│ ├── ring2.wrl
│ ├── ring1.wrl
│ ├── mid1.wrl
│ ├── index1.wrl
│ ├── thumb3.wrl
│ ├── index3.wrl
│ ├── pinky3.wrl
│ ├── mid3.wrl
│ ├── ring3.wrl
│ └── palm.wrl
│ ├── eigen
│ ├── human_eigen.xml
│ ├── human_eigen_nodip.xml
│ ├── human_eigen_cgdb_refined.xml
│ ├── human_eigen_cgdb.xml
│ └── human_eigen_torques.xml
│ ├── cyberglove
│ ├── calibration_best_no_dip_aa.txt
│ └── calibration_best_aa.txt
│ ├── kinematics.json
│ ├── ManoHand.xml
│ ├── ManoHand_v2.xml
│ └── ManoHand_v3.xml
├── .gitignore
├── README.md
├── setup.py
└── LICENSE
/mano_grasp/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | numpy
2 | transforms3d
3 | joblib
--------------------------------------------------------------------------------
/.style.yapf:
--------------------------------------------------------------------------------
1 | [style]
2 | based_on_style = google
3 | column_limit = 99
4 | indent_width = 4
5 |
6 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/mid1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | mid1.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/mid2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | mid2.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/palm.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150
5 | palm.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/index1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | index1.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/index2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | index2.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/pinky1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | pinky1.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/pinky2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | pinky2.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/ring1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | ring1.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/ring2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | ring2.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/thumb1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | thumb1.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/thumb2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | plastic
4 | 150.0
5 | thumb2.wrl
6 |
7 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/index3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | rubber
4 | 1500000
5 | 150.0
6 | index3.wrl
7 |
8 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/mid3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | rubber
4 | 1500000
5 | 150.0
6 | mid3.wrl
7 |
8 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/pinky3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | rubber
4 | 1500000
5 | 150.0
6 | pinky3.wrl
7 |
8 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/ring3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | rubber
4 | 1500000
5 | 150.0
6 | ring3.wrl
7 |
8 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/thumb3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | rubber
4 | 1500000
5 | 150.0
6 | thumb3.wrl
7 |
8 |
--------------------------------------------------------------------------------
/models/ManoHand/eigen/human_eigen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mano_grasp/math_utils.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import transforms3d as tf
3 |
4 |
5 | def mat_rotate_x(alpha):
6 | ca, sa = np.cos(alpha), np.sin(alpha)
7 | m = np.matrix([
8 | [1, 0, 0],
9 | [0, ca, -sa],
10 | [0, sa, ca],
11 | ])
12 | return m
13 |
14 |
15 | def mat_rotate_y(beta):
16 | cb, sb = np.cos(beta), np.sin(beta)
17 | m = np.matrix([
18 | [cb, 0, sb],
19 | [0, 1, 0],
20 | [-sb, 0, cb],
21 | ])
22 | return m
23 |
24 |
25 | def mat_rotate_z(theta):
26 | ct, st = np.cos(theta), np.sin(theta)
27 | m = np.matrix([
28 | [ct, -st, 0],
29 | [st, ct, 0],
30 | [0, 0, 1],
31 | ])
32 | return m
33 |
34 |
35 | def mat_from_rvec(rvec):
36 | angle = np.linalg.norm(rvec)
37 | axis = np.array(rvec).reshape(3) / angle if angle != 0 else [0, 0, 1]
38 | mat = tf.axangles.axangle2mat(axis, angle)
39 | return np.matrix(mat)
40 |
41 |
42 | def mat_from_euler(ai, aj, ak, axes='sxyz'):
43 | mat = tf.euler.euler2mat(ai, aj, ak, axes)
44 | return np.matrix(mat)
45 |
46 |
47 | def mat_from_quat(quat):
48 | x, y, z, w = quat
49 | mat = tf.quaternions.quat2mat((w, x, y, z))
50 | return np.matrix(mat)
51 |
52 |
53 | def rvec_from_mat(mat):
54 | axis, angle = tf.axangles.mat2axangle(mat, unit_thresh=1e-03)
55 | rvec = axis * angle
56 | return rvec
57 |
58 |
59 | def rvec_from_quat(quat):
60 | x, y, z, w = quat
61 | axis, angle = tf.quaternions.quat2axangle((w, x, y, z),
62 | identity_thresh=1e-06)
63 | rvec = axis * angle
64 | return rvec
65 |
66 |
67 | def quat_from_mat(mat):
68 | w, x, y, z = tf.quaternions.mat2quat(mat)
69 | return (x, y, z, w)
70 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 | MANIFEST
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 | .pytest_cache/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | local_settings.py
57 | db.sqlite3
58 |
59 | # Flask stuff:
60 | instance/
61 | .webassets-cache
62 |
63 | # Scrapy stuff:
64 | .scrapy
65 |
66 | # Sphinx documentation
67 | docs/_build/
68 |
69 | # PyBuilder
70 | target/
71 |
72 | # Jupyter Notebook
73 | .ipynb_checkpoints
74 |
75 | # pyenv
76 | .python-version
77 |
78 | # celery beat schedule file
79 | celerybeat-schedule
80 |
81 | # SageMath parsed files
82 | *.sage.py
83 |
84 | # Environments
85 | .env
86 | .venv
87 | env/
88 | venv/
89 | ENV/
90 | env.bak/
91 | venv.bak/
92 |
93 | # Spyder project settings
94 | .spyderproject
95 | .spyproject
96 |
97 | # Rope project settings
98 | .ropeproject
99 |
100 | # mkdocs documentation
101 | /site
102 |
103 | # mypy
104 | .mypy_cache/
105 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Learning Joint Reconstruction of Hands and Manipulated Objects - ManoGrasp
2 |
3 | Porting the [MANO](http://mano.is.tue.mpg.de/) hand model to [GraspIt!](http://graspit-simulator.github.io/) simulator
4 |
5 | Yana Hasson, Gül Varol, Dimitris Tzionas, Igor Kalevatykh, Michael J. Black, Ivan Laptev, Cordelia Schmid, CVPR 2019
6 |
7 | - [Project page](https://hassony2.github.io/obman)
8 |
9 | ## Install
10 |
11 | ### Setup ROS interface
12 |
13 | This package uses a ROS [interface](https://github.com/graspit-simulator/graspit_commander) for the GraspIt! simulator.
14 |
15 | To install and setup this interface follow the instructions at https://github.com/graspit-simulator/graspit_interface.
16 |
17 | ### Install package
18 |
19 | ```
20 | git clone https://github.com/ikalevatykh/mano_grasp.git
21 | cd mano_grasp
22 | python setup.py install --user --graspit_dir=$GRASPIT
23 | ```
24 |
25 | ## Model
26 |
27 | Model ManoHand will be automatically copied to $GRASPIT directory during the installation.
28 |
29 | To copy a model without the code installation use the command:
30 |
31 | python setup.py --copy_model_only --graspit_dir=$GRASPIT
32 |
33 |
34 | ## Generate grasps
35 |
36 | Start [ROS master](http://wiki.ros.org/roscore) in one terminal:
37 |
38 | roscore
39 |
40 | Then in a second terminal start generator:
41 |
42 | python -m mano_grasp.generate_grasps --models phone glass --path_out PATH_TO_DATASET
43 |
44 | Use
45 |
46 | python -m mano_grasp.generate_grasps --help
47 |
48 | to see all available options.
49 |
50 | # Citations
51 |
52 | If you find this code useful for your research, consider citing:
53 |
54 | ```
55 | @INPROCEEDINGS{hasson19_obman,
56 | title = {Learning joint reconstruction of hands and manipulated objects},
57 | author = {Hasson, Yana and Varol, G{\"u}l and Tzionas, Dimitris and Kalevatykh, Igor and Black, Michael J. and Laptev, Ivan and Schmid, Cordelia},
58 | booktitle = {CVPR},
59 | year = {2019}
60 | }
61 | ```
62 |
--------------------------------------------------------------------------------
/models/ManoHand/eigen/human_eigen_nodip.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 |
3 | import argparse
4 | import os
5 | import sys
6 |
7 | from distutils.core import setup
8 | from distutils.dir_util import copy_tree
9 |
10 | parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
11 | parser.add_argument('--copy_model_only',
12 | action='store_true',
13 | help="Just copy MANO model to GraspIt robots directory")
14 | parser.add_argument('--graspit_dir',
15 | type=str,
16 | default=os.environ['GRASPIT'],
17 | help="Path to GraspIt root directory")
18 |
19 |
20 | def copy_model(args):
21 | """Copy hand model to GraspIt model's directory"""
22 |
23 | model_name = 'ManoHand'
24 | source_dir = os.path.join('models', model_name)
25 | target_dir = os.path.join(args.graspit_dir, 'models', 'robots', model_name)
26 |
27 | if not os.path.isdir(target_dir):
28 | copy_tree(source_dir, target_dir)
29 |
30 | for ver in ['v2', 'v3']:
31 | source = target_dir
32 | target = target_dir + '_{}'.format(ver)
33 | if not os.path.islink(target):
34 | print('Create symlink "{}" -> "{}"'.format(source, target))
35 | os.symlink(source, target)
36 |
37 |
38 | def setup_package():
39 | """Setup package"""
40 |
41 | with open("./requirements.txt", "r") as f:
42 | requirements = [l.strip() for l in f.readlines() if len(l.strip()) > 0]
43 |
44 | setup(name='mano_grasp',
45 | version='1.0',
46 | description='Grasps generation for the MANO model in GraspIt',
47 | author='Igor Kalevatykh',
48 | author_email='igor.kalevatykh@inria.fr',
49 | url='https://hassony2.github.io/obman',
50 | packages=['mano_grasp'],
51 | requires=requirements)
52 |
53 |
54 | if __name__ == '__main__':
55 | parseable_args = []
56 | unparseable_args = []
57 | for i, arg in enumerate(sys.argv):
58 | if arg == "--":
59 | unparseable_args = sys.argv[i:]
60 | break
61 | parseable_args.append(arg)
62 |
63 | args, filtered_args = parser.parse_known_args(args=parseable_args)
64 | sys.argv = filtered_args + unparseable_args
65 |
66 | if not args.copy_model_only:
67 | setup_package()
68 | copy_model(args)
--------------------------------------------------------------------------------
/models/ManoHand/iv/thumb1.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | -22.9076 13.0542 7.32873, -13.2274 11.2634 8.15866, -5.36261 16.8261 1.8157, -23.1436 -7.36003 13.8085,
24 | -24.4022 -17.5565 7.57114, -9.7291 -12.4577 7.28868, -11.5261 -4.20907 13.3458, 1.24531 16.2522 -0.803862,
25 | -5.00469 11.1215 7.68156, 2.58942 16.6477 -6.41804, -48.5421 -15.3451 7.77764, -35.8841 -17.7118 8.59955,
26 | -38.3649 -21.8433 -4.05886, -24.5133 -21.0177 -3.71001, -8.26278 -15.7058 -1.24394, -28.1999 -16.8539 -15.6924,
27 | -8.97559 -13.4285 -11.1986, -43.9695 -17.1138 -17.118, -5.2256 0.614688 -20.3668, -30.6067 4.19931 13.1738,
28 | -37.2827 -6.72123 14.6978, -19.1068 4.07742 14.344, -3.32958 -0.659827 12.5418, -3.62925 7.95 10.9917,
29 | -20.1366 2.67982 -25.4437, -31.7095 -8.00609 -24.6182, -15.3949 -7.8947 -20.4384, -9.84981 5.85172 12.9801,
30 | -1.48289 -8.60239 8.97009, 0.499942 -12.1578 1.62282, 1.25695 -10.6774 -6.09653, -45.88 -2.84886 15.5779,
31 | -39.737 8.11451 12.8687, -0.63914 12.0856 5.48602, -2.61039 -6.25915 -15.3991
32 | ]
33 | }
34 | coordIndex
35 | [
36 | 3,4,6,-1, 6,4,5,-1, 7,2,8,-1, 8,2,1,-1, 11,12,4,-1, 4,12,13,-1,
37 | 4,13,5,-1, 5,13,14,-1, 15,16,13,-1, 13,16,14,-1, 13,12,15,-1, 15,12,17,-1,
38 | 20,3,19,-1, 19,3,21,-1, 20,11,3,-1, 3,11,4,-1, 17,25,15,-1, 25,24,26,-1,
39 | 3,6,21,-1, 21,6,27,-1, 25,26,15,-1, 15,26,16,-1, 31,20,32,-1, 32,20,19,-1,
40 | 34,26,18,-1, 18,26,24,-1, 30,16,34,-1, 34,16,26,-1, 29,14,30,-1, 30,14,16,-1,
41 | 29,28,14,-1, 14,28,5,-1, 8,1,27,-1, 27,1,21,-1, 1,0,21,-1, 21,0,19,-1,
42 | 31,10,20,-1, 20,10,11,-1, 11,10,12,-1, 28,22,5,-1, 5,22,6,-1, 22,23,6,-1,
43 | 6,23,27,-1, 23,33,27,-1, 27,33,8,-1, 8,33,7,-1, 7,33,9,-1
44 | ]
45 | }
46 | appearance Appearance
47 | {
48 | material Material
49 | {
50 | ambientIntensity 0.2
51 | diffuseColor 0.9 0.9 0.9
52 | specularColor .1 .1 .1
53 | shininess .5
54 | }
55 | }
56 | }
57 | ]
58 | }
59 |
--------------------------------------------------------------------------------
/models/ManoHand/eigen/human_eigen_cgdb_refined.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/pinky1.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 29.2214 3.48831 -3.74027, 27.7326 11.0601 1.57409, 22.5921 10.8575 7.88944, -2.77101 -4.87402 2.43086,
24 | -2.18924 -2.4088 5.65053, -1.63402 6.10673 5.01853, -0.258151 7.94688 -4.00935, 2.52574 9.42587 1.46293,
25 | 1.92015 6.32459 5.29481, 15.3022 7.00805 8.43249, 17.3988 10.5104 4.78015, 25.8174 -4.04252 -2.73575,
26 | 25.1735 -7.59183 1.50364, 17.5833 -6.46591 -0.018229, 18.8171 -4.50912 -3.88337, -2.28937 1.58329 6.82014,
27 | 3.12883 -5.25285 -6.38167, 2.09634 -6.86178 -2.08858, -2.43813 -6.52059 -1.32677, -2.2478 -5.66412 -5.95652,
28 | 21.7261 -7.54155 5.58662, 15.4631 -4.77451 8.11056, 15.7055 -6.19881 4.22435, 13.5058 -0.389417 10.2738,
29 | 3.3563 -1.75385 -8.66263, 3.62867 4.10971 -8.63922, 20.9299 4.25044 -6.69562, 20.8507 -0.607019 -6.08319,
30 | 0.945536 1.88241 6.82853, 1.1337 -5.72216 2.18376, 1.01183 -3.05743 5.23241, 3.17502 8.88426 -4.29062,
31 | -0.848393 3.58712 -8.39098, -1.35524 -1.9832 -8.69399, 19.3631 10.4466 -1.57383, 24.6218 -0.632673 -4.49148
32 | ]
33 | }
34 | coordIndex
35 | [
36 | 8,9,7,-1, 7,9,10,-1, 11,12,14,-1, 14,12,13,-1, 16,17,19,-1, 19,17,18,-1,
37 | 24,25,27,-1, 27,25,26,-1, 15,28,5,-1, 5,28,8,-1, 12,20,13,-1, 13,20,22,-1,
38 | 17,29,18,-1, 18,29,3,-1, 30,28,4,-1, 4,28,15,-1, 25,32,31,-1, 31,32,6,-1,
39 | 24,33,25,-1, 25,33,32,-1, 31,6,7,-1, 7,10,31,-1, 31,10,34,-1, 16,24,14,-1,
40 | 14,24,27,-1, 29,30,3,-1, 3,30,4,-1, 24,16,33,-1, 33,16,19,-1, 1,0,34,-1,
41 | 34,0,26,-1, 23,9,28,-1, 28,9,8,-1, 14,13,16,-1, 16,13,17,-1, 29,22,30,-1,
42 | 30,22,21,-1, 21,23,30,-1, 30,23,28,-1, 35,11,27,-1, 27,11,14,-1, 13,22,17,-1,
43 | 17,22,29,-1, 10,2,34,-1, 34,2,1,-1, 34,26,31,-1, 31,26,25,-1, 27,26,35,-1,
44 | 35,26,0,-1
45 | ]
46 | }
47 | appearance Appearance
48 | {
49 | material Material
50 | {
51 | ambientIntensity 0.2
52 | diffuseColor 0.9 0.9 0.9
53 | specularColor .1 .1 .1
54 | shininess .5
55 | }
56 | }
57 | }
58 | ]
59 | }
60 |
--------------------------------------------------------------------------------
/models/ManoHand/eigen/human_eigen_cgdb.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/models/ManoHand/eigen/human_eigen_torques.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/mid2.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 17.885 -6.57472 7.94559, 18.4794 -7.64079 1.75548, 23.8783 -7.35814 3.57382, 22.761 -6.28731 8.74345,
24 | 18.5113 7.05425 10.2046, 17.7637 1.32631 12.1838, 22.1363 2.3194 13.1975, 19.7115 9.70738 4.32563,
25 | 17.5458 -3.59217 10.8173, 22.0899 -2.76306 11.9329, 24.0313 -7.25223 -1.32422, 24.4902 -3.26409 -5.02453,
26 | 7.22498 3.73302 -6.48839, 19.5104 2.86341 -6.28511, 18.8857 -2.22716 -5.8608, 5.87947 -0.997668 -7.33674,
27 | 24.692 2.31038 -6.16569, 20.1227 7.65521 -2.76636, 2.41788 -6.80685 4.13336, 2.84054 -7.48035 -1.88379,
28 | 2.41264 -4.0363 7.64251, 6.13923 5.49432 8.32124, 3.78895 -0.45279 9.4125, 18.6507 -6.44686 -3.22795,
29 | 3.89174 -5.05912 -5.90281, 7.88463 7.23634 -3.62391, 8.61659 8.95136 3.06576, 2.5039 6.86637 -3.721,
30 | 2.63145 8.24299 2.35269, 0.18125 4.91833 7.82873, -1.41045 -0.495036 8.53529, -1.81868 -4.01933 6.76121,
31 | 1.67316 3.944 -6.65415, 0.338586 -0.444871 -7.94114, 0.379806 -5.00366 -5.85827, -4.17053 -6.72637 2.73966,
32 | -0.949762 -6.36332 3.1807, -0.046786 -6.86887 -2.20315, -2.91867 -7.25383 -2.62961
33 | ]
34 | }
35 | coordIndex
36 | [
37 | 1,2,0,-1, 0,2,3,-1, 5,6,4,-1, 8,9,5,-1, 5,9,6,-1, 13,14,12,-1,
38 | 12,14,15,-1, 0,18,1,-1, 1,18,19,-1, 8,20,0,-1, 0,20,18,-1, 0,3,8,-1,
39 | 8,3,9,-1, 4,21,5,-1, 5,21,22,-1, 1,19,23,-1, 23,19,24,-1, 17,13,25,-1,
40 | 25,13,12,-1, 13,16,14,-1, 14,16,11,-1, 14,23,15,-1, 15,23,24,-1, 7,17,26,-1,
41 | 26,17,25,-1, 5,22,8,-1, 8,22,20,-1, 21,4,26,-1, 26,4,7,-1, 13,17,16,-1,
42 | 14,11,23,-1, 23,11,10,-1, 23,10,1,-1, 1,10,2,-1, 26,25,28,-1, 28,25,27,-1,
43 | 26,28,21,-1, 21,28,29,-1, 21,29,22,-1, 22,29,30,-1, 22,30,20,-1, 20,30,31,-1,
44 | 25,12,27,-1, 27,12,32,-1, 12,15,32,-1, 32,15,33,-1, 15,24,33,-1, 33,24,34,-1,
45 | 20,31,18,-1, 18,31,36,-1, 19,37,24,-1, 24,37,34,-1, 37,19,36,-1, 36,19,18,-1,
46 | 36,35,37,-1, 37,35,38,-1, 37,38,34,-1
47 | ]
48 | }
49 | appearance Appearance
50 | {
51 | material Material
52 | {
53 | ambientIntensity 0.2
54 | diffuseColor 0.9 0.9 0.9
55 | specularColor .1 .1 .1
56 | shininess .5
57 | }
58 | }
59 | }
60 | ]
61 | }
62 |
--------------------------------------------------------------------------------
/mano_grasp/graspit_scene.py:
--------------------------------------------------------------------------------
1 | import os
2 | from geometry_msgs.msg import Pose
3 |
4 | from kinematics import Kinematics
5 | from grasp_utils import *
6 |
7 |
8 | class GraspitScene:
9 | """ Scene with a hand (robot) and a body """
10 |
11 | def __init__(self, graspit, robot, body):
12 | default_pose = Pose()
13 | default_pose.position.y = 0.2
14 | default_pose.orientation.w = 1
15 |
16 | graspit.clearWorld()
17 | graspit.importRobot(robot)
18 | graspit.setRobotPose(default_pose)
19 | graspit.importGraspableBody(body)
20 |
21 | self._graspit = graspit
22 | self._robot = robot
23 | self._body = body
24 | self._kinematics = Kinematics('{}/models/robots/{}'.format(os.environ['GRASPIT'], robot))
25 |
26 | def planGrasps(self, max_steps=70000):
27 | """Plan grasps
28 |
29 | Keyword Arguments:
30 | max_steps {int} -- planner max steps (default: {70000})
31 |
32 | Returns:
33 | list -- list of planned grasps
34 | """
35 | result = self._graspit.planGrasps(max_steps=max_steps)
36 | return [grasp_from_msg(g) for g in result.grasps]
37 |
38 | def grasp(self, pose, dofs, body='', approach=False, auto_open=False, full_open=False):
39 | """Execute a grasp
40 |
41 | Arguments:
42 | pose {list} -- hand root position
43 | dofs {list} -- hand dofs angles
44 | body {str} -- grasping body name
45 | approach {bool} -- approch to contact before close fingers
46 | auto_open {bool} -- open fingers before closing
47 | full_open {bool} -- disable collision checking while opening
48 |
49 | Returns:
50 | dict -- grasp data
51 | """
52 | graspit = self._graspit
53 | kinematics = self._kinematics
54 | try:
55 | # execute grasp
56 | graspit.toggleAllCollisions(False)
57 | graspit.setRobotPose(msg_from_pose(pose))
58 | graspit.forceRobotDof(dofs)
59 | if auto_open:
60 | if not full_open:
61 | graspit.toggleAllCollisions(True)
62 | graspit.autoOpen()
63 | graspit.toggleAllCollisions(True)
64 | if approach:
65 | graspit.approachToContact()
66 | graspit.autoGrasp()
67 | # compute quality
68 | quality = graspit.computeQuality()
69 | if quality.result == 0 and quality.epsilon > -1:
70 | response = graspit.getRobot()
71 | robot = response.robot
72 | return grasp_from_robot_state(robot, quality, body, kinematics)
73 | except Exception:
74 | pass
75 |
76 | def __repr__(self):
77 | return "Scene {} -> {}".format(self._robot, self._body)
--------------------------------------------------------------------------------
/mano_grasp/kinematics.py:
--------------------------------------------------------------------------------
1 | import collections
2 | import json
3 | import numpy as np
4 | import os
5 |
6 | from math_utils import *
7 |
8 | CHAIN_NAME = collections.OrderedDict([('chain0', 'index'), ('chain1', 'mid'), ('chain2', 'ring'),
9 | ('chain3', 'pinky'), ('chain4', 'thumb')])
10 |
11 |
12 | class Kinematics:
13 | """ Kinematics converter GraspIt -> MANO """
14 |
15 | def __init__(self, path=''):
16 | """Constructor
17 |
18 | Keyword Arguments:
19 | path {str} -- path to to directory with a kinematics.json (default: {''})
20 | """
21 | with open(os.path.join(path, 'kinematics.json'), 'r') as f:
22 | data = json.load(f)
23 | self._chains = [Chain(n, data) for n in CHAIN_NAME.values()]
24 | self._origin = data['origin']
25 |
26 | def getManoPose(self, xyz, quat, dofs):
27 | """Convert a hand pose from GraspIt to MANO
28 |
29 | Arguments:
30 | xyz -- root position, vector x,y,z
31 | quat -- root orientation, quaternion x,y,z,w
32 | dofs -- joint angles, 20-length vector
33 |
34 | Returns:
35 | trans -- MANO hand's translation
36 | pose -- MANO hand's pose
37 | """
38 | pose = [rvec_from_quat(quat)]
39 | for chain in self._chains:
40 | p0 = chain.mano_root_mat
41 | m0 = chain.solid_root_mat
42 | m = m0.copy()
43 | for i in range(4):
44 | theta = dofs[chain.dof_index[i]] * chain.dof_coeff[i]
45 | m0i = chain.tau0[i]
46 | m0 = m0 * m0i
47 | mi = mat_rotate_z(theta) * m0i
48 | zi = m * [[0], [0], [1]]
49 | m = m * mi
50 |
51 | if i == 1:
52 | p = m * m0.T * p0
53 | rvec = rvec_from_mat(p)
54 | pose.append(rvec)
55 | elif i > 1:
56 | axis = np.array(p.T * zi).reshape(3)
57 | rvec = axis * theta
58 | p = p.dot(mat_from_rvec(rvec))
59 | pose.append(rvec)
60 | pose = np.array(pose).flatten()
61 |
62 | m = mat_from_quat(quat)
63 | trans = np.array(xyz) - self._origin + np.dot(m, self._origin)
64 |
65 | return trans.tolist(), pose.tolist()
66 |
67 |
68 | class Chain:
69 |
70 | def __init__(self, name, data):
71 | self.name = name
72 | self.solid_root_mat = np.matrix(data['{}_graspit_origin'.format(name)])
73 | self.mano_root_mat = np.matrix(data['{}_mano_origin'.format(name)])
74 | self.dof_index = [data['{}_{}_dof_index'.format(name, i)] for i in range(4)]
75 | self.dof_coeff = [data['{}_{}_dof_coeff'.format(name, i)] for i in range(4)]
76 | self.tau0 = [np.matrix(data['{}_{}_tau0'.format(name, i)]) for i in range(4)]
77 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/index2.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 14.9306 -6.59538 9.74358, 15.1239 -8.25751 4.21495, 20.17 -8.76692 5.34336, 19.1942 -6.86037 10.6286,
24 | 14.3598 6.0754 10.4056, 13.7585 1.63981 12.8521, 18.3923 2.74215 13.8683, 19.2194 7.0822 10.9689,
25 | 15.0397 8.61536 4.86918, 19.8463 9.10791 5.25143, 14.2021 -2.97622 12.7341, 18.6488 -2.58386 13.768,
26 | 20.9246 -7.61522 -0.826774, 21.7286 -3.35646 -4.55969, 21.0465 8.5005 -1.1307, 6.0046 3.84731 -6.08099,
27 | 16.4535 3.08082 -5.29082, 16.474 -2.74341 -5.29383, 5.79662 -0.194528 -7.24218, 21.9792 2.7185 -4.86714,
28 | 16.3422 7.64672 -1.48862, 4.40496 -6.56733 4.99779, 5.48382 -7.54641 -0.284392, 3.85221 -3.1236 8.83026,
29 | 3.71431 5.12254 7.55133, 3.40958 0.546702 9.48882, 15.4753 -7.175 -2.14136, 6.35863 -6.03385 -4.79964,
30 | 6.31763 7.00989 -3.16752, 5.76752 8.2184 2.56359, 1.69093 6.44994 -4.35951, 1.18339 7.78424 1.2887,
31 | -1.23474 5.159 6.33468, -1.6444 1.01044 8.16181, -0.137913 -3.1537 7.36628, 0.936086 3.55634 -7.46818,
32 | 0.495837 -0.076339 -8.28385, 2.38567 -5.52758 -5.78319, -2.5259 -5.99982 3.51849, 1.78578 -6.24858 3.86256,
33 | 2.6597 -7.12868 -1.75123
34 | ]
35 | }
36 | coordIndex
37 | [
38 | 1,2,0,-1, 0,2,3,-1, 5,6,4,-1, 4,6,7,-1, 4,7,8,-1, 8,7,9,-1,
39 | 10,11,5,-1, 5,11,6,-1, 15,16,18,-1, 18,16,17,-1, 20,8,14,-1, 14,8,9,-1,
40 | 0,21,1,-1, 1,21,22,-1, 10,23,0,-1, 0,23,21,-1, 0,3,10,-1, 10,3,11,-1,
41 | 4,24,5,-1, 5,24,25,-1, 1,22,26,-1, 26,22,27,-1, 20,16,28,-1, 28,16,15,-1,
42 | 16,19,17,-1, 17,19,13,-1, 26,27,17,-1, 17,27,18,-1, 8,20,29,-1, 29,20,28,-1,
43 | 5,25,10,-1, 10,25,23,-1, 24,4,29,-1, 29,4,8,-1, 16,20,19,-1, 19,20,14,-1,
44 | 17,13,26,-1, 26,13,12,-1, 26,12,1,-1, 1,12,2,-1, 29,28,31,-1, 31,28,30,-1,
45 | 29,31,24,-1, 24,31,32,-1, 25,24,33,-1, 33,24,32,-1, 23,25,34,-1, 34,25,33,-1,
46 | 28,15,30,-1, 30,15,35,-1, 15,18,35,-1, 35,18,36,-1, 36,18,37,-1, 37,18,27,-1,
47 | 23,34,21,-1, 21,34,39,-1, 22,40,27,-1, 27,40,37,-1, 40,22,39,-1, 39,22,21,-1,
48 | 39,38,40,-1, 39,34,38,-1
49 | ]
50 | }
51 | appearance Appearance
52 | {
53 | material Material
54 | {
55 | ambientIntensity 0.2
56 | diffuseColor 0.9 0.9 0.9
57 | specularColor .1 .1 .1
58 | shininess .5
59 | }
60 | }
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/pinky2.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 12.2 -1.24026 6.29621, 12.0856 -4.29044 3.60946, 15.9817 -4.76274 2.94492, 16.6588 -2.32197 6.16459,
24 | 14.2013 8.77878 1.58214, 12.9985 6.14802 5.25957, 17.5443 6.16557 5.5326, 18.7493 8.82708 1.8505,
25 | 14.5478 8.24894 -3.45785, 18.9905 7.95091 -3.49529, 12.4561 2.52083 6.70276, 16.7138 1.671 7.3342,
26 | 16.2504 -6.42099 -0.812705, 16.4739 -5.57256 -5.44246, 19.8506 -5.76187 2.69782, 18.2315 3.61736 -7.87691,
27 | 3.96923 -1.3411 -7.78839, 13.2629 -1.91375 -8.05175, 12.3106 -5.43433 -4.84867, 3.44576 -3.74484 -5.88672,
28 | 17.5087 -1.92908 -8.17993, 13.7163 3.80525 -7.76857, 3.04656 -0.802545 5.88662, 3.37877 -4.25479 2.01762,
29 | 3.3982 2.40474 6.42979, 4.24586 8.09296 1.71476, 3.2613 5.66056 5.25581, 11.9924 -5.76122 -0.214007,
30 | 3.37047 -4.99031 -2.32707, 4.48185 3.06753 -7.69329, 5.14011 7.79053 -3.91017, -0.120075 3.18035 -7.27172,
31 | 0.858015 7.51777 -3.11717, -0.344285 7.30046 2.92593, 0.034598 4.7537 5.64277, 0.231122 1.69867 6.61335,
32 | -0.331815 -1.27928 -7.5048, -0.23107 -3.78455 -5.63195, 0.63394 -5.16366 -2.18591, 0.196153 -2.07836 5.59906,
33 | 0.960259 -4.34172 2.1698, -1.45382 -5.17235 1.93235
34 | ]
35 | }
36 | coordIndex
37 | [
38 | 1,2,0,-1, 0,2,3,-1, 5,6,4,-1, 4,6,7,-1, 4,7,8,-1, 8,7,9,-1,
39 | 10,11,5,-1, 5,11,6,-1, 12,14,2,-1, 17,18,16,-1, 16,18,19,-1, 21,8,15,-1,
40 | 15,8,9,-1, 0,22,1,-1, 1,22,23,-1, 10,24,0,-1, 0,24,22,-1, 0,3,10,-1,
41 | 10,3,11,-1, 4,25,5,-1, 5,25,26,-1, 1,23,27,-1, 27,23,28,-1, 21,17,29,-1,
42 | 29,17,16,-1, 18,17,13,-1, 13,17,20,-1, 27,28,18,-1, 18,28,19,-1, 8,21,30,-1,
43 | 30,21,29,-1, 5,26,10,-1, 10,26,24,-1, 25,4,30,-1, 30,4,8,-1, 17,21,20,-1,
44 | 20,21,15,-1, 27,18,12,-1, 12,18,13,-1, 1,27,2,-1, 2,27,12,-1, 30,29,32,-1,
45 | 32,29,31,-1, 30,32,25,-1, 25,32,33,-1, 25,33,26,-1, 26,33,34,-1, 26,34,24,-1,
46 | 24,34,35,-1, 29,16,31,-1, 31,16,36,-1, 16,19,36,-1, 36,19,37,-1, 37,19,38,-1,
47 | 38,19,28,-1, 24,35,22,-1, 22,35,39,-1, 23,40,28,-1, 28,40,38,-1, 39,40,22,-1,
48 | 22,40,23,-1, 39,41,40,-1, 40,41,38,-1
49 | ]
50 | }
51 | appearance Appearance
52 | {
53 | material Material
54 | {
55 | ambientIntensity 0.2
56 | diffuseColor 0.9 0.9 0.9
57 | specularColor .1 .1 .1
58 | shininess .5
59 | }
60 | }
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/thumb2.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | -17.7122 5.65002 -19.5864, -17.0705 -3.22152 -18.2753, -25.5118 -6.85737 -26.0035, -20.3155 -0.806743 -25.4054,
24 | -15.8599 1.81893 -15.6301, -18.1978 -10.347 -17.2164, -30.6476 -11.9594 -25.5262, -29.3181 2.88596 3.90238,
25 | -20.9099 2.63325 3.35352, -18.9659 7.73247 -2.3356, -26.5832 9.18582 -1.5248, -30.3702 -5.90282 4.85229,
26 | -22.7814 -4.72438 4.91837, -19.5419 -13.9608 -3.99744, -21.3858 -10.9654 2.19362, -29.7582 -13.0619 0.501712,
27 | -28.5306 -15.9504 -6.74419, -22.334 8.88074 -7.70607, -16.6848 7.56984 -9.52968, -30.6055 -15.8447 -17.5469,
28 | -18.6454 -13.3402 -11.4952, -4.82228 -6.33757 -10.3732, -4.50403 -0.785411 -11.6405, -6.94104 6.55886 2.80375,
29 | -4.82074 7.69941 -3.72925, -7.97769 1.6621 7.28177, -8.85496 -9.02041 5.28204, -9.52607 -4.02956 7.56418,
30 | -3.96834 4.92199 -9.07577, -6.02919 -11.1338 -6.86113, -7.93971 -12.6463 -0.276992, 1.72949 -10.1592 -5.86357,
31 | -0.087148 -11.7297 1.17706, -0.669772 -8.68698 7.30255, -2.35107 -2.93818 9.87306, -2.46362 2.03358 9.67129,
32 | 1.71816 -4.42101 -9.25193, 1.5237 1.19706 -10.06, 0.17018 6.77826 -6.805, -2.93825 6.61787 5.40445,
33 | -2.22041 8.14648 -1.07366, 1.69665 8.92717 0.032621
34 | ]
35 | }
36 | coordIndex
37 | [
38 | 2,3,1,-1, 1,3,4,-1, 6,2,5,-1, 5,2,1,-1, 8,9,7,-1, 7,9,10,-1,
39 | 12,8,11,-1, 11,8,7,-1, 14,15,13,-1, 13,15,16,-1, 0,17,18,-1, 15,14,11,-1,
40 | 11,14,12,-1, 6,5,19,-1, 19,5,20,-1, 19,20,16,-1, 16,20,13,-1, 5,1,21,-1,
41 | 21,1,22,-1, 18,9,24,-1, 24,9,23,-1, 9,8,23,-1, 23,8,25,-1, 14,26,12,-1,
42 | 12,26,27,-1, 4,18,28,-1, 28,18,24,-1, 20,5,29,-1, 29,5,21,-1, 1,4,22,-1,
43 | 22,4,28,-1, 30,13,29,-1, 29,13,20,-1, 12,27,8,-1, 8,27,25,-1, 26,14,30,-1,
44 | 30,14,13,-1, 29,31,30,-1, 30,31,32,-1, 30,32,26,-1, 26,32,33,-1, 26,33,27,-1,
45 | 27,33,34,-1, 27,34,25,-1, 25,34,35,-1, 29,21,31,-1, 31,21,36,-1, 21,22,36,-1,
46 | 36,22,37,-1, 22,28,37,-1, 37,28,38,-1, 23,25,39,-1, 39,25,35,-1, 28,24,38,-1,
47 | 38,24,40,-1, 39,40,23,-1, 23,40,24,-1, 39,41,40,-1, 40,41,38,-1, 3,0,4,-1,
48 | 4,0,18,-1, 17,10,18,-1, 18,10,9,-1
49 | ]
50 | }
51 | appearance Appearance
52 | {
53 | material Material
54 | {
55 | ambientIntensity 0.2
56 | diffuseColor 0.9 0.9 0.9
57 | specularColor .1 .1 .1
58 | shininess .5
59 | }
60 | }
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/ring2.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 17.7678 -4.6463 9.76097, 19.0822 -7.60813 5.06955, 23.6851 -7.98842 6.07946, 22.1261 -4.83 10.642,
24 | 18.9152 8.13928 7.1834, 17.5424 4.5552 10.3748, 21.5324 4.63745 11.378, 23.9745 8.46835 8.21885,
25 | 18.6867 8.83559 1.61955, 25.6123 9.12543 2.58299, 25.8055 4.92091 12.0191, 17.4075 -0.204964 10.9512,
26 | 21.0711 -0.256521 11.9417, 24.5908 -8.0987 0.732061, 25.0769 -5.8409 -2.96589, 25.8747 5.52792 -3.51102,
27 | 4.47367 1.66623 -7.25978, 20.9324 -0.046667 -5.95569, 20.1621 -5.43168 -3.69485, 3.76745 -2.62452 -6.87347,
28 | 25.1373 -0.698508 -5.59089, 20.4628 5.74437 -4.02715, 1.66169 -4.66343 6.14607, 2.8932 -6.98395 1.41608,
29 | 2.89779 -0.887315 7.94079, 3.49063 6.07958 5.61946, 3.09192 2.45356 7.83303, 19.9764 -7.68783 -0.131802,
30 | 3.35136 -6.10712 -3.92284, 5.33931 5.74528 -5.00411, 5.33473 8.27883 0.452809, 0.60823 5.0621 -5.89328,
31 | 0.676503 7.39122 -0.375386, -1.33538 5.90951 4.79814, -1.80494 2.28642 6.89195, -1.98153 -1.13954 6.97057,
32 | -0.587065 1.30599 -8.12829, -1.38325 -2.42738 -7.62501, 0.592148 -5.84043 -4.01253, -4.02109 -4.43222 4.66277,
33 | -0.903391 -4.56449 5.04706, 0.170921 -6.60863 0.672143, -2.98834 -6.53151 0.531954
34 | ]
35 | }
36 | coordIndex
37 | [
38 | 0,1,3,-1, 3,1,2,-1, 5,6,4,-1, 4,6,7,-1, 4,7,8,-1, 8,7,9,-1,
39 | 11,12,5,-1, 5,12,6,-1, 12,10,6,-1, 16,17,19,-1, 19,17,18,-1, 21,8,15,-1,
40 | 15,8,9,-1, 0,22,1,-1, 1,22,23,-1, 11,24,0,-1, 0,24,22,-1, 11,0,12,-1,
41 | 12,0,3,-1, 4,25,5,-1, 5,25,26,-1, 6,10,7,-1, 1,23,27,-1, 27,23,28,-1,
42 | 21,17,29,-1, 29,17,16,-1, 18,17,14,-1, 14,17,20,-1, 27,28,18,-1, 18,28,19,-1,
43 | 8,21,30,-1, 30,21,29,-1, 5,26,11,-1, 11,26,24,-1, 25,4,30,-1, 30,4,8,-1,
44 | 17,21,20,-1, 20,21,15,-1, 18,14,27,-1, 27,14,13,-1, 27,13,1,-1, 1,13,2,-1,
45 | 30,29,32,-1, 32,29,31,-1, 30,32,25,-1, 25,32,33,-1, 25,33,26,-1, 26,33,34,-1,
46 | 26,34,24,-1, 24,34,35,-1, 29,16,31,-1, 31,16,36,-1, 16,19,36,-1, 36,19,37,-1,
47 | 37,19,38,-1, 38,19,28,-1, 24,35,22,-1, 22,35,40,-1, 23,41,28,-1, 28,41,38,-1,
48 | 41,23,40,-1, 40,23,22,-1, 40,39,41,-1, 41,39,42,-1, 41,42,38,-1, 40,35,39,-1
49 | ]
50 | }
51 | appearance Appearance
52 | {
53 | material Material
54 | {
55 | ambientIntensity 0.2
56 | diffuseColor 0.9 0.9 0.9
57 | specularColor .1 .1 .1
58 | shininess .5
59 | }
60 | }
61 | }
62 | ]
63 | }
64 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/ring1.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 22.8325 -6.64838 12.5655, 28.3752 -8.05803 5.21971, 30.7956 0.678058 -5.18976, 30.0021 6.2934 -4.73621,
24 | 29.7563 -7.94424 -0.392338, 28.8257 -5.95374 -3.28715, 34.7489 -9.20133 -6.68087, 21.0074 -1.30001 13.7565,
25 | 27.7168 10.3931 11.6105, 33.6039 12.908 2.02727, 26.6171 12.2702 0.404977, 22.9143 11.3339 6.73039,
26 | 19.6356 5.90228 11.2418, 0.412415 -8.01003 1.74132, -1.57528 -5.10225 6.30385, -3.49459 4.1876 7.03989,
27 | -1.61553 8.32388 3.88071, -0.086337 9.20478 -1.75515, 3.2483 9.89701 4.51848, 0.696239 5.06921 7.68098,
28 | 15.6576 5.82493 10.2609, 16.6759 11.3709 6.17377, -3.26302 -0.722609 7.60353, 5.97597 -6.64121 -6.15043,
29 | 5.46458 -8.77572 -1.81496, 1.32464 -7.99183 -3.60608, 1.48841 -5.6881 -7.30403, 19.7733 -4.55499 10.4928,
30 | 23.075 -6.03442 5.32885, 16.3623 -0.27644 11.4437, 5.91167 -0.77707 -9.0682, 6.2885 6.36164 -7.83089,
31 | 20.4869 6.6091 -6.11197, 21.9425 0.568057 -5.75754, 0.394541 -0.13474 8.68739, 4.52732 -8.34301 3.29062,
32 | 1.94671 -5.33975 7.61477, 5.1494 10.0529 -1.38705, 0.679326 5.67991 -7.84916, 0.824964 -0.588333 -9.92903,
33 | 18.6962 12.299 -0.633851, 23.7127 -4.86766 -1.78232, 24.3251 -6.46622 1.22065
34 | ]
35 | }
36 | coordIndex
37 | [
38 | 6,4,5,-1, 9,10,8,-1, 8,10,11,-1, 5,2,6,-1, 9,3,10,-1, 11,12,8,-1,
39 | 8,12,7,-1, 19,20,18,-1, 18,20,21,-1, 24,25,23,-1, 23,25,26,-1, 27,28,0,-1,
40 | 0,28,1,-1, 29,27,7,-1, 7,27,0,-1, 31,32,30,-1, 30,32,33,-1, 34,19,22,-1,
41 | 22,19,15,-1, 24,35,25,-1, 25,35,13,-1, 36,34,14,-1, 14,34,22,-1, 37,31,17,-1,
42 | 17,31,38,-1, 31,30,38,-1, 38,30,39,-1, 37,17,18,-1, 18,17,16,-1, 18,21,37,-1,
43 | 37,21,40,-1, 30,33,23,-1, 23,33,41,-1, 35,36,13,-1, 13,36,14,-1, 15,19,16,-1,
44 | 16,19,18,-1, 23,26,30,-1, 30,26,39,-1, 40,10,32,-1, 32,10,3,-1, 29,20,34,-1,
45 | 34,20,19,-1, 20,12,21,-1, 21,12,11,-1, 42,24,41,-1, 41,24,23,-1, 28,27,35,-1,
46 | 35,27,36,-1, 27,29,36,-1, 36,29,34,-1, 2,33,3,-1, 3,33,32,-1, 42,28,24,-1,
47 | 24,28,35,-1, 21,11,40,-1, 40,11,10,-1, 33,2,41,-1, 41,2,5,-1, 32,31,40,-1,
48 | 40,31,37,-1, 20,29,12,-1, 12,29,7,-1, 4,42,5,-1, 5,42,41,-1, 28,42,1,-1,
49 | 1,42,4,-1
50 | ]
51 | }
52 | appearance Appearance
53 | {
54 | material Material
55 | {
56 | ambientIntensity 0.2
57 | diffuseColor 0.9 0.9 0.9
58 | specularColor .1 .1 .1
59 | shininess .5
60 | }
61 | }
62 | }
63 | ]
64 | }
65 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/mid1.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 36.9006 -9.50645 -3.49925, 32.6903 1.84652 16.1272, 36.0423 7.83813 15.8591, 33.4173 -8.36602 15.3965,
24 | 32.9033 -4.4178 -4.5789, 30.1331 -3.31157 15.5668, 36.4196 10.358 -2.36014, 36.5585 14.549 5.46702,
25 | 34.0493 3.58192 -5.28372, 37.0203 -10.0861 6.09079, 1.77204 -7.2031 -0.370699, 0.539951 -6.26661 4.79893,
26 | -5.20278 6.5036 6.2601, -5.29256 0.727789 8.23929, -1.06167 2.21281 9.25296, -0.574345 7.88943 5.88882,
27 | -4.31277 9.27625 0.381114, 0.954026 9.92387 0.097505, 4.14498 9.24554 6.74475, 4.33771 2.85522 9.98812,
28 | 25.666 3.24964 13.0589, 25.0021 10.1447 10.3298, 29.2376 -7.9753 -0.670745, 27.8859 -4.94028 -2.81951,
29 | -0.528463 -2.84182 7.98835, 7.59174 -5.2886 -7.65379, 7.33901 -8.74181 -3.44298, 1.91195 -7.08045 -5.26873,
30 | 1.91333 -3.06599 -8.96904, 28.2877 -5.28971 11.0974, 29.7628 -7.42947 5.24132, 26.5633 -1.85203 12.6631,
31 | 7.30854 1.05831 -9.44476, 6.72297 7.63813 -7.63924, 25.9121 9.86131 -3.95581, 26.0375 3.23625 -5.95502,
32 | 4.6336 -2.87815 9.74704, 6.51191 -9.14101 1.9931, 5.59255 -7.55316 6.70726, 5.63158 10.723 -0.22099,
33 | 1.13367 7.65557 -7.3652, 1.47838 2.49515 -10.1102, -3.67039 7.28432 -6.71087, 25.4539 13.1031 3.13536
34 | ]
35 | }
36 | coordIndex
37 | [
38 | 13,14,12,-1, 12,14,15,-1, 12,15,16,-1, 16,15,17,-1, 18,19,21,-1, 21,19,20,-1,
39 | 0,22,4,-1, 4,22,23,-1, 13,24,14,-1, 26,27,25,-1, 25,27,28,-1, 9,3,30,-1,
40 | 30,3,29,-1, 31,29,5,-1, 5,29,3,-1, 33,34,32,-1, 32,34,35,-1, 36,19,24,-1,
41 | 24,19,14,-1, 0,9,22,-1, 22,9,30,-1, 27,26,10,-1, 10,26,37,-1, 38,36,11,-1,
42 | 11,36,24,-1, 39,33,17,-1, 17,33,40,-1, 33,32,40,-1, 40,32,41,-1, 42,16,40,-1,
43 | 40,16,17,-1, 39,17,18,-1, 18,17,15,-1, 39,18,43,-1, 43,18,21,-1, 32,35,25,-1,
44 | 25,35,23,-1, 37,38,10,-1, 10,38,11,-1, 14,19,15,-1, 15,19,18,-1, 25,28,32,-1,
45 | 32,28,41,-1, 7,6,43,-1, 43,6,34,-1, 31,20,36,-1, 36,20,19,-1, 41,42,40,-1,
46 | 21,20,2,-1, 2,20,1,-1, 22,26,23,-1, 23,26,25,-1, 30,29,37,-1, 37,29,38,-1,
47 | 29,31,38,-1, 38,31,36,-1, 35,34,8,-1, 8,34,6,-1, 30,37,22,-1, 22,37,26,-1,
48 | 43,21,7,-1, 7,21,2,-1, 35,8,23,-1, 23,8,4,-1, 43,34,39,-1, 39,34,33,-1,
49 | 20,31,1,-1, 1,31,5,-1
50 | ]
51 | }
52 | appearance Appearance
53 | {
54 | material Material
55 | {
56 | ambientIntensity 0.2
57 | diffuseColor 0.9 0.9 0.9
58 | specularColor .1 .1 .1
59 | shininess .5
60 | }
61 | }
62 | }
63 | ]
64 | }
65 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/index1.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 0.156439 -8.88743 0.401258, -1.15073 -7.1908 5.68652, -3.69033 2.10445 8.92621, -3.66859 6.52256 6.02683,
24 | 37.5915 -9.96976 6.90615, -3.42165 8.62861 0.309332, 34.9921 4.99739 15.4749, 36.5415 -2.74921 15.7486,
25 | 34.0987 -9.69398 0.938475, 1.06625 7.73458 6.39946, 1.15408 3.17157 9.77985, 18.989 4.59762 13.0491,
26 | 17.8892 9.97694 9.25283, 24.8861 -3.95839 -4.36341, 27.8632 -8.05173 0.082985, 24.406 -6.61689 -1.0053,
27 | 21.3918 -3.99146 -6.0288, 32.741 -8.50453 -4.87921, -2.46685 -3.08547 8.82591, 5.92475 -3.57314 -9.03515,
28 | 5.5631 -7.95279 -5.38338, 0.6883 -7.61743 -5.76887, 0.702175 -3.28347 -9.50179, 28.9914 -8.50888 5.82218,
29 | 30.0594 -6.53034 11.9547, 22.7836 -6.2994 9.71356, 23.3978 -7.2622 3.94963, 27.6505 -0.974793 14.737,
30 | 21.0425 -1.36357 13.1796, 5.20132 3.01411 -9.2171, 3.51927 9.29628 -5.11441, 18.6811 10.433 -3.83822,
31 | 18.2444 2.95128 -7.06235, 29.063 11.2931 -3.15722, 2.32289 -2.16076 10.0272, 5.14749 -9.64834 1.14382,
32 | 3.76388 -7.66173 7.08796, 1.71015 9.79414 0.30164, -2.13077 8.25028 -6.0728, -0.159284 2.73533 -9.80924,
33 | 26.6454 5.36455 13.9836, 34.2591 12.1103 11.8804, 26.0138 10.9578 10.0175, 19.4014 12.6774 3.12272,
34 | 24.8664 2.46547 -5.56999, 27.3668 13.9786 4.20474
35 | ]
36 | }
37 | coordIndex
38 | [
39 | 9,10,12,-1, 12,10,11,-1, 14,15,13,-1, 13,15,16,-1, 20,21,19,-1, 19,21,22,-1,
40 | 24,25,23,-1, 23,25,26,-1, 28,25,27,-1, 27,25,24,-1, 30,31,29,-1, 29,31,32,-1,
41 | 34,10,18,-1, 18,10,2,-1, 23,26,14,-1, 14,26,15,-1, 21,20,0,-1, 0,20,35,-1,
42 | 36,34,1,-1, 1,34,18,-1, 37,30,5,-1, 5,30,38,-1, 29,39,30,-1, 30,39,38,-1,
43 | 9,37,3,-1, 3,37,5,-1, 4,23,8,-1, 8,23,14,-1, 4,24,23,-1, 27,24,7,-1,
44 | 7,6,27,-1, 27,6,40,-1, 6,41,40,-1, 40,41,42,-1, 37,9,43,-1, 43,9,12,-1,
45 | 29,32,19,-1, 19,32,16,-1, 41,45,42,-1, 35,36,0,-1, 0,36,1,-1, 2,10,3,-1,
46 | 3,10,9,-1, 19,22,29,-1, 29,22,39,-1, 13,17,14,-1, 14,17,8,-1, 43,45,31,-1,
47 | 31,45,33,-1, 28,11,34,-1, 34,11,10,-1, 12,11,42,-1, 42,11,40,-1, 15,20,16,-1,
48 | 16,20,19,-1, 26,25,35,-1, 35,25,36,-1, 25,28,36,-1, 36,28,34,-1, 32,31,44,-1,
49 | 44,31,33,-1, 26,35,15,-1, 15,35,20,-1, 12,42,43,-1, 43,42,45,-1, 32,44,16,-1,
50 | 16,44,13,-1, 43,31,37,-1, 37,31,30,-1, 11,28,40,-1, 40,28,27,-1
51 | ]
52 | }
53 | appearance Appearance
54 | {
55 | material Material
56 | {
57 | ambientIntensity 0.2
58 | diffuseColor 0.9 0.9 0.9
59 | specularColor .1 .1 .1
60 | shininess .5
61 | }
62 | }
63 | }
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/mano_grasp/grasp_utils.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | from geometry_msgs.msg import Pose
3 |
4 | from kinematics import CHAIN_NAME
5 |
6 |
7 | def pose_from_msg(msg):
8 | pos = msg.position
9 | orn = msg.orientation
10 | return [pos.x, pos.y, pos.z, orn.x, orn.y, orn.z, orn.w]
11 |
12 |
13 | def msg_from_pose(pose):
14 | msg = Pose()
15 | pos = msg.position
16 | orn = msg.orientation
17 | pos.x, pos.y, pos.z, orn.x, orn.y, orn.z, orn.w = pose
18 | return msg
19 |
20 |
21 | def vector_from_msg(msg):
22 | vector = msg.vector
23 | return [vector.x, vector.y, vector.z]
24 |
25 |
26 | def contact_from_msg(msg):
27 | pose = pose_from_msg(msg.ps.pose)
28 | if msg.body1 == 'Base':
29 | link = 'palm'
30 | else:
31 | parts = msg.body1.split('_')
32 | chain = CHAIN_NAME[parts[1]]
33 | link = chain + '_' + parts[2]
34 | return dict(link=link, pose=pose)
35 |
36 |
37 | def grasp_from_msg(grasp, kinematics=None):
38 | return dict(pose=pose_from_msg(grasp.pose),
39 | dofs=grasp.dofs,
40 | contacts=[],
41 | epsilon=grasp.epsilon_quality,
42 | volume=grasp.volume_quality,
43 | link_in_contact=[],
44 | quality=-1)
45 |
46 |
47 | def grasp_from_robot_state(robot, quality, body_name, kinematics=None):
48 | contacts = [contact_from_msg(c) for c in robot.contacts if c.body2 == body_name]
49 | links = list(set([c['link'] for c in contacts]))
50 | palm_contact = 'palm' in links
51 | average_quality = np.linalg.norm([quality.epsilon, quality.volume]) \
52 | * (3.0 if palm_contact else 1.0) \
53 | * (len(links) ** 0.5)
54 | pose = pose_from_msg(robot.pose)
55 | dofs = robot.dofs
56 | grasp = dict(
57 | body=body_name,
58 | pose=pose,
59 | dofs=dofs,
60 | contacts=contacts,
61 | epsilon=quality.epsilon,
62 | volume=quality.volume,
63 | link_in_contact=links,
64 | quality=average_quality,
65 | )
66 |
67 | if kinematics is not None:
68 | trans, pose = kinematics.getManoPose(pose[:3], pose[3:], dofs)
69 | grasp.update(dict(mano_trans=trans, mano_pose=pose))
70 |
71 | return grasp
72 |
73 |
74 | def squeezed(grasps):
75 | intermadiates = [1, 4, 7, 10, 14]
76 | distals = [2, 5, 8, 11, 15]
77 | offsets = np.array([10.5, 6.5, 8, 2.2, 0])
78 | dependent = [
79 | set(['index_link1', 'index_link2']),
80 | set(['mid_link1', 'mid_link2']),
81 | set(['ring_link1', 'ring_link2']),
82 | set(['pinky_link1', 'pinky_link2']),
83 | set(['thumb_link2'])
84 | ]
85 | for i, grasp in enumerate(grasps):
86 | pose = grasp['pose']
87 | dofs = np.degrees(grasp['dofs'])
88 | link_in_contact = set(grasp['link_in_contact'])
89 |
90 | squeezed = dofs[distals] + offsets > 94
91 | no_touch = [not (l & link_in_contact) for l in dependent]
92 | indicies = np.logical_and(squeezed, no_touch)
93 |
94 | joints = [intermadiates[i] for i, cond in enumerate(indicies) if cond] + \
95 | [distals[i] for i, cond in enumerate(indicies) if cond]
96 |
97 | if joints:
98 | yield i, joints
99 |
--------------------------------------------------------------------------------
/models/ManoHand/cyberglove/calibration_best_no_dip_aa.txt:
--------------------------------------------------------------------------------
1 | 16 24
2 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 -0.005630 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
3 | 0.000000 0.000000 0.000000 0.000000 0.014819 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
4 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.012988 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
6 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.019361 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
7 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.016194 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
8 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.005722 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
9 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.021669 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
10 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.018584 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
11 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.010267 0.000000 0.000000 0.000000 0.000000 0.000000
12 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.026636 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
13 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.017841 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
14 | -0.017155 0.000000 0.000000 0.013285 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
15 | 0.011151 0.000000 0.000000 0.015225 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
16 | 0.000000 0.014237 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
17 | 0.000000 0.000000 0.018456 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
18 | 0.951485 -1.170687 -0.871040 0.000000 -1.914178 -1.133563 -1.075809 -1.874618 -1.216771 -1.396262 -2.424663 -1.248103 1.553880 -3.566037 -0.777025 -1.928780
19 |
--------------------------------------------------------------------------------
/mano_grasp/grasp_miner.py:
--------------------------------------------------------------------------------
1 | from graspit_process import GraspitProcess
2 | from graspit_scene import GraspitScene
3 | from kinematics import Kinematics
4 | from grasp_utils import *
5 |
6 |
7 | class GraspMiner:
8 | """ Grasp generator """
9 |
10 | def __init__(self,
11 | graspit_process,
12 | max_steps=0,
13 | max_grasps=0,
14 | relax_fingers=False,
15 | change_speed=False):
16 | """Constructor
17 |
18 | Arguments:
19 | graspit_process {GraspitProcess} -- process
20 |
21 | Keyword Arguments:
22 | max_steps {int} -- max search steps per object (default: {auto})
23 | max_grasps {int} -- return only N best grasps per object (default: {auto})
24 | change_speed {bool} -- try several joint's speed ratios (default: {False})
25 | relax_fingers {bool} -- randomize angles of squezzed fingers (default: {False})
26 | """
27 | self._process = graspit_process
28 | self._max_steps = max_steps
29 | self._max_grasps = max_grasps
30 | self._relax_fingers = relax_fingers
31 | self._robot_names = ['ManoHand']
32 | # we can't change a joints speed ratios on the fly, so use several hand models
33 | if change_speed:
34 | self._robot_names += ['ManoHand_v2', 'ManoHand_v3']
35 |
36 | def __call__(self, object_name):
37 | """Generated grasps for specific object
38 |
39 | Arguments:
40 | object_name {str} -- object
41 |
42 | Returns:
43 | tuple -- object_name, generated grasps
44 | """
45 | if not self._process.run:
46 | self._process.start()
47 |
48 | grasps_all = []
49 | for robot_name in self._robot_names:
50 | # load hand and body
51 | scene = GraspitScene(self._process.graspit, robot_name, object_name)
52 |
53 | # plan grasps with a standart procedure
54 | plans = scene.planGrasps(max_steps=self._max_steps)
55 |
56 | # execute grasps with different euristics
57 | variants = (
58 | dict(approach=False, auto_open=False), #
59 | dict(approach=False, auto_open=True, full_open=True),
60 | dict(approach=True, auto_open=True, full_open=False),
61 | dict(approach=True, auto_open=True, full_open=True))
62 |
63 | grasps = []
64 | for plan in plans:
65 | pose = plan['pose']
66 | dofs = plan['dofs']
67 |
68 | for args in variants:
69 | grasp = scene.grasp(pose, dofs, object_name, **args)
70 | if grasp is not None:
71 | grasps.append(grasp)
72 |
73 | # sort by quality
74 | grasps.sort(key=lambda g: g['quality'], reverse=True)
75 |
76 | # cut best grasps
77 | if self._max_grasps > 0:
78 | grasps = grasps[:self._max_grasps]
79 |
80 | # GraspIt has a tendency to squeeze the fingers even
81 | # they aren't in contact with an object.
82 | # Below we randomize joints positions in such case
83 | if self._relax_fingers:
84 | rs = np.random.RandomState(0)
85 | for i, joints in squeezed(grasps):
86 | pose = grasps[i]['pose']
87 | dofs = list(grasps[i]['dofs'])
88 | for attempt in range(20):
89 | angles = rs.uniform(0.0, 2.0, size=len(joints))
90 | for j, a in zip(joints, angles):
91 | dofs[j] = a
92 | grasp = scene.grasp(pose, dofs, object_name)
93 | if grasp is not None:
94 | grasps[i]['dofs'] = tuple(dofs)
95 |
96 | grasps_all.extend(grasps)
97 |
98 | return (object_name, grasps_all)
99 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/thumb3.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 1.72949 -10.1592 -5.86357, -0.087148 -11.7297 1.17706, -0.669772 -8.68698 7.30255, -2.35107 -2.93818 9.87306,
24 | -2.46362 2.03358 9.67129, 1.71816 -4.42101 -9.25193, 1.5237 1.19706 -10.06, 0.17018 6.77826 -6.805,
25 | 9.26982 -1.02195 -8.15874, 17.4807 -3.81745 -2.51494, 25.6861 -1.28602 14.5421, 18.9536 -1.8084 13.6488,
26 | 20.4107 -3.39613 11.5444, 26.3712 -3.37291 12.7984, 14.8067 -4.26631 11.0127, 16.8989 -4.38797 9.57828,
27 | 17.0283 -5.3655 4.36636, 22.3538 -5.21243 5.55838, 19.0303 -3.82825 -0.19342, 22.852 -2.61879 -0.21301,
28 | 27.7653 -5.03057 6.54951, 30.2333 -4.23097 11.8375, 32.3722 -4.39825 7.53938, 31.0229 -1.22314 13.2012,
29 | 16.1524 -7.20226 3.98242, 8.00591 -1.64892 12.7548, 16.3289 1.05947 14.5933, 24.2992 2.41642 14.8993,
30 | 30.5116 2.12318 12.9892, 14.7044 5.41065 13.535, 22.3509 6.13243 12.8253, 27.8263 5.91377 10.4015,
31 | 14.1135 8.97849 9.97971, 21.508 8.39811 9.47768, 1.24714 7.39929 6.78274, 3.24599 3.11153 11.7508,
32 | 25.7634 7.2206 8.62434, 34.4634 -2.15538 7.87303, 33.823 1.70342 7.55724, 22.038 -0.811587 -3.22702,
33 | 28.1935 -2.89023 0.424606, 27.9707 -0.146794 -1.46669, 19.8676 2.17572 -5.27447, 27.2908 2.69748 -2.37779,
34 | 32.7441 -0.954956 1.82844, 31.4823 -3.54875 2.92921, -2.93825 6.61787 5.40445, -2.22041 8.14648 -1.07366,
35 | 1.69665 8.92717 0.032621, 13.988 10.6615 3.3427, 4.5912 8.11889 -5.60243, 7.6394 3.59066 -8.60369,
36 | 18.2411 5.77988 -5.21457, 15.8835 9.16175 -2.41845, 25.5841 5.95877 -1.34865, 23.8455 7.77182 0.57588,
37 | 22.406 9.18096 5.15499, 29.5893 5.31641 2.1758, 31.9189 2.38197 1.32478, 30.5557 5.32988 6.53587,
38 | 27.0704 6.7896 2.72763, 27.1094 7.11576 5.83309
39 | ]
40 | }
41 | coordIndex
42 | [
43 | 9,0,8,-1, 8,0,5,-1, 11,12,10,-1, 10,12,13,-1, 14,15,11,-1, 11,15,12,-1,
44 | 16,17,15,-1, 15,17,12,-1, 16,18,17,-1, 17,18,19,-1, 20,13,17,-1, 17,13,12,-1,
45 | 13,20,21,-1, 21,20,22,-1, 21,23,13,-1, 13,23,10,-1, 16,15,24,-1, 24,15,14,-1,
46 | 14,2,24,-1, 24,2,1,-1, 14,25,2,-1, 2,25,3,-1, 11,26,14,-1, 14,26,25,-1,
47 | 26,11,27,-1, 27,11,10,-1, 16,24,18,-1, 18,24,9,-1, 9,24,0,-1, 0,24,1,-1,
48 | 23,28,10,-1, 10,28,27,-1, 29,26,30,-1, 30,26,27,-1, 28,31,27,-1, 27,31,30,-1,
49 | 32,29,33,-1, 33,29,30,-1, 29,32,35,-1, 35,32,34,-1, 31,36,30,-1, 30,36,33,-1,
50 | 26,29,25,-1, 25,29,35,-1, 25,35,3,-1, 3,35,4,-1, 28,23,38,-1, 38,23,37,-1,
51 | 23,21,37,-1, 37,21,22,-1, 19,18,39,-1, 39,18,9,-1, 40,19,41,-1, 41,19,39,-1,
52 | 39,9,42,-1, 42,9,8,-1, 41,39,43,-1, 43,39,42,-1, 41,44,40,-1, 40,44,45,-1,
53 | 22,45,37,-1, 37,45,44,-1, 20,17,40,-1, 40,17,19,-1, 22,20,45,-1, 45,20,40,-1,
54 | 34,48,46,-1, 46,48,47,-1, 32,49,34,-1, 34,49,48,-1, 47,48,7,-1, 7,48,50,-1,
55 | 46,4,34,-1, 34,4,35,-1, 51,6,50,-1, 50,6,7,-1, 6,51,5,-1, 5,51,8,-1,
56 | 51,52,8,-1, 8,52,42,-1, 52,51,53,-1, 53,51,50,-1, 54,52,55,-1, 55,52,53,-1,
57 | 48,49,50,-1, 50,49,53,-1, 49,56,53,-1, 53,56,55,-1, 52,54,42,-1, 42,54,43,-1,
58 | 58,43,57,-1, 57,43,54,-1, 59,57,61,-1, 61,57,60,-1, 57,54,60,-1, 60,54,55,-1,
59 | 57,59,58,-1, 58,59,38,-1, 58,38,44,-1, 44,38,37,-1, 44,41,58,-1, 58,41,43,-1,
60 | 49,32,56,-1, 56,32,33,-1, 61,56,36,-1, 36,56,33,-1, 61,60,56,-1, 56,60,55,-1,
61 | 59,61,31,-1, 31,61,36,-1, 31,28,59,-1, 59,28,38,-1
62 | ]
63 | }
64 | appearance Appearance
65 | {
66 | material Material
67 | {
68 | ambientIntensity 0.2
69 | diffuseColor 0.9 0.9 0.9
70 | specularColor .1 .1 .1
71 | shininess .5
72 | }
73 | }
74 | }
75 | ]
76 | }
77 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/index3.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 1.69093 6.44994 -4.35951, 1.18339 7.78424 1.2887, -1.23474 5.159 6.33468, -1.6444 1.01044 8.16181,
24 | -0.137913 -3.1537 7.36628, 0.936086 3.55634 -7.46818, 0.495837 -0.076339 -8.28385, 2.38567 -5.52758 -5.78319,
25 | -3.7995 2.83438 -8.59963, -6.52498 6.35933 -5.8641, -14.9811 2.88035 3.94364, -9.69687 5.17019 4.21015,
26 | -11.5256 5.85981 2.40101, -16.2005 4.68915 1.47025, -20.861 4.43232 -0.642947, -20.1989 2.20339 2.11789,
27 | -8.43665 7.0491 -0.71312, -14.6026 5.82052 -2.63018, -13.4446 5.22652 -6.65093, -18.7243 5.07377 -8.01893,
28 | -19.9772 5.81313 -4.46225, -9.36792 6.37791 -5.00057, -6.34235 7.49287 -0.324402, -23.4981 2.13883 -1.1233,
29 | -23.2323 4.41354 -2.30334, -22.6992 5.01845 -5.55824, -24.6413 2.66675 -6.04935, -6.54262 0.78289 7.18132,
30 | -14.6687 0.381992 4.77433, -19.5651 -0.916886 1.53851, -22.9053 -0.639852 -1.6662, -14.5795 -3.24689 2.76964,
31 | -18.6088 -3.22418 -0.065, -21.2827 -3.16767 -3.1655, -14.0335 -5.82053 -0.603088, -17.7996 -4.92353 -2.63319,
32 | -2.5259 -5.99982 3.51849, -3.45864 -3.27497 6.75093, -20.1093 -4.744 -4.02346, -24.2444 0.511818 -6.75998,
33 | -11.0069 3.7082 -8.96777, -17.7799 2.61536 -9.99969, -10.38 1.67412 -10.0326, -17.0596 0.728519 -11.3819,
34 | -22.1539 2.87099 -10.2287, -21.5376 4.5146 -8.26502, 2.6597 -7.12868 -1.75123, -1.10233 -7.11137 -2.34387,
35 | -12.7961 -6.73033 -5.08802, -1.43874 -5.64557 -6.52656, -4.1114 -0.788357 -9.29999, -11.0219 -1.14348 -10.5389,
36 | -11.4796 -4.32373 -9.36523, -16.3119 -1.7688 -11.0064, -16.1592 -3.80043 -9.40211, -17.0966 -5.55804 -6.14819,
37 | -20.2634 -2.07395 -10.047, -21.4723 0.652884 -10.643, -22.3099 -2.33956 -6.91383, -19.0266 -3.50958 -9.27622,
38 | -20.0892 -3.88448 -6.51325
39 | ]
40 | }
41 | coordIndex
42 | [
43 | 8,9,5,-1, 5,9,0,-1, 11,12,10,-1, 10,12,13,-1, 14,15,13,-1, 13,15,10,-1,
44 | 13,12,17,-1, 17,12,16,-1, 18,19,17,-1, 17,19,20,-1, 16,21,17,-1, 17,21,18,-1,
45 | 22,9,16,-1, 16,9,21,-1, 20,14,17,-1, 17,14,13,-1, 23,24,26,-1, 26,24,25,-1,
46 | 24,23,14,-1, 14,23,15,-1, 16,12,22,-1, 22,12,11,-1, 11,2,22,-1, 22,2,1,-1,
47 | 11,27,2,-1, 2,27,3,-1, 10,28,11,-1, 11,28,27,-1, 28,10,29,-1, 29,10,15,-1,
48 | 9,22,0,-1, 0,22,1,-1, 23,30,15,-1, 15,30,29,-1, 28,29,31,-1, 31,29,32,-1,
49 | 29,30,32,-1, 32,30,33,-1, 31,32,34,-1, 34,32,35,-1, 34,36,31,-1, 31,36,37,-1,
50 | 38,35,33,-1, 33,35,32,-1, 28,31,27,-1, 27,31,37,-1, 27,37,3,-1, 3,37,4,-1,
51 | 30,23,39,-1, 39,23,26,-1, 18,21,40,-1, 40,21,9,-1, 40,41,18,-1, 18,41,19,-1,
52 | 9,8,40,-1, 40,8,42,-1, 41,40,43,-1, 43,40,42,-1, 41,44,19,-1, 19,44,45,-1,
53 | 46,36,47,-1, 36,34,47,-1, 47,34,48,-1, 46,47,7,-1, 7,47,49,-1, 36,4,37,-1,
54 | 50,6,49,-1, 49,6,7,-1, 50,8,6,-1, 6,8,5,-1, 51,42,50,-1, 50,42,8,-1,
55 | 51,50,52,-1, 52,50,49,-1, 53,51,54,-1, 54,51,52,-1, 47,48,49,-1, 49,48,52,-1,
56 | 48,55,52,-1, 52,55,54,-1, 42,51,43,-1, 43,51,53,-1, 57,43,56,-1, 56,43,53,-1,
57 | 56,59,58,-1, 58,59,60,-1, 56,53,59,-1, 59,53,54,-1, 56,58,57,-1, 57,58,39,-1,
58 | 57,39,44,-1, 44,39,26,-1, 44,41,57,-1, 57,41,43,-1, 34,35,48,-1, 48,35,55,-1,
59 | 60,55,38,-1, 38,55,35,-1, 60,59,55,-1, 55,59,54,-1, 58,60,33,-1, 33,60,38,-1,
60 | 33,30,58,-1, 58,30,39,-1, 14,20,24,-1, 24,20,25,-1, 25,45,26,-1, 26,45,44,-1,
61 | 25,20,45,-1, 45,20,19,-1
62 | ]
63 | }
64 | appearance Appearance
65 | {
66 | material Material
67 | {
68 | ambientIntensity 0.2
69 | diffuseColor 0.9 0.9 0.9
70 | specularColor .1 .1 .1
71 | shininess .5
72 | }
73 | }
74 | }
75 | ]
76 | }
77 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/pinky3.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | -0.120075 3.18035 -7.27172, 0.858015 7.51777 -3.11717, -0.344285 7.30046 2.92593, 0.034598 4.7537 5.64277,
24 | 0.231122 1.69867 6.61335, -0.331815 -1.27928 -7.5048, -0.23107 -3.78455 -5.63195, 0.63394 -5.16366 -2.18591,
25 | -4.71498 -1.33952 -7.05078, -6.3985 3.04081 -5.95563, -14.9444 2.21995 4.53035, -11.0202 3.19389 4.60195,
26 | -11.1518 3.69188 3.50317, -15.1938 3.12446 3.9117, -6.32921 5.4859 3.30318, -7.571 5.30236 2.17361,
27 | -6.42428 5.51048 -1.22898, -11.5023 4.48852 -0.751564, -11.8936 1.39058 -5.11644, -15.9035 0.987473 -4.24032,
28 | -15.2537 4.03949 -0.630475, -7.92768 3.72371 -4.75886, -17.7955 3.18163 3.08239, -18.7326 2.50463 3.84735,
29 | -4.74464 6.45531 -1.57009, -4.51031 3.23907 6.26454, -11.2802 1.44184 6.37262, -16.2035 0.711299 5.78577,
30 | -19.3833 0.319297 3.84364, -9.99453 -0.814479 6.70108, -15.9291 -1.5918 6.16613, -18.9105 -2.00471 4.14628,
31 | -8.92682 -3.85409 5.72692, -14.7689 -3.77688 5.09452, -1.97546 -2.98261 5.52834, -3.26931 0.197729 6.73613,
32 | -17.5723 -3.18133 3.73429, -19.891 2.28691 0.117349, -20.3081 -0.584181 0.782921, -18.8181 3.25057 -0.482904,
33 | -11.5343 0.254085 -5.9137, -16.4214 -0.462456 -4.83426, -10.9216 -2.2515 -6.15312, -16.4203 -2.62409 -4.40155,
34 | -19.3059 0.306491 -2.91906, -18.1436 1.75445 -2.76891, 0.196153 -2.07836 5.59906, -1.45382 -5.17235 1.93235,
35 | -8.38844 -6.11563 2.53638, -1.93921 -5.6707 -2.45986, -3.31096 -3.91559 -5.67538, -10.1324 -4.49745 -4.71454,
36 | -9.31066 -6.23131 -1.86491, -16.1767 -4.34331 -3.00342, -14.9773 -5.81893 -0.57886, -14.3292 -5.76646 2.58317,
37 | -18.9813 -3.13079 -0.710175, -19.6487 -1.74585 -1.85415, -19.5031 -2.45403 1.38353, -17.8946 -4.34372 0.440489,
38 | -17.7879 -4.03096 2.01286
39 | ]
40 | }
41 | coordIndex
42 | [
43 | 9,0,8,-1, 8,0,5,-1, 10,11,13,-1, 13,11,12,-1, 14,15,11,-1, 11,15,12,-1,
44 | 12,15,17,-1, 17,15,16,-1, 17,18,20,-1, 20,18,19,-1, 16,21,17,-1, 17,21,18,-1,
45 | 20,13,17,-1, 17,13,12,-1, 13,22,10,-1, 10,22,23,-1, 15,14,16,-1, 16,14,24,-1,
46 | 14,2,24,-1, 24,2,1,-1, 14,25,2,-1, 2,25,3,-1, 26,25,11,-1, 11,25,14,-1,
47 | 27,26,10,-1, 10,26,11,-1, 16,24,21,-1, 21,24,9,-1, 9,24,0,-1, 0,24,1,-1,
48 | 28,27,23,-1, 23,27,10,-1, 29,26,30,-1, 30,26,27,-1, 28,31,27,-1, 27,31,30,-1,
49 | 32,29,33,-1, 33,29,30,-1, 29,32,35,-1, 35,32,34,-1, 31,36,30,-1, 30,36,33,-1,
50 | 26,29,25,-1, 25,29,35,-1, 25,35,3,-1, 3,35,4,-1, 23,37,28,-1, 28,37,38,-1,
51 | 23,22,37,-1, 37,22,39,-1, 18,21,40,-1, 40,21,9,-1, 18,40,19,-1, 19,40,41,-1,
52 | 40,9,42,-1, 42,9,8,-1, 41,40,43,-1, 43,40,42,-1, 44,45,41,-1, 41,45,19,-1,
53 | 39,45,37,-1, 37,45,44,-1, 34,47,46,-1, 32,48,34,-1, 34,48,47,-1, 7,47,49,-1,
54 | 46,4,34,-1, 34,4,35,-1, 50,6,49,-1, 49,6,7,-1, 6,50,5,-1, 5,50,8,-1,
55 | 50,51,8,-1, 8,51,42,-1, 51,50,52,-1, 52,50,49,-1, 53,51,54,-1, 54,51,52,-1,
56 | 47,48,49,-1, 49,48,52,-1, 48,55,52,-1, 52,55,54,-1, 51,53,42,-1, 42,53,43,-1,
57 | 57,43,56,-1, 56,43,53,-1, 56,59,58,-1, 58,59,60,-1, 56,53,59,-1, 59,53,54,-1,
58 | 56,58,57,-1, 57,58,38,-1, 57,38,44,-1, 44,38,37,-1, 44,41,57,-1, 57,41,43,-1,
59 | 48,32,55,-1, 55,32,33,-1, 60,55,36,-1, 36,55,33,-1, 60,59,55,-1, 55,59,54,-1,
60 | 58,60,31,-1, 31,60,36,-1, 31,28,58,-1, 58,28,38,-1, 13,20,22,-1, 22,20,39,-1,
61 | 39,20,45,-1, 45,20,19,-1
62 | ]
63 | }
64 | appearance Appearance
65 | {
66 | material Material
67 | {
68 | ambientIntensity 0.2
69 | diffuseColor 0.9 0.9 0.9
70 | specularColor .1 .1 .1
71 | shininess .5
72 | }
73 | }
74 | }
75 | ]
76 | }
77 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/mid3.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 2.5039 6.86637 -3.721, 2.63145 8.24299 2.35269, 0.18125 4.91833 7.82873, -1.41045 -0.495036 8.53529,
24 | -1.81868 -4.01933 6.76121, 1.67316 3.944 -6.65415, 0.338586 -0.444871 -7.94114, 0.379806 -5.00366 -5.85827,
25 | -5.23323 3.2901 -8.04144, -6.0414 6.51108 -5.22037, -20.803 2.87316 3.87421, -15.0741 3.38716 5.24255,
26 | -15.1567 5.38074 3.51433, -20.4406 5.14362 2.19355, -9.28954 5.65942 5.81904, -10.7885 6.46039 3.79685,
27 | -8.5924 7.57645 -0.002983, -14.3186 6.57114 -1.06117, -12.7009 5.93301 -5.58693, -18.1797 6.45194 -6.917,
28 | -20.0041 7.34061 -2.4459, -9.03867 7.08282 -3.77687, -23.5215 5.21502 0.370598, -25.0919 3.11435 0.282183,
29 | -5.8255 7.99813 0.914653, -6.12087 0.59878 7.9972, -15.2298 0.352557 5.67019, -21.367 -0.272067 3.22415,
30 | -25.3966 0.557451 -1.39651, -15.5337 -3.23125 3.57674, -21.2889 -2.73165 1.15454, -24.2569 -1.54894 -2.79067,
31 | -15.2916 -6.08104 -0.123914, -20.7412 -4.8355 -2.44744, -4.17053 -6.72637 2.73966, -5.17838 -3.98708 6.51066,
32 | -22.7432 -3.28002 -3.56999, -25.4429 5.24337 -4.13654, -25.8417 2.04637 -5.33083, -24.0276 6.31477 -3.4776,
33 | -12.1886 5.01688 -7.41253, -18.3585 4.83315 -8.54964, -12.0361 2.93478 -9.22313, -18.9416 2.9163 -9.94308,
34 | -22.9587 5.06717 -8.24678, -22.7052 6.24419 -6.92731, -0.949762 -6.36332 3.1807, -0.046786 -6.86887 -2.20315,
35 | -2.91867 -7.25383 -2.62961, -14.0312 -6.20186 -5.05889, -2.50614 -4.91944 -6.68976, -4.58642 -0.205421 -8.7791,
36 | -11.7832 0.188893 -9.84414, -12.8413 -3.46009 -8.73323, -18.6849 0.893624 -10.8863, -17.6705 -2.04498 -9.66908,
37 | -19.2997 -4.87964 -6.17591, -23.1407 1.1758 -9.7845, -23.3721 3.51463 -9.10606, -24.9286 0.005715 -5.88512,
38 | -21.4614 -1.34157 -9.3245, -22.8973 -2.56192 -6.19993
39 | ]
40 | }
41 | coordIndex
42 | [
43 | 8,9,5,-1, 5,9,0,-1, 11,12,10,-1, 10,12,13,-1, 14,15,11,-1, 11,15,12,-1,
44 | 12,15,17,-1, 17,15,16,-1, 18,19,17,-1, 17,19,20,-1, 16,21,17,-1, 17,21,18,-1,
45 | 20,13,17,-1, 17,13,12,-1, 13,22,10,-1, 10,22,23,-1, 16,15,24,-1, 24,15,14,-1,
46 | 14,2,24,-1, 24,2,1,-1, 14,25,2,-1, 2,25,3,-1, 11,26,14,-1, 14,26,25,-1,
47 | 27,26,10,-1, 10,26,11,-1, 24,9,16,-1, 16,9,21,-1, 9,24,0,-1, 0,24,1,-1,
48 | 28,27,23,-1, 23,27,10,-1, 26,27,29,-1, 29,27,30,-1, 27,28,30,-1, 30,28,31,-1,
49 | 29,30,32,-1, 32,30,33,-1, 32,34,29,-1, 29,34,35,-1, 31,36,30,-1, 30,36,33,-1,
50 | 29,35,26,-1, 26,35,25,-1, 25,35,3,-1, 3,35,4,-1, 28,23,38,-1, 38,23,37,-1,
51 | 23,22,37,-1, 37,22,39,-1, 18,21,40,-1, 40,21,9,-1, 19,18,41,-1, 41,18,40,-1,
52 | 9,8,40,-1, 40,8,42,-1, 40,42,41,-1, 41,42,43,-1, 44,45,41,-1, 41,45,19,-1,
53 | 39,45,37,-1, 37,45,44,-1, 46,34,47,-1, 47,34,48,-1, 34,32,48,-1, 48,32,49,-1,
54 | 47,48,7,-1, 7,48,50,-1, 34,46,35,-1, 35,46,4,-1, 51,6,50,-1, 50,6,7,-1,
55 | 51,8,6,-1, 6,8,5,-1, 51,52,8,-1, 8,52,42,-1, 52,51,53,-1, 53,51,50,-1,
56 | 54,52,55,-1, 55,52,53,-1, 48,49,50,-1, 50,49,53,-1, 49,56,53,-1, 53,56,55,-1,
57 | 52,54,42,-1, 42,54,43,-1, 58,43,57,-1, 57,43,54,-1, 57,60,59,-1, 59,60,61,-1,
58 | 57,54,60,-1, 60,54,55,-1, 57,59,58,-1, 58,59,38,-1, 58,38,44,-1, 44,38,37,-1,
59 | 44,41,58,-1, 58,41,43,-1, 32,33,49,-1, 49,33,56,-1, 61,56,36,-1, 36,56,33,-1,
60 | 61,60,56,-1, 56,60,55,-1, 59,61,31,-1, 31,61,36,-1, 31,28,59,-1, 59,28,38,-1,
61 | 13,20,22,-1, 22,20,39,-1, 39,20,45,-1, 45,20,19,-1
62 | ]
63 | }
64 | appearance Appearance
65 | {
66 | material Material
67 | {
68 | ambientIntensity 0.2
69 | diffuseColor 0.9 0.9 0.9
70 | specularColor .1 .1 .1
71 | shininess .5
72 | }
73 | }
74 | }
75 | ]
76 | }
77 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/ring3.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 0.60823 5.0621 -5.89328, 0.676503 7.39122 -0.375386, -1.33538 5.90951 4.79814, -1.80494 2.28642 6.89195,
24 | -1.98153 -1.13954 6.97057, -0.587065 1.30599 -8.12829, -1.38325 -2.42738 -7.62501, 0.592148 -5.84043 -4.01253,
25 | -5.10016 0.858737 -8.80921, -6.46036 5.53191 -6.71103, -20.5005 4.77713 2.20577, -14.8603 4.73098 3.18897,
26 | -14.8226 5.34696 2.09892, -20.4314 5.96162 0.918583, -8.36831 6.33195 3.07029, -9.99355 6.58451 1.83865,
27 | -8.47031 7.1994 -1.6311, -14.7249 7.12504 -2.87884, -13.169 4.07383 -7.76494, -18.2588 4.45414 -7.99403,
28 | -20.0598 7.49527 -3.66842, -8.45326 5.80977 -5.79184, -23.2148 6.01458 -0.669384, -24.3719 5.6591 0.823767,
29 | -6.07658 7.39068 -1.44514, -7.36733 2.87713 6.23525, -14.9645 2.37866 4.89579, -20.8515 2.15754 4.07713,
30 | -24.3232 2.0013 1.40807, -14.7164 -1.41414 4.49903, -20.141 -0.890659 3.30314, -23.3192 -0.932832 0.96179,
31 | -14.2062 -4.15312 2.78981, -19.1635 -3.42757 1.48019, -4.02109 -4.43222 4.66277, -5.78991 -0.985557 6.44166,
32 | -21.9863 -2.58989 0.082558, -24.8855 5.5957 -3.92548, -25.3477 1.38073 -4.00983, -23.2756 6.16447 -3.78175,
33 | -12.2193 2.92713 -8.89627, -18.7804 2.7413 -9.61321, -11.7253 0.202991 -9.41778, -18.4197 -0.005201 -9.98241,
34 | -22.6 3.88533 -8.25154, -22.0306 4.71185 -7.51876, -0.903391 -4.56449 5.04706, 0.170921 -6.60863 0.672143,
35 | -2.98834 -6.53151 0.531954, -13.8828 -6.07016 -1.24761, -2.51746 -5.97584 -4.11824, -5.79638 -2.56909 -8.09754,
36 | -12.0977 -2.72103 -8.18011, -13.1241 -5.13905 -5.59938, -18.1352 -2.48148 -8.73954, -17.4336 -4.00642 -6.43159,
37 | -18.7482 -5.29115 -2.01134, -21.7819 -1.51074 -7.176, -22.6185 1.06429 -8.44876, -24.0992 -1.49815 -3.33952,
38 | -20.7235 -3.34042 -5.7463, -22.3291 -3.32182 -2.7767
39 | ]
40 | }
41 | coordIndex
42 | [
43 | 8,9,5,-1, 5,9,0,-1, 11,12,10,-1, 10,12,13,-1, 14,15,11,-1, 11,15,12,-1,
44 | 12,15,17,-1, 17,15,16,-1, 18,19,17,-1, 17,19,20,-1, 16,21,17,-1, 17,21,18,-1,
45 | 20,13,17,-1, 17,13,12,-1, 22,23,13,-1, 13,23,10,-1, 15,14,16,-1, 16,14,24,-1,
46 | 14,2,24,-1, 24,2,1,-1, 14,25,2,-1, 2,25,3,-1, 11,26,14,-1, 14,26,25,-1,
47 | 26,11,27,-1, 27,11,10,-1, 16,24,21,-1, 21,24,9,-1, 9,24,0,-1, 0,24,1,-1,
48 | 23,28,10,-1, 10,28,27,-1, 29,26,30,-1, 30,26,27,-1, 28,31,27,-1, 27,31,30,-1,
49 | 32,29,33,-1, 33,29,30,-1, 29,32,35,-1, 35,32,34,-1, 31,36,30,-1, 30,36,33,-1,
50 | 26,29,25,-1, 25,29,35,-1, 25,35,3,-1, 3,35,4,-1, 28,23,38,-1, 38,23,37,-1,
51 | 23,22,37,-1, 37,22,39,-1, 18,21,40,-1, 40,21,9,-1, 19,18,41,-1, 41,18,40,-1,
52 | 9,8,40,-1, 40,8,42,-1, 41,40,43,-1, 43,40,42,-1, 41,44,19,-1, 19,44,45,-1,
53 | 39,45,37,-1, 37,45,44,-1, 46,34,47,-1, 47,34,48,-1, 34,32,48,-1, 48,32,49,-1,
54 | 47,48,7,-1, 7,48,50,-1, 46,4,34,-1, 34,4,35,-1, 51,6,50,-1, 50,6,7,-1,
55 | 51,8,6,-1, 6,8,5,-1, 52,42,51,-1, 51,42,8,-1, 52,51,53,-1, 53,51,50,-1,
56 | 54,52,55,-1, 55,52,53,-1, 48,49,50,-1, 50,49,53,-1, 49,56,53,-1, 53,56,55,-1,
57 | 52,54,42,-1, 42,54,43,-1, 58,43,57,-1, 57,43,54,-1, 57,60,59,-1, 59,60,61,-1,
58 | 57,54,60,-1, 60,54,55,-1, 57,59,58,-1, 58,59,38,-1, 58,38,44,-1, 44,38,37,-1,
59 | 44,41,58,-1, 58,41,43,-1, 32,33,49,-1, 49,33,56,-1, 61,56,36,-1, 36,56,33,-1,
60 | 61,60,56,-1, 56,60,55,-1, 61,36,59,-1, 59,36,31,-1, 31,28,59,-1, 59,28,38,-1,
61 | 13,20,22,-1, 22,20,39,-1, 39,20,45,-1, 45,20,19,-1
62 | ]
63 | }
64 | appearance Appearance
65 | {
66 | material Material
67 | {
68 | ambientIntensity 0.2
69 | diffuseColor 0.9 0.9 0.9
70 | specularColor .1 .1 .1
71 | shininess .5
72 | }
73 | }
74 | }
75 | ]
76 | }
77 |
--------------------------------------------------------------------------------
/mano_grasp/graspit_process.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import os
3 | import subprocess
4 | import uuid
5 | from threading import Timer
6 |
7 | import rospy
8 | from rospy.exceptions import ROSException
9 |
10 |
11 | class GraspitProcess:
12 | """ GraspIt process wrapper
13 |
14 | Run a GraspIt instance in a separate process and setup
15 | a GraspitCommander to communicate with it using ROS.
16 |
17 | """
18 |
19 | def __init__(self,
20 | graspit_dir='',
21 | plugin_dir='',
22 | headless=False,
23 | xvfb_run=False,
24 | verbose=False):
25 | """Constructor
26 |
27 | Keyword Arguments:
28 | graspit_dir {str} -- path to GraspIt root directory (default: {auto})
29 | plugin_dir {str} -- path to directory with a graspit_interface plugin (default: {auto})
30 | headless {bool} -- start GraspIt in headless mode (default: {False})
31 | xvfb_run {bool} -- use Xserver Virtual Frame Buffer (Xvfb) (default: {False})
32 | verbose {bool} -- echoing GraspIt output to console (default: {False})
33 | """
34 | self._graspit_dir = graspit_dir or os.environ['GRASPIT']
35 | self._plugin_dir = plugin_dir or os.environ['GRASPIT_PLUGIN_DIR']
36 | self._headless = headless or xvfb_run
37 | self._xvfb_run = xvfb_run
38 | self._verbose = verbose
39 | self._run = False
40 | self._uid = None
41 | self._proc = None
42 | self._node_name = None
43 | self._commander = None
44 |
45 | @property
46 | def graspit(self):
47 | """ GraspitCommander associated with this GraspIt instance """
48 | return self._commander
49 |
50 | @property
51 | def dir(self):
52 | """ Path to GraspIt root directory """
53 | return self._graspit_dir
54 |
55 | def _startProcess(self):
56 | uid = uuid.uuid1().hex
57 | graspit_node_name = 'graspit_{}'.format(uid)
58 | devnull = open(os.devnull, 'wb')
59 |
60 | proc = subprocess.Popen(
61 | # yapf: disable
62 | [
63 | '{}graspit_simulator'.format('xvfb-run ' if self._xvfb_run else ''), '-p',
64 | 'libgraspit_interface', '--node_name', graspit_node_name,
65 | '__name:={}'.format(graspit_node_name), '--headless' if self._headless else ''
66 | ],
67 | # yapf: enable
68 | shell=False,
69 | stdout=None if self._verbose else devnull,
70 | stderr=None if self._verbose else devnull)
71 |
72 | self._proc = proc
73 | self._uid = uid
74 | self._node_name = graspit_node_name
75 |
76 | def _setupCommander(self):
77 | uid = self._uid
78 | commander_node_name = 'GraspItCommanderNode_{}'.format(uid)
79 | from graspit_commander import GraspitCommander
80 | GraspitCommander.ROS_NODE_NAME = commander_node_name
81 | GraspitCommander.GRASPIT_NODE_NAME = '/' + self._node_name + '/'
82 | try:
83 | rospy.wait_for_service('/' + self._node_name + '/clearWorld', timeout=15.0)
84 | except ROSException, e:
85 | retcode = self._proc.poll()
86 | raise Exception('Cannot connect to a graspit node, process retcode: ', retcode)
87 | self._commander = GraspitCommander
88 |
89 | @property
90 | def run(self):
91 | return self._run
92 |
93 | def start(self):
94 | assert self._run == False
95 | self._startProcess()
96 | self._setupCommander()
97 | self._run = True
98 |
99 | def join(self, timeout=5.0):
100 | if self._proc is not None:
101 | self._proc.terminate()
102 | timer = Timer(timeout, self._proc.kill)
103 | try:
104 | timer.start()
105 | self._proc.communicate()
106 | finally:
107 | timer.cancel()
108 | self._proc = None
109 |
110 | def __enter__(self):
111 | self.start()
112 | return self
113 |
114 | def __exit__(self, *_):
115 | self.join()
116 |
117 | def __del__(self):
118 | self.join()
119 |
120 | def __repr__(self):
121 | return "GraspIt process: {}".format(self._uid)
--------------------------------------------------------------------------------
/mano_grasp/generate_grasps.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 |
3 | import argparse
4 | import json
5 | import os
6 | import time
7 |
8 | from graspit_process import GraspitProcess
9 | from graspit_scene import GraspitScene
10 | from grasp_miner import GraspMiner
11 |
12 | parser = argparse.ArgumentParser(description='Grasp mining')
13 | parser.add_argument('-m', '--models', nargs='*', default=['glass'])
14 | parser.add_argument('-l', '--models_file', type=str, default='')
15 | parser.add_argument('-n', '--n_jobs', type=int, default=1)
16 | parser.add_argument('-o', '--path_out', type=str, default='')
17 | parser.add_argument('-v', '--verbose', action='store_true')
18 | parser.add_argument('-d', '--debug', action='store_true')
19 | parser.add_argument('-e', '--headless', action='store_true', help="Start in headless mode")
20 | parser.add_argument('-x',
21 | '--xvfb',
22 | action='store_true',
23 | help="Start with Xserver Virtual Frame Buffer (Xvfb)")
24 | parser.add_argument('--graspit_dir',
25 | type=str,
26 | default=os.environ['GRASPIT'],
27 | help="Path to GraspIt root directory")
28 | parser.add_argument('--plugin_dir',
29 | type=str,
30 | default=os.environ['GRASPIT_PLUGIN_DIR'],
31 | help="Path to directory with a graspit_interface plugin")
32 | parser.add_argument('-s', '--max_steps', type=int, default=0, help="Max search steps per object")
33 | parser.add_argument('-g', '--max_grasps', type=int, default=0, help="Max best grasps per object")
34 | parser.add_argument('--relax_fingers',
35 | action='store_true',
36 | help="Randomize squezzed fingers positions")
37 | parser.add_argument('--change_speed', action='store_true', help="Try several joint's speed ratios")
38 |
39 |
40 | def main(args):
41 | if not os.path.isdir(args.graspit_dir):
42 | print('Wrong GraspIt path: "{}"'.format(args.graspit_dir))
43 | exit(0)
44 |
45 | if not os.path.isdir(args.plugin_dir):
46 | print('Wrong plugins path: "{}"'.format(args.plugin_dir))
47 | exit(0)
48 |
49 | if args.models_file and not os.path.isfile(args.models_file):
50 | print('File not exists: "{}"'.format(args.models_file))
51 | exit(0)
52 |
53 | if not args.path_out:
54 | print('Output directory not specified')
55 | exit(0)
56 |
57 | if not os.path.isdir(args.path_out):
58 | os.makedirs(args.path_out)
59 |
60 | if args.models:
61 | models = args.models
62 | else:
63 | with open(args.models_file) as f:
64 | models = f.readlines()
65 |
66 | proccess = GraspitProcess(graspit_dir=args.graspit_dir,
67 | plugin_dir=args.plugin_dir,
68 | headless=args.headless,
69 | xvfb_run=args.xvfb,
70 | verbose=args.verbose)
71 |
72 | generator = GraspMiner(graspit_process=proccess,
73 | max_steps=args.max_steps,
74 | max_grasps=args.max_grasps,
75 | relax_fingers=args.relax_fingers,
76 | change_speed=args.change_speed)
77 |
78 | if args.n_jobs > 1:
79 | from joblib import Parallel, delayed
80 | grasps = Parallel(n_jobs=args.n_jobs, verbose=50)(delayed(generator)(m) for m in models)
81 | else:
82 | grasps = [generator(body) for body in models]
83 |
84 | for body_name, body_grasps in grasps:
85 | print('{}: saving {} grasps'.format(
86 | body_name,
87 | len(body_grasps),
88 | ))
89 | with open(os.path.join(args.path_out, '{}.json'.format(body_name)), 'w') as f:
90 | json.dump(body_grasps, f)
91 |
92 | if args.debug:
93 | with GraspitProcess(graspit_dir=args.graspit_dir, plugin_dir=args.plugin_dir) as p:
94 | for body_name, body_grasps in grasps:
95 | scene = GraspitScene(p.graspit, 'ManoHand', body_name)
96 | for grasp in body_grasps:
97 | scene.grasp(grasp['pose'], grasp['dofs'])
98 | time.sleep(5.0)
99 |
100 |
101 | if __name__ == '__main__':
102 | main(parser.parse_args())
103 |
--------------------------------------------------------------------------------
/models/ManoHand/cyberglove/calibration_best_aa.txt:
--------------------------------------------------------------------------------
1 | 20 24
2 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 -0.005630 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
3 | 0.000000 0.000000 0.000000 0.000000 0.014819 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
4 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.012988 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.011297 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
6 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
7 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.019361 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
8 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.016194 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
9 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.012272 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
10 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.005722 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
11 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.021669 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
12 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.018584 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
13 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.012589 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
14 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 -0.001000 0.000000 0.000000 0.000000 0.010267 0.000000 0.000000 0.000000 0.000000 0.000000
15 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.026636 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
16 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.017841 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
17 | 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.012401 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
18 | -0.017155 0.000000 0.000000 0.013285 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
19 | 0.011151 0.000000 0.000000 0.015225 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
20 | 0.000000 0.014237 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
21 | 0.000000 0.000000 0.018456 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
22 | 0.951485 -1.170687 -0.871040 -0.970988 0.000000 -1.914178 -1.133563 -0.908116 -1.075809 -1.874618 -1.216771 -0.783395 -1.396262 -2.424663 -1.248103 -1.219433 1.553880 -3.566037 -0.777025 -1.928780
23 |
--------------------------------------------------------------------------------
/models/ManoHand/kinematics.json:
--------------------------------------------------------------------------------
1 | {"pinky_1_dof_coeff": 1.0, "origin": [0.09566993092407175, 0.006383428857461437, 0.006186305280135195], "mid_2_tau0": [[0.9934826189929388, -0.11398370830487733, 0.0], [0.11398370830487733, 0.9934826189929388, 0.0], [0.0, 0.0, 1.0]], "index_0_tau0": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, -1.0], [0.0, 1.0, 6.123233995736766e-17]], "mid_0_dof_coeff": 1.0, "mid_2_dof_coeff": 1.0, "ring_0_limits": [-0.3490658503988659, 0.3490658503988659], "pinky_1_tau0": [[0.9992248811443214, 0.03936542775223806, 0.0], [-0.03936542775223806, 0.9992248811443214, 0.0], [0.0, 0.0, 1.0]], "thumb_graspit_origin": [[-0.1486, 0.2665, -0.9522], [-0.9003, 0.3618, 0.2418], [0.4089, 0.8933, 0.1862]], "index_1_dh": [-0.004971609682643586, -0.10736993599001789, -0.032621835537580794, 0.0], "pinky_0_dof_index": 9, "thumb_0_dof_index": 12, "mid_0_tau0": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, -1.0], [0.0, 1.0, 6.123233995736766e-17]], "mid_3_limits": [-0.17453292519943295, 1.5707963267948966], "index_1_dof_coeff": 1.0, "pinky_3_tau0": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], "index_2_tau0": [[0.9832309837850689, -0.182364559399697, 0.0], [0.182364559399697, 0.9832309837850689, 0.0], [0.0, 0.0, 1.0]], "pinky_mano_origin": [[0.8519074579524567, 0.03731153542214914, 0.5223614959100881], [-0.03731153542214914, 0.9992482612078805, -0.010524343089673127], [-0.5223614959100881, -0.010524343089673127, 0.8526591967445762]], "pinky_graspit_origin": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, 1.0], [0.0, -1.0, 6.123233995736766e-17]], "ring_0_dh": [0.0, 0.0, 0.0, 1.5707963267948966], "index_2_dof_coeff": 1.0, "thumb_3_dof_index": 15, "thumb_1_dof_index": 13, "index_0_dof_index": 0, "index_mano_origin": [[0.9757943863909249, -0.015581017262157408, -0.2181342416702037], [0.015581017262157408, 0.9998771288649285, -0.001720195891000264], [0.2181342416702037, -0.001720195891000264, 0.9759172575259963]], "pinky_1_dof_index": 10, "pinky_0_tau0": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, -1.0], [0.0, 1.0, 6.123233995736766e-17]], "ring_1_dh": [-0.001172505946038467, -0.08154210739687011, -0.028819975929187794, 0.0], "thumb_1_dof_coeff": 1.0, "thumb_0_tau0": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, -1.0], [0.0, 1.0, 6.123233995736766e-17]], "index_1_tau0": [[0.9942413838691276, 0.10716375600921227, 0.0], [-0.10716375600921227, 0.9942413838691276, 0.0], [0.0, 0.0, 1.0]], "ring_2_dof_index": 8, "mid_3_tau0": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], "mid_2_dof_index": 5, "index_3_dh": [0.0, 0.0, 0.0, 0.0], "ring_3_dh": [0.0, 0.0, 0.0, 0.0], "pinky_2_tau0": [[0.9992457695446755, -0.03883158568832025, 0.0], [0.03883158568832025, 0.9992457695446755, 0.0], [0.0, 0.0, 1.0]], "ring_3_dof_coeff": 0.6, "pinky_0_limits": [-0.5235987755982988, 0.5235987755982988], "pinky_3_dof_coeff": 0.6, "mid_3_dof_coeff": 0.6, "thumb_0_limits": [-0.17453292519943295, 1.2217304763960306], "thumb_mano_origin": [[0.9149654662086122, -0.2377999551171836, -0.32602051621320166], [0.006630183705658196, 0.8166670433881872, -0.5770710362751073], [0.40347767758537306, 0.5258384938266334, 0.7487987994785058]], "thumb_2_tau0": [[0.9366596033770209, -0.3033176396967401, 0.17512052092887476], [0.35024104185774957, 0.8111710112231567, -0.4683298016885104], [0.0, 0.49999999999999994, 0.8660254037844387]], "pinky_3_dh": [0.0, 0.0, 0.0, 0.0], "ring_0_tau0": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, -1.0], [0.0, 1.0, 6.123233995736766e-17]], "thumb_1_limits": [-0.8726646259971648, 0.4363323129985824], "mid_3_dof_index": 5, "pinky_3_dof_index": 11, "mid_1_dof_index": 4, "thumb_3_dh": [0.0, 0.0, 0.0, 0.0], "thumb_2_dh": [0.00771929615296005, 0.3578284332701853, 0.025968279657614175, 0.5235987755982988], "ring_2_dh": [-0.004338136999407341, 0.1411064714087776, -0.02440327711015225, 0.0], "index_3_tau0": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], "ring_0_dof_index": 6, "pinky_2_dof_coeff": 1.0, "thumb_1_tau0": [[0.6462685886169881, -0.5489354135437992, 0.5301007669533259], [0.7631100257282735, 0.4648867175008861, -0.448935884647513], [0.0, 0.6946583704589973, 0.7193398003386512]], "pinky_1_dh": [-0.0017701744014859619, -0.03937560186853856, -0.0210375798237365, 0.0], "mid_2_dh": [-0.003944514002735955, 0.11423198074525119, -0.02293883844603994, 0.0], "mid_1_tau0": [[0.9982232319282259, 0.05958505885511314, 0.0], [-0.05958505885511314, 0.9982232319282259, 0.0], [0.0, 0.0, 1.0]], "ring_graspit_origin": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, 1.0], [0.0, -1.0, 6.123233995736766e-17]], "thumb_2_dof_index": 14, "index_0_dof_coeff": 1.0, "index_3_limits": [-0.17453292519943295, 1.5707963267948966], "mid_2_limits": [-0.17453292519943295, 1.5707963267948966], "ring_2_tau0": [[0.9900609896272441, -0.14063867468915514, 0.0], [0.14063867468915514, 0.9900609896272441, 0.0], [0.0, 0.0, 1.0]], "ring_3_tau0": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], "index_3_dof_coeff": 0.6, "thumb_2_limits": [-0.0, 1.5707963267948966], "pinky_0_dof_coeff": 1.0, "ring_3_limits": [-0.17453292519943295, 1.5707963267948966], "ring_2_limits": [-0.17453292519943295, 1.5707963267948966], "index_0_limits": [-0.3490658503988659, 0.3490658503988659], "thumb_3_dof_coeff": 1.0, "ring_1_limits": [-0.17453292519943295, 1.5707963267948966], "thumb_0_dh": [0.0, 0.0, 0.0, 1.5707963267948966], "ring_0_dof_coeff": 1.0, "index_1_dof_index": 1, "index_graspit_origin": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, 1.0], [0.0, -1.0, 6.123233995736766e-17]], "ring_1_dof_index": 7, "mid_0_dh": [0.0, 0.0, 0.0, 1.5707963267948966], "thumb_3_limits": [-0.0, 1.7453292519943295], "index_3_dof_index": 2, "pinky_1_limits": [-0.17453292519943295, 1.5707963267948966], "pinky_2_limits": [-0.17453292519943295, 1.5707963267948966], "pinky_3_limits": [-0.17453292519943295, 1.5707963267948966], "pinky_2_dh": [-0.0005140636549223545, 0.03884135128944082, -0.018939912869477816, 0.0], "pinky_2_dof_index": 11, "thumb_3_tau0": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], "index_2_limits": [-0.17453292519943295, 1.5707963267948966], "index_2_dof_index": 2, "mid_1_dh": [-0.005594508517977703, -0.0596203735648502, -0.03123817537726813, 0.0], "index_2_dh": [-0.004942098098762452, 0.18339080444503852, -0.021636983141463315, 0.0], "mid_0_dof_index": 3, "thumb_0_dof_coeff": 1.0, "thumb_2_dof_coeff": 1.0, "index_1_limits": [-0.17453292519943295, 1.5707963267948966], "pinky_0_dh": [0.0, 0.0, 0.0, 1.5707963267948966], "mid_0_limits": [-0.17453292519943295, 0.17453292519943295], "mid_3_dh": [0.0, 0.0, 0.0, 0.0], "mid_mano_origin": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], "ring_2_dof_coeff": 1.0, "thumb_1_dh": [0.002439784569114367, 0.8681118185620288, 0.03068797591809299, 0.767944870877505], "ring_mano_origin": [[0.9905213009899501, 0.009786438426829022, 0.13701013797560632], [-0.009786438426829022, 0.9999518847765987, -0.0006736131276177622], [-0.13701013797560632, -0.0006736131276177622, 0.9905694162133514]], "ring_1_dof_coeff": 1.0, "ring_3_dof_index": 8, "mid_1_limits": [-0.17453292519943295, 1.5707963267948966], "mid_graspit_origin": [[1.0, 0.0, 0.0], [0.0, 6.123233995736766e-17, 1.0], [0.0, -1.0, 6.123233995736766e-17]], "ring_1_tau0": [[0.9966772840663224, 0.0814517736220594, 0.0], [-0.0814517736220594, 0.9966772840663224, 0.0], [0.0, 0.0, 1.0]], "index_0_dh": [0.0, 0.0, 0.0, 1.5707963267948966], "mid_1_dof_coeff": 1.0}
--------------------------------------------------------------------------------
/models/ManoHand/ManoHand.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | palm.xml
4 |
5 | 0.0
6 | 2.5e+9
7 | 1.0e+11
8 | 1.0e+7
9 | 20
10 |
11 |
12 | 1.0
13 | 5.0e+9
14 | 1.0e+11
15 | 1.0e+7
16 | 20
17 |
18 |
19 | 1.0
20 | 5.0e+9
21 | 1.0e+11
22 | 1.0e+7
23 | 20
24 |
25 |
26 | 0.0
27 | 5.0e+9
28 | 1.0e+11
29 | 1.0e+7
30 | 20
31 |
32 |
33 | 1.0
34 | 2.5e+9
35 | 1.0e+11
36 | 1.0e+7
37 | 20
38 |
39 |
40 | 1.0
41 | 5.0e+9
42 | 1.0e+11
43 | 1.0e+7
44 | 20
45 |
46 |
47 | 0.0
48 | 5.0e+9
49 | 1.0e+11
50 | 1.0e+7
51 | 20
52 |
53 |
54 | 1.0
55 | 2.5e+9
56 | 1.0e+11
57 | 1.0e+7
58 | 20
59 |
60 |
61 | 1.0
62 | 5.0e+9
63 | 1.0e+11
64 | 1.0e+7
65 | 20
66 |
67 |
68 | 0.0
69 | 5.0e+9
70 | 1.0e+11
71 | 1.0e+7
72 | 20
73 |
74 |
75 | 1.0
76 | 2.5e+9
77 | 1.0e+11
78 | 1.0e+7
79 | 20
80 |
81 |
82 | 1.0
83 | 5.0e+9
84 | 1.0e+11
85 | 1.0e+7
86 | 20
87 |
88 |
89 | 0.0
90 | 5.0e+9
91 | 1.0e+11
92 | 1.0e+7
93 | 20
94 |
95 |
96 | 0.0
97 | 5.0e+9
98 | 1.0e+11
99 | 1.0e+7
100 | 20
101 |
102 |
103 | 1.0
104 | 5.0e+9
105 | 1.0e+11
106 | 1.0e+7
107 | 20
108 |
109 |
110 | 1.0
111 | 5.0e+9
112 | 1.0e+11
113 | 1.0e+7
114 | 20
115 |
116 |
117 |
118 | 7.57268428388 1.18307178906 26.8722943172
119 | -90 x
120 |
121 |
122 | d0
123 | 0
124 | 0
125 | 90
126 | -20
127 | 20
128 | 5.0e+7
129 |
130 |
131 | d1+-6.15184417882
132 | -4.97160968264
133 | -32.6218355376
134 | 0.0
135 | -10
136 | 90
137 | 5.0e+7
138 |
139 |
140 | d2+10.5075190962
141 | -4.94209809876
142 | -21.6369831415
143 | 0.0
144 | -10
145 | 90
146 | 5.0e+7
147 |
148 |
149 | d2*0.6+0.0
150 | 0.0
151 | 0.0
152 | 0.0
153 | -10
154 | 90
155 | 5.0e+7
156 |
157 | index1.xml
158 | index2.xml
159 | index3.xml
160 |
161 |
162 |
163 | 1.00948953223 4.90446550652 2.82876446582
164 | -90 x
165 |
166 |
167 | d3
168 | 0
169 | 0
170 | 90
171 | -10
172 | 10
173 | 5.0e+7
174 |
175 |
176 | d4+-3.41599577826
177 | -5.59450851798
178 | -31.2381753773
179 | 0.0
180 | -10
181 | 90
182 | 5.0e+7
183 |
184 |
185 | d5+6.54501038212
186 | -3.94451400274
187 | -22.938838446
188 | 0.0
189 | -10
190 | 90
191 | 5.0e+7
192 |
193 |
194 | d5*0.6+0.0
195 | 0.0
196 | 0.0
197 | 0.0
198 | -10
199 | 90
200 | 5.0e+7
201 |
202 | mid1.xml
203 | mid2.xml
204 | mid3.xml
205 |
206 |
207 |
208 | 13.9343764953 2.4260077046 -20.486887753
209 | -90 x
210 |
211 |
212 | d6
213 | 0
214 | 0
215 | 90
216 | -20
217 | 20
218 | 5.0e+7
219 |
220 |
221 | d7+-4.67201860644
222 | -1.17250594604
223 | -28.8199759292
224 | 0.0
225 | -10
226 | 90
227 | 5.0e+7
228 |
229 |
230 | d8+8.08480527371
231 | -4.33813699941
232 | -24.4032771102
233 | 0.0
234 | -10
235 | 90
236 | 5.0e+7
237 |
238 |
239 | d8*0.6+0.0
240 | 0.0
241 | 0.0
242 | 0.0
243 | -10
244 | 90
245 | 5.0e+7
246 |
247 | ring1.xml
248 | ring2.xml
249 | ring3.xml
250 |
251 |
252 |
253 | 26.8829588642 -3.55689996299 -37.0230367231
254 | -90 x
255 |
256 |
257 | d9
258 | 0
259 | 0
260 | 90
261 | -30
262 | 30
263 | 5.0e+7
264 |
265 |
266 | d10+-2.25605580285
267 | -1.77017440149
268 | -21.0375798237
269 | 0.0
270 | -10
271 | 90
272 | 5.0e+7
273 |
274 |
275 | d11+2.22544549947
276 | -0.514063654922
277 | -18.9399128695
278 | 0.0
279 | -10
280 | 90
281 | 5.0e+7
282 |
283 |
284 | d11*0.6+0.0
285 | 0.0
286 | 0.0
287 | 0.0
288 | -10
289 | 90
290 | 5.0e+7
291 |
292 | pinky1.xml
293 | pinky2.xml
294 | pinky3.xml
295 |
296 |
297 |
298 | 71.5802241214 -9.13890568441 31.9991525682
299 |
300 | -0.1486 -0.9003 0.4089 0.2665 0.3618 0.8933 -0.9522 0.2418 0.1862
301 |
302 |
303 | d12
304 | 0.0
305 | 0.0
306 | 90.0
307 | -10
308 | 70
309 | 5.0e+7
310 |
311 |
312 |
313 |
314 | d13+49.739143349
315 | 2.43978456911
316 | 30.6879759181
317 | 44.0
318 | -50
319 | 25
320 | 5.0e+7
321 |
322 |
323 |
324 | d14+20.5020590162
325 | 7.71929615296
326 | 25.9682796576
327 | 30.0
328 | 0
329 | 90
330 | 5.0e+7
331 |
332 |
333 | d15+0.0
334 | 0.0
335 | 0.0
336 | 0.0
337 | 0
338 | 100
339 | 5.0e+7
340 |
341 | thumb1.xml
342 | thumb2.xml
343 | thumb3.xml
344 |
345 |
346 | 36.67178953 -21.30033449 -5.57483553
347 | 0 -1 0
348 |
349 | eigen/human_eigen_nodip.xml
350 |
351 |
352 | 61.67178953 23.69966551 -6.57483553
353 | 180 z
354 | -90 x
355 |
356 |
357 | virtual/all_18_contacts_16DOF.xml
358 | cyberglove/calibration_best_no_dip_aa.txt
359 |
360 |
--------------------------------------------------------------------------------
/models/ManoHand/ManoHand_v2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | palm.xml
4 |
5 | 0.0
6 | 2.5e+9
7 | 1.0e+11
8 | 1.0e+7
9 | 20
10 |
11 |
12 | 1.0
13 | 5.0e+9
14 | 1.0e+11
15 | 1.0e+7
16 | 20
17 |
18 |
19 | 0.5
20 | 5.0e+9
21 | 1.0e+11
22 | 1.0e+7
23 | 20
24 |
25 |
26 | 0.0
27 | 5.0e+9
28 | 1.0e+11
29 | 1.0e+7
30 | 20
31 |
32 |
33 | 1.0
34 | 2.5e+9
35 | 1.0e+11
36 | 1.0e+7
37 | 20
38 |
39 |
40 | 0.5
41 | 5.0e+9
42 | 1.0e+11
43 | 1.0e+7
44 | 20
45 |
46 |
47 | 0.0
48 | 5.0e+9
49 | 1.0e+11
50 | 1.0e+7
51 | 20
52 |
53 |
54 | 1.0
55 | 2.5e+9
56 | 1.0e+11
57 | 1.0e+7
58 | 20
59 |
60 |
61 | 0.5
62 | 5.0e+9
63 | 1.0e+11
64 | 1.0e+7
65 | 20
66 |
67 |
68 | 0.0
69 | 5.0e+9
70 | 1.0e+11
71 | 1.0e+7
72 | 20
73 |
74 |
75 | 1.0
76 | 2.5e+9
77 | 1.0e+11
78 | 1.0e+7
79 | 20
80 |
81 |
82 | 0.5
83 | 5.0e+9
84 | 1.0e+11
85 | 1.0e+7
86 | 20
87 |
88 |
89 | 0.0
90 | 5.0e+9
91 | 1.0e+11
92 | 1.0e+7
93 | 20
94 |
95 |
96 | 0.0
97 | 5.0e+9
98 | 1.0e+11
99 | 1.0e+7
100 | 20
101 |
102 |
103 | 1.0
104 | 5.0e+9
105 | 1.0e+11
106 | 1.0e+7
107 | 20
108 |
109 |
110 | 0.5
111 | 5.0e+9
112 | 1.0e+11
113 | 1.0e+7
114 | 20
115 |
116 |
117 |
118 | 7.57268428388 1.18307178906 26.8722943172
119 | -90 x
120 |
121 |
122 | d0
123 | 0
124 | 0
125 | 90
126 | -20
127 | 20
128 | 5.0e+7
129 |
130 |
131 | d1+-6.15184417882
132 | -4.97160968264
133 | -32.6218355376
134 | 0.0
135 | -10
136 | 90
137 | 5.0e+7
138 |
139 |
140 | d2+10.5075190962
141 | -4.94209809876
142 | -21.6369831415
143 | 0.0
144 | -10
145 | 90
146 | 5.0e+7
147 |
148 |
149 | d2*0.6+0.0
150 | 0.0
151 | 0.0
152 | 0.0
153 | -10
154 | 90
155 | 5.0e+7
156 |
157 | index1.xml
158 | index2.xml
159 | index3.xml
160 |
161 |
162 |
163 | 1.00948953223 4.90446550652 2.82876446582
164 | -90 x
165 |
166 |
167 | d3
168 | 0
169 | 0
170 | 90
171 | -10
172 | 10
173 | 5.0e+7
174 |
175 |
176 | d4+-3.41599577826
177 | -5.59450851798
178 | -31.2381753773
179 | 0.0
180 | -10
181 | 90
182 | 5.0e+7
183 |
184 |
185 | d5+6.54501038212
186 | -3.94451400274
187 | -22.938838446
188 | 0.0
189 | -10
190 | 90
191 | 5.0e+7
192 |
193 |
194 | d5*0.6+0.0
195 | 0.0
196 | 0.0
197 | 0.0
198 | -10
199 | 90
200 | 5.0e+7
201 |
202 | mid1.xml
203 | mid2.xml
204 | mid3.xml
205 |
206 |
207 |
208 | 13.9343764953 2.4260077046 -20.486887753
209 | -90 x
210 |
211 |
212 | d6
213 | 0
214 | 0
215 | 90
216 | -20
217 | 20
218 | 5.0e+7
219 |
220 |
221 | d7+-4.67201860644
222 | -1.17250594604
223 | -28.8199759292
224 | 0.0
225 | -10
226 | 90
227 | 5.0e+7
228 |
229 |
230 | d8+8.08480527371
231 | -4.33813699941
232 | -24.4032771102
233 | 0.0
234 | -10
235 | 90
236 | 5.0e+7
237 |
238 |
239 | d8*0.6+0.0
240 | 0.0
241 | 0.0
242 | 0.0
243 | -10
244 | 90
245 | 5.0e+7
246 |
247 | ring1.xml
248 | ring2.xml
249 | ring3.xml
250 |
251 |
252 |
253 | 26.8829588642 -3.55689996299 -37.0230367231
254 | -90 x
255 |
256 |
257 | d9
258 | 0
259 | 0
260 | 90
261 | -20
262 | 30
263 | 5.0e+7
264 |
265 |
266 | d10+-2.25605580285
267 | -1.77017440149
268 | -21.0375798237
269 | 0.0
270 | -10
271 | 90
272 | 5.0e+7
273 |
274 |
275 | d11+2.22544549947
276 | -0.514063654922
277 | -18.9399128695
278 | 0.0
279 | -10
280 | 90
281 | 5.0e+7
282 |
283 |
284 | d11*0.6+0.0
285 | 0.0
286 | 0.0
287 | 0.0
288 | -10
289 | 90
290 | 5.0e+7
291 |
292 | pinky1.xml
293 | pinky2.xml
294 | pinky3.xml
295 |
296 |
297 |
298 | 71.5802241214 -9.13890568441 31.9991525682
299 |
300 | -0.1486 -0.9003 0.4089 0.2665 0.3618 0.8933 -0.9522 0.2418 0.1862
301 |
302 |
303 | d12
304 | 0.0
305 | 0.0
306 | 90.0
307 | -10
308 | 70
309 | 5.0e+7
310 |
311 |
312 |
313 |
314 | d13+49.739143349
315 | 2.43978456911
316 | 30.6879759181
317 | 44.0
318 | -50
319 | 25
320 | 5.0e+7
321 |
322 |
323 |
324 | d14+20.5020590162
325 | 7.71929615296
326 | 25.9682796576
327 | 30.0
328 | 0
329 | 90
330 | 5.0e+7
331 |
332 |
333 | d15+0.0
334 | 0.0
335 | 0.0
336 | 0.0
337 | 0
338 | 100
339 | 5.0e+7
340 |
341 | thumb1.xml
342 | thumb2.xml
343 | thumb3.xml
344 |
345 |
346 | 36.67178953 -21.30033449 -5.57483553
347 | 0 -1 0
348 |
349 | eigen/human_eigen_nodip.xml
350 |
351 |
352 | 61.67178953 23.69966551 -6.57483553
353 | 180 z
354 | -90 x
355 |
356 |
357 | virtual/all_18_contacts_16DOF.xml
358 | cyberglove/calibration_best_no_dip_aa.txt
359 |
360 |
--------------------------------------------------------------------------------
/models/ManoHand/ManoHand_v3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | palm.xml
4 |
5 | 0.0
6 | 2.5e+9
7 | 1.0e+11
8 | 1.0e+7
9 | 20
10 |
11 |
12 | 1.0
13 | 5.0e+9
14 | 1.0e+11
15 | 1.0e+7
16 | 20
17 |
18 |
19 | 0.25
20 | 5.0e+9
21 | 1.0e+11
22 | 1.0e+7
23 | 20
24 |
25 |
26 | 0.0
27 | 5.0e+9
28 | 1.0e+11
29 | 1.0e+7
30 | 20
31 |
32 |
33 | 1.0
34 | 2.5e+9
35 | 1.0e+11
36 | 1.0e+7
37 | 20
38 |
39 |
40 | 0.25
41 | 5.0e+9
42 | 1.0e+11
43 | 1.0e+7
44 | 20
45 |
46 |
47 | 0.0
48 | 5.0e+9
49 | 1.0e+11
50 | 1.0e+7
51 | 20
52 |
53 |
54 | 1.0
55 | 2.5e+9
56 | 1.0e+11
57 | 1.0e+7
58 | 20
59 |
60 |
61 | 0.25
62 | 5.0e+9
63 | 1.0e+11
64 | 1.0e+7
65 | 20
66 |
67 |
68 | 0.0
69 | 5.0e+9
70 | 1.0e+11
71 | 1.0e+7
72 | 20
73 |
74 |
75 | 1.0
76 | 2.5e+9
77 | 1.0e+11
78 | 1.0e+7
79 | 20
80 |
81 |
82 | 0.25
83 | 5.0e+9
84 | 1.0e+11
85 | 1.0e+7
86 | 20
87 |
88 |
89 | 0.0
90 | 5.0e+9
91 | 1.0e+11
92 | 1.0e+7
93 | 20
94 |
95 |
96 | 0.0
97 | 5.0e+9
98 | 1.0e+11
99 | 1.0e+7
100 | 20
101 |
102 |
103 | 1.0
104 | 5.0e+9
105 | 1.0e+11
106 | 1.0e+7
107 | 20
108 |
109 |
110 | 0.5
111 | 5.0e+9
112 | 1.0e+11
113 | 1.0e+7
114 | 20
115 |
116 |
117 |
118 | 7.57268428388 1.18307178906 26.8722943172
119 | -90 x
120 |
121 |
122 | d0
123 | 0
124 | 0
125 | 90
126 | -20
127 | 20
128 | 5.0e+7
129 |
130 |
131 | d1+-6.15184417882
132 | -4.97160968264
133 | -32.6218355376
134 | 0.0
135 | -10
136 | 90
137 | 5.0e+7
138 |
139 |
140 | d2+10.5075190962
141 | -4.94209809876
142 | -21.6369831415
143 | 0.0
144 | -10
145 | 90
146 | 5.0e+7
147 |
148 |
149 | d2*0.6+0.0
150 | 0.0
151 | 0.0
152 | 0.0
153 | -10
154 | 90
155 | 5.0e+7
156 |
157 | index1.xml
158 | index2.xml
159 | index3.xml
160 |
161 |
162 |
163 | 1.00948953223 4.90446550652 2.82876446582
164 | -90 x
165 |
166 |
167 | d3
168 | 0
169 | 0
170 | 90
171 | -10
172 | 10
173 | 5.0e+7
174 |
175 |
176 | d4+-3.41599577826
177 | -5.59450851798
178 | -31.2381753773
179 | 0.0
180 | -10
181 | 90
182 | 5.0e+7
183 |
184 |
185 | d5+6.54501038212
186 | -3.94451400274
187 | -22.938838446
188 | 0.0
189 | -10
190 | 90
191 | 5.0e+7
192 |
193 |
194 | d5*0.6+0.0
195 | 0.0
196 | 0.0
197 | 0.0
198 | -10
199 | 90
200 | 5.0e+7
201 |
202 | mid1.xml
203 | mid2.xml
204 | mid3.xml
205 |
206 |
207 |
208 | 13.9343764953 2.4260077046 -20.486887753
209 | -90 x
210 |
211 |
212 | d6
213 | 0
214 | 0
215 | 90
216 | -20
217 | 20
218 | 5.0e+7
219 |
220 |
221 | d7+-4.67201860644
222 | -1.17250594604
223 | -28.8199759292
224 | 0.0
225 | -10
226 | 90
227 | 5.0e+7
228 |
229 |
230 | d8+8.08480527371
231 | -4.33813699941
232 | -24.4032771102
233 | 0.0
234 | -10
235 | 90
236 | 5.0e+7
237 |
238 |
239 | d8*0.6+0.0
240 | 0.0
241 | 0.0
242 | 0.0
243 | -10
244 | 90
245 | 5.0e+7
246 |
247 | ring1.xml
248 | ring2.xml
249 | ring3.xml
250 |
251 |
252 |
253 | 26.8829588642 -3.55689996299 -37.0230367231
254 | -90 x
255 |
256 |
257 | d9
258 | 0
259 | 0
260 | 90
261 | -30
262 | 30
263 | 5.0e+7
264 |
265 |
266 | d10+-2.25605580285
267 | -1.77017440149
268 | -21.0375798237
269 | 0.0
270 | -10
271 | 90
272 | 5.0e+7
273 |
274 |
275 | d11+2.22544549947
276 | -0.514063654922
277 | -18.9399128695
278 | 0.0
279 | -10
280 | 90
281 | 5.0e+7
282 |
283 |
284 | d11*0.6+0.0
285 | 0.0
286 | 0.0
287 | 0.0
288 | -10
289 | 90
290 | 5.0e+7
291 |
292 | pinky1.xml
293 | pinky2.xml
294 | pinky3.xml
295 |
296 |
297 |
298 | 71.5802241214 -9.13890568441 31.9991525682
299 |
300 | -0.1486 -0.9003 0.4089 0.2665 0.3618 0.8933 -0.9522 0.2418 0.1862
301 |
302 |
303 | d12
304 | 0.0
305 | 0.0
306 | 90.0
307 | -10
308 | 70
309 | 5.0e+7
310 |
311 |
312 |
313 |
314 | d13+49.739143349
315 | 2.43978456911
316 | 30.6879759181
317 | 44.0
318 | -50
319 | 25
320 | 5.0e+7
321 |
322 |
323 |
324 | d14+20.5020590162
325 | 7.71929615296
326 | 25.9682796576
327 | 30.0
328 | 0
329 | 90
330 | 5.0e+7
331 |
332 |
333 | d15+0.0
334 | 0.0
335 | 0.0
336 | 0.0
337 | 0
338 | 100
339 | 5.0e+7
340 |
341 | thumb1.xml
342 | thumb2.xml
343 | thumb3.xml
344 |
345 |
346 | 36.67178953 -21.30033449 -5.57483553
347 | 0 -1 0
348 |
349 | eigen/human_eigen_nodip.xml
350 |
351 |
352 | 61.67178953 23.69966551 -6.57483553
353 | 180 z
354 | -90 x
355 |
356 |
357 | virtual/all_18_contacts_16DOF.xml
358 | cyberglove/calibration_best_no_dip_aa.txt
359 |
360 |
--------------------------------------------------------------------------------
/models/ManoHand/iv/palm.wrl:
--------------------------------------------------------------------------------
1 | #VRML V2.0 utf8
2 |
3 | # Generated by VCGLIB, (C)Copyright 1999-2001 VCG, IEI-CNR
4 |
5 | NavigationInfo {
6 | type [ "EXAMINE", "ANY" ]
7 | }
8 | Transform {
9 | scale 1 1 1
10 | translation 0 0 0
11 | children
12 | [
13 | Shape
14 | {
15 | geometry IndexedFaceSet
16 | {
17 | creaseAngle .5
18 | solid FALSE
19 | coord Coordinate
20 | {
21 | point
22 | [
23 | 46.6954 -11.7584 20.6938, 58.5466 -14.6753 19.3458, 51.6898 -19.861 24.2159, 41.1833 -15.6431 26.424,
24 | 35.6482 -16.2568 30.8795, 44.9263 -22.7756 27.9087, 33.4447 -11.9003 33.9859, 26.399 -2.39366 37.8229,
25 | 27.5941 -8.76509 34.6686, 19.5772 2.02976 37.9373, 32.3214 6.96183 39.4561, 20.6614 10.9527 34.7132,
26 | 41.1629 21.7188 17.8916, 44.8772 22.4682 5.20569, 29.0169 21.0872 3.41409, 26.6953 19.7195 16.5533,
27 | 39.6004 17.4122 -13.8443, 32.8006 19.6932 -4.68549, 48.7854 22.1528 -2.83982, 54.0846 19.8971 -11.3062,
28 | 54.6743 -8.01492 8.74548, 65.8183 -9.25217 7.88425, 63.7078 -9.92294 12.3274, 52.7261 -8.68194 13.3999,
29 | 40.7981 -3.57308 45.6072, 35.2508 -5.52614 40.1858, 91.938 -16.5473 -0.325842, 103.796 -10.5754 1.99934,
30 | 103.104 -9.96171 7.8941, 92.438 -15.1139 4.50419, 95.2257 -14.9597 30.241, 102.338 -7.91059 26.6538,
31 | 106.217 0.918867 35.9078, 97.3697 -2.73872 40.0362, 86.232 -21.5266 36.7624, 88.5431 -11.2988 45.3367,
32 | 105.281 -8.75693 -10.6348, 96.9392 -13.368 -14.1349, 98.5807 5.44812 -23.2932, 97.1179 15.4392 -22.4511,
33 | 104.306 14.3199 -22.6431, 105.885 5.08289 -21.5388, 88.8676 5.76382 -25.4357, 87.0755 16.3136 -21.6459,
34 | 31.3706 -11.7184 29.6181, 36.4382 -11.1935 22.2189, 11.4453 -9.26184 28.8068, 22.3453 -9.35926 25.1639,
35 | 22.1604 -8.6764 32.1253, 13.2233 -7.00319 34.5363, 32.216 -7.32145 3.6721, 43.9563 -7.06446 4.95319,
36 | 40.9635 -7.20261 10.6995, 27.8257 -8.22231 11.0756, 48.2512 -9.88589 -8.23624, 36.2779 -9.54661 -8.46399,
37 | 39.944 -11.3093 -15.9706, 47.9432 -12.1043 -14.4305, 14.6273 -7.70005 -6.06665, 6.0954 -4.92249 -6.26499,
38 | 7.42532 -3.71259 -9.09394, 16.0826 -7.17534 -9.48029, 111.366 14.3357 -22.3736, 112.66 5.1781 -18.9833,
39 | 49.0799 9.92037 -31.135, 55.2038 2.18195 -36.1848, 43.2711 0.376403 -40.3608, 40.3968 8.82766 -33.7826,
40 | 93.9313 23.1281 -16.1525, 101.439 23.0612 -18.4431, 75.6264 -3.72254 51.6097, 88.5207 3.65843 46.1236,
41 | 96.9097 9.39481 40.7304, 105.034 12.6148 38.3122, 18.9129 -9.6508 19.279, 42.7785 -8.94052 15.948,
42 | 56.3352 -8.30223 4.17238, 61.1229 -16.3333 -25.0806, 71.7047 -16.6731 -23.3143, 65.9856 -16.7634 -14.3713,
43 | 57.8743 -15.779 -17.8332, 55.701 -7.5254 -37.1576, 52.678 -13.4904 -32.8009, 42.9214 -13.2862 -34.9618,
44 | 44.7751 -8.12486 -39.8302, 46.4445 -2.69025 50.0775, 99.3522 -4.70711 -20.426, 106.021 -3.77957 -16.5881,
45 | 113.657 -0.993295 -14.3537, 79.1491 -13.6151 5.27235, 92.8772 -14.2948 7.999, 91.9433 -14.7959 12.5747,
46 | 78.6102 -12.6903 8.1007, 70.6371 -19.7077 19.956, 82.3359 -22.2249 24.7502, 103.909 -8.91814 16.2225,
47 | 112.852 -7.74025 9.83606, 112.34 -6.00944 18.6517, 113.808 -7.0877 0.077214, 114.128 -5.02804 -8.61,
48 | 109.288 25.9128 -20.0341, 110.763 -3.03548 26.4269, 10.4648 5.89767 37.3756, 11.1752 -1.97035 37.6493,
49 | 21.611 -4.82282 37.5102, 82.264 -17.6493 -6.72792, 87.032 -15.1682 -18.1101, 8.00219 -8.61335 22.8392,
50 | -0.542721 -1.92353 17.5373, 12.8348 -5.56902 -16.4397, 20.2194 -8.3953 -16.8776, 12.1857 15.0805 14.2305,
51 | 13.9029 17.5702 26.9714, 24.3719 17.7144 27.0239, 35.3314 -8.13711 -3.06854, 24.7237 -8.54339 -5.1245,
52 | 25.8993 -8.80642 -9.12822, 15.3997 -8.85656 15.7358, 6.77983 -7.28526 17.0215, 10.4385 -7.09243 12.2718,
53 | 18.4272 -8.09803 10.7983, 67.5955 4.61216 -32.9156, 68.4575 -6.85956 -34.3981, 46.7841 -7.84938 -1.65539,
54 | 38.0061 17.9694 27.5455, 58.1653 -9.12237 -0.890286, 23.8039 8.82181 -25.4346, 23.0146 3.29074 -28.0488,
55 | 15.9587 2.94089 -26.8492, 15.6252 8.60221 -26.3956, 4.32517 -5.03506 33.8554, 2.5255 0.74664 36.6377,
56 | 68.3628 23.0994 -8.81038, 72.1601 19.1954 -18.5101, 58.0501 15.9438 -21.2457, 44.6582 13.5394 -24.4773,
57 | 32.0218 10.0697 -26.5971, 27.9527 16.092 -17.0677, 62.0657 12.7093 -27.4707, 2.56904 6.66118 13.3614,
58 | 5.24453 12.7925 18.7435, 6.27213 12.4424 13.0934, 59.7442 -11.9045 -7.60047, 94.0463 27.1394 26.5498,
59 | 94.3537 31.0696 13.6954, 85.9519 29.0626 15.3817, 85.3216 23.9923 29.6563, 20.609 -8.6865 -23.4623,
60 | 14.2205 -5.5681 -22.0517, 13.4551 -3.50841 -24.9465, 19.0941 -7.22767 -28.3403, 75.4266 16.6099 -22.7105,
61 | 35.1977 -0.393457 -42.5335, 34.0082 7.23104 -37.2191, 84.5197 22.0804 -15.6768, 81.3088 26.1042 -7.35186,
62 | 90.8074 28.0786 -6.85785, 16.7988 16.2915 -6.31934, 63.6456 24.75 -1.70263, 77.8267 27.1261 -0.582623,
63 | 89.0311 29.5307 0.340153, 97.0696 31.7239 0.219944, 98.2338 29.7296 -7.63789, 106.545 33.1226 -9.09892,
64 | 105.005 34.5757 -0.035717, 74.6475 27.471 8.09703, 71.0624 26.4716 18.7716, 61.0553 24.945 6.61516,
65 | 56.3911 23.9228 16.9733, 17.7851 20.3349 3.20524, 53.1245 18.8556 29.6549, 2.68627 -3.57653 12.6308,
66 | 69.1346 18.7227 34.1206, 44.8428 10.3872 41.782, 56.7888 8.26513 45.0367, 85.6172 16.5988 40.5396,
67 | 72.2792 8.36853 48.0185, 102.692 22.154 34.045, 93.9604 20.1333 36.0651, 59.45 -1.61214 52.4357,
68 | 102.083 29.5669 25.4754, 70.0686 -13.755 -4.28424, 68.4445 -11.4439 0.554772, 77.8917 -16.3149 -21.5098,
69 | 73.1723 -17.0663 -10.8585, 2.40845 0.395293 -7.34464, 6.0419 1.76666 -7.90291, 79.2758 -14.6236 2.75991,
70 | 79.6507 -15.7511 -1.03965, 78.969 5.06472 -29.2372, 79.1554 -6.42019 -30.3791, 10.4983 13.0482 33.7811,
71 | -0.290959 1.66463 12.801, 87.4329 -18.1766 17.8701, 75.9632 -14.4297 13.4305, 22.8892 -7.93444 3.90741,
72 | 6.79893 14.9354 -5.12588, 7.18725 19.1106 2.70127, 13.1601 -7.10713 3.69, 3.84593 15.6443 26.1054,
73 | 28.9159 -11.0941 -16.7472, 13.6814 12.8744 -10.0489, 4.02903 8.31252 -8.04946, 37.7829 -8.43623 -41.1462,
74 | 103.026 33.0862 13.2563, 88.5451 -6.37143 -25.0036, 67.0014 -10.0931 3.6808, 6.18039 -5.50819 3.32505,
75 | 28.8637 7.23098 -30.9038, 19.7538 14.9015 -19.6321, 31.5 -7.78445 -41.529, 30.7168 -11.3057 -37.2896,
76 | 27.2741 -11.1197 -33.2066, 24.5411 -9.95619 -30.1391, 21.1249 -8.10827 -30.6827, 21.311 -9.54101 -34.5689,
77 | 19.3417 -3.64952 -28.5194, 30.4395 -4.33018 -43.2847, 37.16 -12.809 -35.7664, 33.9742 -13.5307 -30.2747,
78 | 41.171 -14.5186 -29.7319, 50.9844 -15.5439 -27.4825, 61.2937 -13.8983 -30.6121, 49.0614 -14.5673 -20.9647,
79 | 39.1754 -13.6476 -23.6592, 29.1169 -11.7693 -24.6514, 55.4478 -12.8497 -12.7756
80 | ]
81 | }
82 | coordIndex
83 | [
84 | 1,2,0,-1, 0,2,3,-1, 4,3,5,-1, 5,3,2,-1, 7,8,6,-1, 6,8,4,-1,
85 | 9,7,11,-1, 11,7,10,-1, 13,14,12,-1, 12,14,15,-1, 17,18,16,-1, 16,18,19,-1,
86 | 21,22,20,-1, 20,22,23,-1, 26,27,29,-1, 29,27,28,-1, 30,31,33,-1, 33,31,32,-1,
87 | 36,27,37,-1, 37,27,26,-1, 39,40,38,-1, 38,40,41,-1, 43,39,42,-1, 42,39,38,-1,
88 | 44,45,3,-1, 3,45,0,-1, 47,48,46,-1, 46,48,49,-1, 51,52,50,-1, 50,52,53,-1,
89 | 55,56,54,-1, 54,56,57,-1, 59,60,58,-1, 58,60,61,-1, 40,62,41,-1, 41,62,63,-1,
90 | 65,66,64,-1, 64,66,67,-1, 68,69,39,-1, 39,69,40,-1, 70,35,71,-1, 33,32,72,-1,
91 | 72,32,73,-1, 74,53,47,-1, 47,53,52,-1, 8,44,4,-1, 4,44,3,-1, 20,23,52,-1,
92 | 52,23,75,-1, 76,20,51,-1, 51,20,52,-1, 78,79,77,-1, 77,79,80,-1, 81,82,84,-1,
93 | 84,82,83,-1, 38,41,86,-1, 86,41,87,-1, 41,63,87,-1, 87,63,88,-1, 90,91,89,-1,
94 | 89,91,92,-1, 29,28,90,-1, 90,28,95,-1, 28,96,95,-1, 95,96,97,-1, 27,98,28,-1,
95 | 28,98,96,-1, 27,36,98,-1, 98,36,99,-1, 102,103,9,-1, 9,103,104,-1, 26,105,37,-1,
96 | 37,105,106,-1, 107,74,46,-1, 46,74,47,-1, 60,109,61,-1, 61,109,110,-1, 111,112,15,-1,
97 | 15,112,113,-1, 115,116,114,-1, 114,116,55,-1, 118,119,117,-1, 117,119,120,-1, 65,81,66,-1,
98 | 66,81,84,-1, 81,65,122,-1, 122,65,121,-1, 123,51,114,-1, 114,51,50,-1, 124,113,10,-1,
99 | 10,113,11,-1, 51,123,76,-1, 76,123,125,-1, 103,49,104,-1, 104,49,48,-1, 127,128,126,-1,
100 | 126,128,129,-1, 133,134,132,-1, 132,134,19,-1, 135,136,16,-1, 16,136,137,-1, 64,138,65,-1,
101 | 65,138,121,-1, 139,140,141,-1, 141,140,111,-1, 123,54,125,-1, 125,54,142,-1, 114,55,123,-1,
102 | 123,55,54,-1, 144,145,143,-1, 143,145,146,-1, 147,148,150,-1, 150,148,149,-1, 16,19,135,-1,
103 | 135,19,134,-1, 113,124,15,-1, 15,124,12,-1, 135,134,64,-1, 64,134,138,-1, 151,138,133,-1,
104 | 133,138,134,-1, 152,153,66,-1, 66,153,67,-1, 155,156,154,-1, 154,156,68,-1, 157,17,137,-1,
105 | 137,17,16,-1, 132,19,158,-1, 158,19,18,-1, 158,159,132,-1, 132,159,155,-1, 159,160,155,-1,
106 | 155,160,156,-1, 162,156,161,-1, 161,156,160,-1, 132,155,133,-1, 133,155,154,-1, 69,68,162,-1,
107 | 162,68,156,-1, 145,165,166,-1, 165,167,166,-1, 166,167,168,-1, 167,13,168,-1, 168,13,12,-1,
108 | 14,169,15,-1, 15,169,111,-1, 168,12,170,-1, 170,12,124,-1, 108,171,118,-1, 118,171,119,-1,
109 | 145,144,160,-1, 160,144,161,-1, 172,146,166,-1, 166,146,145,-1, 173,174,170,-1, 170,174,172,-1,
110 | 175,176,71,-1, 71,176,70,-1, 177,178,73,-1, 73,178,72,-1, 172,174,176,-1, 176,174,179,-1,
111 | 180,143,177,-1, 177,143,178,-1, 181,182,142,-1, 142,182,125,-1, 183,184,78,-1, 78,184,79,-1,
112 | 59,185,60,-1, 60,185,186,-1, 90,89,29,-1, 29,89,187,-1, 188,26,187,-1, 187,26,29,-1,
113 | 189,190,121,-1, 121,190,122,-1, 49,130,46,-1, 131,130,103,-1, 103,130,49,-1, 103,102,131,-1,
114 | 91,193,92,-1, 92,193,194,-1, 176,175,172,-1, 172,175,146,-1, 120,195,53,-1, 53,195,50,-1,
115 | 117,120,74,-1, 74,120,53,-1, 197,169,196,-1, 196,169,157,-1, 195,120,198,-1, 198,120,119,-1,
116 | 99,36,88,-1, 88,36,87,-1, 112,199,191,-1, 200,116,110,-1, 110,116,61,-1, 115,195,58,-1,
117 | 58,195,198,-1, 157,201,196,-1, 196,201,202,-1, 66,84,152,-1, 152,84,203,-1, 116,115,61,-1,
118 | 61,115,58,-1, 185,202,186,-1, 186,202,201,-1, 136,135,67,-1, 67,135,64,-1, 108,192,171,-1,
119 | 9,11,102,-1, 102,11,191,-1, 168,170,166,-1, 166,170,172,-1, 191,11,112,-1, 112,11,113,-1,
120 | 183,78,190,-1, 190,78,122,-1, 86,205,38,-1, 38,205,42,-1, 182,206,125,-1, 125,206,76,-1,
121 | 176,179,70,-1, 37,106,86,-1, 86,106,205,-1, 206,21,76,-1, 76,21,20,-1, 198,119,207,-1,
122 | 207,119,171,-1, 136,208,126,-1, 126,208,127,-1, 118,117,107,-1, 107,117,74,-1, 111,140,112,-1,
123 | 112,140,199,-1, 90,95,91,-1, 91,95,31,-1, 95,97,31,-1, 31,97,101,-1, 91,31,193,-1,
124 | 193,31,30,-1, 170,124,173,-1, 173,124,10,-1, 114,50,115,-1, 115,50,195,-1, 149,128,150,-1,
125 | 150,128,127,-1, 36,37,87,-1, 87,37,86,-1, 126,129,209,-1, 31,101,32,-1, 169,197,111,-1,
126 | 111,197,141,-1, 169,14,157,-1, 157,14,17,-1, 14,13,17,-1, 17,13,18,-1, 13,167,18,-1,
127 | 18,167,158,-1, 212,213,215,-1, 215,213,214,-1, 216,214,150,-1, 150,214,213,-1, 127,216,150,-1,
128 | 167,165,158,-1, 158,165,159,-1, 159,165,160,-1, 160,165,145,-1, 59,58,207,-1, 207,58,198,-1,
129 | 201,157,209,-1, 209,157,137,-1, 208,136,153,-1, 153,136,67,-1, 109,148,110,-1, 110,148,147,-1,
130 | 116,200,55,-1, 55,200,56,-1, 84,83,203,-1, 203,83,218,-1, 218,211,203,-1, 203,211,210,-1,
131 | 212,211,219,-1, 219,211,218,-1, 219,218,220,-1, 220,218,83,-1, 220,83,221,-1, 221,83,82,-1,
132 | 122,222,81,-1, 81,222,82,-1, 221,82,77,-1, 77,82,222,-1, 223,221,80,-1, 80,221,77,-1,
133 | 221,223,220,-1, 220,223,224,-1, 220,224,219,-1, 219,224,225,-1, 150,213,147,-1, 147,213,225,-1,
134 | 142,54,226,-1, 226,54,57,-1, 77,222,78,-1, 78,222,122,-1, 136,126,137,-1, 137,126,209,-1,
135 | 225,200,147,-1, 147,200,110,-1, 225,213,219,-1, 219,213,212,-1, 210,217,203,-1, 203,217,152,-1,
136 | 56,200,224,-1, 224,200,225,-1, 224,223,56,-1, 56,223,57,-1, 80,226,223,-1, 223,226,57,-1,
137 | 226,80,142,-1, 142,80,79,-1, 184,181,79,-1, 79,181,142,-1, 105,26,188,-1, 23,0,75,-1,
138 | 75,0,45,-1, 22,1,23,-1, 23,1,0,-1, 193,94,194,-1, 194,94,93,-1, 75,45,52,-1,
139 | 52,45,47,-1, 45,44,47,-1, 47,44,48,-1, 44,8,48,-1, 48,8,104,-1, 8,7,104,-1,
140 | 104,7,9,-1, 10,7,25,-1, 25,7,6,-1, 25,24,10,-1, 10,24,173,-1, 24,85,173,-1,
141 | 173,85,174,-1, 85,179,174,-1, 1,22,93,-1, 93,22,194,-1, 22,21,194,-1, 194,21,92,-1,
142 | 21,206,92,-1, 92,206,89,-1, 206,182,89,-1, 89,182,187,-1, 182,181,187,-1, 187,181,188,-1,
143 | 181,184,188,-1, 188,184,105,-1, 184,183,105,-1, 105,183,106,-1, 193,30,94,-1, 94,30,34,-1,
144 | 34,30,35,-1, 35,30,33,-1, 72,71,33,-1, 33,71,35,-1, 178,175,72,-1, 72,175,71,-1,
145 | 143,146,178,-1, 178,146,175,-1, 190,205,183,-1, 183,205,106,-1, 189,42,190,-1, 190,42,205,-1,
146 | 189,121,151,-1, 151,121,138,-1, 43,151,154,-1, 154,151,133,-1, 42,189,43,-1, 43,189,151,-1,
147 | 154,68,43,-1, 43,68,39,-1, 69,100,40,-1, 40,100,62,-1, 162,163,69,-1, 69,163,100,-1,
148 | 161,164,162,-1, 162,164,163,-1, 144,204,161,-1, 161,204,164,-1, 143,180,144,-1, 144,180,204,-1
149 | ]
150 | }
151 | appearance Appearance
152 | {
153 | material Material
154 | {
155 | ambientIntensity 0.2
156 | diffuseColor 0.9 0.9 0.9
157 | specularColor .1 .1 .1
158 | shininess .5
159 | }
160 | }
161 | }
162 | ]
163 | }
164 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------