├── 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 | --------------------------------------------------------------------------------