Copy disabled (too large)
Download .txt
Showing preview only (14,988K chars total). Download the full file to get everything.
Repository: NVlabs/GraspGen
Branch: main
Commit: a56d518f3b76
Files: 163
Total size: 14.3 MB
Directory structure:
gitextract_rq0avka1/
├── .gitattributes
├── .gitignore
├── .gitmodules
├── LICENSE
├── LICENSE_ASSETS.md
├── README.md
├── assets/
│ ├── franka/
│ │ ├── franka_panda.urdf
│ │ └── meshes/
│ │ ├── collision/
│ │ │ ├── finger.obj
│ │ │ ├── hand.obj
│ │ │ ├── link0.obj
│ │ │ ├── link1.obj
│ │ │ ├── link2.obj
│ │ │ ├── link3.obj
│ │ │ ├── link4.obj
│ │ │ ├── link5.obj
│ │ │ ├── link6.obj
│ │ │ └── link7.obj
│ │ └── visual/
│ │ ├── finger.dae
│ │ ├── hand.dae
│ │ ├── link0.dae
│ │ ├── link1.dae
│ │ ├── link2.dae
│ │ ├── link3.dae
│ │ ├── link4.dae
│ │ ├── link5.dae
│ │ ├── link6.dae
│ │ └── link7.dae
│ ├── objects/
│ │ ├── banana.obj
│ │ ├── box.obj
│ │ └── example_object.pcd
│ ├── panda_gripper/
│ │ ├── finger.stl
│ │ └── hand.stl
│ ├── robotiq/
│ │ └── robotiq_140_collision.obj
│ └── suction/
│ └── suction_cup.obj
├── client-server/
│ ├── README.md
│ ├── graspgen_client.py
│ └── graspgen_server.py
├── config/
│ └── grippers/
│ ├── franka_panda.py
│ ├── franka_panda.yaml
│ ├── robotiq_2f_140.py
│ ├── robotiq_2f_140.yaml
│ ├── robotiq_2f_85.yaml
│ ├── single_suction_cup_30mm.py
│ └── single_suction_cup_30mm.yaml
├── docker/
│ ├── build.sh
│ ├── compose.serve.yml
│ ├── graspgen_cuda121.dockerfile
│ ├── graspgen_cuda128.dockerfile
│ ├── run.sh
│ ├── run_meshcat.sh
│ ├── run_server.sh
│ └── serve.dockerfile
├── docs/
│ ├── GRASP_DATASET_FORMAT.md
│ └── GRIPPER_DESCRIPTION.md
├── grasp_gen/
│ ├── __init__.py
│ ├── dataset/
│ │ ├── dataset.py
│ │ ├── dataset_utils.py
│ │ ├── eval_utils.py
│ │ ├── exceptions.py
│ │ ├── image_utils.py
│ │ ├── renderer.py
│ │ ├── suction.py
│ │ ├── visualize_utils.py
│ │ └── webdataset_utils.py
│ ├── grasp_server.py
│ ├── metrics.py
│ ├── models/
│ │ ├── action_decoder.py
│ │ ├── contact_decoder.py
│ │ ├── criterion.py
│ │ ├── discriminator.py
│ │ ├── generator.py
│ │ ├── grasp_gen.py
│ │ ├── m2t2.py
│ │ ├── matcher.py
│ │ ├── model_utils.py
│ │ ├── pointnet/
│ │ │ ├── pointnet2.py
│ │ │ ├── pointnet2_modules.py
│ │ │ └── pointnet2_utils.py
│ │ ├── ptv3/
│ │ │ ├── ptv3.py
│ │ │ └── serialization/
│ │ │ ├── __init__.py
│ │ │ ├── default.py
│ │ │ ├── hilbert.py
│ │ │ └── z_order.py
│ │ └── vit.py
│ ├── robot.py
│ ├── serving/
│ │ ├── __init__.py
│ │ ├── zmq_client.py
│ │ └── zmq_server.py
│ └── utils/
│ ├── logging_config.py
│ ├── math_utils.py
│ ├── meshcat_utils.py
│ ├── plot_utils.py
│ ├── point_cloud_utils.py
│ ├── rotation_conversions.py
│ ├── so3.py
│ ├── train_utils.py
│ └── viser_utils.py
├── install_pointnet.sh
├── install_uv_pointnet.sh
├── mcp/
│ ├── .python-version
│ ├── README.md
│ ├── pyproject.toml
│ └── src/
│ └── mcp_server_graspgen/
│ ├── __init__.py
│ ├── __main__.py
│ └── server.py
├── pointnet2_ops/
│ ├── MANIFEST.in
│ ├── pointnet2_ops/
│ │ ├── __init__.py
│ │ ├── _ext-src/
│ │ │ ├── include/
│ │ │ │ ├── ball_query.h
│ │ │ │ ├── cuda_utils.h
│ │ │ │ ├── group_points.h
│ │ │ │ ├── interpolate.h
│ │ │ │ ├── sampling.h
│ │ │ │ └── utils.h
│ │ │ └── src/
│ │ │ ├── ball_query.cpp
│ │ │ ├── ball_query_gpu.cu
│ │ │ ├── bindings.cpp
│ │ │ ├── group_points.cpp
│ │ │ ├── group_points_gpu.cu
│ │ │ ├── interpolate.cpp
│ │ │ ├── interpolate_gpu.cu
│ │ │ ├── sampling.cpp
│ │ │ └── sampling_gpu.cu
│ │ ├── _version.py
│ │ ├── pointnet2_modules.py
│ │ └── pointnet2_utils.py
│ └── setup.py
├── pyproject.toml
├── requirements.txt
├── runs/
│ ├── train_graspgen_franka_panda_dis.sh
│ ├── train_graspgen_franka_panda_gen.sh
│ ├── train_graspgen_robotiq_2f_140_dis.sh
│ └── train_graspgen_robotiq_2f_140_gen.sh
├── scripts/
│ ├── config.yaml
│ ├── convert_obj_to_usd.py
│ ├── create_grasp_sim_usd.py
│ ├── demo_collision_free_grasps.py
│ ├── demo_object_mesh.py
│ ├── demo_object_pc.py
│ ├── demo_scene_pc.py
│ ├── download_objects.py
│ ├── inference_graspgen.py
│ ├── inference_m2t2.py
│ ├── run_grasp_sim_omniverse.py
│ ├── save_grasps_to_usd.py
│ ├── train_graspgen.py
│ └── train_m2t2.py
├── setup.py
├── tests/
│ ├── conftest.py
│ ├── test_dataset_format.py
│ ├── test_grasp_server.py
│ ├── test_inference_installation.py
│ ├── test_inference_perf.py
│ ├── test_math_utils.py
│ ├── test_point_cloud_utils.py
│ ├── test_robot.py
│ ├── test_rotation_conversions.py
│ ├── test_serving.py
│ └── test_usd_grasp_pipeline.py
└── tutorials/
├── TUTORIAL.md
├── generate_dataset_suction_single_object.py
├── generate_model_inference_config.py
├── tutorial_train_dis.sh
└── tutorial_train_gen.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.pth filter=lfs diff=lfs merge=lfs -text
================================================
FILE: .gitignore
================================================
# Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# NVIDIA CORPORATION and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto. Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA CORPORATION is strictly prohibited.
#######################################################
# KEEP ITEMS IN ALPHABETICAL ORDER WITHIN THEIR GROUP #
#######################################################
# Temporary and binary files
*~
*.py[cod]
*.so
*.cfg
!.isort.cfg
!setup.cfg
*.orig
*.log
*.pot
__pycache__/*
.cache/*
.*.swp
*/.ipynb_checkpoints/*
.DS_Store
# Project files
.ropeproject
.project
.pydevproject
.settings
.idea
.vscode
tags
*.zip
ngc/
osmo/
bash/
checkpoints/
notes/
# Package files
*.egg
*.eggs/
.installed.cfg
*.egg-info
# Unittest and coverage
htmlcov/*
.coverage
.coverage.*
.tox
junit*.xml
coverage.xml
.pytest_cache/
# Build and docs folder/files
_build/*
_coverage/*
build/*
dist/*
sdist/*
docs/_api/*
docs/_rst/*
docs/_build/*
docs/_out/*
docs/python_api/*
cover/*
MANIFEST
public/
# Per-project virtualenvs
.venv*/
.conda*/
venv*/*
# Jupyter files
*checkpoint.ipynb
# Specific to project
__pycache__
*.egg-info
outputs
logs/*
cache/
misc/*
data/*
================================================
FILE: .gitmodules
================================================
================================================
FILE: LICENSE
================================================
NVIDIA License
1. Definitions
“Licensor” means any person or entity that distributes its Work.
“Work” means (a) the original work of authorship made available under this license, which may include software, documentation, or other files, and (b) any additions to or derivative works thereof that are made available under this license.
The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the meaning as provided under U.S. copyright law; provided, however, that for the purposes of this license, derivative works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work.
Works are “made available” under this license by including in or with the Work either (a) a copyright notice referencing the applicability of this license to the Work, or (b) a copy of this license.
2. License Grant
2.1 Copyright Grant. Subject to the terms and conditions of this license, each Licensor grants to you a perpetual, worldwide, non-exclusive, royalty-free, copyright license to use, reproduce, prepare derivative works of, publicly display, publicly perform, sublicense and distribute its Work and any resulting derivative works in any form.
3. Limitations
3.1 Redistribution. You may reproduce or distribute the Work only if (a) you do so under this license, (b) you include a complete copy of this license with your distribution, and (c) you retain without modification any copyright, patent, trademark, or attribution notices that are present in the Work.
3.2 Derivative Works. You may specify that additional or different terms apply to the use, reproduction, and distribution of your derivative works of the Work (“Your Terms”) only if (a) Your Terms provide that the use limitation in Section 3.3 applies to your derivative works, and (b) you identify the specific derivative works that are subject to Your Terms. Notwithstanding Your Terms, this license (including the redistribution requirements in Section 3.1) will continue to apply to the Work itself.
3.3 Use Limitation. The Work and any derivative works thereof only may be used or intended for use non-commercially. Notwithstanding the foregoing, NVIDIA Corporation and its affiliates may use the Work and any derivative works commercially. As used herein, “non-commercially” means for research or evaluation purposes only.
3.4 Patent Claims. If you bring or threaten to bring a patent claim against any Licensor (including any claim, cross-claim or counterclaim in a lawsuit) to enforce any patents that you allege are infringed by any Work, then your rights under this license from such Licensor (including the grant in Section 2.1) will terminate immediately.
3.5 Trademarks. This license does not grant any rights to use any Licensor’s or its affiliates’ names, logos, or trademarks, except as necessary to reproduce the notices described in this license.
3.6 Termination. If you violate any term of this license, then your rights under this license (including the grant in Section 2.1) will terminate immediately.
4. Disclaimer of Warranty.
THE WORK IS PROVIDED “AS IS” WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OR CONDITIONS OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT. YOU BEAR THE RISK OF UNDERTAKING ANY ACTIVITIES UNDER THIS LICENSE.
5. Limitation of Liability.
EXCEPT AS PROHIBITED BY APPLICABLE LAW, IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE SHALL ANY LICENSOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATED TO THIS LICENSE, THE USE OR INABILITY TO USE THE WORK (INCLUDING BUT NOT LIMITED TO LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOST PROFITS OR DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY OTHER DAMAGES OR LOSSES), EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
================================================
FILE: LICENSE_ASSETS.md
================================================
Licenses for external assets are listed here:
franka_panda uRDF
----------------
The Franka urdf files in assets/franka/ has minor modifications
from those in the "franka_description" component of the franka_ros package.
Site: https://github.com/frankaemika/franka_ros/
License: https://github.com/frankaemika/franka_ros/blob/0.7.0/NOTICE
https://github.com/frankaemika/franka_ros/blob/0.7.0/LICENSE
Copyright 2017 Franka Emika GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
***********************
The files in assets/robotiq/ have been obtained from
https://github.com/ros-industrial-attic/robotiq/tree/kinetic-devel with BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
***********************************
================================================
FILE: README.md
================================================
<!-- <img src="fig/cover.png" width="1000" height="250" title="readme1"> -->
<div align="center">
<img src="fig/cover.png" alt="GraspGen logo" width="800" style="margin-left:'auto' margin-right:'auto' display:'block'"/>
<br>
<br>
<h1>GraspGen: A Diffusion-based Framework for 6-DOF Grasping </h1>
</div>
<p align="center">
<a href="https://graspgen.github.io">
<img alt="Project Page" src="https://img.shields.io/badge/Project-Page-F0529C">
</a>
<a href="https://arxiv.org/abs/2507.13097">
<img alt="Arxiv paper link" src="https://img.shields.io/badge/arxiv-2507.13097-blue">
</a>
<a href="https://huggingface.co/adithyamurali/GraspGenModels">
<img alt="Model Checkpoints link" src="https://img.shields.io/badge/%F0%9F%A4%97%20HF-Models-yellow">
</a>
<a href="https://huggingface.co/datasets/nvidia/PhysicalAI-Robotics-GraspGen">
<img alt="Datasets link" src="https://img.shields.io/badge/%F0%9F%A4%97%20HF-Datasets-yellow">
</a>
<a href="https://www.youtube.com/watch?v=gM5fgK2aZ1Y&feature=youtu.be">
<img alt="Video link" src="https://img.shields.io/badge/video-red">
</a>
<a href="https://huggingface.co/datasets/nvidia/PhysicalAI-Robotics-GraspGen/blob/main/LICENSE_DATASET">
<img alt="GitHub License" src="https://img.shields.io/badge/DATASET%20License-CC%20By%204.0-red.svg">
</a>
</p>
GraspGen is a modular framework for diffusion-based 6-DOF robotic grasp generation that scales across diverse settings: 1) **embodiments** - with 3 distinct gripper types (industrial pinch gripper, suction) 2) **observability** - robustness to partial vs. complete 3D point clouds and 3) **complexity** - grasping single-object vs. clutter. We also introduce a novel and performant on-generator training recipe for the grasp discriminator, which scores and ranks the generated grasps. GraspGen outperforms prior methods in real and sim (SOTA performance on the FetchBench grasping benchmark, 17% improvement) while being performant (21X less memory) and realtime (20 Hz before TensorRT). We release the data generation, data formats as well as the training and inference infrastructure in this repo.
<img src="fig/radar.png" width="200" height="250" title="readme1"> <img src="fig/3.gif" width="350" height="250" title="readme2"> <img src="fig/2.gif" width="350" height="250" title="readme3"> <img src="fig/1_fast.gif" width="300" height="250" title="readme4">
## 💡 Contents
1. [Release News](#release-news)
2. [Future Features](#future-features-on-the-roadmap)
3. [Installation](#installation)
- [Docker](#installation-with-docker)
- [Pip Installation](#installation-with-pip)
- [uv](#installation-with-uv)
- [Client-Server](#zmq-server)
- [MCP (LLM Tool-Calling)](#mcp-llm-tool-calling)
4. [Download Model Checkpoints](#download-checkpoints)
5. [Inference Demos](#inference-demos)
6. [Dataset](#dataset)
7. [Training with Existing Datasets](#training-with-existing-datasets)
8. [Bring Your Own Datasets (BYOD) - Training + Data Generation for new grippers and objects](#training--data-generation-for-new-objects-and-grippers)
9. [GraspGen Format and Conventions](#graspgen-conventions)
10. [LLM Tool-calling with GraspGen](#llm-tool-calling-with-graspgen)
11. [Omniverse and USD Support](#omniverse-and-usd-support)
12. [FAQ](#faq)
13. [License](#license)
14. [Citation](#citation)
15. [Contact](#contact)
## Release News
- \[03/03/2026\] Added MCP for calling GraspGen as a tool by an LLM. See [mcp/](mcp/).
- \[03/03/2026\] ZMQ-based server added to run GraspGen without any installation in your application. See [client-server/](client-server/)
- \[02/18/2026\] Paper accepted to ICRA'26, see you in Vienna 🚀🇦🇹
- \[10/28/2025\] Add feature of filtering out colliding grasps based on scene point cloud.
- \[09/30/2025\] Isaac-Lab based grasp data generation released as [GraspDataGen](https://github.com/NVlabs/GraspDataGen) package (Note: [Data gen for suction grippers is in this repo](grasp_gen/dataset/suction.py))
- \[07/16/2025\] Initial code release! Version `1.0.0`
- \[03/18/2025\] Dataset release on [Hugging Face](https://huggingface.co/datasets/nvidia/PhysicalAI-Robotics-GraspGen)!
- \[03/18/2025\] Blog post on Model deployment at [Intrinsic.ai](https://www.intrinsic.ai/blog/posts/intrinsic-and-nvidia-deepen-platform-integrations-for-intelligent-robotics)
## Future Features on the roadmap
- ~~Data generation repo for antipodal grippers based on [Isaac Lab](https://isaac-sim.github.io/IsaacLab/main/index.html) (Note: [Data gen for suction grippers already released](grasp_gen/dataset/suction.py))~~
- ~~Collision-filtering example~~
- ~~Finetuning with real data**[Not planned anymore, lack of time]**~~
- PTV3 backbone does not (yet) run on Cuda 12.8/Blackwell GPUs due to a [dependency issue](https://github.com/Pointcept/PointTransformerV3/issues/159). If using Cuda 12.8, please use PointNet++ backbone for now until its resolved.
## Installation
Choose your preferred installation method. For training, we recommend **docker**. For inference, **uv** is the fastest and easiest option. If you would like to run GraspGen as a standalone server (e.g. for tool-calling from an LLM agent or a remote robot client), see [client-server/README.md](client-server/README.md). We also added a MCP to call GraspGen with an LLM.
**✅ All methods fully tested and working!**
| Method | Use Case | Complexity | Speed |
|--------|----------|------------|-------|
| **Docker** | Training + Inference | ⭐⭐⭐ Recommended for training | Slow |
| **Pip** and **uv** | Inference | ⭐⭐ Recommended for inference | Fast |
| **ZMQ Server** | Remote inference (no install needed on client) | ⭐ See [client-server/](client-server/) | Fast |
| **MCP** | LLM tool-calling | ⭐ See [mcp/](mcp/) | Fast |
### Installation with Docker
```bash
git clone https://github.com/NVlabs/GraspGen.git && cd GraspGen
bash docker/build.sh # This will take a while
```
### Installation with pip inside Conda/Python virtualenv
**[Optional]** If you do not already have a conda env, first create one:
```bash
conda create -n GraspGen python=3.10 -y && conda activate GraspGen
```
**[Optional]** If you do not already have pytorch installed:
```bash
pip install torch==2.1.0 torchvision==0.16.0 torch-cluster torch-scatter -f https://data.pyg.org/whl/torch-2.1.0+cu121.html
```
Install with pip:
```bash
# Clone repo and install
git clone https://github.com/NVlabs/GraspGen.git && cd GraspGen && pip install -e .
# Install PointNet dependency (automated script handles CUDA environment)
./install_pointnet.sh
```
**NOTE:** The `install_pointnet.sh` script automatically handles CUDA environment variables. Ensure you have CUDA runtime headers and a C++ compiler installed. You can also manually run it as follows:
```bash
export CC=/usr/bin/g++ && export CXX=/usr/bin/g++ && export CUDAHOSTCXX=/usr/bin/g++ && export TORCH_CUDA_ARCH_LIST="8.6" && cd pointnet2_ops && pip install --no-build-isolation .
```
### Installation with uv 🚀
uv installation is recommended if you would just like to run inference.
**[Optional]** Install uv if not already installed:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc # or restart terminal
```
**Cloning repo and installing:**
```bash
# Clone repo and setup everything
git clone https://github.com/NVlabs/GraspGen.git && cd GraspGen
# Create Python environment and install all dependencies
uv python install 3.10 && uv venv --python 3.10 .venv && source .venv/bin/activate
uv pip install -e .
# Install PointNet dependency (automated script handles CUDA environment)
./install_uv_pointnet.sh
```
To check if installation has succeeded, run the following test:
```bash
python tests/test_inference_installation.py
```
### ZMQ Server
To run GraspGen as a standalone inference server that any client can query without installing the full stack, see [client-server/README.md](client-server/README.md).
### MCP (LLM Tool-Calling)
To enable LLMs to call GraspGen as a tool, see [mcp/README.md](mcp/README.md).
## Download Checkpoints
The checkpoints can be downloaded from [HuggingFace](https://huggingface.co/adithyamurali/GraspGenModels):
```
git clone https://huggingface.co/adithyamurali/GraspGenModels
```
## Inference Demos
We have added scripts for visualizing grasp predictions on real world point clouds using the models. The sample dataset is in the models repository in the `sample_data` folder. Please see the script args for use. For plotting just the topk grasps (used on the real robot, `k=100` by default) pass in the `--return_topk` flag. To visualize for different grippers, modify the `--gripper_config` argument.
### Prerequisites
1. **Dataset:** Please [download checkpoints](#download-checkpoints) first - this will be the `<path_to_models_repo>` below.
2. **Docker:** The first argument is the path to where you have locally cloned the GraspGen repository (always required). Use `--models` flag for the models directory. These will be mounted at `/code` and `/models` paths inside the container respectively.
```bash
# For inference only
bash docker/run.sh <path_to_graspgen_code> --models <path_to_models_repo>
```
### Predicting grasps for segmented object point clouds
```bash
cd /code/ && python scripts/demo_object_pc.py --sample_data_dir /models/sample_data/real_object_pc --gripper_config /models/checkpoints/graspgen_robotiq_2f_140.yml
```
<img src="fig/pc/1.png" width="240" height="200" title="objpc1"> <img src="fig/pc/2.png" width="240" height="200" title="objpc2"> <img src="fig/pc/3.png" width="240" height="200" title="objpc3"> <img src="fig/pc/4.png" width="200" height="200" title="objpc4"> <img src="fig/pc/5.png" width="240" height="200" title="objpc5"> <img src="fig/pc/6.png" width="200" height="200" title="objpc6">
### Predicting grasps for object meshes
Supports `.obj`, `.stl`, and `.ply` formats.
```bash
cd /code/ && python scripts/demo_object_mesh.py --mesh_file /models/sample_data/meshes/box.obj --mesh_scale 1.0 --gripper_config /models/checkpoints/graspgen_robotiq_2f_140.yml
```
<img src="fig/meshes/1.png" width="240" height="200" title="objpc1"> <img src="fig/meshes/2.png" width="240" height="200" title="objpc2"> <img src="fig/meshes/3.png" width="240" height="200" title="objpc3">
### **[Advanced]** Predicting grasps for objects from scene point clouds
```bash
cd /code/ && python scripts/demo_scene_pc.py --sample_data_dir /models/sample_data/real_scene_pc --gripper_config /models/checkpoints/graspgen_robotiq_2f_140.yml
```
<img src="fig/pc/scene1.png" width="400" height="300" title="scenepc1"> <img src="fig/pc/scene2.png" width="400" height="300" title="scenepc2">
### **[Advanced]** Predicting grasps for objects from scene point clouds, with collision checking
If you would like to filter the inferred grasps based on collisions, use the `--filter_collisions` flag. This uses a simple point cloud based collision checker. On the real robot, we suggest using [NVBlox](https://github.com/NVlabs/nvblox_torch). The grasp is in collision if it is <span style="color:red">**red**</span>, and <span style="color:green">**green**</span> if collision free. See `scripts/demo_collision_free_grasps.py` if you want to pass in your own scene using the depth and segmentation image as commandline arguments.
```bash
cd /code/ && python scripts/demo_scene_pc.py --filter_collisions --sample_data_dir /models/sample_data/real_scene_pc --gripper_config /models/checkpoints/graspgen_franka_panda.yml
```
<img src="fig/pc/collision1.png" width="400" height="300" title="collision1"> <img src="fig/pc/collision2.png" width="400" height="300" title="collision2"> <img src="fig/pc/collision3.png" width="400" height="300" title="collision3"> <img src="fig/pc/collision4.png" width="400" height="300" title="collision4"> <img src="fig/pc/collision5.png" width="400" height="300" title="collision5">
<!-- An example of a grasp that is colliding (left) vs collision-free (right) is show below.
<!-- <img src="fig/pc/collision4.png" width="400" height="300" title="collision4"> <img src="fig/pc/collision5.png" width="400" height="300" title="collision5"> -->
<small>Note: At the time of release of this repo, the suction checkpoint was not trained with on-generator training, hence may not output the best grasp scores.</small>
## Dataset
There are two datasets to download:
1. **Grasp Dataset**: This can be cloned from [HuggingFace](https://huggingface.co/datasets/nvidia/PhysicalAI-Robotics-GraspGen). Where you clone this would be `<path_to_grasp_dataset>`.
```
git clone https://huggingface.co/datasets/nvidia/PhysicalAI-Robotics-GraspGen
```
2. **Object Dataset**: We have included a [script](scripts/download_objects.py) for downloading the object dataset below. We recommend running this inside the docker container (the `simplify` arg would not work otherwise). You'll have to specify the directory to save the dataset `<path_to_object_dataset>`. We have only tested the training with simplified meshes (hence the `--simplify` arg), which was crucial to increasing rendering and simulation speed. This script may take a few hours to complete downloading and will take up a lot of CPU. If you are running inside a docker container, you'll need to mount a location to save this data.
First start the docker:
```bash
# For Dataset download only
mkdir -p <object_dataset>
bash docker/run.sh <path_to_graspgen_code> --grasp_dataset <path_to_grasp_dataset> --object_dataset <path_to_object_dataset>
```
```bash
cd /code && python scripts/download_objects.py --uuid_list /grasp_dataset/splits/franka_panda/ --output_dir /object_dataset --simplify
```
In total, we release over 57 million grasps, computed for a subset of 8515 objects from the [Objaverse XL](https://objaverse.allenai.org/) (LVIS) dataset. These grasps are specific to three grippers: Franka Panda, the Robotiq-2f-140 industrial gripper, and a single-contact suction gripper (30mm radius).
<img src="fig/montage2.png" width="1000" height="500" title="readme2">
## Training with Existing Datasets
This section covers training on existing pre-generated datasets for the three grippers. For a more detailed tutorial on generating your own dataset as well as training a model, please see [TUTORIAL.md](tutorials/TUTORIAL.md)
### Prerequisites
1. **Dataset:** Please see the [Dataset](#dataset) section and download the grasp and object datasets first.
2. **Path setup**: You will need to find out the following paths for the next step
- `<path_to_graspgen_code>`: Local path to where the graspgen repo was cloned
- `<path_to_grasp_dataset>`: Local path to where grasp dataset was cloned.
- `<path_to_object_dataset>`: Local path to where object dataset was downloaded.
- `<path_to_results>`: Local path to where training logs and cache would be saved.
3. **Docker:** Start the docker container with the correct paths:
```bash
# For training only.
mkdir -p <path_to_results>
bash docker/run.sh <path_to_graspgen_code> --grasp_dataset <path_to_grasp_dataset> --object_dataset <path_to_object_dataset> --results <path_to_results>
```
See the training scripts in `runs/`. For each gripper, there are models to train separately - the generator (diffusion model) as well as the discriminator.
```bash
# Example usage for training the generator
cd /code && bash runs/train_graspgen_robotiq_2f_140_gen.sh
# Example usage for training the discriminator
cd /code && bash runs/train_graspgen_robotiq_2f_140_dis.sh
```
Things to note regarding training:
- The experiments in this paper were run with 8 X A100 machines. We have tested this on V100, A100, H100 and L40s
- **Dataset Caching:** Before starting the actual training, the script builds a cache of the dataset and saves to a hdf5 `.h5` file in the specified cache directory. Both caching and training is handled in the same `train_graspgen.py` script with same arguments. If a cache does not exist or is incomplete, the script will build the cache and will automatically continue with training once caching is complete. If the cache already exists, the script will immediately start the training.
- **On-Generator training:** On-Generator training is not released for the discriminator training (yet). It will be released when the data generation repo is released. This is needed for the best performance and scoring of the predicted grasps (see paper).
### Important Training Arguments
- `NGPU`: Set to the number of GPUs you have for training
- `LOG_DIR`: Specifies where the tensorboard logs, checkpoints and console logs are saved to
- `NWORKERS`: A rule of thumb is to set to a non-zero number, roughly `Number of CPU of Cores` / `Number of GPUs`
- `NUM_REDUNDANT_DATAPOINTS`: parameter controls the redundancy (of camera viewpoints) in cache building. The higher the number, the better the domain randomization and sim2real transfer. Default is 7. There will be a `OOM` error if it is too high.
- `debug` mode: To run the job on a single GPU job and 1 worker, you can set the arg `train.debug=True`
### Monitoring Training and Estimates:
- **Generator**: Grasp reconstruction error `reconstruction/error_trans_l2` on the validation set should converge to a few `cm`; this run will take at least 3K epochs to converge; on a 8 X A100 node, it takes about 40 hrs for 3K epochs
- **Discriminator**: Validation AP score should be > 0.8 and `bce_topk` loss should go down; this run will take at least 3K epochs to converge; on a 8 X A100 node, it takes about 90 hrs for 3K epochs
## Training & Data Generation (for new objects and grippers)
Please see [TUTORIAL.md](tutorials/TUTORIAL.md) for a detailed walkthrough of training a model from scratch, including grasp data generation. Currently, we include an example for suction grippers. See the [GraspDataGen](https://github.com/NVlabs/GraspDataGen) package for Isaac Lab based grasp data generation for pinch grippers.
## GraspGen Conventions
Please see the following files for documentation on the formats we adopted:
- Gripper configuration: [GRIPPER_DESCRIPTION.md](docs/GRIPPER_DESCRIPTION.md)
- Grasp Dataset format: [GRASP_DATASET_FORMAT.md](docs/GRASP_DATASET_FORMAT.md)
See the [GraspDataGen](https://github.com/NVlabs/GraspDataGen) package for Isaac Lab based grasp data generation in the above format.
## LLM Tool-calling with GraspGen
GraspGen can be deployed as a standalone ZMQ server, making it callable as a tool from LLM agents, remote robot controllers, or any application — without importing model code or needing a local GPU. See [client-server/README.md](client-server/README.md) for full documentation, protocol reference, and examples.
```bash
# Start the server (Docker):
bash docker/run_server.sh $(pwd) --models /path/to/GraspGenModels
# Call it from a client (Python — no CUDA required):
python client-server/graspgen_client.py --mesh_file /path/to/mesh.obj --host localhost --port 5556
```
## Omniverse and USD Support
GraspGen supports **USD** meshes (`.usd`, `.usda`, `.usdc`, `.usdz`) for inference and can write predicted grasps back into USD for **Omniverse** / Isaac Sim. A single USD can contain the object mesh, **`/world/grasps`** (pose Xforms only), and **`/world/grasps_visualization`** (same poses + gripper wireframes). Meshes are converted with [scene_synthesizer](https://github.com/NVlabs/scene_synthesizer). Commands for running on an example object [assets/objects/box.obj](assets/objects/box.obj):
```bash
# 1) OBJ → USD
python scripts/convert_obj_to_usd.py --input assets/objects/box.obj --output /tmp/box.usd
# 2) Run inference, save grasps to YAML
python scripts/demo_object_mesh.py --mesh_file /tmp/box.usd --mesh_scale 1.0 \
--gripper_config GRIPPER_CONFIG --output_file /tmp/box_grasps.yml --no-visualization --num_grasps 50
# 3) Write grasps + grasps_visualization into the USD
python scripts/save_grasps_to_usd.py --usd_file assets/objects/box.usd --grasps_yaml /tmp/box_grasps.yml \
--gripper_name robotiq_2f_140 --output assets/objects/box_with_grasps.usd
```
Optional: **`--wireframe_width W`** (default `0.001`), **`--no_visualization`** to skip wireframes. See [Inference Demos](#inference-demos) for other formats (`.obj`,`.pcd`.etc).
### Running grasps in Isaac Sim (10 envs, play-to-grasp)
You can generate a **sim USD** with up to 10 environments: each env has the object and one gripper at a predicted grasp pose. When you open this USD in **Omniverse / Isaac Sim** and press **Play**, the grippers close and grasp the object. A Robotiq 2F-85 gripper USD is included under `assets/bots/robotiq_2f_85.usd` (copied from [GraspDataGen](https://github.com/NVlabs/GraspDataGen)).
**1. Run inference (max 10 grasps) and save YAML**
```bash
python scripts/demo_object_mesh.py --mesh_file /tmp/box.usd --mesh_scale 1.0 \
--gripper_config GRIPPER_CONFIG --output_file /tmp/box_grasps.yml --no-visualization --num_grasps 10
```
**2. Build the sim USD** (`box_with_grasps_sim.usd`)
```bash
python scripts/create_grasp_sim_usd.py --object_usd assets/objects/box.usd \
--grasps_yaml /tmp/box_grasps.yml --output assets/objects/box_with_grasps_sim.usd --num_envs 10
```
**3. Open in Isaac Sim and run the grasp script**
- In **Isaac Sim**: **File → Open** and open `assets/objects/box_with_grasps_sim.usd`.
- Press **Play** to start the simulation.
- In **Window → Script Editor**, open and run `scripts/run_grasp_sim_omniverse.py`.
This script registers a callback so that after a short delay the grippers move to the closed position and grasp the object.
Options for `create_grasp_sim_usd.py`: **`--gripper_usd`** (default `assets/bots/robotiq_2f_85.usd`), **`--num_envs`** (default `10`), **`--env_spacing`** (default `0.6` m).
## FAQ
### How do I train for a new gripper?
Please let us know what gripper you are interested in this [short survey](https://docs.google.com/forms/d/e/1FAIpQLSdTCstEtaeZz5iSyjAhYFuJqSpMF671ftPylkS3ZJFhRIg3dg/viewform?usp=dialog).
For optimal performance on a new gripper, we recommend re-training the model with our specified training recipie. You will need following to achieve that:
* Gripper URDF. See [assets/](assets/) for examples.
* Gripper description in the GraspGen format. See [GRIPPER_DESCRIPTION.md](docs/GRIPPER_DESCRIPTION.md).
* Object-Grasp dataset for this gripper consisting of successful and unsuccessful grasps. See [GRASP_DATASET_FORMAT.md](docs/GRASP_DATASET_FORMAT.md)
Please see [TUTORIAL.md](tutorials/TUTORIAL.md) for a detailed walkthrough of training a model from scratch, including grasp data generation. See [GraspDataGen](https://github.com/NVlabs/GraspDataGen) for data generation.
### My gripper is very similar to one of the existing grippers. Could I re-target model for my gripper?
In most cases, we recommend re-training a new model specific to your gripper as the physics would have changed.
If your gripper is antipodal and has a similar stroke length (i.e. width) to one of the existing grippers (Franka/Robotiq), feel free to re-target the model. You may have to apply a offset along the z direction `import trimesh.transformations as tra; new_grasp = grasp @ tra.translation_matrix([0,0,-Z_OFFSET])` to align the base link frames of both grippers.
If you are using a single-cup suction gripper, you could retarget our suction model trained for a 30mm suction seal. You could rescale the object point cloud/mesh input before inference `import trimesh.transformations as tra; mat = tra.scale_matrix(r/0.030)` where `r` is the radius of the suction cup for your gripper.
### How do I finetune on new object dataset?
The graspgen model is meant to generalize zero-shot to unknown objects. If you would like to further finetune the model on a new object/grasp dataset combination or train on a larger dataset, you will need to 1) pass in the pretrained checkpoint in the `train.checkpoint` argument in the train script and 2) change the paths to the new grasp/object dataset. Please check the [GRASP_DATASET_FORMAT.md](docs/GRASP_DATASET_FORMAT.md) convention.
### Why is my train script hanging/getting killed without any errors?
Make sure your docker container has sufficient CPU, swap and GPU memory. Please post a github issue otherwise.
### How do I run this on the robot?
You will need instance segmentation (e.g. [SAM2](https://ai.meta.com/sam2/)) and motion planning (e.g. [cuRobo](https://curobo.org/)) to run this model. More details can be found in the experiments section of the paper.
### You did not include the gripper I have/want with your dataset!
Sorry we missed your gripper! Please consider completing this quick [survey](https://docs.google.com/forms/d/e/1FAIpQLSdTCstEtaeZz5iSyjAhYFuJqSpMF671ftPylkS3ZJFhRIg3dg/viewform?usp=dialog) to describe your gripper. You can optionally leave a your URDF.
### How do I report a bug or ask more detailed questions?
Please post a github issue and we will follow up! Or feel free to email us.
### Contributions?
Contributions are welcome! Please submit a PR.
## License
License Copyright © 2025, NVIDIA Corporation & affiliates. All rights reserved.
For business inquiries, please submit the form [NVIDIA Research Licensing](https://www.nvidia.com/en-us/research/inquiries/).
## Citation
If you found this work to be useful, please considering citing:
```
@inproceedings{murali2025graspgen,
title = {GraspGen: A Diffusion-based Framework for 6-DOF Grasping with On-Generator Training},
author = {Murali, Adithyavairavan and Sundaralingam, Balakumar and Chao, Yu-Wei and Yamada, Jun and Yuan, Wentao and Carlson, Mark and Ramos, Fabio and Birchfield, Stan and Fox, Dieter and Eppner, Clemens},
booktitle = {Proceedings of the IEEE International Conference on Robotics and Automation (ICRA)},
year = {2026},
publisher = {IEEE},
url = {https://arxiv.org/abs/2507.13097}
}
```
## Contact
Please reach out to [Adithya Murali](http://adithyamurali.com) (admurali@nvidia.com) for further enquiries.
================================================
FILE: assets/franka/franka_panda.urdf
================================================
<?xml version="1.0" ?>
<robot name="panda" xmlns:xacro="http://www.ros.org/wiki/xacro">
<link name="panda_link0">
<visual>
<geometry>
<mesh filename="meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link0.obj"/>
</geometry>
</collision>
</link>
<link name="panda_link1">
<visual>
<geometry>
<mesh filename="meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link1.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint1" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="panda_link0"/>
<child link="panda_link1"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<limit effort="87" lower="-2.8973" upper="2.8973" velocity="2.1750"/>
</joint>
<link name="panda_link2">
<visual>
<geometry>
<mesh filename="meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link2.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint2" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<origin rpy="-1.57079632679 0 0" xyz="0 0 0"/>
<parent link="panda_link1"/>
<child link="panda_link2"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<limit effort="87" lower="-1.6628" upper="1.6628" velocity="2.1750"/>
</joint>
<link name="panda_link3">
<visual>
<geometry>
<mesh filename="meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link3.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint3" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<origin rpy="1.57079632679 0 0" xyz="0 -0.316 0"/>
<parent link="panda_link2"/>
<child link="panda_link3"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<limit effort="87" lower="-2.7973" upper="2.7973" velocity="2.1750"/>
</joint>
<link name="panda_link4">
<visual>
<geometry>
<mesh filename="meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link4.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint4" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<origin rpy="1.57079632679 0 0" xyz="0.0825 0 0"/>
<parent link="panda_link3"/>
<child link="panda_link4"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<limit effort="87" lower="-3.0718" upper="-0.0698" velocity="2.1750"/>
<!-- something is weird with this joint limit config
<dynamics damping="10.0"/>
<limit effort="87" lower="-3.0" upper="0.087" velocity="2.1750"/> -->
</joint>
<link name="panda_link5">
<visual>
<geometry>
<mesh filename="meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link5.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint5" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<origin rpy="-1.57079632679 0 0" xyz="-0.0825 0.384 0"/>
<parent link="panda_link4"/>
<child link="panda_link5"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<limit effort="12" lower="-2.7973" upper="2.7973" velocity="2.6100"/>
</joint>
<link name="panda_link6">
<visual>
<geometry>
<mesh filename="meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link6.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint6" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<origin rpy="1.57079632679 0 0" xyz="0 0 0"/>
<parent link="panda_link5"/>
<child link="panda_link6"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<!-- <limit effort="12" lower="0.5" upper="3.6525" velocity="2.6100"/> -->
<dynamics damping="10.0"/>
<limit effort="12" lower="0.1175" upper="3.6525" velocity="2.6100"/>
<!-- <dynamics damping="10.0"/>
<limit effort="12" lower="-0.0873" upper="3.0" velocity="2.6100"/> -->
</joint>
<link name="panda_link7">
<visual>
<geometry>
<mesh filename="meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/link7.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_joint7" type="revolute">
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<origin rpy="1.57079632679 0 0" xyz="0.088 0 0"/>
<parent link="panda_link6"/>
<child link="panda_link7"/>
<axis xyz="0 0 1"/>
<dynamics damping="10.0"/>
<limit effort="12" lower="-2.7973" upper="2.7973" velocity="2.6100"/>
</joint>
<link name="panda_link8"/>
<joint name="panda_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="panda_link7"/>
<child link="panda_link8"/>
<axis xyz="0 0 0"/>
</joint>
<joint name="panda_hand_joint" type="fixed">
<parent link="panda_link8"/>
<child link="panda_hand"/>
<origin rpy="0 0 -0.785398163397" xyz="0 0 0"/>
</joint>
<link name="panda_hand">
<visual>
<geometry>
<mesh filename="meshes/visual/hand.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/hand.obj"/>
</geometry>
</collision>
</link>
<link name="panda_leftfinger">
<visual>
<geometry>
<mesh filename="meshes/visual/finger.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="meshes/collision/finger.obj"/>
</geometry>
</collision>
</link>
<link name="panda_rightfinger">
<visual>
<origin rpy="0 0 3.14159265359" xyz="0 0 0"/>
<geometry>
<mesh filename="meshes/visual/finger.dae"/>
</geometry>
</visual>
<collision>
<origin rpy="0 0 3.14159265359" xyz="0 0 0"/>
<geometry>
<mesh filename="meshes/collision/finger.obj"/>
</geometry>
</collision>
</link>
<joint name="panda_finger_joint1" type="prismatic">
<parent link="panda_hand"/>
<child link="panda_leftfinger"/>
<origin rpy="0 0 0" xyz="0 0 0.0584"/>
<axis xyz="0 1 0"/>
<dynamics damping="10.0"/>
<limit effort="20" lower="0.0" upper="0.04" velocity="0.2"/>
</joint>
<joint name="panda_finger_joint2" type="prismatic">
<parent link="panda_hand"/>
<child link="panda_rightfinger"/>
<origin rpy="0 0 0" xyz="0 0 0.0584"/>
<axis xyz="0 -1 0"/>
<dynamics damping="10.0"/>
<limit effort="20" lower="0.0" upper="0.04" velocity="0.2"/>
<mimic joint="panda_finger_joint1"/>
</joint>
<link name="right_gripper"/>
<joint name="right_gripper" type="fixed">
<origin rpy="0 0 2.35619449019" xyz="0.0 0 0.1"/>
<axis xyz="0 0 1"/>
<parent link="panda_link8"/>
<child link="right_gripper"/>
</joint>
</robot>
================================================
FILE: assets/franka/meshes/collision/finger.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object finger.obj
#
# Vertices: 52
# Faces: 32
#
####
vn 0.999991 0.003723 -0.001919
v 0.010360 0.026403 0.000155
vn 0.019341 -0.997893 -0.061925
v 0.010449 0.002583 0.000147
vn -0.999568 -0.025962 0.013789
v -0.010387 0.002534 0.000132
vn -0.999606 -0.009503 0.026403
v -0.010479 0.016102 0.018988
vn -0.000579 0.001464 -0.999999
v -0.010401 0.026309 0.000167
vn -0.044737 0.976483 0.210900
v -0.010389 0.025220 0.019188
vn -0.871286 -0.490748 0.005227
v -0.008730 -0.000024 0.036165
vn 0.999861 0.006488 0.015354
v 0.010400 0.025253 0.019037
vn 0.377718 0.867563 0.323518
v 0.005840 0.014274 0.053803
vn 0.736099 -0.021564 0.676530
v 0.008616 0.013989 0.051328
vn 0.999373 -0.008600 0.034345
v 0.010495 0.015103 0.018436
vn 0.013041 -0.999896 -0.006124
v 0.008693 -0.000133 0.050166
vn -0.998603 -0.032800 0.041418
v -0.008623 -0.000057 0.050953
vn -0.588468 -0.017705 0.808327
v -0.005481 -0.000091 0.053725
vn 0.004085 -0.008700 0.999954
v -0.005278 0.014293 0.053849
vn -0.691057 -0.012018 0.722700
v -0.007778 0.014218 0.052366
vn -0.665951 0.690851 0.281486
v -0.008841 0.013918 0.050589
vn 0.736099 -0.021564 0.676530
v 0.006138 -0.000021 0.053578
vn -0.002818 0.998255 0.058981
v 0.010360 0.026403 0.000155
vn 0.000073 0.000898 -1.000000
v 0.010360 0.026403 0.000155
vn 0.999898 -0.012431 0.007036
v 0.010449 0.002583 0.000147
vn 0.000724 0.000331 -1.000000
v 0.010449 0.002583 0.000147
vn -0.871286 -0.490748 0.005227
v -0.010387 0.002534 0.000132
vn 0.002403 -0.997480 -0.070914
v -0.010387 0.002534 0.000132
vn 0.000073 0.000898 -1.000000
v -0.010387 0.002534 0.000132
vn -0.004486 0.998354 0.057168
v -0.010401 0.026309 0.000167
vn -0.999988 0.004662 -0.001626
v -0.010401 0.026309 0.000167
vn -0.665951 0.690851 0.281486
v -0.010389 0.025220 0.019188
vn -0.999597 0.009346 0.026807
v -0.010389 0.025220 0.019188
vn 0.006493 -0.999457 -0.032313
v -0.008730 -0.000024 0.036165
vn 0.377718 0.867563 0.323518
v 0.010400 0.025253 0.019037
vn -0.000242 0.983230 0.182372
v 0.010400 0.025253 0.019037
vn 0.665647 0.002096 0.746264
v 0.005840 0.014274 0.053803
vn 0.008418 -0.012115 0.999891
v 0.005840 0.014274 0.053803
vn 0.001757 0.953702 0.300749
v 0.005840 0.014274 0.053803
vn 0.377718 0.867563 0.323518
v 0.008616 0.013989 0.051328
vn 0.998361 0.003310 0.057136
v 0.008616 0.013989 0.051328
vn 0.798906 -0.045001 0.599770
v 0.008693 -0.000133 0.050166
vn 0.998687 -0.025065 0.044683
v 0.008693 -0.000133 0.050166
vn -0.769031 -0.017753 0.638965
v -0.008623 -0.000057 0.050953
vn -0.008996 -0.999957 -0.002185
v -0.008623 -0.000057 0.050953
vn -0.871286 -0.490748 0.005227
v -0.008623 -0.000057 0.050953
vn 0.008418 -0.012115 0.999891
v -0.005481 -0.000091 0.053725
vn -0.002059 -0.999940 0.010793
v -0.005481 -0.000091 0.053725
vn -0.510143 -0.000217 0.860089
v -0.005278 0.014293 0.053849
vn -0.108731 0.943365 0.313433
v -0.005278 0.014293 0.053849
vn -0.665951 0.690851 0.281486
v -0.007778 0.014218 0.052366
vn -0.218924 0.920873 0.322590
v -0.007778 0.014218 0.052366
vn -0.858159 -0.000049 0.513385
v -0.008841 0.013918 0.050589
vn -0.998665 -0.002749 0.051583
v -0.008841 0.013918 0.050589
vn 0.006542 -0.999267 0.037718
v 0.006138 -0.000021 0.053578
vn 0.012751 -0.015529 0.999798
v 0.006138 -0.000021 0.053578
# 52 vertices, 0 vertices normals
f 20//20 22//22 25//25
f 3//3 4//4 27//27
f 27//27 4//4 29//29
f 2//2 30//30 24//24
f 32//32 6//6 35//35
f 25//25 5//5 20//20
f 37//37 11//11 8//8
f 11//11 39//39 21//21
f 37//37 39//39 11//11
f 42//42 23//23 7//7
f 2//2 12//12 30//30
f 12//12 44//44 30//30
f 8//8 11//11 21//21
f 8//8 21//21 1//1
f 32//32 19//19 6//6
f 6//6 46//46 35//35
f 48//48 46//46 6//6
f 40//40 14//14 16//16
f 3//3 13//13 4//4
f 31//31 9//9 36//36
f 19//19 26//26 6//6
f 4//4 50//50 29//29
f 17//17 47//47 28//28
f 34//34 43//43 52//52
f 15//15 43//43 34//34
f 12//12 51//51 44//44
f 18//18 38//38 10//10
f 44//44 41//41 30//30
f 16//16 14//14 45//45
f 13//13 50//50 4//4
f 18//18 10//10 33//33
f 16//16 49//49 40//40
# 32 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/hand.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object hand.obj
#
# Vertices: 203
# Faces: 200
#
####
vn 0.677569 -0.001843 0.735457
v 0.016735 0.090129 0.064432
vn 0.677569 -0.001843 0.735457
v 0.017134 -0.089271 0.063614
vn 0.992654 -0.011114 0.120477
v 0.031590 -0.000559 0.006214
vn -0.716343 -0.689456 -0.107250
v -0.017054 -0.095525 0.022121
vn -0.755877 -0.654711 -0.002099
v -0.017510 -0.097908 0.051666
vn -0.974862 -0.093215 -0.202373
v -0.031598 -0.001987 0.001153
vn -0.837484 0.173605 -0.518152
v -0.025981 0.075770 -0.005082
vn -0.996229 0.007595 0.086433
v -0.031636 -0.000579 0.005973
vn 0.651784 -0.749713 -0.114488
v 0.017033 -0.096802 0.030322
vn 0.798367 -0.085341 -0.596093
v 0.031616 -0.001861 0.001180
vn 0.855392 -0.506720 0.107420
v 0.017585 -0.097407 0.051985
vn 0.929401 0.260890 0.261057
v 0.018556 0.094602 0.056617
vn -0.759225 -0.609942 -0.227044
v -0.016804 -0.091906 0.006295
vn -0.888304 -0.314001 -0.335140
v -0.016812 -0.087533 -0.001206
vn 0.839254 -0.541983 0.043675
v 0.016230 -0.099538 0.051584
vn -0.010179 -0.999478 0.030669
v -0.000041 -0.103990 0.005691
vn -0.287019 -0.933641 -0.214323
v -0.000017 -0.103743 -0.009199
vn -0.250662 -0.880371 -0.402636
v -0.003617 -0.101158 -0.012610
vn -0.324006 -0.928873 -0.179484
v -0.003430 -0.102598 -0.008964
vn -0.988671 0.144964 0.038924
v -0.025270 0.082065 0.005197
vn -0.622300 -0.003527 -0.782771
v -0.028011 0.041784 -0.006396
vn 0.008217 0.618540 0.785710
v -0.000113 0.092808 0.065962
vn -0.214117 0.697024 0.684333
v -0.012567 0.093712 0.065168
vn -0.498204 0.404184 0.767091
v -0.014422 0.091276 0.065690
vn -0.735626 -0.442475 0.512904
v -0.017255 -0.090700 0.063082
vn -0.423756 -0.343805 0.837991
v -0.015472 -0.090706 0.065190
vn -0.938196 0.152243 0.310821
v -0.016767 0.090252 0.064332
vn 0.760990 -0.605028 -0.234170
v 0.016956 -0.091603 0.005563
vn 0.925714 -0.290003 0.242800
v 0.017607 -0.093848 0.058448
vn 0.101105 -0.786037 0.609855
v 0.012506 -0.100188 0.056894
vn 0.466868 0.708045 0.529817
v 0.015551 0.100200 0.054673
vn 0.947159 0.293278 0.129912
v 0.019269 0.098494 0.044942
vn -0.002569 0.999117 -0.041931
v 0.016218 0.100285 0.045870
vn 0.347527 0.043219 -0.936673
v 0.001917 -0.045520 -0.025659
vn 0.992401 0.063295 -0.105521
v 0.028015 0.042042 -0.006350
vn 0.686354 -0.085056 -0.722277
v 0.003810 -0.082966 -0.024449
vn 0.983093 0.154277 0.098625
v 0.020671 0.093692 0.043308
vn 0.993049 0.114844 0.025764
v 0.025448 0.081181 0.003501
vn -0.648488 -0.092952 -0.755528
v -0.003637 -0.083586 -0.024606
vn -0.864069 -0.192231 -0.465223
v -0.016533 -0.082236 -0.005118
vn -0.608029 -0.644896 0.463045
v -0.014017 -0.100091 0.056027
vn -0.521521 -0.853230 -0.003721
v -0.016013 -0.099629 0.049301
vn -0.368533 -0.181230 -0.911778
v -0.003215 -0.087766 -0.023884
vn -0.073665 -0.683754 0.725985
v -0.012988 -0.092496 0.065712
vn 0.011174 -0.560002 0.828416
v -0.000506 -0.092945 0.065953
vn 0.126274 0.702720 0.700171
v 0.013540 0.092672 0.065688
vn 0.188125 -0.452865 0.871506
v 0.013425 -0.091927 0.065731
vn -0.808314 0.584446 0.071067
v -0.019229 0.097261 0.050588
vn 0.973712 -0.166650 -0.155286
v 0.016558 -0.085132 -0.003873
vn 0.550209 -0.821725 -0.148451
v 0.003495 -0.102716 -0.008029
vn 0.695391 0.655800 -0.293867
v 0.023869 0.090401 0.004368
vn 0.715705 0.694050 -0.077847
v 0.022708 0.093736 0.014340
vn 0.959133 0.129278 -0.251696
v 0.026034 0.075298 -0.005031
vn 0.759270 0.173190 -0.627308
v 0.024817 0.074378 -0.007156
vn -0.167286 0.065901 -0.983703
v -0.001500 -0.045870 -0.025925
vn 0.002514 0.306357 -0.951913
v -0.000834 0.080260 -0.007322
vn 0.509301 0.291573 -0.809690
v 0.022959 0.077901 -0.007399
vn -0.654527 0.356932 -0.666478
v -0.022761 0.080174 -0.006910
vn -0.178475 -0.865689 -0.467685
v 0.000032 -0.099451 -0.017161
vn -0.683925 -0.578805 0.444108
v -0.016632 -0.098554 0.054734
vn 0.741645 -0.517096 -0.427287
v 0.003602 -0.101195 -0.012628
vn 0.000150 0.718048 0.695993
v -0.001617 0.097471 0.062307
vn 0.677569 -0.001843 0.735457
v 0.015718 -0.091780 0.064913
vn -0.952337 0.144848 0.268466
v -0.018449 0.092016 0.058393
vn 0.170003 -0.335854 -0.926445
v -0.000627 -0.087975 -0.024962
vn 0.341144 -0.335379 -0.878147
v 0.003076 -0.087973 -0.023979
vn 0.024818 0.983614 -0.178571
v 0.019802 0.097011 0.020914
vn 0.001142 0.999786 0.020655
v 0.009942 0.100035 0.058341
vn 0.594010 0.799770 0.086723
v 0.017129 0.099067 0.054305
vn 0.000840 0.949453 -0.313908
v -0.000314 0.094615 0.007575
vn -0.003029 0.990453 -0.137821
v -0.000016 0.098496 0.027082
vn -0.005419 0.593018 -0.805171
v -0.000337 0.086562 -0.004163
vn 0.653047 0.564916 -0.504380
v 0.022314 0.088250 -0.001933
vn 0.494463 0.421385 -0.760224
v 0.022377 0.083355 -0.005526
vn -0.025097 0.817317 -0.575642
v -0.021325 0.090927 0.000980
vn -0.030844 0.581880 -0.812690
v -0.022733 0.085434 -0.004120
vn -0.985485 0.168940 -0.016684
v -0.024495 0.085892 -0.001833
vn 0.257921 -0.104705 -0.960476
v 0.001843 -0.084002 -0.025525
vn -0.765906 0.266721 -0.585020
v -0.024650 0.076668 -0.006932
vn 0.506756 -0.688625 0.518646
v 0.013139 -0.094063 0.064683
vn -0.125956 -0.746627 0.653210
v -0.009324 -0.099983 0.058489
vn -0.582334 0.809304 -0.076903
v -0.019067 0.097697 0.024627
vn 0.005159 0.999983 -0.002760
v -0.004494 0.100426 0.058119
vn -0.366408 0.744242 0.558434
v -0.014623 0.100168 0.055735
vn 0.264343 -0.962053 0.067644
v 0.015805 -0.099416 0.054970
vn 0.686180 0.708779 -0.163674
v 0.021343 0.094333 0.008942
vn 0.005503 0.812759 -0.582574
v -0.000173 0.090995 0.000577
vn 0.639713 0.692477 -0.333531
v 0.021483 0.091795 0.002684
vn 0.688651 0.344381 -0.638092
v 0.024515 0.081703 -0.005051
vn 0.979476 0.175128 -0.099782
v 0.024729 0.085740 -0.001232
vn -0.558170 0.808843 -0.184986
v -0.020658 0.094668 0.009538
vn -0.005270 -0.997559 0.069631
v 0.001191 -0.100301 0.058623
vn -0.010729 -0.700754 0.713322
v 0.000470 -0.096656 0.063078
vn 0.491560 0.198884 0.847829
v 0.015397 0.092906 0.064556
vn -0.384588 -0.124069 -0.914712
v -0.000868 -0.082548 -0.025870
vn -0.568318 0.757279 -0.321783
v -0.023556 0.091166 0.004608
vn -0.697565 -0.513670 0.499546
v -0.014617 -0.093442 0.064500
vn -0.982033 0.182123 0.049412
v -0.023026 0.092897 0.009877
vn -0.851741 0.522140 0.043660
v -0.021822 0.095442 0.021756
vn -0.354701 0.933343 0.055298
v -0.018193 0.099518 0.043814
vn -0.490598 0.564089 0.664166
v -0.016046 0.093209 0.063617
vn -0.759618 0.642942 0.098011
v -0.016995 0.099363 0.054115
vn 0.432199 0.100429 0.896168
v 0.016735 0.090129 0.064432
vn 0.828341 0.380745 0.410956
v 0.016735 0.090129 0.064432
vn 0.970985 0.005574 0.239075
v 0.016735 0.090129 0.064432
vn 0.958863 -0.127153 0.253797
v 0.017134 -0.089271 0.063614
vn -0.985882 -0.162415 -0.040707
v -0.017054 -0.095525 0.022121
vn -0.982228 -0.172413 0.074171
v -0.017510 -0.097908 0.051666
vn -0.995267 0.090964 -0.034182
v -0.025981 0.075770 -0.005082
vn 0.846324 -0.531424 -0.036400
v 0.017033 -0.096802 0.030322
vn 0.986263 -0.161756 -0.033459
v 0.017033 -0.096802 0.030322
vn 0.997449 -0.058259 -0.041260
v 0.031616 -0.001861 0.001180
vn 0.990739 -0.133873 0.022671
v 0.017585 -0.097407 0.051985
vn -0.983279 -0.166043 -0.074783
v -0.016804 -0.091906 0.006295
vn 0.331901 -0.943309 -0.003255
v 0.016230 -0.099538 0.051584
vn 0.284202 -0.937934 -0.198769
v -0.000017 -0.103743 -0.009199
vn -0.741676 -0.525100 -0.417356
v -0.003617 -0.101158 -0.012610
vn -0.699518 -0.697077 -0.157349
v -0.003430 -0.102598 -0.008964
vn -0.825750 0.070958 -0.559555
v -0.028011 0.041784 -0.006396
vn -0.992516 0.063319 -0.104418
v -0.028011 0.041784 -0.006396
vn -0.015727 0.060614 0.998037
v -0.000113 0.092808 0.065962
vn -0.044277 0.241169 0.969472
v -0.012567 0.093712 0.065168
vn -0.197832 0.061617 0.978297
v -0.014422 0.091276 0.065690
vn -0.973794 -0.099713 0.204406
v -0.017255 -0.090700 0.063082
vn -0.763533 -0.002405 0.645764
v -0.017255 -0.090700 0.063082
vn -0.709082 -0.372579 0.598655
v -0.015472 -0.090706 0.065190
vn -0.508783 -0.001170 0.860894
v -0.015472 -0.090706 0.065190
vn -0.575720 0.322293 0.751448
v -0.016767 0.090252 0.064332
vn -0.641796 -0.000959 0.766875
v -0.016767 0.090252 0.064332
vn 0.981555 -0.165058 -0.096461
v 0.016956 -0.091603 0.005563
vn 0.470493 -0.711825 0.521479
v 0.012506 -0.100188 0.056894
vn 0.163713 -0.985057 0.053475
v 0.012506 -0.100188 0.056894
vn -0.024274 0.999674 0.007861
v 0.015551 0.100200 0.054673
vn 0.556027 0.828444 0.067183
v 0.015551 0.100200 0.054673
vn 0.586363 0.809883 0.016361
v 0.019269 0.098494 0.044942
vn 0.507009 0.861937 0.002493
v 0.016218 0.100285 0.045870
vn 0.851811 0.071316 -0.518973
v 0.028015 0.042042 -0.006350
vn 0.627368 -0.005534 -0.778703
v 0.028015 0.042042 -0.006350
vn -0.286086 -0.763533 0.578941
v -0.014017 -0.100091 0.056027
vn -0.275214 -0.959339 0.062655
v -0.014017 -0.100091 0.056027
vn -0.693879 -0.398981 -0.599455
v -0.003215 -0.087766 -0.023884
vn -0.423756 -0.343805 0.837991
v -0.012988 -0.092496 0.065712
vn -0.081989 -0.000512 0.996633
v -0.012988 -0.092496 0.065712
vn 0.005558 0.000042 0.999985
v -0.000506 -0.092945 0.065953
vn 0.251943 0.040857 0.966879
v 0.013540 0.092672 0.065688
vn 0.178434 0.000121 0.983952
v 0.013425 -0.091927 0.065731
vn -0.873374 0.361897 0.325957
v -0.019229 0.097261 0.050588
vn -0.989214 0.098510 0.108405
v -0.019229 0.097261 0.050588
vn 0.829101 -0.287109 -0.479751
v 0.016558 -0.085132 -0.003873
vn 0.986621 0.155303 0.049593
v 0.023869 0.090401 0.004368
vn 0.977891 0.197381 0.069059
v 0.022708 0.093736 0.014340
vn 0.414197 0.061045 -0.908138
v 0.024817 0.074378 -0.007156
vn 0.100939 0.176721 -0.979072
v 0.022959 0.077901 -0.007399
vn -0.066616 0.299581 -0.951743
v -0.022761 0.080174 -0.006910
vn 0.168928 -0.868066 -0.466825
v 0.000032 -0.099451 -0.017161
vn 0.556313 -0.528433 -0.641306
v 0.000032 -0.099451 -0.017161
vn 0.216123 -0.540324 -0.813229
v 0.000032 -0.099451 -0.017161
vn -0.461822 -0.535247 -0.707270
v 0.000032 -0.099451 -0.017161
vn -0.631296 -0.771337 0.080651
v -0.016632 -0.098554 0.054734
vn -0.933840 -0.292645 0.205677
v -0.016632 -0.098554 0.054734
vn 0.264473 -0.886514 -0.379666
v 0.003602 -0.101195 -0.012628
vn 0.751353 -0.501368 0.429067
v 0.015718 -0.091780 0.064913
vn 0.325609 -0.451322 0.830836
v 0.015718 -0.091780 0.064913
vn 0.351206 0.000213 0.936298
v 0.015718 -0.091780 0.064913
vn -0.390322 -0.168870 -0.905059
v -0.000627 -0.087975 -0.024962
vn -0.360462 -0.538401 -0.761703
v -0.000627 -0.087975 -0.024962
vn 0.741267 -0.367148 -0.561894
v 0.003076 -0.087973 -0.023979
vn 0.629201 0.775556 -0.051172
v 0.019802 0.097011 0.020914
vn 0.179851 0.768733 0.613762
v 0.009942 0.100035 0.058341
vn 0.775365 0.511678 0.370128
v 0.017129 0.099067 0.054305
vn 0.026045 0.710736 -0.702976
v 0.022314 0.088250 -0.001933
vn 0.024888 0.459001 -0.888087
v 0.022377 0.083355 -0.005526
vn -0.545636 0.713279 -0.439902
v -0.021325 0.090927 0.000980
vn -0.641613 0.456542 -0.616362
v -0.022733 0.085434 -0.004120
vn -0.695297 0.488502 -0.527189
v -0.024495 0.085892 -0.001833
vn -0.360902 0.075887 -0.929511
v -0.024650 0.076668 -0.006932
vn 0.117363 -0.625703 0.771182
v 0.013139 -0.094063 0.064683
vn -0.023190 -0.997164 0.071602
v -0.009324 -0.099983 0.058489
vn -0.020714 0.986701 -0.161223
v -0.019067 0.097697 0.024627
vn -0.082998 0.801500 0.592207
v -0.004494 0.100426 0.058119
vn -0.354701 0.933343 0.055298
v -0.014623 0.100168 0.055735
vn -0.017804 0.998881 -0.043813
v -0.014623 0.100168 0.055735
vn 0.721043 -0.587637 0.367124
v 0.015805 -0.099416 0.054970
vn 0.031131 0.954674 -0.296021
v 0.021343 0.094333 0.008942
vn 0.025883 0.875345 -0.482805
v 0.021483 0.091795 0.002684
vn 0.698254 0.540799 -0.469018
v 0.024729 0.085740 -0.001232
vn -0.026317 0.954130 -0.298233
v -0.020658 0.094668 0.009538
vn 0.048532 -0.777277 0.627284
v 0.001191 -0.100301 0.058623
vn 0.586760 0.623226 0.517013
v 0.015397 0.092906 0.064556
vn 0.082706 -0.081696 -0.993220
v -0.000868 -0.082548 -0.025870
vn -0.982435 0.186030 0.014662
v -0.023556 0.091166 0.004608
vn -0.423756 -0.343805 0.837991
v -0.014617 -0.093442 0.064500
vn -0.193729 -0.744206 0.639239
v -0.014617 -0.093442 0.064500
vn -0.605755 0.781310 -0.150382
v -0.023026 0.092897 0.009877
vn -0.983514 0.166659 0.070174
v -0.021822 0.095442 0.021756
vn -0.590086 0.802621 -0.087169
v -0.021822 0.095442 0.021756
vn -0.808314 0.584446 0.071067
v -0.018193 0.099518 0.043814
vn -0.602129 0.796943 -0.048196
v -0.018193 0.099518 0.043814
vn -0.022190 0.997020 -0.073879
v -0.018193 0.099518 0.043814
vn -0.879616 0.341421 0.331222
v -0.016046 0.093209 0.063617
vn -0.354701 0.933343 0.055298
v -0.016995 0.099363 0.054115
vn -0.560810 0.668259 0.488797
v -0.016995 0.099363 0.054115
vn -0.868132 0.372525 0.327981
v -0.016995 0.099363 0.054115
# 203 vertices, 0 vertices normals
f 105//105 106//106 3//3
f 107//107 108//108 6//6
f 109//109 6//6 8//8
f 111//111 112//112 113//113
f 112//112 3//3 113//113
f 12//12 105//105 3//3
f 114//114 6//6 14//14
f 8//8 6//6 108//108
f 107//107 6//6 114//114
f 115//115 16//16 116//116
f 117//117 118//118 13//13
f 20//20 109//109 8//8
f 120//120 6//6 109//109
f 121//121 122//122 123//123
f 125//125 127//127 129//129
f 130//130 112//112 111//111
f 106//106 29//29 3//3
f 29//29 113//113 3//3
f 132//132 16//16 115//115
f 134//134 135//135 136//136
f 34//34 138//138 36//36
f 37//37 3//3 38//38
f 6//6 39//39 40//40
f 124//124 8//8 108//108
f 140//140 42//42 16//16
f 117//117 14//14 141//141
f 121//121 123//123 143//143
f 143//143 144//144 121//121
f 145//145 121//121 144//144
f 144//144 146//146 145//145
f 20//20 8//8 148//148
f 110//110 11//11 15//15
f 36//36 10//10 149//149
f 50//50 28//28 9//9
f 10//10 36//36 138//138
f 12//12 37//37 32//32
f 37//37 12//12 3//3
f 37//37 38//38 150//150
f 37//37 151//151 32//32
f 151//151 37//37 150//150
f 112//112 35//35 53//53
f 112//112 53//53 38//38
f 112//112 38//38 3//3
f 152//152 138//138 34//34
f 55//55 56//56 153//153
f 56//56 55//55 154//154
f 153//153 152//152 34//34
f 39//39 6//6 21//21
f 158//158 117//117 141//141
f 40//40 39//39 141//141
f 14//14 40//40 141//141
f 14//14 6//6 40//40
f 160//160 124//124 108//108
f 155//155 161//161 116//116
f 42//42 159//159 5//5
f 16//16 42//42 17//17
f 62//62 22//22 46//46
f 22//22 62//62 23//23
f 103//103 145//145 164//164
f 146//146 164//164 145//145
f 124//124 64//64 8//8
f 64//64 124//124 27//27
f 64//64 148//148 8//8
f 166//166 158//158 141//141
f 167//167 36//36 149//149
f 63//63 2//2 1//1
f 136//136 135//135 168//168
f 169//169 62//62 46//46
f 32//32 170//170 12//12
f 70//70 71//71 67//67
f 53//53 137//137 54//54
f 72//72 171//171 172//172
f 173//173 174//174 175//175
f 78//78 55//55 34//34
f 55//55 176//176 154//154
f 4//4 42//42 5//5
f 50//50 115//115 116//116
f 59//59 17//17 18//18
f 109//109 20//20 77//77
f 123//123 127//127 143//143
f 129//129 127//127 123//123
f 45//45 177//177 47//47
f 140//140 16//16 178//178
f 179//179 71//71 70//70
f 62//62 180//180 23//23
f 33//33 182//182 83//83
f 149//149 28//28 61//61
f 61//61 28//28 50//50
f 161//161 50//50 116//116
f 162//162 183//183 29//29
f 85//85 132//132 115//115
f 80//80 183//183 162//162
f 183//183 80//80 131//131
f 9//9 115//115 50//50
f 183//183 15//15 11//11
f 11//11 29//29 183//183
f 180//180 62//62 169//169
f 34//34 36//36 78//78
f 70//70 67//67 184//184
f 71//71 33//33 67//67
f 154//154 76//76 72//72
f 171//171 87//87 185//185
f 72//72 172//172 56//56
f 56//56 172//172 153//153
f 34//34 55//55 153//153
f 21//21 176//176 55//55
f 119//119 7//7 79//79
f 89//89 73//73 186//186
f 39//39 21//21 55//55
f 187//187 179//179 70//70
f 84//84 23//23 180//180
f 130//130 49//49 112//112
f 188//188 177//177 93//93
f 133//133 33//33 68//68
f 68//68 33//33 83//83
f 51//51 86//86 52//52
f 69//69 135//135 134//134
f 46//46 189//189 169//169
f 189//189 31//31 169//169
f 189//189 12//12 170//170
f 76//76 75//75 72//72
f 90//90 53//53 89//89
f 86//86 51//51 88//88
f 75//75 70//70 87//87
f 87//87 70//70 185//185
f 190//190 55//55 78//78
f 39//39 55//55 95//95
f 14//14 117//117 13//13
f 42//42 140//140 159//159
f 19//19 17//17 42//42
f 118//118 4//4 13//13
f 45//45 93//93 177//177
f 188//188 93//93 81//81
f 16//16 132//132 92//92
f 92//92 178//178 16//16
f 191//191 77//77 20//20
f 66//66 157//157 65//65
f 65//65 78//78 66//66
f 156//156 167//167 61//61
f 149//149 61//61 167//167
f 106//106 162//162 29//29
f 177//177 163//163 47//47
f 177//177 188//188 30//30
f 78//78 36//36 66//66
f 189//189 170//170 31//31
f 94//94 145//145 103//103
f 12//12 189//189 104//104
f 70//70 184//184 185//185
f 168//168 52//52 86//86
f 52//52 168//168 135//135
f 57//57 89//89 54//54
f 53//53 90//90 38//38
f 90//90 150//150 38//38
f 75//75 87//87 72//72
f 72//72 87//87 171//171
f 56//56 154//154 72//72
f 42//42 4//4 118//118
f 19//19 18//18 17//17
f 193//193 81//81 44//44
f 81//81 93//93 44//44
f 41//41 97//97 60//60
f 26//26 192//192 142//142
f 194//194 196//196 91//91
f 199//199 33//33 71//71
f 182//182 33//33 199//199
f 96//96 173//173 175//175
f 190//190 78//78 65//65
f 73//73 89//89 74//74
f 53//53 54//54 89//89
f 73//73 88//88 51//51
f 186//186 73//73 51//51
f 139//139 81//81 193//193
f 44//44 93//93 45//45
f 25//25 97//97 126//126
f 200//200 147//147 64//64
f 64//64 27//27 200//200
f 203//203 147//147 200//200
f 96//96 194//194 91//91
f 148//148 195//195 20//20
f 195//195 98//98 20//20
f 98//98 191//191 20//20
f 96//96 91//91 173//173
f 84//84 101//101 23//23
f 128//128 24//24 101//101
f 89//89 57//57 74//74
f 175//175 174//174 79//79
f 79//79 174//174 58//58
f 79//79 7//7 175//175
f 201//201 181//181 100//100
f 91//91 196//196 82//82
f 48//48 197//197 99//99
f 197//197 48//48 102//102
f 75//75 187//187 70//70
f 84//84 202//202 101//101
f 24//24 23//23 101//101
f 43//43 95//95 165//165
f 25//25 60//60 97//97
f 179//179 199//199 71//71
f 43//43 39//39 95//95
f 198//198 82//82 196//196
# 200 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link0.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link0.obj
#
# Vertices: 176
# Faces: 200
#
####
vn -0.117728 -0.987931 0.100655
v -0.001227 -0.094614 -0.000032
vn 0.984119 0.132513 0.118106
v 0.071081 0.008446 0.001340
vn 0.992920 -0.011621 0.118219
v 0.071567 -0.001274 0.001349
vn -0.046907 0.993841 0.100396
v -0.000517 0.094670 -0.000006
vn 0.977857 -0.172680 0.118222
v 0.070665 -0.011563 0.001333
vn -0.779928 -0.612675 0.127833
v -0.135131 -0.065871 0.007520
vn -0.000072 -0.000016 -1.000000
v -0.136305 -0.065946 0.000000
vn -0.000231 -0.000045 -1.000000
v -0.131625 -0.068799 -0.000001
vn 0.751644 -0.649285 0.116016
v 0.054335 -0.046949 0.001048
vn 0.859186 -0.497770 0.118425
v 0.061945 -0.035979 0.001181
vn 0.925321 -0.360143 0.118651
v 0.067359 -0.024527 0.001276
vn 0.952592 -0.279793 0.119514
v 0.052652 -0.016356 0.140000
vn 0.990533 0.068461 0.118984
v 0.054855 0.004472 0.140000
vn -0.756185 0.043465 0.652912
v -0.054967 0.003457 0.140000
vn 0.702363 0.700117 0.128541
v 0.039102 0.038749 0.140000
vn 0.576317 -0.803112 0.151228
v 0.007778 -0.091072 0.008462
vn -0.000017 0.000027 1.000000
v 0.039566 -0.038470 0.140003
vn -0.466638 -0.726034 0.505098
v -0.029337 -0.046645 0.140001
vn -0.013172 -0.952240 0.305067
v 0.000349 -0.055082 0.140000
vn 0.948052 0.295238 0.118458
v 0.068619 0.020818 0.001298
vn 0.885487 0.449356 0.118289
v 0.063587 0.032993 0.001210
vn 0.732752 0.670663 0.115260
v 0.052578 0.048771 0.001018
vn 0.813664 0.569181 0.118252
v 0.058590 0.041241 0.001123
vn 0.917140 0.380270 0.119370
v 0.050948 0.020789 0.140000
vn -0.346287 0.849819 0.397357
v -0.021853 0.050685 0.140000
vn -0.483525 0.718076 0.500570
v -0.031706 0.045010 0.140000
vn 0.544394 0.816821 0.190889
v 0.031716 0.045051 0.140000
vn 0.087605 0.949427 0.301518
v 0.004858 0.054958 0.140000
vn -0.152686 0.942907 0.295996
v -0.008865 0.054359 0.140002
vn 0.500663 -0.839698 0.210343
v 0.027681 -0.047680 0.140000
vn -0.753258 -0.080635 0.652764
v -0.054766 -0.005466 0.140000
vn -0.724559 -0.224563 0.651602
v -0.052884 -0.015585 0.140000
vn -0.832110 0.040062 0.553162
v -0.122615 0.005636 0.061149
vn -0.815039 -0.032718 0.578482
v -0.122711 -0.006144 0.060957
vn 0.243233 -0.925898 0.289051
v 0.014370 -0.053249 0.139999
vn -0.340814 -0.879698 0.331628
v -0.071675 -0.075621 0.057520
vn -0.570882 -0.616737 0.541968
v -0.111235 -0.047477 0.059055
vn -0.705987 -0.498339 0.503230
v -0.137824 -0.062436 0.007553
vn -0.486995 0.813670 0.317455
v -0.133699 0.066932 0.007415
vn 0.000208 -0.000064 -1.000000
v -0.135830 0.066315 0.000001
vn -0.636341 0.585146 0.502668
v -0.136293 0.064617 0.007566
vn -0.000054 0.000044 -1.000000
v -0.131612 0.068847 0.000001
vn 0.245934 0.954374 0.169371
v 0.003172 0.093350 0.008631
vn 0.047939 0.064076 -0.996793
v 0.004086 0.093982 0.000171
vn 0.857301 -0.500691 0.119759
v 0.047476 -0.027926 0.140000
vn 0.000078 0.000033 1.000000
v 0.046247 0.030033 0.140000
vn 0.000115 -0.000018 1.000000
v 0.054877 -0.004566 0.140000
vn -0.255901 0.941277 0.220254
v -0.129159 0.068684 0.007445
vn -0.662254 0.405238 0.630239
v -0.047704 0.027596 0.140000
vn -0.722987 0.229648 0.651576
v -0.052861 0.015711 0.140000
vn 0.306308 0.911200 0.275483
v 0.020020 0.051446 0.139999
vn 0.086205 0.955151 0.283292
v 0.006489 0.073519 0.081080
vn 0.539728 -0.835379 0.104091
v 0.008268 -0.091825 0.000243
vn -0.652122 -0.430067 0.624323
v -0.046437 -0.029904 0.140000
vn 0.000231 -0.000086 -1.000000
v -0.140043 0.060723 -0.000000
vn 0.041185 0.040805 -0.998318
v 0.007694 0.092272 0.000234
vn -0.080265 0.974679 0.208708
v -0.001599 0.093632 0.008492
vn 0.569445 0.808283 0.149700
v 0.007344 0.091447 0.008318
vn -0.000035 -0.000001 -1.000000
v -0.148808 -0.042055 -0.000000
vn -0.832807 -0.232699 0.502278
v -0.149244 -0.037186 0.007817
vn 0.000113 -0.000004 -1.000000
v -0.152578 -0.024818 0.000000
vn 0.366864 0.899003 0.239173
v 0.009076 0.073715 0.078455
vn -0.820400 -0.093829 0.564039
v -0.121673 -0.014737 0.061418
vn 0.093361 -0.955463 0.279952
v 0.006782 -0.073532 0.080976
vn -0.384972 -0.897709 0.214280
v -0.130951 -0.068140 0.007668
vn -0.288104 -0.854651 0.431935
v -0.018917 -0.051755 0.140000
vn -0.154500 -0.919710 0.360920
v -0.009084 -0.054297 0.140000
vn -0.146008 -0.950332 0.274864
v -0.065898 -0.076548 0.058979
vn -0.000098 -0.000042 1.000000
v -0.037696 -0.040138 0.140000
vn 0.000036 0.000004 -1.000000
v -0.143472 -0.054862 -0.000000
vn -0.790555 -0.350596 0.502101
v -0.145452 -0.048596 0.007682
vn -0.799569 -0.155463 0.580104
v -0.120300 -0.023545 0.061510
vn -0.781439 -0.232518 0.579040
v -0.118609 -0.031050 0.061340
vn -0.707667 -0.457053 0.538804
v -0.114761 -0.041966 0.060178
vn 0.000000 0.000012 -1.000000
v -0.154079 -0.005542 -0.000000
vn -0.863047 -0.070573 0.500169
v -0.152725 -0.013799 0.008191
vn -0.866349 -0.006443 0.499398
v -0.153166 -0.002036 0.008351
vn -0.760061 0.412796 0.501904
v -0.142117 0.055547 0.007628
vn 0.968415 0.219069 0.119088
v 0.053554 0.012818 0.140000
vn -0.550744 0.651880 0.521281
v -0.109983 0.048611 0.058880
vn 0.295688 -0.939169 0.174729
v 0.003669 -0.093249 0.008476
vn 0.050557 -0.073767 -0.995993
v 0.003496 -0.094216 0.000178
vn 0.356332 -0.902019 0.243699
v 0.009066 -0.073708 0.078596
vn -0.754148 -0.316244 0.575544
v -0.117004 -0.036638 0.060836
vn -0.855031 -0.131246 0.501694
v -0.151587 -0.024833 0.008048
vn -0.000048 0.000008 -1.000000
v -0.152410 0.025827 -0.000000
vn -0.000304 0.000028 -1.000000
v -0.153841 0.010576 0.000000
vn -0.856648 0.118005 0.502224
v -0.152020 0.021780 0.008110
vn -0.795108 0.117590 0.594959
v -0.121149 0.018138 0.061570
vn -0.583299 0.567637 0.580991
v -0.040085 0.037834 0.140000
vn -0.657103 0.509477 0.555561
v -0.113238 0.044715 0.059685
vn 0.002460 -0.982156 0.188053
v -0.000867 -0.093737 0.008178
vn -0.868474 -0.481890 0.116341
v -0.141842 -0.055959 0.007617
vn -0.838741 0.209660 0.502550
v -0.149634 0.035582 0.007869
vn -0.000410 0.000110 -1.000000
v -0.149290 0.040250 0.000000
vn -0.993499 0.037720 0.107407
v -0.152949 0.010069 0.008220
vn -0.000203 0.000052 -1.000000
v -0.145377 0.050892 -0.000000
vn -0.716400 0.377975 0.586435
v -0.115710 0.039594 0.060711
vn -0.043945 -0.958462 0.281815
v -0.023111 -0.075972 0.068968
vn -0.765725 0.312320 0.562247
v -0.117233 0.035881 0.060957
vn -0.811693 0.298707 0.501924
v -0.146172 0.046753 0.007704
vn -0.806487 0.206020 0.554197
v -0.119414 0.028790 0.061140
vn 0.020375 -0.009605 -0.999746
v -0.001227 -0.094614 -0.000032
vn 0.019073 0.000160 -0.999818
v 0.071081 0.008446 0.001340
vn 0.019072 -0.000072 -0.999818
v 0.071567 -0.001274 0.001349
vn 0.020532 0.010020 -0.999739
v -0.000517 0.094670 -0.000006
vn 0.019421 -0.000368 -0.999811
v 0.070665 -0.011563 0.001333
vn -0.565320 -0.740568 0.363280
v -0.135131 -0.065871 0.007520
vn -0.809434 -0.577635 0.105616
v -0.136305 -0.065946 0.000000
vn -0.518480 -0.850404 0.089395
v -0.136305 -0.065946 0.000000
vn -0.353941 -0.929933 0.099749
v -0.131625 -0.068799 -0.000001
vn 0.028122 -0.010124 -0.999553
v 0.054335 -0.046949 0.001048
vn 0.021394 -0.002356 -0.999768
v 0.061945 -0.035979 0.001181
vn 0.020106 -0.001007 -0.999797
v 0.067359 -0.024527 0.001276
vn 0.000040 -0.000004 1.000000
v 0.052652 -0.016356 0.140000
vn 0.000048 0.000003 1.000000
v 0.054855 0.004472 0.140000
vn 0.000004 0.000004 1.000000
v -0.054967 0.003457 0.140000
vn 0.000033 0.000016 1.000000
v 0.039102 0.038749 0.140000
vn 0.701326 -0.699872 0.135358
v 0.039566 -0.038470 0.140003
vn -0.000056 -0.000120 1.000000
v -0.029337 -0.046645 0.140001
vn 0.000000 -0.000087 1.000000
v 0.000349 -0.055082 0.140000
vn 0.019648 0.000737 -0.999807
v 0.068619 0.020818 0.001298
vn 0.020532 0.001624 -0.999788
v 0.063587 0.032993 0.001210
vn 0.028847 0.011071 -0.999523
v 0.052578 0.048771 0.001018
vn 0.022190 0.003421 -0.999748
v 0.058590 0.041241 0.001123
vn 0.000067 0.000026 1.000000
v 0.050948 0.020789 0.140000
vn 0.000098 -0.000509 1.000000
v -0.021853 0.050685 0.140000
vn 0.000005 -0.000000 1.000000
v -0.031706 0.045010 0.140000
vn -0.000020 0.000042 1.000000
v 0.031716 0.045051 0.140000
vn 0.000091 -0.000505 1.000000
v 0.004858 0.054958 0.140000
vn 0.000250 -0.001511 0.999999
v -0.008865 0.054359 0.140002
vn -0.000071 -0.000113 1.000000
v 0.027681 -0.047680 0.140000
vn 0.000415 0.000023 1.000000
v -0.054766 -0.005466 0.140000
vn 0.000163 -0.000005 1.000000
v -0.052884 -0.015585 0.140000
vn -0.000002 -0.000018 1.000000
v 0.014370 -0.053249 0.139999
vn -0.821523 -0.560338 0.105461
v -0.137824 -0.062436 0.007553
vn -0.663339 0.741931 0.097569
v -0.135830 0.066315 0.000001
vn -0.767047 0.630758 0.117401
v -0.136293 0.064617 0.007566
vn -0.358031 0.928249 0.100834
v -0.131612 0.068847 0.000001
vn 0.287103 0.952432 0.102200
v 0.004086 0.093982 0.000171
vn 0.000035 0.000113 1.000000
v 0.047476 -0.027926 0.140000
vn 0.822487 0.556092 0.119484
v 0.046247 0.030033 0.140000
vn 0.988784 -0.089805 0.119334
v 0.054877 -0.004566 0.140000
vn -0.000028 0.000016 1.000000
v -0.047704 0.027596 0.140000
vn -0.000041 0.000021 1.000000
v -0.052861 0.015711 0.140000
vn -0.000008 0.000031 1.000000
v 0.020020 0.051446 0.139999
vn 0.042276 -0.045370 -0.998075
v 0.008268 -0.091825 0.000243
vn -0.000067 -0.000027 1.000000
v -0.046437 -0.029904 0.140000
vn -0.836673 0.538000 0.102641
v -0.140043 0.060723 -0.000000
vn 0.517721 0.848448 0.110007
v 0.007694 0.092272 0.000234
vn -0.947369 -0.304372 0.099240
v -0.148808 -0.042055 -0.000000
vn -0.964456 -0.238446 0.113877
v -0.149244 -0.037186 0.007817
vn -0.984131 -0.145500 0.101568
v -0.152578 -0.024818 0.000000
vn -0.000039 -0.000206 1.000000
v -0.018917 -0.051755 0.140000
vn -0.000018 -0.000080 1.000000
v -0.009084 -0.054297 0.140000
vn -0.566561 -0.596228 0.568789
v -0.037696 -0.040138 0.140000
vn -0.875515 -0.473141 0.098037
v -0.143472 -0.054862 -0.000000
vn -0.918185 -0.378943 0.115496
v -0.145452 -0.048596 0.007682
vn -0.994234 -0.020667 0.105221
v -0.154079 -0.005542 -0.000000
vn -0.991144 -0.073200 0.110797
v -0.152725 -0.013799 0.008191
vn -0.993565 -0.009962 0.112824
v -0.153166 -0.002036 0.008351
vn -0.871216 0.476614 0.117566
v -0.142117 0.055547 0.007628
vn 0.000062 0.000022 1.000000
v 0.053554 0.012818 0.140000
vn 0.088955 -0.990189 0.107766
v 0.003496 -0.094216 0.000178
vn 0.444917 -0.890581 0.094414
v 0.003496 -0.094216 0.000178
vn -0.981988 -0.145423 0.120633
v -0.151587 -0.024833 0.008048
vn -0.981964 0.158508 0.103063
v -0.152410 0.025827 -0.000000
vn -0.992492 0.062456 0.105160
v -0.153841 0.010576 0.000000
vn -0.986950 0.114682 0.113036
v -0.152020 0.021780 0.008110
vn -0.000021 0.000015 1.000000
v -0.040085 0.037834 0.140000
vn -0.754939 -0.422603 0.501471
v -0.141842 -0.055959 0.007617
vn -0.967144 0.226050 0.116334
v -0.149634 0.035582 0.007869
vn -0.953495 0.283763 0.101621
v -0.149290 0.040250 0.000000
vn -0.864949 0.047019 0.499653
v -0.152949 0.010069 0.008220
vn -0.905314 0.412500 0.101243
v -0.145377 0.050892 -0.000000
vn -0.928472 0.352257 0.117709
v -0.146172 0.046753 0.007704
# 176 vertices, 0 vertices normals
f 103//103 104//104 105//105
f 106//106 104//104 103//103
f 105//105 107//107 103//103
f 108//108 110//110 111//111
f 112//112 103//103 113//113
f 103//103 114//114 113//113
f 115//115 116//116 117//117
f 116//116 118//118 117//117
f 2//2 13//13 3//3
f 16//16 9//9 119//119
f 117//117 120//120 121//121
f 122//122 104//104 106//106
f 123//123 122//122 106//106
f 124//124 125//125 106//106
f 125//125 123//123 106//106
f 103//103 107//107 114//114
f 116//116 126//126 118//118
f 20//20 21//21 24//24
f 127//127 128//128 117//117
f 118//118 129//129 117//117
f 117//117 130//130 127//127
f 131//131 127//127 130//130
f 132//132 17//17 117//117
f 133//133 134//134 117//117
f 33//33 34//34 14//14
f 14//14 34//34 31//31
f 135//135 132//132 117//117
f 121//121 135//135 117//117
f 36//36 18//18 37//37
f 109//109 6//6 136//136
f 39//39 137//137 138//138
f 139//139 137//137 39//39
f 4//4 43//43 140//140
f 17//17 141//141 117//117
f 9//9 45//45 119//119
f 10//10 45//45 9//9
f 117//117 141//141 115//115
f 11//11 45//45 10//10
f 12//12 45//45 11//11
f 21//21 23//23 142//142
f 13//13 143//143 3//3
f 115//115 47//47 116//116
f 25//25 29//29 48//48
f 117//117 144//144 145//145
f 146//146 130//130 117//117
f 129//129 146//146 117//117
f 52//52 29//29 28//28
f 112//112 147//147 103//103
f 134//134 148//148 117//117
f 149//149 138//138 137//137
f 150//150 140//140 43//43
f 106//106 44//44 56//56
f 57//57 43//43 4//4
f 52//52 43//43 57//57
f 56//56 124//124 106//106
f 150//150 58//58 22//22
f 58//58 15//15 22//22
f 151//151 152//152 153//153
f 126//126 46//46 118//118
f 24//24 21//21 142//142
f 143//143 5//5 3//3
f 5//5 12//12 11//11
f 48//48 4//4 139//139
f 4//4 48//48 57//57
f 29//29 52//52 57//57
f 39//39 26//26 25//25
f 51//51 27//27 62//62
f 9//9 16//16 53//53
f 34//34 63//63 31//31
f 35//35 19//19 64//64
f 37//37 108//108 36//36
f 111//111 65//65 108//108
f 108//108 65//65 36//36
f 120//120 154//154 121//121
f 155//155 121//121 154//154
f 66//66 68//68 67//67
f 37//37 156//156 54//54
f 157//157 158//158 151//151
f 72//72 73//73 32//32
f 54//54 74//74 37//37
f 150//150 43//43 58//58
f 159//159 160//160 161//161
f 153//153 160//160 159//159
f 162//162 138//138 149//149
f 163//163 126//126 116//116
f 24//24 79//79 20//20
f 2//2 79//79 13//13
f 20//20 79//79 2//2
f 15//15 142//142 22//22
f 22//22 142//142 23//23
f 143//143 12//12 5//5
f 25//25 48//48 39//39
f 57//57 48//48 29//29
f 39//39 80//80 26//26
f 58//58 43//43 62//62
f 58//58 62//62 27//27
f 81//81 53//53 16//16
f 81//81 165//165 53//53
f 147//147 82//82 103//103
f 16//16 83//83 81//81
f 30//30 83//83 16//16
f 36//36 66//66 18//18
f 68//68 66//66 36//36
f 111//111 36//36 65//65
f 1//1 36//36 111//111
f 68//68 36//36 1//1
f 37//37 18//18 156//156
f 69//69 120//120 117//117
f 148//148 69//69 117//117
f 71//71 74//74 84//84
f 109//109 136//136 157//157
f 151//151 158//158 152//152
f 58//58 27//27 15//15
f 153//153 152//152 166//166
f 166//166 160//160 153//153
f 167//167 168//168 169//169
f 50//50 89//89 14//14
f 39//39 48//48 139//139
f 117//117 128//128 170//170
f 39//39 41//41 80//80
f 41//41 91//91 80//80
f 52//52 62//62 43//43
f 51//51 52//52 28//28
f 62//62 52//52 51//51
f 30//30 16//16 119//119
f 64//64 83//83 35//35
f 30//30 35//35 83//83
f 68//68 1//1 92//92
f 164//164 92//92 1//1
f 74//74 71//71 171//171
f 93//93 158//158 157//157
f 108//108 37//37 74//74
f 136//136 93//93 157//157
f 84//84 54//54 32//32
f 73//73 84//84 32//32
f 167//167 172//172 173//173
f 33//33 174//174 77//77
f 159//159 96//96 168//168
f 161//161 96//96 159//159
f 168//168 96//96 169//169
f 175//175 162//162 149//149
f 170//170 144//144 117//117
f 49//49 91//91 98//98
f 90//90 91//91 49//49
f 26//26 80//80 90//90
f 91//91 90//90 80//80
f 72//72 63//63 85//85
f 64//64 81//81 83//83
f 92//92 64//64 99//99
f 171//171 38//38 74//74
f 71//71 84//84 60//60
f 60//60 84//84 73//73
f 60//60 73//73 72//72
f 33//33 77//77 34//34
f 34//34 76//76 63//63
f 98//98 91//91 78//78
f 78//78 100//100 98//98
f 175//175 176//176 162//162
f 173//173 176//176 175//175
f 63//63 72//72 31//31
f 72//72 32//32 31//31
f 68//68 92//92 99//99
f 19//19 68//68 99//99
f 67//67 68//68 19//19
f 92//92 81//81 64//64
f 92//92 164//164 81//81
f 99//99 64//64 19//19
f 84//84 74//74 54//54
f 38//38 108//108 74//74
f 63//63 76//76 85//85
f 76//76 34//34 77//77
f 85//85 60//60 72//72
f 167//167 169//169 172//172
f 78//78 101//101 100//100
f 102//102 89//89 50//50
f 33//33 14//14 89//89
f 91//91 41//41 78//78
f 173//173 172//172 176//176
f 49//49 98//98 50//50
f 100//100 50//50 98//98
f 102//102 50//50 100//100
f 88//88 174//174 33//33
f 33//33 89//89 88//88
f 101//101 102//102 100//100
f 94//94 88//88 102//102
f 89//89 102//102 88//88
f 101//101 94//94 102//102
f 106//106 103//103 86//86
f 106//106 86//86 42//42
f 103//103 8//8 86//86
f 59//59 86//86 70//70
f 75//75 86//86 61//61
f 55//55 86//86 97//97
f 55//55 40//40 86//86
f 42//42 86//86 40//40
f 8//8 7//7 86//86
f 61//61 86//86 59//59
f 97//97 86//86 95//95
f 70//70 86//86 7//7
f 87//87 86//86 75//75
# 200 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link1.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link1.obj
#
# Vertices: 198
# Faces: 300
#
####
vn 0.974346 -0.083507 0.208990
v 0.053515 -0.062246 0.012661
vn 0.923244 -0.087802 0.374047
v 0.051375 -0.063873 0.019532
vn 0.943263 -0.194031 0.269458
v 0.048278 -0.090398 0.013883
vn -0.033823 0.955562 0.292843
v -0.005730 -0.000489 0.054943
vn -0.196814 -0.085052 0.976745
v -0.008659 -0.064251 0.054435
vn 0.002006 -0.089248 0.996007
v -0.001065 -0.065471 0.054973
vn 0.000055 0.000135 -1.000000
v 0.054382 0.008925 -0.191997
vn 0.926700 0.375614 0.011840
v 0.051739 0.019267 -0.119399
vn 0.953965 0.285006 0.093389
v 0.054883 -0.000573 0.005949
vn -0.000002 -0.000001 -1.000000
v 0.023176 -0.050140 -0.192000
vn 0.287874 -0.916908 -0.276420
v 0.017859 -0.124397 -0.016615
vn -0.000001 -0.000002 -1.000000
v 0.007734 -0.054573 -0.192000
vn 0.435830 -0.088032 0.895713
v 0.024036 -0.064734 0.049546
vn 0.187145 0.942735 0.276093
v 0.032229 -0.000468 0.045079
vn 0.070970 0.954211 0.290595
v 0.012128 -0.000504 0.053903
vn -0.373634 -0.895162 -0.243070
v -0.022482 -0.123341 -0.014598
vn -0.475277 -0.834106 -0.279962
v -0.028668 -0.119668 -0.016316
vn -0.000039 -0.000010 -1.000000
v -0.026108 -0.048685 -0.192000
vn -0.298552 0.920120 0.253467
v -0.042252 -0.000480 0.035591
vn -0.495974 0.845318 0.198612
v -0.050318 -0.000497 0.022466
vn -0.780352 -0.084339 0.619627
v -0.043082 -0.063860 0.034509
vn 0.714233 -0.666682 -0.213089
v 0.042634 -0.109893 -0.012449
vn 0.565816 -0.786903 -0.246245
v 0.034727 -0.116294 -0.014648
vn 0.000017 0.000020 -1.000000
v 0.037113 -0.040731 -0.192000
vn 0.009496 0.977498 0.210732
v 0.000198 0.054921 -0.125178
vn 0.317380 0.939711 0.127332
v 0.017598 0.052188 -0.126655
vn 0.155840 0.981262 0.113309
v 0.008945 0.054262 -0.126225
vn -0.736339 -0.649587 0.189318
v -0.044899 -0.107411 0.012099
vn -0.941887 -0.190321 0.276817
v -0.049066 -0.088310 0.012652
vn -0.980109 -0.180022 0.083537
v -0.051902 -0.080543 0.005154
vn -0.703240 -0.703999 0.099192
v -0.042666 -0.111290 0.006135
vn -0.541608 -0.834007 0.105319
v -0.032844 -0.119203 0.007786
vn -0.629041 -0.735482 0.251740
v -0.038870 -0.112925 0.014468
vn 0.089441 -0.938829 -0.332568
v 0.007705 -0.125795 -0.019477
vn 0.205267 -0.117264 0.971656
v 0.009926 -0.064837 0.054230
vn -0.372538 -0.101007 0.922504
v -0.020955 -0.064622 0.050931
vn -0.275005 -0.190596 0.942362
v -0.014252 -0.084755 0.049507
vn -0.452569 -0.197632 0.869553
v -0.022960 -0.085024 0.046110
vn -0.893438 -0.120807 0.432636
v -0.049317 -0.064360 0.024332
vn -0.674856 -0.646194 0.356375
v -0.041507 -0.107025 0.021371
vn -0.137712 -0.938568 -0.316427
v -0.008485 -0.125357 -0.020504
vn 0.000002 0.000000 -1.000000
v -0.008000 -0.054700 -0.192000
vn -0.134920 0.949284 0.284001
v -0.025731 -0.000521 0.049162
vn -0.598530 0.796582 0.084963
v -0.033310 0.043874 -0.126128
vn -0.920552 0.374137 0.112274
v -0.054768 -0.000602 0.007517
vn -0.966700 -0.079023 0.243406
v -0.053198 -0.062031 0.014282
vn -0.967530 0.252621 0.008297
v -0.053405 0.013622 -0.118476
vn -0.000224 0.000092 -1.000000
v -0.054942 0.004026 -0.192000
vn -0.996263 -0.074056 0.044452
v -0.054987 -0.060276 0.002945
vn 0.835997 0.001156 0.548733
v 0.046016 -0.000517 0.030428
vn 0.945588 0.000012 0.325368
v 0.051877 -0.000502 0.018582
vn 0.495154 0.862594 0.103702
v 0.028025 0.047407 -0.126459
vn 0.000016 0.000165 -1.000000
v 0.055161 -0.003628 -0.192004
vn 0.994993 -0.079711 0.060292
v 0.054953 -0.060668 0.003564
vn 0.000005 -0.000005 -1.000000
v -0.000355 0.055192 -0.192000
vn 0.000004 -0.000005 -1.000000
v 0.012202 0.053703 -0.192000
vn 0.075980 -0.632477 0.770844
v 0.004312 -0.107445 0.046231
vn -0.103609 -0.209898 0.972218
v -0.005865 -0.092055 0.049737
vn -0.073040 -0.655362 0.751775
v -0.004323 -0.107417 0.046153
vn -0.136971 -0.952962 0.270374
v -0.008265 -0.126733 0.016201
vn -0.100850 -0.986643 0.127925
v -0.005769 -0.128742 0.007856
vn 0.071444 -0.974713 0.211732
v 0.004204 -0.127918 0.013660
vn 0.054258 -0.916144 0.397160
v 0.003928 -0.125091 0.022594
vn -0.165435 -0.882966 0.439319
v -0.011212 -0.122478 0.026151
vn -0.588393 -0.084049 0.804195
v -0.031829 -0.064068 0.045033
vn -0.471678 -0.853142 0.222864
v -0.028280 -0.120773 0.013227
vn -0.317261 -0.938290 0.137683
v -0.019273 -0.125821 0.008008
vn -0.672832 -0.737879 -0.053211
v -0.040768 -0.113565 -0.003566
vn -0.972045 -0.234440 -0.012857
v -0.046546 -0.107219 -0.000318
vn 0.000020 0.000075 -1.000000
v -0.053668 -0.013207 -0.192003
vn -0.000039 -0.000086 -1.000000
v 0.049622 -0.024777 -0.191999
vn -0.644210 -0.194546 0.739693
v -0.034037 -0.083714 0.038941
vn -0.513386 -0.856360 -0.055524
v -0.030923 -0.120931 -0.002243
vn -0.379658 -0.924946 -0.018317
v -0.022892 -0.125006 -0.000735
vn -0.567882 -0.793718 -0.217995
v -0.033893 -0.117564 -0.012558
vn -0.257759 -0.952707 -0.160966
v -0.015549 -0.126569 -0.010424
vn -0.000062 0.000036 -1.000000
v -0.052335 0.017523 -0.192000
vn -0.445237 0.888424 0.111659
v -0.025424 0.048832 -0.126658
vn 0.979315 -0.186260 0.079053
v 0.050649 -0.087687 0.003659
vn 0.000000 0.000016 -1.000000
v 0.044789 0.032345 -0.192000
vn 0.000003 0.000011 -1.000000
v 0.034292 0.043170 -0.192000
vn 0.677642 0.731870 0.071887
v 0.037478 0.040467 -0.125702
vn 0.725073 -0.687033 0.047487
v 0.046444 -0.107388 0.000104
vn 0.668478 -0.732519 0.128654
v 0.040514 -0.113037 0.008921
vn 0.625159 -0.777343 -0.070098
v 0.037484 -0.116272 -0.003615
vn 0.786859 -0.610672 -0.089068
v 0.045459 -0.108458 -0.005703
vn -0.000016 -0.000135 -1.000000
v 0.051823 0.018800 -0.192000
vn 0.822295 0.567547 0.041487
v 0.045560 0.030945 -0.123597
vn 0.298141 -0.952994 -0.053988
v 0.017871 -0.126682 -0.004769
vn 0.494516 -0.867653 0.051307
v 0.030508 -0.121220 0.003392
vn 0.360096 -0.924927 0.121826
v 0.020677 -0.125230 0.008339
vn 0.070541 -0.997285 0.021140
v 0.004878 -0.129373 0.000947
vn 0.144988 -0.976919 -0.156866
v 0.008944 -0.128164 -0.009181
vn 0.219797 -0.969960 0.104245
v 0.013466 -0.127783 0.005269
vn -0.173152 -0.984894 0.001521
v -0.011272 -0.128513 0.000250
vn 0.268660 -0.918992 0.288575
v 0.017385 -0.124411 0.017312
vn -0.054071 -0.851775 0.521111
v -0.002744 -0.120577 0.031461
vn 0.056039 -0.691089 0.720594
v 0.003266 -0.110954 0.043455
vn 0.062631 -0.810816 0.581940
v 0.003911 -0.118217 0.034982
vn 0.214942 -0.718803 0.661153
v 0.011679 -0.113173 0.039549
vn -0.137697 -0.753354 0.643037
v -0.008900 -0.113838 0.039611
vn -0.295895 -0.227819 0.927655
v -0.014551 -0.107379 0.044191
vn -0.307611 -0.710432 0.632979
v -0.018167 -0.111932 0.038370
vn -0.302324 -0.818756 0.488098
v -0.018039 -0.118665 0.029566
vn -0.467985 -0.811142 0.350770
v -0.028266 -0.118307 0.020676
vn -0.320606 -0.896898 0.304607
v -0.019234 -0.123633 0.017520
vn -0.438224 -0.734211 0.518550
v -0.025502 -0.114408 0.030829
vn -0.583846 -0.705215 0.402237
v -0.035215 -0.111623 0.024391
vn -0.703676 -0.677680 -0.213519
v -0.042379 -0.109673 -0.013965
vn 0.000173 -0.000009 -1.000000
v -0.042942 -0.035020 -0.191999
vn 0.433326 -0.855177 -0.284433
v 0.025412 -0.120945 -0.017632
vn 0.453400 -0.880500 -0.138378
v 0.026663 -0.122854 -0.007720
vn -0.402067 -0.661752 0.632793
v -0.024877 -0.107484 0.039131
vn 0.068445 -0.199557 0.977493
v 0.003794 -0.089031 0.050524
vn -0.833875 -0.532288 -0.146020
v -0.045587 -0.107758 -0.007254
vn -0.000025 0.000038 -1.000000
v -0.012079 0.053723 -0.192000
vn -0.160949 0.976845 0.140958
v -0.008857 0.054245 -0.126016
vn -0.297817 0.949008 0.103382
v -0.015560 0.052799 -0.126596
vn -0.000061 0.000090 -1.000000
v -0.021549 0.050744 -0.192000
vn 0.845680 -0.108197 0.522608
v 0.046528 -0.064680 0.029295
vn 0.876072 -0.198369 0.439486
v 0.044728 -0.091145 0.022528
vn 0.000008 -0.000014 -1.000000
v 0.022913 0.050151 -0.192000
vn 0.388383 -0.835335 0.389068
v 0.021324 -0.120405 0.023699
vn 0.478432 -0.847712 0.229102
v 0.029307 -0.120242 0.013105
vn 0.575755 -0.747349 0.331627
v 0.034472 -0.114389 0.020296
vn -0.715143 -0.221305 0.663019
v -0.033995 -0.107523 0.031677
vn 0.730994 -0.088102 0.676672
v 0.040594 -0.064406 0.037127
vn 0.776357 -0.198697 0.598156
v 0.040062 -0.090084 0.030405
vn 0.619099 -0.668295 0.412430
v 0.039319 -0.107371 0.024663
vn 0.598506 -0.089188 0.796138
v 0.032858 -0.064327 0.044151
vn 0.608073 -0.194042 0.769802
v 0.032316 -0.085449 0.039941
vn 0.393703 -0.194576 0.898409
v 0.021351 -0.084324 0.047018
vn 0.345933 -0.658527 0.668335
v 0.022662 -0.107510 0.040512
vn 0.370795 -0.707772 0.601306
v 0.021754 -0.111272 0.037267
vn 0.694022 -0.222404 0.684741
v 0.033284 -0.107291 0.032546
vn -0.000808 -0.973220 -0.229876
v 0.000052 -0.127835 -0.014335
vn -0.791734 -0.195401 0.578771
v -0.041334 -0.084538 0.030631
vn 0.000036 -0.000007 -1.000000
v -0.030773 0.045636 -0.192000
vn 0.682295 -0.676134 0.278059
v 0.042932 -0.107418 0.017665
vn 0.737837 -0.657761 0.151483
v 0.045443 -0.107338 0.009659
vn -0.013229 -0.996973 -0.076613
v -0.000252 -0.129371 -0.004151
vn 0.230590 -0.832619 0.503561
v 0.013820 -0.119368 0.030524
vn 0.365560 -0.778205 0.510650
v 0.021620 -0.116378 0.030633
vn 0.220645 -0.207023 0.953130
v 0.011304 -0.091072 0.048954
vn 0.501157 -0.723586 0.474621
v 0.030569 -0.112895 0.028145
vn 0.000133 -0.000104 -1.000000
v -0.037875 0.040031 -0.192000
vn -0.906301 0.422275 0.017393
v -0.050133 0.022744 -0.122074
vn 0.203331 -0.654952 0.727801
v 0.013692 -0.107199 0.044435
vn -0.127573 -0.979646 -0.154978
v -0.008243 -0.128335 -0.008603
vn -0.727845 0.683970 0.049260
v -0.039695 0.038136 -0.125178
vn -0.000002 0.000016 -1.000000
v -0.045885 0.030551 -0.192000
vn -0.825236 0.563377 0.039891
v -0.045798 0.030584 -0.123480
vn -0.097964 0.001709 0.995189
v -0.005730 -0.000489 0.054943
vn 0.985164 0.171602 0.002368
v 0.054382 0.008925 -0.191997
vn 0.412515 -0.841612 -0.348597
v 0.023176 -0.050140 -0.192000
vn 0.165195 -0.911440 -0.376813
v 0.007734 -0.054573 -0.192000
vn 0.588378 0.002799 0.808581
v 0.032229 -0.000468 0.045079
vn 0.213191 0.003498 0.977004
v 0.012128 -0.000504 0.053903
vn -0.464623 -0.818035 -0.339035
v -0.026108 -0.048685 -0.192000
vn -0.730791 0.003171 0.682594
v -0.042252 -0.000480 0.035591
vn -0.904992 0.001735 0.425425
v -0.050318 -0.000497 0.022466
vn 0.651709 -0.699798 -0.292504
v 0.037113 -0.040731 -0.192000
vn -0.954676 -0.215950 0.204842
v -0.044899 -0.107411 0.012099
vn -0.872656 -0.205837 0.442835
v -0.041507 -0.107025 0.021371
vn -0.143812 -0.914689 -0.377705
v -0.008000 -0.054700 -0.192000
vn -0.422056 0.002693 0.906566
v -0.025731 -0.000521 0.049162
vn -0.998024 0.062540 -0.006024
v -0.054942 0.004026 -0.192000
vn 0.373605 0.897479 0.234416
v 0.046016 -0.000517 0.030428
vn 0.554308 0.812709 0.179573
v 0.051877 -0.000502 0.018582
vn 0.993164 -0.109702 -0.039893
v 0.055161 -0.003628 -0.192004
vn -0.001454 0.999999 0.000929
v -0.000355 0.055192 -0.192000
vn 0.222660 0.974896 -0.001111
v 0.012202 0.053703 -0.192000
vn 0.078473 -0.229768 0.970077
v 0.004312 -0.107445 0.046231
vn -0.096962 -0.235372 0.967057
v -0.004323 -0.107417 0.046153
vn -0.761703 -0.647639 0.019303
v -0.046546 -0.107219 -0.000318
vn -0.969392 -0.230724 -0.083936
v -0.053668 -0.013207 -0.192003
vn 0.887546 -0.427097 -0.172772
v 0.049622 -0.024777 -0.191999
vn -0.945330 0.326112 -0.001625
v -0.052335 0.017523 -0.192000
vn 0.819640 0.572879 -0.000953
v 0.044789 0.032345 -0.192000
vn 0.614146 0.789189 -0.002273
v 0.034292 0.043170 -0.192000
vn 0.969469 -0.241883 -0.040266
v 0.046444 -0.107388 0.000104
vn 0.933664 0.358149 -0.001229
v 0.051823 0.018800 -0.192000
vn -0.239464 -0.659872 0.712198
v -0.014551 -0.107379 0.044191
vn -0.739274 -0.621305 -0.259720
v -0.042942 -0.035020 -0.191999
vn -0.532278 -0.224715 0.816201
v -0.024877 -0.107484 0.039131
vn -0.212453 0.977171 -0.000569
v -0.012079 0.053723 -0.192000
vn -0.387209 0.921992 -0.000200
v -0.021549 0.050744 -0.192000
vn 0.419991 0.907528 -0.001191
v 0.022913 0.050151 -0.192000
vn -0.554467 -0.658650 0.508671
v -0.033995 -0.107523 0.031677
vn 0.823721 -0.223041 0.521284
v 0.039319 -0.107371 0.024663
vn 0.497534 -0.224441 0.837906
v 0.022662 -0.107510 0.040512
vn 0.513508 -0.658371 0.550324
v 0.033284 -0.107291 0.032546
vn -0.546617 0.837382 -0.001280
v -0.030773 0.045636 -0.192000
vn 0.904017 -0.221881 0.365406
v 0.042932 -0.107418 0.017665
vn 0.957334 -0.219633 0.187808
v 0.045443 -0.107338 0.009659
vn -0.686251 0.727364 -0.000827
v -0.037875 0.040031 -0.192000
vn 0.298379 -0.227420 0.926957
v 0.013692 -0.107199 0.044435
vn -0.832836 0.553518 -0.001473
v -0.045885 0.030551 -0.192000
# 198 vertices, 0 vertices normals
f 1//1 2//2 3//3
f 153//153 5//5 6//6
f 154//154 8//8 9//9
f 155//155 11//11 156//156
f 13//13 157//157 158//158
f 16//16 17//17 159//159
f 160//160 161//161 21//21
f 22//22 23//23 162//162
f 25//25 15//15 14//14
f 26//26 27//27 14//14
f 163//163 29//29 30//30
f 31//31 32//32 33//33
f 11//11 34//34 156//156
f 35//35 13//13 158//158
f 36//36 37//37 5//5
f 38//38 37//37 36//36
f 161//161 39//39 21//21
f 164//164 29//29 163//163
f 34//34 41//41 165//165
f 34//34 165//165 156//156
f 16//16 159//159 165//165
f 41//41 16//16 165//165
f 166//166 5//5 153//153
f 166//166 36//36 5//5
f 4//4 15//15 25//25
f 20//20 44//44 45//45
f 45//45 46//46 161//161
f 47//47 167//167 45//45
f 49//49 45//45 167//167
f 168//168 169//169 52//52
f 170//170 9//9 54//54
f 27//27 25//25 14//14
f 170//170 154//154 9//9
f 27//27 171//171 25//25
f 27//27 26//26 172//172
f 173//173 58//58 174//174
f 60//60 61//61 62//62
f 63//63 64//64 60//60
f 160//160 65//65 166//166
f 65//65 160//160 21//21
f 32//32 66//66 33//33
f 67//67 66//66 32//32
f 68//68 31//31 175//175
f 30//30 176//176 69//69
f 23//23 155//155 162//162
f 22//22 162//162 177//177
f 6//6 5//5 58//58
f 58//58 5//5 37//37
f 176//176 49//49 167//167
f 72//72 65//65 21//21
f 73//73 16//16 74//74
f 73//73 74//74 32//32
f 16//16 75//75 17//17
f 16//16 41//41 76//76
f 178//178 167//167 47//47
f 44//44 20//20 78//78
f 170//170 54//54 79//79
f 179//179 180//180 82//82
f 181//181 177//177 170//170
f 84//84 85//85 86//86
f 1//1 3//3 79//79
f 182//182 8//8 154//154
f 82//82 9//9 88//88
f 82//82 180//180 52//52
f 89//89 90//90 91//91
f 92//92 93//93 89//89
f 92//92 89//89 94//94
f 95//95 92//92 61//61
f 61//61 92//92 62//62
f 94//94 96//96 62//62
f 63//63 62//62 96//96
f 97//97 64//64 63//63
f 98//98 99//99 100//100
f 101//101 183//183 103//103
f 97//97 63//63 99//99
f 64//64 101//101 104//104
f 97//97 101//101 64//64
f 104//104 105//105 106//106
f 104//104 107//107 105//105
f 105//105 108//108 33//33
f 105//105 33//33 66//66
f 106//106 64//64 104//104
f 105//105 66//66 106//106
f 106//106 66//66 67//67
f 69//69 163//163 30//30
f 109//109 184//184 75//75
f 11//11 155//155 111//111
f 86//86 22//22 177//177
f 11//11 112//112 89//89
f 185//185 102//102 38//38
f 37//37 38//38 102//102
f 65//65 38//38 36//36
f 65//65 36//36 166//166
f 114//114 6//6 58//58
f 45//45 49//49 46//46
f 39//39 161//161 46//46
f 61//61 60//60 67//67
f 95//95 61//61 67//67
f 95//95 67//67 74//74
f 115//115 176//176 184//184
f 171//171 186//186 117//117
f 25//25 43//43 4//4
f 117//117 43//43 25//25
f 117//117 19//19 43//43
f 78//78 118//118 187//187
f 179//179 8//8 182//182
f 8//8 88//88 9//9
f 2//2 51//51 50//50
f 120//120 121//121 2//2
f 181//181 170//170 79//79
f 84//84 86//86 83//83
f 22//22 86//86 85//85
f 22//22 85//85 23//23
f 90//90 85//85 84//84
f 88//88 179//179 82//82
f 188//188 26//26 52//52
f 26//26 168//168 52//52
f 188//188 172//172 26//26
f 171//171 27//27 172//172
f 94//94 89//89 91//91
f 96//96 94//94 91//91
f 123//123 124//124 125//125
f 103//103 104//104 101//101
f 103//103 113//113 107//107
f 113//113 189//189 107//107
f 58//58 102//102 174//174
f 57//57 59//59 98//98
f 58//58 173//173 114//114
f 101//101 99//99 98//98
f 107//107 104//104 103//103
f 60//60 62//62 63//63
f 33//33 28//28 31//31
f 75//75 159//159 17//17
f 75//75 184//184 159//159
f 68//68 32//32 31//31
f 111//111 155//155 23//23
f 127//127 120//120 50//50
f 127//127 50//50 157//157
f 128//128 190//190 121//121
f 6//6 158//158 153//153
f 6//6 35//35 158//158
f 35//35 6//6 114//114
f 13//13 130//130 157//157
f 131//131 132//132 191//191
f 134//134 192//192 133//133
f 46//46 49//49 30//30
f 30//30 49//49 176//176
f 189//189 108//108 107//107
f 136//136 41//41 34//34
f 74//74 67//67 32//32
f 106//106 60//60 64//64
f 75//75 16//16 73//73
f 109//109 115//115 184//184
f 115//115 69//69 176//176
f 115//115 109//109 68//68
f 137//137 72//72 21//21
f 25//25 171//171 117//117
f 118//118 117//117 186//186
f 19//19 117//117 118//118
f 78//78 193//193 44//44
f 78//78 19//19 118//118
f 20//20 19//19 78//78
f 120//120 2//2 50//50
f 3//3 121//121 194//194
f 2//2 121//121 3//3
f 195//195 79//79 3//3
f 82//82 169//169 9//9
f 181//181 86//86 177//177
f 1//1 79//79 54//54
f 195//195 181//181 79//79
f 83//83 140//140 84//84
f 180//180 188//188 52//52
f 169//169 82//82 52//52
f 62//62 92//92 94//94
f 92//92 141//141 93//93
f 96//96 124//124 123//123
f 99//99 63//63 142//142
f 113//113 103//103 183//183
f 142//142 143//143 134//134
f 134//134 100//100 142//142
f 114//114 173//173 144//144
f 101//101 59//59 183//183
f 97//97 99//99 101//101
f 126//126 185//185 72//72
f 108//108 105//105 107//107
f 40//40 33//33 108//108
f 33//33 40//40 28//28
f 31//31 28//28 175//175
f 175//175 115//115 68//68
f 75//75 68//68 109//109
f 90//90 124//124 91//91
f 127//127 131//131 128//128
f 131//131 135//135 128//128
f 100//100 134//134 133//133
f 131//131 130//130 13//13
f 130//130 127//127 157//157
f 123//123 125//125 145//145
f 123//123 145//145 143//143
f 134//134 145//145 192//192
f 58//58 37//37 102//102
f 72//72 38//38 65//65
f 29//29 164//164 39//39
f 39//39 46//46 29//29
f 137//137 39//39 164//164
f 137//137 126//126 72//72
f 46//46 30//30 29//29
f 136//136 34//34 93//93
f 76//76 95//95 74//74
f 106//106 67//67 60//60
f 193//193 196//196 44//44
f 147//147 47//47 45//45
f 118//118 186//186 187//187
f 179//179 88//88 8//8
f 3//3 194//194 195//195
f 125//125 84//84 139//139
f 129//129 125//125 139//139
f 26//26 14//14 168//168
f 96//96 91//91 124//124
f 142//142 96//96 123//123
f 100//100 99//99 142//142
f 72//72 185//185 38//38
f 143//143 145//145 134//134
f 142//142 123//123 143//143
f 144//144 173//173 197//197
f 101//101 98//98 59//59
f 189//189 40//40 108//108
f 73//73 68//68 75//75
f 73//73 32//32 68//68
f 11//11 111//111 112//112
f 90//90 112//112 85//85
f 112//112 90//90 89//89
f 112//112 111//111 23//23
f 124//124 84//84 125//125
f 127//127 128//128 120//120
f 190//190 128//128 135//135
f 13//13 132//132 131//131
f 130//130 131//131 127//127
f 131//131 191//191 135//135
f 137//137 21//21 39//39
f 41//41 149//149 76//76
f 74//74 16//16 76//76
f 187//187 193//193 78//78
f 150//150 198//198 152//152
f 152//152 147//147 45//45
f 140//140 139//139 84//84
f 1//1 54//54 9//9
f 141//141 92//92 95//95
f 76//76 149//149 95//95
f 136//136 93//93 141//141
f 132//132 13//13 35//35
f 148//148 98//98 100//100
f 148//148 57//57 98//98
f 164//164 126//126 137//137
f 112//112 23//23 85//85
f 90//90 84//84 124//124
f 197//197 191//191 132//132
f 144//144 197//197 132//132
f 136//136 149//149 41//41
f 93//93 11//11 89//89
f 11//11 93//93 34//34
f 44//44 196//196 150//150
f 44//44 150//150 45//45
f 196//196 198//198 150//150
f 45//45 150//150 152//152
f 147//147 198//198 178//178
f 190//190 194//194 121//121
f 128//128 121//121 120//120
f 145//145 125//125 129//129
f 129//129 192//192 145//145
f 1//1 9//9 51//51
f 51//51 2//2 1//1
f 95//95 149//149 141//141
f 142//142 63//63 96//96
f 100//100 133//133 148//148
f 132//132 35//35 144//144
f 178//178 47//47 147//147
f 136//136 141//141 149//149
f 144//144 35//35 114//114
f 147//147 152//152 198//198
f 71//71 24//24 151//151
f 151//151 56//56 122//122
f 12//12 42//42 151//151
f 7//7 53//53 151//151
f 18//18 110//110 151//151
f 48//48 77//77 151//151
f 151//151 24//24 10//10
f 42//42 18//18 151//151
f 146//146 138//138 151//151
f 151//151 80//80 87//87
f 81//81 80//80 151//151
f 53//53 71//71 151//151
f 151//151 10//10 12//12
f 151//151 110//110 70//70
f 151//151 55//55 56//56
f 119//119 116//116 151//151
f 151//151 87//87 7//7
f 116//116 55//55 151//151
f 122//122 81//81 151//151
f 70//70 48//48 151//151
f 151//151 138//138 119//119
# 300 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link2.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link2.obj
#
# Vertices: 200
# Faces: 300
#
####
vn 0.934817 0.144693 -0.324318
v 0.054780 0.008755 0.000695
vn 0.996896 0.019111 0.076374
v 0.054985 0.001797 0.060077
vn -0.001055 -0.999999 0.000048
v 0.054936 -0.194003 -0.005000
vn 0.977808 0.179223 0.108496
v 0.054135 0.009444 0.062822
vn 0.559319 0.093316 -0.823683
v 0.031051 -0.126082 -0.045501
vn 0.867943 0.496658 -0.002266
v 0.047601 0.028033 0.000490
vn 0.917686 0.388476 0.083302
v 0.050244 0.022674 0.063238
vn 0.378514 0.121223 -0.917623
v 0.021205 -0.126588 -0.050810
vn 0.731961 0.048994 -0.679582
v 0.039946 -0.124494 -0.037926
vn 0.876636 0.024422 -0.480534
v 0.048413 -0.123261 -0.026532
vn -0.000068 -1.000000 -0.000031
v -0.051883 -0.194000 -0.018395
vn -0.901044 0.019871 -0.433271
v -0.050014 -0.121697 -0.023261
vn -0.000081 -1.000000 -0.000036
v -0.046670 -0.194000 -0.029425
vn -0.343159 0.242370 -0.907468
v -0.043963 0.033295 0.000490
vn -0.646487 0.756815 0.096359
v -0.036151 0.041648 0.064481
vn -0.186554 0.276602 -0.942703
v -0.032099 0.045000 0.000508
vn -0.258899 -0.307815 0.915544
v -0.015237 -0.017193 0.125084
vn 0.000000 -1.000000 -0.000001
v -0.023760 -0.194000 0.049712
vn -0.000001 -1.000000 0.000002
v -0.010578 -0.194000 0.054149
vn -0.424653 -0.256228 0.868342
v -0.025466 -0.016198 0.121439
vn 0.515950 -0.265794 0.814340
v 0.030702 -0.016091 0.118495
vn 0.000001 -1.000000 0.000002
v 0.021837 -0.194000 0.050687
vn 0.000016 -1.000000 0.000006
v 0.036953 -0.194000 0.041087
vn 0.311780 0.946336 0.085097
v 0.016094 0.052763 0.064144
vn 0.162844 0.280536 -0.945929
v 0.028599 0.047274 0.000500
vn 0.075523 0.290807 -0.953796
v 0.013564 0.053444 0.000497
vn 0.505148 0.855689 0.112346
v 0.028720 0.047023 0.064773
vn 0.081741 0.166497 -0.982648
v 0.003512 -0.125580 -0.054882
vn 0.220851 0.163942 -0.961430
v 0.011452 -0.126129 -0.053787
vn -0.281740 0.132331 -0.950322
v -0.013871 -0.126413 -0.053340
vn 0.720440 0.693517 -0.000673
v 0.039076 0.038788 0.000497
vn -0.744145 -0.195533 0.638760
v -0.043936 -0.011797 0.108632
vn -0.879544 -0.062706 0.471668
v -0.046228 -0.003653 0.107627
vn 0.001664 -0.999999 -0.000265
v -0.048742 -0.193999 0.025965
vn -0.948981 0.101759 -0.298463
v -0.054829 0.006423 0.000592
vn -0.965025 0.007702 -0.262043
v -0.053447 -0.118112 -0.013166
vn 0.003431 -0.999994 -0.000564
v -0.055153 -0.194010 0.005101
vn 0.000394 -1.000000 -0.000074
v -0.054520 -0.194000 -0.008187
vn -0.635422 0.076150 -0.768401
v -0.035829 -0.125777 -0.041827
vn -0.912260 0.409612 -0.000690
v -0.051180 0.020557 0.000499
vn -0.091068 0.166564 -0.981816
v -0.003430 -0.125759 -0.054876
vn -0.302043 0.953290 -0.002842
v -0.017912 0.052124 0.000504
vn -0.394223 0.913713 0.098574
v -0.021417 0.050906 0.064564
vn -0.143400 0.985987 0.085246
v -0.007769 0.054505 0.064503
vn -0.011609 0.293075 -0.956019
v -0.002460 0.055220 0.000493
vn -0.940920 0.330319 0.074553
v -0.051227 0.020371 0.062750
vn 0.962094 0.009242 -0.272563
v 0.053404 -0.118713 -0.013523
vn -0.003430 -0.139739 0.990183
v 0.000752 -0.007417 0.129075
vn -0.066508 -0.294009 0.953486
v -0.003484 -0.016731 0.127099
vn 0.112521 -0.284582 0.952025
v 0.006265 -0.018241 0.126383
vn -0.000001 -1.000000 0.000002
v 0.005598 -0.194000 0.054903
vn 0.635017 -0.238495 0.734761
v 0.037916 -0.014736 0.113617
vn 0.896075 -0.074842 0.437547
v 0.046282 -0.003001 0.107483
vn -0.000035 -1.000000 0.000004
v 0.047780 -0.194000 0.027475
vn -0.000577 -1.000000 0.000023
v 0.053431 -0.194000 0.013614
vn 0.764339 -0.198313 0.613561
v 0.044607 -0.011733 0.107859
vn -0.157191 -0.004634 0.987557
v -0.010045 -0.001108 0.128719
vn -0.097602 0.120179 0.987943
v -0.006886 0.007743 0.128603
vn -0.258431 0.178129 0.949465
v -0.015039 0.011399 0.126577
vn -0.589947 -0.249331 0.767982
v -0.036657 -0.015210 0.114621
vn 0.806777 0.584361 0.087362
v 0.044597 0.032246 0.063990
vn 0.983044 0.032342 0.180493
v 0.051786 0.001630 0.081572
vn 0.930309 0.318781 0.181396
v 0.049448 0.017366 0.079018
vn -0.000015 -1.000000 -0.000002
v 0.028294 -0.194000 -0.047250
vn 0.000036 -1.000000 -0.000028
v 0.045818 -0.194000 -0.030588
vn -0.000017 -1.000000 0.000008
v 0.037325 -0.194000 -0.040575
vn -0.982552 0.039864 0.181667
v -0.051781 0.002211 0.081707
vn -0.990361 0.108813 0.085706
v -0.054916 0.004632 0.061059
vn -0.000050 -1.000000 0.000015
v -0.037430 -0.194000 0.040666
vn -0.464843 0.128921 -0.875957
v -0.027680 -0.126212 -0.047668
vn -0.829950 0.551902 0.081164
v -0.045213 0.031449 0.063457
vn -0.746271 0.637099 0.192830
v -0.039594 0.033347 0.083142
vn -0.182768 0.963795 0.194150
v -0.008551 0.050903 0.084596
vn -0.371782 0.905374 0.205127
v -0.019788 0.047468 0.085111
vn -0.165963 0.750193 0.640052
v -0.013023 0.044806 0.107063
vn -0.498709 0.846546 0.186145
v -0.025218 0.044866 0.084745
vn -0.608669 0.768059 0.199015
v -0.031319 0.040953 0.083982
vn 0.085210 0.992740 0.084891
v 0.003379 0.055008 0.064440
vn -0.000074 -1.000000 -0.000000
v 0.051759 -0.194000 -0.019092
vn 0.317190 -0.277447 0.906870
v 0.019051 -0.017229 0.123856
vn -0.250973 -0.153210 0.955792
v -0.014125 -0.009581 0.127168
vn 0.501226 -0.141433 0.853680
v 0.029822 -0.008664 0.120929
vn 0.402171 -0.055723 0.913867
v 0.024075 -0.004086 0.124500
vn 0.067224 0.021343 0.997510
v 0.003973 0.000518 0.129489
vn -0.352794 -0.009424 0.935653
v -0.020886 -0.000462 0.125820
vn 0.000002 -1.000000 -0.000016
v -0.012976 -0.194000 -0.053589
vn -0.000008 -1.000000 0.000007
v -0.000043 -0.194000 -0.055097
vn 0.661539 0.741942 0.109037
v 0.036488 0.041135 0.065520
vn -0.779164 0.040237 -0.625527
v -0.043060 -0.123826 -0.034323
vn 0.146528 0.197508 0.969288
v 0.009017 0.012684 0.127561
vn 0.028506 0.180192 0.983218
v 0.002612 0.008569 0.128877
vn 0.200098 -0.128818 0.971271
v 0.011859 -0.008311 0.127792
vn 0.236309 0.324022 0.916061
v 0.013767 0.020453 0.124378
vn 0.275939 0.084217 0.957479
v 0.017617 0.004251 0.126807
vn 0.422726 0.155170 0.892875
v 0.026031 0.009702 0.122739
vn 0.967180 0.129145 0.218825
v 0.045935 0.006738 0.107678
vn 0.656095 -0.100329 0.747980
v 0.039298 -0.005929 0.114605
vn 0.591742 0.061261 0.803796
v 0.036384 0.003278 0.117268
vn -0.420206 0.155161 0.894065
v -0.025557 0.007950 0.123264
vn -0.384086 0.363814 0.848597
v -0.023691 0.021526 0.120405
vn -0.529856 0.241613 0.812943
v -0.032303 0.015809 0.117600
vn -0.086120 0.267308 0.959755
v -0.004348 0.017106 0.126883
vn -0.210619 0.345831 0.914353
v -0.014422 0.019931 0.124302
vn 0.958561 0.203307 0.199566
v 0.048610 0.010152 0.093321
vn -0.970457 0.134101 0.200574
v -0.046252 0.006992 0.106752
vn -0.708271 0.120103 0.695649
v -0.042764 0.005394 0.111331
vn -0.484028 -0.000616 -0.875052
v -0.026749 -0.194000 -0.048290
vn 0.247416 -0.001333 -0.968908
v 0.016019 -0.194000 -0.052881
vn -0.957475 0.231424 0.172295
v -0.051425 0.013273 0.074757
vn -0.875428 0.443497 0.192188
v -0.046531 0.023048 0.082205
vn -0.591036 0.446686 0.671675
v -0.037476 0.027545 0.107331
vn -0.675851 0.265921 0.687395
v -0.042532 0.018274 0.107673
vn -0.440618 0.542155 0.715489
v -0.026673 0.032484 0.112352
vn -0.662968 0.716826 0.215948
v -0.031162 0.034397 0.107352
vn 0.026125 0.979845 0.198043
v 0.001970 0.051202 0.086691
vn -0.707800 0.192533 0.679669
v -0.044065 0.015443 0.107130
vn -0.000823 0.367920 0.929857
v 0.000310 0.023519 0.124821
vn 0.538123 0.248605 0.805369
v 0.033109 0.013721 0.117691
vn -0.509596 0.045782 0.859195
v -0.030280 0.002256 0.121284
vn -0.604844 0.124086 0.786617
v -0.036204 0.007314 0.116785
vn -0.485004 -0.133860 0.864206
v -0.031353 -0.008962 0.119999
vn -0.000055 -1.000000 -0.000020
v -0.038120 -0.194000 -0.039784
vn 0.854710 0.479755 0.198256
v 0.043851 0.023960 0.091848
vn 0.758174 0.622240 0.194909
v 0.039956 0.032570 0.084039
vn -0.270535 0.652233 0.708099
v -0.017877 0.042608 0.107975
vn -0.118476 0.718694 0.685159
v -0.005822 0.043059 0.110978
vn -0.142332 0.618105 0.773103
v -0.009527 0.037623 0.115319
vn -0.302331 0.546510 0.780976
v -0.017156 0.032361 0.117111
vn -0.502547 0.836299 0.219205
v -0.024455 0.039499 0.107471
vn -0.642219 0.280781 0.713244
v -0.038761 0.016625 0.112248
vn -0.537619 0.413210 0.734999
v -0.032079 0.025715 0.113308
vn 0.288470 0.487416 0.824142
v 0.016992 0.028742 0.119516
vn 0.056291 0.535203 0.842846
v 0.003126 0.032569 0.119968
vn -0.054725 0.971776 0.229470
v -0.002764 0.046319 0.107409
vn 0.211944 0.958206 0.192149
v 0.011449 0.050063 0.085647
vn 0.903119 0.366584 0.223589
v 0.042468 0.018754 0.107658
vn 0.788806 0.572616 0.223375
v 0.036581 0.028501 0.107512
vn 0.572352 0.384651 0.724194
v 0.034152 0.022474 0.113524
vn -0.639978 -0.056286 0.766329
v -0.037452 -0.003133 0.116357
vn 0.034023 0.684671 0.728058
v 0.002943 0.040497 0.113812
vn -0.180241 0.476216 0.860658
v -0.011792 0.028698 0.120959
vn 0.205444 0.650778 0.730945
v 0.012030 0.039453 0.113150
vn 0.337729 0.622681 0.705839
v 0.020436 0.037216 0.111937
vn 0.199838 0.952814 0.228495
v 0.008742 0.045676 0.107309
vn 0.456271 0.396008 0.796866
v 0.027754 0.025289 0.116309
vn 0.401737 0.321285 0.857545
v 0.024247 0.019117 0.120984
vn 0.654906 0.229453 0.720035
v 0.039396 0.015644 0.111980
vn 0.381994 0.901590 0.203017
v 0.020000 0.046744 0.088105
vn 0.429953 0.623218 0.653253
v 0.026041 0.038696 0.106945
vn 0.387604 0.894372 0.223299
v 0.019662 0.042100 0.107295
vn 0.455155 0.526189 0.718303
v 0.024906 0.031369 0.114376
vn 0.496514 0.551960 0.669935
v 0.031728 0.034030 0.107127
vn 0.997491 -0.006691 -0.070476
v 0.054936 -0.194003 -0.005000
vn 0.436257 0.217286 -0.873193
v 0.047601 0.028033 0.000490
vn -0.942430 -0.001792 -0.334399
v -0.051883 -0.194000 -0.018395
vn -0.844814 -0.001279 -0.535058
v -0.046670 -0.194000 -0.029425
vn -0.778791 0.627281 -0.001802
v -0.043963 0.033295 0.000490
vn -0.565893 0.824478 -0.001367
v -0.032099 0.045000 0.000508
vn -0.421658 -0.343535 0.839159
v -0.023760 -0.194000 0.049712
vn -0.161947 -0.373033 0.913575
v -0.010578 -0.194000 0.054149
vn 0.389599 -0.349015 0.852292
v 0.021837 -0.194000 0.050687
vn 0.637860 -0.293633 0.711979
v 0.036953 -0.194000 0.041087
vn 0.510970 0.859598 -0.000862
v 0.028599 0.047274 0.000500
vn 0.222832 0.974853 -0.002799
v 0.013564 0.053444 0.000497
vn 0.276160 0.258872 -0.925592
v 0.039076 0.038788 0.000497
vn -0.871799 -0.184651 0.453729
v -0.048742 -0.193999 0.025965
vn -0.992112 -0.042402 0.117967
v -0.055153 -0.194010 0.005101
vn -0.989126 0.000845 -0.147067
v -0.054520 -0.194000 -0.008187
vn -0.534336 0.186557 -0.824428
v -0.051180 0.020557 0.000499
vn -0.101070 0.288225 -0.952214
v -0.017912 0.052124 0.000504
vn -0.044137 0.999024 -0.001572
v -0.002460 0.055220 0.000493
vn 0.102868 -0.376110 0.920847
v 0.005598 -0.194000 0.054903
vn 0.867805 -0.187928 0.459997
v 0.047780 -0.194000 0.027475
vn 0.977079 -0.070305 0.200933
v 0.053431 -0.194000 0.013614
vn 0.497111 -0.001399 -0.867686
v 0.028294 -0.194000 -0.047250
vn 0.821270 -0.001857 -0.570536
v 0.045818 -0.194000 -0.030588
vn 0.671126 -0.000966 -0.741343
v 0.037325 -0.194000 -0.040575
vn -0.664162 -0.285237 0.691035
v -0.037430 -0.194000 0.040666
vn -0.266092 0.938799 0.218749
v -0.013023 0.044806 0.107063
vn 0.937390 -0.001696 -0.348277
v 0.051759 -0.194000 -0.019092
vn -0.208151 -0.000721 -0.978097
v -0.012976 -0.194000 -0.053589
vn 0.006673 -0.001121 -0.999977
v -0.000043 -0.194000 -0.055097
vn 0.705517 0.096288 0.702122
v 0.045935 0.006738 0.107678
vn -0.772213 0.108223 0.626079
v -0.046252 0.006992 0.106752
vn 0.000002 -1.000000 -0.000015
v -0.026749 -0.194000 -0.048290
vn 0.000022 -1.000000 -0.000029
v 0.016019 -0.194000 -0.052881
vn -0.800774 0.558787 0.215681
v -0.037476 0.027545 0.107331
vn -0.864022 0.452595 0.220508
v -0.042532 0.018274 0.107673
vn -0.506029 0.549825 0.664551
v -0.031162 0.034397 0.107352
vn -0.921441 0.330969 0.203486
v -0.044065 0.015443 0.107130
vn -0.700073 -0.001758 -0.714069
v -0.038120 -0.194000 -0.039784
vn -0.399039 0.889548 0.222426
v -0.017877 0.042608 0.107975
vn -0.405888 0.605023 0.684983
v -0.024455 0.039499 0.107471
vn -0.030127 0.764751 0.643621
v -0.002764 0.046319 0.107409
vn 0.669022 0.314296 0.673518
v 0.042468 0.018754 0.107658
vn 0.566754 0.464197 0.680669
v 0.036581 0.028501 0.107512
vn 0.140395 0.737005 0.661145
v 0.008742 0.045676 0.107309
vn 0.543997 0.814333 0.202312
v 0.026041 0.038696 0.106945
vn 0.303817 0.694800 0.651880
v 0.019662 0.042100 0.107295
vn 0.676315 0.707269 0.205837
v 0.031728 0.034030 0.107127
# 200 vertices, 0 vertices normals
f 1//1 2//2 153//153
f 1//1 4//4 2//2
f 5//5 154//154 1//1
f 6//6 7//7 1//1
f 5//5 8//8 154//154
f 9//9 1//1 10//10
f 155//155 12//12 156//156
f 157//157 15//15 158//158
f 17//17 159//159 160//160
f 20//20 159//159 17//17
f 21//21 161//161 162//162
f 24//24 163//163 164//164
f 163//163 24//24 27//27
f 28//28 25//25 29//29
f 28//28 26//26 25//25
f 16//16 30//30 14//14
f 8//8 165//165 154//154
f 29//29 165//165 8//8
f 29//29 25//25 165//165
f 7//7 4//4 1//1
f 5//5 1//1 9//9
f 32//32 33//33 166//166
f 35//35 12//12 36//36
f 167//167 35//35 168//168
f 39//39 35//35 169//169
f 16//16 41//41 30//30
f 170//170 41//41 16//16
f 158//158 43//43 42//42
f 44//44 42//42 43//43
f 44//44 171//171 42//42
f 46//46 40//40 35//35
f 153//153 47//47 1//1
f 48//48 49//49 50//50
f 49//49 172//172 50//50
f 49//49 160//160 172//172
f 52//52 21//21 162//162
f 53//53 173//173 174//174
f 53//53 56//56 173//173
f 52//52 162//162 56//56
f 57//57 58//58 59//59
f 159//159 20//20 60//60
f 28//28 45//45 26//26
f 7//7 6//6 61//61
f 2//2 4//4 62//62
f 4//4 7//7 63//63
f 8//8 5//5 175//175
f 9//9 176//176 177//177
f 10//10 176//176 9//9
f 177//177 5//5 9//9
f 33//33 67//67 167//167
f 67//67 68//68 167//167
f 36//36 155//155 168//168
f 32//32 178//178 60//60
f 36//36 12//12 155//155
f 168//168 35//35 36//36
f 68//68 35//35 167//167
f 70//70 39//39 169//169
f 15//15 71//71 72//72
f 41//41 170//170 45//45
f 41//41 45//45 28//28
f 73//73 43//43 74//74
f 73//73 74//74 179//179
f 76//76 43//43 15//15
f 15//15 77//77 76//76
f 43//43 158//158 15//15
f 78//78 164//164 171//171
f 78//78 24//24 164//164
f 180//180 47//47 153//153
f 1//1 47//47 10//10
f 80//80 172//172 161//161
f 80//80 50//50 172//172
f 81//81 49//49 48//48
f 82//82 83//83 80//80
f 21//21 80//80 161//161
f 56//56 162//162 173//173
f 174//174 153//153 2//2
f 2//2 62//62 174//174
f 84//84 57//57 48//48
f 57//57 81//81 48//48
f 33//33 167//167 166//166
f 85//85 57//57 59//59
f 178//178 159//159 60//60
f 181//181 41//41 182//182
f 53//53 174//174 62//62
f 31//31 61//61 6//6
f 61//61 31//31 88//88
f 31//31 163//163 88//88
f 32//32 166//166 178//178
f 35//35 39//39 89//89
f 157//157 71//71 15//15
f 44//44 78//78 171//171
f 180//180 10//10 47//47
f 90//90 91//91 84//84
f 49//49 17//17 160//160
f 92//92 48//48 50//50
f 49//49 81//81 17//17
f 93//93 94//94 95//95
f 80//80 21//21 82//82
f 183//183 97//97 53//53
f 183//183 98//98 97//97
f 99//99 100//100 101//101
f 81//81 57//57 85//85
f 102//102 103//103 59//59
f 90//90 94//94 93//93
f 85//85 59//59 99//99
f 41//41 28//28 182//182
f 62//62 96//96 53//53
f 62//62 104//104 96//96
f 5//5 177//177 175//175
f 176//176 10//10 180//180
f 184//184 33//33 106//106
f 67//67 33//33 105//105
f 30//30 70//70 14//14
f 70//70 169//169 14//14
f 79//79 185//185 86//86
f 66//66 65//65 79//79
f 79//79 19//19 18//18
f 23//23 22//22 79//79
f 79//79 186//186 64//64
f 79//79 55//55 54//54
f 79//79 22//22 51//51
f 79//79 51//51 19//19
f 79//79 54//54 23//23
f 79//79 86//86 87//87
f 79//79 64//64 66//66
f 87//87 186//186 79//79
f 79//79 3//3 55//55
f 109//109 110//110 46//46
f 71//71 40//40 46//46
f 40//40 71//71 157//157
f 110//110 72//72 71//71
f 187//187 110//110 188//188
f 110//110 71//71 46//46
f 107//107 70//70 30//30
f 76//76 74//74 43//43
f 111//111 113//113 189//189
f 43//43 73//73 44//44
f 115//115 44//44 73//73
f 190//190 109//109 105//105
f 68//68 109//109 46//46
f 68//68 46//46 35//35
f 102//102 91//91 117//117
f 48//48 92//92 84//84
f 94//94 90//90 84//84
f 94//94 83//83 95//95
f 95//95 98//98 118//118
f 80//80 83//83 92//92
f 97//97 52//52 56//56
f 84//84 58//58 57//57
f 84//84 91//91 58//58
f 119//119 99//99 101//101
f 120//120 119//119 101//101
f 58//58 102//102 59//59
f 117//117 90//90 93//93
f 91//91 90//90 117//117
f 117//117 103//103 102//102
f 85//85 121//121 81//81
f 28//28 108//108 182//182
f 108//108 28//28 29//29
f 41//41 181//181 30//30
f 89//89 12//12 35//35
f 39//39 191//191 89//89
f 7//7 123//123 63//63
f 88//88 124//124 61//61
f 4//4 63//63 104//104
f 104//104 62//62 4//4
f 175//175 108//108 8//8
f 108//108 29//29 8//8
f 116//116 184//184 106//106
f 105//105 109//109 67//67
f 38//38 122//122 185//185
f 79//79 38//38 185//185
f 38//38 13//13 122//122
f 38//38 11//11 13//13
f 38//38 34//34 37//37
f 38//38 69//69 34//34
f 18//18 69//69 38//38
f 38//38 79//79 18//18
f 191//191 39//39 107//107
f 110//110 109//109 190//190
f 179//179 74//74 192//192
f 126//126 75//75 125//125
f 127//127 126//126 125//125
f 113//113 128//128 125//125
f 113//113 125//125 193//193
f 111//111 112//112 130//130
f 131//131 111//111 130//130
f 100//100 128//128 113//113
f 113//113 131//131 100//100
f 113//113 111//111 131//131
f 187//187 72//72 110//110
f 44//44 115//115 78//78
f 68//68 67//67 109//109
f 125//125 128//128 127//127
f 132//132 133//133 93//93
f 126//126 194//194 75//75
f 135//135 78//78 115//115
f 135//135 24//24 78//78
f 134//134 115//115 73//73
f 195//195 196//196 138//138
f 95//95 83//83 98//98
f 92//92 50//50 80//80
f 21//21 52//52 97//97
f 97//97 82//82 21//21
f 101//101 131//131 130//130
f 103//103 100//100 59//59
f 106//106 33//33 139//139
f 120//120 101//101 130//130
f 58//58 91//91 102//102
f 126//126 127//127 140//140
f 140//140 127//127 133//133
f 141//141 117//117 133//133
f 117//117 141//141 103//103
f 121//121 60//60 20//20
f 89//89 191//191 156//156
f 89//89 156//156 12//12
f 27//27 88//88 163//163
f 121//121 139//139 60//60
f 39//39 70//70 107//107
f 77//77 129//129 76//76
f 74//74 76//76 129//129
f 74//74 129//129 192//192
f 114//114 129//129 77//77
f 77//77 15//15 72//72
f 127//127 128//128 141//141
f 94//94 92//92 83//83
f 94//94 84//84 92//92
f 142//142 132//132 143//143
f 142//142 133//133 132//132
f 197//197 140//140 142//142
f 135//135 115//115 144//144
f 145//145 146//146 118//118
f 118//118 138//138 145//145
f 95//95 118//118 146//146
f 93//93 95//95 146//146
f 195//195 138//138 147//147
f 53//53 97//97 56//56
f 97//97 98//98 82//82
f 82//82 98//98 83//83
f 188//188 110//110 190//190
f 106//106 139//139 120//120
f 99//99 59//59 100//100
f 100//100 141//141 128//128
f 141//141 133//133 127//127
f 20//20 81//81 121//121
f 20//20 17//17 81//81
f 148//148 198//198 27//27
f 124//124 123//123 61//61
f 7//7 61//61 123//123
f 60//60 139//139 32//32
f 139//139 33//33 32//32
f 107//107 30//30 181//181
f 193//193 189//189 113//113
f 72//72 114//114 77//77
f 72//72 187//187 114//114
f 140//140 194//194 126//126
f 134//134 73//73 179//179
f 199//199 197//197 142//142
f 199//199 142//142 143//143
f 150//150 198//198 148//148
f 136//136 123//123 137//137
f 151//151 143//143 132//132
f 124//124 137//137 123//123
f 151//151 138//138 196//196
f 106//106 112//112 116//116
f 141//141 100//100 103//103
f 120//120 139//139 119//119
f 121//121 119//119 139//139
f 119//119 121//121 85//85
f 99//99 119//119 85//85
f 117//117 93//93 133//133
f 63//63 136//136 104//104
f 123//123 136//136 63//63
f 194//194 140//140 197//197
f 115//115 134//134 144//144
f 136//136 96//96 104//104
f 145//145 138//138 151//151
f 132//132 93//93 146//146
f 200//200 137//137 124//124
f 183//183 195//195 147//147
f 147//147 138//138 118//118
f 106//106 130//130 112//112
f 130//130 106//106 120//120
f 101//101 100//100 131//131
f 142//142 140//140 133//133
f 88//88 198//198 200//200
f 88//88 27//27 198//198
f 24//24 148//148 27//27
f 152//152 151//151 196//196
f 199//199 143//143 149//149
f 148//148 24//24 135//135
f 144//144 150//150 148//148
f 132//132 145//145 151//151
f 132//132 146//146 145//145
f 200//200 124//124 88//88
f 98//98 183//183 147//147
f 98//98 147//147 118//118
f 143//143 151//151 149//149
f 151//151 152//152 149//149
f 148//148 135//135 144//144
# 300 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link3.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link3.obj
#
# Vertices: 193
# Faces: 300
#
####
vn 0.000037 0.000011 -1.000000
v 0.046301 -0.030187 -0.120999
vn 0.000012 -0.000028 -1.000000
v 0.054918 -0.007835 -0.120998
vn 0.649552 -0.674586 -0.350735
v 0.129196 0.000776 -0.029613
vn 0.818917 0.428228 -0.382094
v 0.124788 0.091303 -0.019898
vn 0.471199 0.836750 -0.278965
v 0.114440 0.101004 -0.019110
vn 0.807796 0.583078 -0.086523
v 0.128178 0.093017 -0.004663
vn 0.000114 -0.000377 -1.000000
v -0.016675 0.052758 -0.121001
vn -0.034961 0.910165 -0.412768
v 0.078020 0.101031 -0.036832
vn 0.000074 0.000153 -1.000000
v 0.009506 0.054968 -0.120998
vn 0.220892 0.856179 -0.467081
v 0.098648 0.101070 -0.033043
vn 0.957411 0.128040 -0.258784
v 0.133141 0.066125 -0.014248
vn 0.948977 0.275228 -0.153925
v 0.130133 0.086718 -0.008256
vn 0.992498 0.122064 -0.006878
v 0.135174 0.065815 -0.001263
vn 0.538017 0.039082 0.842027
v 0.112032 0.000601 0.046705
vn 0.362311 0.038946 0.931243
v 0.102467 0.000564 0.051469
vn 0.108135 -0.944486 0.310247
v 0.005082 -0.044914 -0.038339
vn -0.120906 -0.880389 0.458581
v -0.006061 -0.043348 -0.034716
vn -0.011908 0.039446 0.999151
v 0.082189 0.000568 0.055156
vn 0.174782 0.039816 0.983802
v 0.091923 0.000611 0.054511
vn 0.536032 0.567675 -0.624832
v 0.113908 0.091545 -0.034439
vn -0.556408 -0.237715 0.796179
v 0.051192 0.000885 0.045464
vn -0.664651 -0.274093 0.695063
v -0.034843 -0.013918 -0.026153
vn -0.592268 -0.431840 0.680244
v -0.030187 -0.023146 -0.026645
vn -0.570127 -0.591304 0.570364
v -0.028469 -0.029575 -0.030171
vn -0.436970 -0.662334 0.608581
v -0.022609 -0.033803 -0.029722
vn 0.002141 -0.002797 -0.999994
v -0.049615 0.024667 -0.120993
vn -0.943602 0.318171 0.091555
v -0.051133 0.016610 -0.089954
vn -0.861716 0.502896 0.067392
v -0.048029 0.025903 -0.101594
vn -0.747318 0.663168 0.041531
v -0.039719 0.037917 -0.106977
vn 0.003035 -0.003846 -0.999988
v -0.037087 0.041023 -0.121018
vn 0.448574 -0.892046 -0.055094
v 0.137561 0.000591 -0.005199
vn 0.562780 -0.800343 -0.206714
v 0.134980 0.000582 -0.017309
vn 0.271036 0.131720 0.953514
v 0.097133 0.066309 0.050464
vn 0.452312 0.104542 0.885712
v 0.106453 0.065611 0.046881
vn 0.437397 0.264901 0.859367
v 0.104194 0.086449 0.043301
vn 0.624702 0.125967 0.770636
v 0.115961 0.066544 0.040596
vn 0.000072 0.000146 -1.000000
v 0.035118 0.043010 -0.120998
vn -0.122040 0.965088 -0.231759
v 0.074742 0.109198 -0.013768
vn 0.022706 0.943975 -0.329234
v 0.082221 0.107566 -0.020426
vn 0.000033 0.000053 -1.000000
v 0.049881 0.023787 -0.121000
vn 0.027692 -0.997862 0.059199
v 0.001935 -0.054534 -0.101876
vn -0.000043 -0.000061 -1.000000
v -0.007130 -0.054668 -0.120995
vn -0.000387 -0.000104 -1.000000
v 0.005735 -0.054917 -0.120998
vn 0.888971 0.128281 -0.439629
v 0.130017 0.065351 -0.022771
vn 0.703057 0.040342 0.709988
v 0.120542 0.000546 0.040058
vn 0.247674 -0.949776 0.191269
v 0.127308 0.000507 0.032247
vn 0.294646 -0.946501 0.131608
v 0.132378 0.000608 0.023833
vn 0.811154 0.111553 0.574095
v 0.125852 0.065915 0.030017
vn 0.947316 0.141948 0.287129
v 0.133242 0.066199 0.014384
vn 0.346627 -0.935602 0.067073
v 0.136889 0.000544 0.010212
vn 0.682796 0.371644 0.629023
v 0.114547 0.093809 0.032140
vn 0.802185 0.372559 0.466582
v 0.122662 0.093747 0.021421
vn 0.330096 0.866987 0.373323
v 0.106871 0.101004 0.027909
vn 0.798964 0.117853 -0.589718
v 0.124558 0.065814 -0.031581
vn -0.000020 -0.000058 -1.000000
v 0.054401 0.008968 -0.121000
vn 0.758741 0.251893 -0.600718
v 0.121106 0.084974 -0.029834
vn 0.213748 -0.967388 0.135914
v 0.011153 -0.050959 -0.075627
vn -0.709784 0.555689 0.432916
v 0.041278 0.089486 0.022893
vn -0.833758 0.436440 0.338183
v -0.039756 0.020915 -0.037129
vn -0.768379 0.252883 0.587915
v -0.038601 0.012569 -0.029565
vn -0.574929 0.800078 0.171264
v 0.047117 0.100870 0.010420
vn -0.772517 0.586109 0.244323
v -0.036818 0.027215 -0.040392
vn 0.054238 0.751367 0.657652
v 0.090231 0.092298 0.045707
vn 0.485089 0.360363 0.796761
v 0.104702 0.093489 0.039999
vn 0.658139 0.282857 0.697743
v 0.116054 0.086166 0.034788
vn 0.955282 0.284069 0.082103
v 0.130388 0.086852 0.005292
vn 0.176583 0.947964 -0.264921
v 0.092584 0.108213 -0.015935
vn 0.000168 0.000072 -1.000000
v 0.032959 -0.044375 -0.120999
vn -0.000086 0.000012 -1.000000
v 0.018842 -0.051789 -0.121005
vn -0.159177 -0.985172 0.064019
v -0.008305 -0.053734 -0.098851
vn -0.327771 -0.943612 0.046512
v -0.018801 -0.051551 -0.107901
vn -0.002250 0.000177 -0.999997
v -0.025692 -0.048999 -0.120998
vn -0.050465 -0.984740 0.166556
v -0.003884 -0.049675 -0.060069
vn 0.121441 -0.973853 0.191996
v 0.007280 -0.047779 -0.052229
vn -0.072571 -0.991312 0.109697
v -0.004142 -0.052752 -0.082124
vn 0.084993 -0.989524 0.116701
v 0.004605 -0.052245 -0.078856
vn -0.577576 0.500060 0.645249
v 0.052254 0.090089 0.036272
vn -0.287647 0.928191 0.236051
v 0.053134 0.100909 0.022457
vn -0.288260 0.944981 -0.154654
v 0.063756 0.106924 -0.012549
vn -0.518355 0.855094 -0.011075
v 0.045446 0.100871 -0.002465
vn -0.962524 0.214649 0.165751
v -0.048402 0.011451 -0.059829
vn -0.990490 0.007594 0.137374
v -0.051532 0.000953 -0.070878
vn -0.967170 0.047025 0.249740
v -0.046154 0.002809 -0.041641
vn 0.515687 0.856753 0.006424
v 0.119397 0.100939 0.000438
vn 0.269949 0.958424 -0.092474
v 0.099071 0.108666 -0.005736
vn 0.305051 0.946148 0.108390
v 0.101588 0.107713 0.006654
vn 0.496085 0.844479 0.201877
v 0.116384 0.100933 0.014279
vn 0.823746 0.293036 0.485358
v 0.124245 0.086628 0.024384
vn 0.824054 0.523882 0.215599
v 0.126814 0.092758 0.012786
vn 0.001483 0.999927 -0.012033
v 0.082949 0.111203 -0.001596
vn 0.075151 0.981863 -0.174061
v 0.086657 0.109898 -0.011964
vn 0.127728 0.975940 0.176712
v 0.091195 0.109398 0.012603
vn 0.164464 0.986372 0.004651
v 0.092755 0.110336 0.000887
vn -0.075056 0.985768 0.150426
v 0.076100 0.110146 0.009457
vn -0.119156 0.364872 0.923401
v 0.075849 0.092371 0.045553
vn -0.180038 0.838098 0.514954
v 0.070087 0.101035 0.035040
vn 0.029914 0.115312 0.992879
v 0.085436 0.065979 0.052613
vn -0.106036 0.276161 0.955244
v 0.077777 0.085805 0.048397
vn -0.169998 0.041882 0.984554
v 0.071485 0.000568 0.054191
vn -0.319688 -0.788547 0.525351
v -0.015856 -0.038380 -0.030971
vn -0.389927 0.039305 0.920007
v 0.059279 0.000606 0.050110
vn -0.944000 -0.324942 0.057253
v -0.052008 -0.016770 -0.102348
vn 0.001898 -0.000930 -0.999998
v -0.051607 -0.019395 -0.121000
vn 0.002708 -0.001512 -0.999995
v -0.046754 -0.029540 -0.120958
vn -0.240488 -0.963640 0.116462
v -0.013162 -0.050673 -0.077665
vn -0.928981 -0.185012 0.320571
v -0.044413 -0.008708 -0.038502
vn -0.970192 -0.152014 0.188732
v -0.047733 -0.007449 -0.051911
vn -0.920096 -0.344989 0.185487
v -0.045407 -0.018291 -0.055497
vn -0.850051 -0.407574 0.333610
v -0.040567 -0.019002 -0.036828
vn -0.089818 -0.964839 0.247019
v -0.004066 -0.045788 -0.041049
vn -0.529420 -0.845672 0.067471
v -0.028926 -0.045977 -0.098079
vn -0.396831 -0.911610 0.107207
v -0.021153 -0.048749 -0.084459
vn -0.507486 -0.850689 0.137060
v -0.027533 -0.044026 -0.074282
vn -0.302258 -0.936899 0.175670
v -0.015534 -0.047014 -0.058545
vn -0.371039 0.248674 0.894702
v 0.063672 0.090569 0.043158
vn -0.313865 0.949346 0.015199
v 0.063816 0.108261 0.000704
vn -0.857183 0.493383 0.147683
v -0.044976 0.025029 -0.070570
vn -0.746388 0.658120 0.098909
v -0.040366 0.035095 -0.086669
vn -0.248263 0.123740 0.960757
v 0.069431 0.065546 0.051013
vn -0.591950 0.155514 0.790829
v 0.051103 0.067234 0.042013
vn -0.713001 0.063090 0.698319
v -0.037863 0.002726 -0.026501
vn -0.982516 0.159189 0.096546
v -0.052776 0.008240 -0.087413
vn -0.000613 -0.000139 -1.000000
v -0.054615 0.008915 -0.120971
vn -0.997804 0.028574 0.059752
v -0.054422 0.002010 -0.099662
vn 0.116762 0.841154 0.528040
v 0.090021 0.100948 0.036133
vn 0.225932 -0.972150 0.062277
v 0.013829 -0.052766 -0.101191
vn -0.827240 -0.555593 0.083601
v -0.045138 -0.029590 -0.092390
vn -0.905687 -0.406725 0.119607
v -0.048066 -0.021576 -0.080342
vn -0.001793 -0.000267 -0.999998
v -0.037870 -0.040342 -0.120938
vn -0.675383 -0.730736 0.099408
v -0.036777 -0.038714 -0.086750
vn -0.001493 0.000854 -0.999999
v -0.054646 -0.007606 -0.120996
vn -0.990908 -0.112439 0.073889
v -0.054052 -0.005208 -0.097856
vn -0.834530 -0.522633 0.174397
v -0.041371 -0.026752 -0.056950
vn -0.911769 0.250697 0.325312
v -0.043296 0.012746 -0.038093
vn -0.876796 0.024562 0.480235
v -0.043274 0.001422 -0.033617
vn -0.429898 -0.875944 0.218883
v -0.019526 -0.042312 -0.043616
vn -0.288934 -0.898659 0.330044
v -0.013154 -0.043029 -0.037657
vn -0.914816 0.362916 0.177210
v -0.045919 0.018267 -0.058169
vn -0.756165 0.633521 0.163906
v -0.037785 0.033267 -0.063465
vn -0.733032 -0.093931 0.673677
v -0.039317 -0.004217 -0.028116
vn -0.506771 -0.775921 0.375672
v -0.025243 -0.037023 -0.036986
vn -0.177298 0.984101 -0.010543
v 0.072580 0.110435 0.000058
vn 0.043002 0.950246 0.308517
v 0.085342 0.108684 0.017137
vn -0.117291 0.951663 0.283868
v 0.076302 0.108275 0.017559
vn -0.445078 0.113402 0.888283
v 0.059348 0.066195 0.047189
vn -0.967382 -0.219567 0.126346
v -0.050970 -0.011643 -0.076611
vn -0.741733 -0.654033 0.148570
v -0.038922 -0.033393 -0.069888
vn -0.602209 -0.778343 0.177555
v -0.029421 -0.039624 -0.057483
vn -0.713517 -0.635772 0.294429
v -0.033718 -0.030905 -0.039763
vn -0.253444 0.948581 0.189633
v 0.066635 0.107910 0.011381
vn -0.716692 -0.450767 0.532129
v -0.036020 -0.022938 -0.032649
vn -0.809428 -0.231455 0.539681
v -0.039629 -0.011227 -0.030396
vn 0.669561 -0.629635 -0.394015
v 0.046301 -0.030187 -0.120999
vn 0.755605 -0.291251 -0.586715
v 0.046301 -0.030187 -0.120999
vn 0.775054 -0.135471 -0.617202
v 0.054918 -0.007835 -0.120998
vn 0.822934 -0.031021 -0.567289
v 0.129196 0.000776 -0.029613
vn -0.274805 0.922364 -0.271528
v -0.016675 0.052758 -0.121001
vn 0.173806 0.784890 -0.594759
v 0.009506 0.054968 -0.120998
vn 0.176326 -0.942818 0.282850
v 0.112032 0.000601 0.046705
vn 0.128188 -0.933851 0.333901
v 0.102467 0.000564 0.051469
vn 0.000512 -0.898277 0.439430
v 0.082189 0.000568 0.055156
vn 0.065914 -0.918915 0.388909
v 0.091923 0.000611 0.054511
vn -0.881864 0.470833 0.025134
v -0.049615 0.024667 -0.120993
vn -0.650975 0.758888 -0.017880
v -0.037087 0.041023 -0.121018
vn 0.993525 0.039044 -0.106694
v 0.137561 0.000591 -0.005199
vn 0.943828 0.037881 -0.328258
v 0.134980 0.000582 -0.017309
vn 0.543285 0.417290 -0.728499
v 0.035118 0.043010 -0.120998
vn 0.315525 0.675802 -0.666135
v 0.035118 0.043010 -0.120998
vn 0.641771 0.295421 -0.707712
v 0.049881 0.023787 -0.121000
vn -0.152341 -0.988244 0.012853
v -0.007130 -0.054668 -0.120995
vn 0.119628 -0.992497 0.025289
v 0.005735 -0.054917 -0.120998
vn 0.215046 -0.948349 0.233216
v 0.120542 0.000546 0.040058
vn 0.808522 0.038012 0.587237
v 0.127308 0.000507 0.032247
vn 0.906186 0.039866 0.420996
v 0.132378 0.000608 0.023833
vn 0.986251 0.038273 0.160760
v 0.136889 0.000544 0.010212
vn 0.458637 0.760078 0.460363
v 0.114547 0.093809 0.032140
vn 0.548416 0.774234 0.315913
v 0.122662 0.093747 0.021421
vn 0.742413 0.116031 -0.659818
v 0.054401 0.008968 -0.121000
vn 0.165701 0.299212 0.939689
v 0.090231 0.092298 0.045707
vn 0.289229 0.761122 0.580551
v 0.104702 0.093489 0.039999
vn 0.572416 -0.788785 -0.223960
v 0.032959 -0.044375 -0.120999
vn 0.364271 -0.931292 -0.001332
v 0.018842 -0.051789 -0.121005
vn -0.440764 -0.897469 0.016616
v -0.025692 -0.048999 -0.120998
vn -0.561005 0.694897 0.449880
v 0.053134 0.100909 0.022457
vn -0.120942 0.732528 0.669908
v 0.075849 0.092371 0.045553
vn -0.117282 -0.845978 0.520160
v 0.071485 0.000568 0.054191
vn -0.287526 -0.729862 0.620185
v 0.059279 0.000606 0.050110
vn -0.939304 -0.341947 0.027919
v -0.051607 -0.019395 -0.121000
vn -0.861675 -0.505475 0.044850
v -0.046754 -0.029540 -0.120958
vn -0.314499 0.694636 0.646971
v 0.063672 0.090569 0.043158
vn -0.985246 0.166559 0.039356
v -0.054615 0.008915 -0.120971
vn -0.688354 -0.723951 0.045433
v -0.037870 -0.040342 -0.120938
vn -0.992314 -0.121215 0.024900
v -0.054646 -0.007606 -0.120996
# 193 vertices, 0 vertices normals
f 154//154 155//155 156//156
f 4//4 5//5 6//6
f 157//157 8//8 158//158
f 158//158 8//8 10//10
f 11//11 12//12 13//13
f 159//159 160//160 16//16
f 17//17 16//16 161//161
f 16//16 162//162 161//161
f 20//20 5//5 4//4
f 21//21 22//22 23//23
f 23//23 24//24 21//21
f 25//25 21//21 24//24
f 163//163 27//27 28//28
f 163//163 29//29 164//164
f 11//11 165//165 166//166
f 33//33 34//34 35//35
f 36//36 34//34 14//14
f 12//12 4//4 6//6
f 168//168 158//158 20//20
f 38//38 39//39 8//8
f 167//167 20//20 169//169
f 41//41 170//170 171//171
f 11//11 44//44 4//4
f 162//162 16//16 160//160
f 159//159 16//16 172//172
f 173//173 174//174 48//48
f 13//13 49//49 175//175
f 176//176 177//177 53//53
f 54//54 156//156 178//178
f 178//178 156//156 155//155
f 44//44 56//56 4//4
f 56//56 20//20 4//4
f 47//47 46//46 57//57
f 58//58 59//59 60//60
f 58//58 61//61 62//62
f 35//35 179//179 33//33
f 176//176 53//53 180//180
f 64//64 35//35 65//65
f 64//64 65//65 51//51
f 66//66 13//13 12//12
f 66//66 49//49 13//13
f 10//10 67//67 5//5
f 153//153 3//3 181//181
f 31//31 182//182 181//181
f 31//31 181//181 32//32
f 11//11 166//166 44//44
f 12//12 11//11 4//4
f 14//14 34//34 15//15
f 45//45 48//48 36//36
f 16//16 46//46 172//172
f 169//169 20//20 56//56
f 56//56 178//178 169//169
f 54//54 178//178 56//56
f 10//10 5//5 20//20
f 41//41 70//70 170//170
f 71//71 183//183 170//170
f 73//73 57//57 74//74
f 50//50 47//47 57//57
f 75//75 76//76 73//73
f 77//77 58//58 60//60
f 61//61 58//58 184//184
f 79//79 157//157 80//80
f 157//157 164//164 80//80
f 81//81 82//82 83//83
f 33//33 15//15 34//34
f 84//84 6//6 5//5
f 85//85 86//86 84//84
f 53//53 177//177 87//87
f 48//48 65//65 36//36
f 65//65 88//88 51//51
f 12//12 6//6 66//66
f 89//89 66//66 6//6
f 6//6 84//84 89//89
f 89//89 49//49 66//66
f 38//38 90//90 91//91
f 8//8 39//39 10//10
f 39//39 67//67 10//10
f 20//20 158//158 10//10
f 54//54 56//56 44//44
f 156//156 54//54 44//44
f 74//74 46//46 16//16
f 13//13 165//165 11//11
f 90//90 92//92 93//93
f 93//93 92//92 86//86
f 86//86 85//85 93//93
f 90//90 94//94 92//92
f 185//185 63//63 96//96
f 179//179 97//97 33//33
f 179//179 95//95 98//98
f 186//186 17//17 161//161
f 100//100 17//17 187//187
f 187//187 17//17 186//186
f 102//102 188//188 189//189
f 70//70 105//105 71//71
f 106//106 107//107 108//108
f 108//108 109//109 106//106
f 70//70 71//71 170//170
f 110//110 16//16 17//17
f 74//74 110//110 73//73
f 16//16 110//110 74//74
f 76//76 57//57 73//73
f 111//111 112//112 113//113
f 105//105 73//73 114//114
f 77//77 184//184 58//58
f 96//96 77//77 190//190
f 96//96 184//184 77//77
f 185//185 96//96 190//190
f 116//116 80//80 61//61
f 157//157 79//79 38//38
f 8//8 157//157 38//38
f 28//28 29//29 163//163
f 28//28 117//117 118//118
f 97//97 98//98 119//119
f 97//97 119//119 99//99
f 97//97 99//99 18//18
f 120//120 121//121 21//21
f 122//122 191//191 124//124
f 191//191 122//122 27//27
f 179//179 35//35 64//64
f 180//180 125//125 63//63
f 36//36 35//35 34//34
f 36//36 65//65 35//35
f 177//177 89//89 87//87
f 89//89 84//84 87//87
f 84//84 86//86 87//87
f 88//88 89//89 52//52
f 51//51 88//88 52//52
f 91//91 39//39 38//38
f 171//171 126//126 41//41
f 3//3 32//32 181//181
f 44//44 166//166 156//156
f 50//50 126//126 182//182
f 33//33 97//97 19//19
f 19//19 15//15 33//33
f 45//45 36//36 14//14
f 45//45 173//173 48//48
f 49//49 48//48 174//174
f 175//175 165//165 13//13
f 86//86 92//92 53//53
f 53//53 87//87 86//86
f 60//60 120//120 77//77
f 127//127 128//128 102//102
f 192//192 183//183 111//111
f 105//105 70//70 75//75
f 111//111 183//183 71//71
f 130//130 111//111 113//113
f 192//192 127//127 189//189
f 193//193 124//124 191//191
f 193//193 188//188 102//102
f 132//132 82//82 124//124
f 133//133 109//109 108//108
f 134//134 135//135 60//60
f 134//134 60//60 59//59
f 113//113 114//114 136//136
f 113//113 112//112 114//114
f 136//136 114//114 137//137
f 114//114 73//73 110//110
f 137//137 114//114 110//110
f 105//105 75//75 73//73
f 80//80 116//116 79//79
f 81//81 122//122 82//82
f 81//81 27//27 122//122
f 134//134 138//138 81//81
f 59//59 117//117 138//138
f 59//59 138//138 134//134
f 58//58 62//62 59//59
f 117//117 27//27 138//138
f 27//27 81//81 138//138
f 163//163 191//191 27//27
f 61//61 118//118 139//139
f 29//29 28//28 118//118
f 27//27 117//117 28//28
f 117//117 139//139 118//118
f 139//139 117//117 62//62
f 140//140 121//121 135//135
f 60//60 135//135 121//121
f 121//121 120//120 60//60
f 110//110 17//17 137//137
f 136//136 137//137 141//141
f 179//179 98//98 97//97
f 89//89 88//88 49//49
f 93//93 85//85 91//91
f 93//93 91//91 90//90
f 79//79 142//142 38//38
f 91//91 85//85 67//67
f 5//5 67//67 85//85
f 85//85 84//84 5//5
f 126//126 171//171 182//182
f 182//182 31//31 50//50
f 49//49 174//174 175//175
f 53//53 143//143 125//125
f 53//53 92//92 143//143
f 53//53 125//125 180//180
f 125//125 143//143 96//96
f 96//96 63//63 125//125
f 96//96 143//143 144//144
f 115//115 145//145 119//119
f 115//115 119//119 98//98
f 145//145 101//101 119//119
f 95//95 115//115 98//98
f 187//187 21//21 25//25
f 189//189 127//127 102//102
f 112//112 111//111 71//71
f 112//112 105//105 114//114
f 130//130 192//192 111//111
f 132//132 146//146 82//82
f 102//102 132//132 193//193
f 122//122 124//124 82//82
f 127//127 147//147 133//133
f 127//127 133//133 128//128
f 108//108 107//107 146//146
f 133//133 108//108 128//128
f 75//75 70//70 41//41
f 41//41 76//76 75//75
f 113//113 136//136 148//148
f 164//164 29//29 80//80
f 118//118 61//61 80//80
f 117//117 59//59 62//62
f 97//97 18//18 19//19
f 137//137 17//17 100//100
f 141//141 100//100 25//25
f 137//137 100//100 141//141
f 149//149 148//148 141//141
f 88//88 48//48 49//49
f 142//142 90//90 38//38
f 91//91 67//67 39//39
f 150//150 116//116 61//61
f 150//150 61//61 78//78
f 94//94 90//90 142//142
f 143//143 94//94 144//144
f 116//116 150//150 142//142
f 142//142 150//150 94//94
f 145//145 21//21 101//101
f 21//21 145//145 120//120
f 115//115 77//77 120//120
f 120//120 145//145 115//115
f 99//99 119//119 101//101
f 71//71 105//105 112//112
f 148//148 147//147 130//130
f 148//148 130//130 113//113
f 83//83 82//82 107//107
f 108//108 146//146 128//128
f 149//149 151//151 109//109
f 22//22 21//21 140//140
f 135//135 152//152 140//140
f 135//135 106//106 152//152
f 135//135 83//83 106//106
f 83//83 135//135 134//134
f 62//62 61//61 139//139
f 80//80 29//29 118//118
f 121//121 140//140 21//21
f 151//151 149//149 24//24
f 151//151 24//24 23//23
f 147//147 148//148 149//149
f 46//46 74//74 57//57
f 79//79 116//116 142//142
f 92//92 94//94 143//143
f 130//130 127//127 192//192
f 130//130 147//147 127//127
f 132//132 102//102 146//146
f 124//124 193//193 132//132
f 146//146 102//102 128//128
f 106//106 83//83 107//107
f 146//146 107//107 82//82
f 149//149 109//109 133//133
f 140//140 152//152 22//22
f 152//152 109//109 151//151
f 22//22 151//151 23//23
f 134//134 81//81 83//83
f 57//57 126//126 50//50
f 126//126 76//76 41//41
f 141//141 148//148 136//136
f 96//96 150//150 78//78
f 150//150 96//96 144//144
f 141//141 25//25 24//24
f 133//133 147//147 149//149
f 126//126 57//57 76//76
f 149//149 141//141 24//24
f 152//152 106//106 109//109
f 151//151 22//22 152//152
f 144//144 94//94 150//150
f 65//65 48//48 88//88
f 25//25 100//100 187//187
f 7//7 2//2 1//1
f 7//7 40//40 55//55
f 7//7 55//55 2//2
f 7//7 37//37 40//40
f 7//7 1//1 68//68
f 7//7 69//69 43//43
f 7//7 9//9 37//37
f 7//7 123//123 26//26
f 129//129 104//104 7//7
f 42//42 72//72 7//7
f 104//104 103//103 7//7
f 7//7 26//26 30//30
f 7//7 43//43 42//42
f 7//7 68//68 69//69
f 103//103 131//131 7//7
f 131//131 123//123 7//7
f 72//72 129//129 7//7
# 300 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link4.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link4.obj
#
# Vertices: 193
# Faces: 300
#
####
vn 0.454655 -0.802249 0.386892
v 0.022569 -0.039557 0.093692
vn 0.716139 -0.584536 0.381395
v 0.034986 -0.029175 0.093760
vn 0.398347 -0.338626 0.852439
v 0.027804 -0.024311 0.100943
vn 0.885340 -0.230642 0.403704
v 0.043362 -0.013919 0.093861
vn 0.765826 0.639010 0.071951
v -0.027700 0.124000 0.006122
vn 0.174633 0.580478 0.795330
v -0.072380 0.123999 0.054529
vn 0.392138 0.680894 0.618556
v -0.051380 0.123999 0.045753
vn 0.816215 0.563947 -0.125525
v 0.045213 0.031664 0.001119
vn 0.001132 0.999999 -0.000543
v -0.037091 0.123998 -0.031832
vn 0.000776 1.000000 -0.000290
v -0.028172 0.124000 -0.010519
vn -0.070281 -0.035528 -0.996894
v -0.086144 0.123968 -0.055207
vn 0.215143 -0.005763 -0.976565
v -0.074238 0.123996 -0.054580
vn 0.303153 0.474275 0.826536
v 0.021827 0.029940 0.100929
vn 0.473569 0.110286 -0.873825
v -0.054846 0.124009 -0.047960
vn 0.707999 -0.696599 0.116132
v 0.037985 -0.036488 0.065264
vn 0.586478 -0.761064 0.277173
v 0.029027 -0.039266 0.084777
vn 0.489234 -0.863871 0.119902
v 0.026427 -0.045716 0.065717
vn 0.198238 -0.256590 -0.945972
v 0.034066 -0.043607 0.000539
vn 0.759999 -0.596188 0.258767
v 0.038719 -0.029881 0.084476
vn -0.414329 0.149193 0.897816
v -0.109295 0.124003 0.048487
vn -0.164118 0.345202 0.924068
v -0.092249 0.124000 0.054293
vn 0.460373 -0.135333 0.877349
v 0.035207 -0.010845 0.100914
vn 0.265974 -0.121497 0.956293
v 0.016564 -0.007618 0.108349
vn 0.864183 -0.409385 0.292560
v 0.043599 -0.020237 0.087046
vn 0.398282 -0.916317 0.041658
v 0.022579 -0.050414 0.000558
vn 0.128909 -0.282766 -0.950487
v -0.076570 0.039825 -0.045276
vn 0.790814 -0.610887 0.037823
v 0.043896 -0.033551 0.000521
vn 0.056213 0.440955 0.895767
v 0.002049 0.037664 0.100790
vn 0.000162 1.000000 0.000112
v -0.033068 0.123999 0.025663
vn 0.786376 0.602323 0.137185
v 0.041340 0.032356 0.066298
vn 0.490230 0.100799 -0.865745
v 0.054350 0.010373 0.000642
vn 0.917741 0.377544 0.123337
v 0.048737 0.020431 0.065666
vn 0.993879 0.005182 0.110348
v 0.052877 0.001839 0.064928
vn 0.349172 -0.891615 0.288273
v 0.018624 -0.044366 0.086920
vn 0.854391 -0.505514 0.120302
v 0.045445 -0.026708 0.065418
vn 0.161735 -0.139782 -0.976884
v -0.073458 0.069480 -0.050559
vn 0.270705 -0.093538 -0.958107
v -0.068970 0.088499 -0.051781
vn 0.912547 -0.407142 0.038644
v 0.050405 -0.022856 0.000627
vn -0.728720 -0.072044 0.681011
v -0.122193 0.095532 0.036894
vn -0.568985 -0.169038 0.804787
v -0.034936 -0.012055 0.100886
vn -0.494498 0.019008 0.868971
v -0.037027 0.002744 0.100844
vn -0.265280 0.174977 0.948161
v -0.015165 0.009109 0.108663
vn -0.365064 0.158653 0.917364
v -0.032575 0.017421 0.100906
vn -0.000723 0.999999 -0.001028
v -0.120391 0.123968 0.040330
vn -0.000120 1.000000 0.000666
v -0.129090 0.123972 0.029796
vn 0.919961 0.070905 0.385543
v 0.045633 0.004568 0.092929
vn 0.565382 0.057917 0.822793
v 0.036704 0.003599 0.100953
vn 0.945140 0.093172 0.313096
v 0.048049 0.003292 0.087399
vn 0.321771 0.027594 0.946415
v 0.019177 0.001568 0.108031
vn 0.194689 -0.249528 0.948595
v 0.012946 -0.015115 0.107815
vn 0.053293 -0.132523 0.989746
v 0.003797 -0.007079 0.110758
vn 0.149164 0.056400 0.987203
v 0.008852 0.002476 0.110543
vn 0.186333 -0.475355 0.859836
v 0.013431 -0.034342 0.100980
vn -0.767158 -0.228296 0.599458
v -0.119318 0.043544 0.028643
vn -0.700218 -0.380134 0.604312
v -0.041858 -0.020943 0.089692
vn -0.547828 -0.466818 0.694237
v -0.028743 -0.023039 0.100935
vn -0.206880 -0.165722 0.964229
v -0.013322 -0.009890 0.108975
vn -0.081432 0.282966 0.955667
v -0.005765 0.018216 0.108100
vn -0.000032 1.000000 0.000569
v -0.137607 0.123998 0.003240
vn -0.986715 -0.049851 0.154620
v -0.136655 0.104576 0.007980
vn -0.000065 1.000000 0.000984
v -0.134661 0.123981 0.018168
vn 0.326842 -0.029543 -0.944617
v -0.063776 0.107927 -0.051501
vn 0.149982 -0.055041 -0.987155
v -0.072471 0.105766 -0.053865
vn -0.334291 -0.027600 -0.942066
v -0.103567 0.123994 -0.051060
vn -0.577202 -0.030400 -0.816035
v -0.113556 0.123983 -0.045728
vn 0.981350 -0.187740 0.041299
v 0.054037 -0.011261 0.000538
vn 0.998673 -0.035133 0.037648
v 0.055140 -0.002814 0.000579
vn 0.911991 0.408449 0.037969
v 0.050232 0.023144 0.000568
vn -0.088578 -0.109722 -0.990008
v -0.087198 0.079611 -0.052439
vn 0.019729 -0.078513 -0.996718
v -0.082402 0.092920 -0.053905
vn 0.215576 -0.970189 0.110729
v 0.009153 -0.052080 0.065466
vn -0.698395 -0.614162 -0.367491
v -0.118237 0.028972 -0.018545
vn -0.607787 -0.625923 -0.488688
v -0.114342 0.028618 -0.024115
vn -0.562279 -0.798539 -0.214891
v -0.031671 -0.045195 0.000873
vn -0.281438 -0.004509 0.959569
v -0.016019 0.001295 0.109144
vn 0.772466 0.333086 0.540694
v 0.042435 0.018317 0.092196
vn 0.892550 0.357462 0.274908
v 0.045046 0.018327 0.085521
vn 0.951901 -0.280261 0.123847
v 0.050572 -0.014743 0.066511
vn 0.944134 -0.178188 0.277237
v 0.047475 -0.009573 0.086165
vn 0.118949 0.272013 0.954914
v 0.007716 0.017187 0.108234
vn -0.075450 0.055351 0.995612
v -0.004346 0.002963 0.111052
vn 0.253729 0.176780 0.950984
v 0.015284 0.010014 0.108356
vn -0.671596 -0.608269 0.423045
v -0.032778 -0.033914 0.090005
vn -0.820404 -0.350965 0.451398
v -0.121548 0.037507 0.022252
vn -0.418392 -0.900412 0.119187
v -0.022347 -0.047624 0.066152
vn -0.326242 -0.641330 -0.694451
v -0.023522 -0.049968 0.000617
vn -0.108180 -0.514515 -0.850630
v -0.010681 -0.054289 0.000562
vn 0.101548 -0.955293 0.277674
v 0.005715 -0.048166 0.086143
vn -0.902029 -0.010247 -0.431554
v -0.132118 0.123998 -0.024018
vn -0.978550 -0.017292 -0.205284
v -0.136445 0.123998 -0.011417
vn -0.780466 -0.012218 -0.625078
v -0.125335 0.124000 -0.034670
vn 0.259750 -0.964891 0.038920
v 0.014950 -0.053137 0.000568
vn 0.043730 -0.998307 0.038362
v 0.004073 -0.055150 0.000623
vn -0.073391 -0.355051 -0.931962
v -0.086007 0.037573 -0.044819
vn 0.578176 0.588977 0.564641
v 0.031774 0.033860 0.091676
vn -0.501623 -0.579880 -0.641960
v -0.107874 0.030200 -0.032339
vn -0.266186 -0.530291 -0.804945
v -0.095079 0.030948 -0.039772
vn -0.595489 -0.789524 0.148476
v -0.031992 -0.041577 0.066830
vn -0.712360 -0.696695 0.084614
v -0.120676 0.026656 0.003086
vn -0.945411 -0.103336 0.309064
v -0.132852 0.085270 0.017568
vn -0.929822 -0.191513 0.314252
v -0.128322 0.052420 0.015393
vn -0.866253 -0.159195 0.473564
v -0.127220 0.065177 0.023866
vn -0.861932 -0.075410 0.501385
v -0.129377 0.095919 0.027186
vn -0.765524 -0.134044 0.629290
v -0.122010 0.074521 0.033735
vn -0.872213 -0.232457 -0.430359
v -0.123590 0.042113 -0.021113
vn -0.910326 -0.373969 -0.177353
v -0.126198 0.036393 -0.009207
vn -0.952567 -0.169173 -0.252976
v -0.130713 0.061180 -0.013270
vn -0.830006 -0.425169 -0.361000
v -0.123064 0.035819 -0.017724
vn -0.756757 -0.630588 -0.172270
v -0.120488 0.027672 -0.009549
vn 0.778092 0.563906 0.276737
v 0.038328 0.029774 0.085636
vn 0.034720 0.187809 0.981592
v 0.002764 0.012288 0.109876
vn 0.464764 0.260540 0.846235
v 0.032520 0.017150 0.100966
vn -0.072204 -0.281705 0.956781
v -0.004802 -0.016582 0.108757
vn -0.247142 -0.505593 0.826618
v -0.016175 -0.033271 0.100932
vn -0.020706 -0.525306 0.850662
v -0.001304 -0.036786 0.100922
vn -0.092061 -0.953036 0.288525
v -0.006624 -0.046218 0.091497
vn -0.131517 -0.980768 0.144213
v -0.007343 -0.052124 0.066949
vn -0.208770 -0.046574 -0.976855
v -0.094255 0.106407 -0.053490
vn -0.997126 -0.059333 -0.047110
v -0.136806 0.098993 -0.003694
vn -0.958898 -0.270016 -0.087214
v -0.127978 0.039843 -0.004448
vn -0.981633 -0.188122 -0.031720
v -0.130818 0.052212 -0.001483
vn -0.001336 -0.182443 -0.983215
v -0.081036 0.056624 -0.049171
vn -0.632406 -0.309570 -0.710091
v -0.113825 0.038682 -0.032764
vn -0.459969 -0.412230 -0.786445
v -0.105099 0.035459 -0.037803
vn -0.285308 -0.093829 -0.953832
v -0.097660 0.085241 -0.051058
vn -0.434034 -0.137490 -0.890343
v -0.105004 0.073322 -0.046745
vn -0.431721 -0.060387 -0.899983
v -0.105042 0.102325 -0.049638
vn -0.298047 -0.326464 -0.896989
v -0.095913 0.038365 -0.043246
vn -0.891672 -0.332689 0.306983
v -0.125088 0.038043 0.014786
vn -0.805920 -0.528514 0.266768
v -0.121732 0.031247 0.014315
vn -0.989025 -0.105168 0.103775
v -0.135274 0.084244 0.006179
vn -0.977272 -0.161190 0.137684
v -0.132355 0.063413 0.007006
vn -0.868537 -0.158272 -0.469673
v -0.127128 0.064748 -0.023886
vn 0.189692 -0.901086 0.389950
v 0.007130 -0.045217 0.093041
vn 0.068995 -0.307360 0.949089
v 0.004104 -0.019016 0.107912
vn -0.282714 -0.652836 0.702764
v -0.017654 -0.043502 0.090834
vn -0.526076 -0.819818 0.226145
v -0.026170 -0.039015 0.090543
vn -0.912926 -0.098350 -0.396098
v -0.131688 0.087091 -0.020824
vn -0.856254 -0.047015 -0.514410
v -0.129765 0.106224 -0.027672
vn -0.469923 -0.233701 -0.851209
v -0.105467 0.042327 -0.040228
vn -0.937784 -0.326969 0.116841
v -0.127336 0.038252 0.006009
vn -0.852594 -0.521026 0.040188
v -0.124648 0.031999 0.003327
vn -0.737244 -0.392652 -0.549815
v -0.118012 0.036774 -0.027166
vn -0.971057 -0.078214 -0.225677
v -0.135538 0.097306 -0.011731
vn -0.988909 -0.130596 -0.070743
v -0.134277 0.074340 -0.004290
vn -0.760620 -0.189023 -0.621070
v -0.119562 0.054034 -0.031530
vn -0.778288 -0.114793 -0.617325
v -0.124401 0.082466 -0.032557
vn -0.724082 -0.049464 -0.687938
v -0.121956 0.102260 -0.037873
vn -0.592852 -0.093029 -0.799920
v -0.114429 0.087759 -0.042990
vn -0.618648 -0.165949 -0.767942
v -0.112995 0.060261 -0.039425
vn -0.935143 -0.038252 -0.352198
v -0.133811 0.107879 -0.019222
vn -0.232806 -0.182410 -0.955263
v -0.093721 0.053071 -0.047253
vn 0.326976 -0.554838 0.765011
v 0.022569 -0.039557 0.093692
vn 0.490847 -0.410265 0.768604
v 0.034986 -0.029175 0.093760
vn 0.611099 -0.183788 0.769922
v 0.043362 -0.013919 0.093861
vn -0.000201 1.000000 0.000056
v -0.027700 0.124000 0.006122
vn 0.000028 1.000000 0.000043
v -0.072380 0.123999 0.054529
vn 0.000078 1.000000 0.000062
v -0.051380 0.123999 0.045753
vn 0.719635 0.458243 -0.521670
v -0.037091 0.123998 -0.031832
vn 0.781613 0.599467 -0.172398
v -0.028172 0.124000 -0.010519
vn -0.000693 1.000000 0.000131
v -0.086144 0.123968 -0.055207
vn -0.001703 0.999998 0.001245
v -0.074238 0.123996 -0.054580
vn 0.000221 1.000000 0.000014
v -0.054846 0.124009 -0.047960
vn 0.619783 -0.783852 0.038027
v 0.034066 -0.043607 0.000539
vn -0.000586 0.999999 -0.001206
v -0.109295 0.124003 0.048487
vn 0.000090 1.000000 0.000112
v -0.092249 0.124000 0.054293
vn 0.145687 -0.316088 -0.937477
v 0.022579 -0.050414 0.000558
vn 0.247649 -0.191591 -0.949717
v 0.043896 -0.033551 0.000521
vn 0.662558 0.691630 0.287516
v -0.033068 0.123999 0.025663
vn 0.980043 0.194928 0.038978
v 0.054350 0.010373 0.000642
vn 0.294718 -0.131341 -0.946515
v 0.050405 -0.022856 0.000627
vn -0.670125 -0.028812 0.741689
v -0.120391 0.123968 0.040330
vn -0.829873 -0.035511 0.556821
v -0.129090 0.123972 0.029796
vn 0.662264 0.072725 0.745732
v 0.045633 0.004568 0.092929
vn -0.283125 -0.236272 0.929525
v -0.028743 -0.023039 0.100935
vn -0.998630 -0.017411 0.049346
v -0.137607 0.123998 0.003240
vn -0.945146 -0.032656 0.325012
v -0.134661 0.123981 0.018168
vn 0.000231 1.000000 -0.000414
v -0.103567 0.123994 -0.051060
vn -0.000120 1.000000 -0.000128
v -0.113556 0.123983 -0.045728
vn 0.339787 -0.075367 -0.937478
v 0.054037 -0.011261 0.000538
vn 0.396812 -0.009036 -0.917855
v 0.055140 -0.002814 0.000579
vn 0.645043 0.324010 -0.692053
v 0.050232 0.023144 0.000568
vn -0.413446 -0.909652 0.039946
v -0.023522 -0.049968 0.000617
vn -0.223586 -0.973841 0.040544
v -0.010681 -0.054289 0.000562
vn -0.000035 1.000000 0.000051
v -0.132118 0.123998 -0.024018
vn -0.000016 1.000000 -0.000012
v -0.136445 0.123998 -0.011417
vn 0.000187 1.000000 -0.000458
v -0.125335 0.124000 -0.034670
vn 0.093846 -0.364498 -0.926463
v 0.014950 -0.053137 0.000568
vn 0.031712 -0.415378 -0.909096
v 0.004073 -0.055150 0.000623
vn -0.130935 -0.676560 0.724654
v -0.006624 -0.046218 0.091497
vn 0.093686 -0.661904 0.743711
v 0.007130 -0.045217 0.093041
vn -0.333827 -0.915077 0.226260
v -0.017654 -0.043502 0.090834
vn -0.421940 -0.568638 0.706128
v -0.026170 -0.039015 0.090543
# 193 vertices, 0 vertices normals
f 153//153 154//154 3//3
f 3//3 154//154 155//155
f 156//156 157//157 158//158
f 8//8 159//159 160//160
f 161//161 156//156 162//162
f 7//7 6//6 13//13
f 5//5 8//8 160//160
f 163//163 10//10 9//9
f 15//15 16//16 17//17
f 15//15 17//17 164//164
f 15//15 19//19 16//16
f 165//165 166//166 156//156
f 22//22 3//3 155//155
f 23//23 3//3 22//22
f 2//2 24//24 4//4
f 163//163 162//162 156//156
f 163//163 156//156 10//10
f 167//167 26//26 18//18
f 168//168 18//18 26//26
f 6//6 28//28 13//13
f 169//169 30//30 5//5
f 170//170 32//32 33//33
f 16//16 34//34 17//17
f 15//15 164//164 27//27
f 15//15 35//35 19//19
f 35//35 15//15 27//27
f 1//1 16//16 2//2
f 16//16 19//19 2//2
f 168//168 26//26 36//36
f 36//36 37//37 171//171
f 39//39 40//40 41//41
f 42//42 21//21 20//20
f 20//20 43//43 42//42
f 39//39 172//172 173//173
f 20//20 41//41 43//43
f 41//41 42//42 43//43
f 19//19 24//24 2//2
f 155//155 174//174 47//47
f 46//46 4//4 48//48
f 49//49 22//22 47//47
f 22//22 49//49 23//23
f 22//22 155//155 47//47
f 3//3 23//23 50//50
f 51//51 23//23 52//52
f 53//53 153//153 3//3
f 40//40 54//54 55//55
f 175//175 57//57 40//40
f 157//157 156//156 166//166
f 6//6 21//21 28//28
f 28//28 21//21 58//58
f 176//176 60//60 177//177
f 12//12 14//14 62//62
f 63//63 62//62 37//37
f 178//178 179//179 156//156
f 156//156 161//161 178//178
f 11//11 12//12 63//63
f 37//37 62//62 180//180
f 158//158 29//29 156//156
f 14//14 31//31 181//181
f 182//182 31//31 14//14
f 32//32 8//8 30//30
f 180//180 171//171 37//37
f 69//69 70//70 36//36
f 164//164 17//17 25//25
f 17//17 34//34 71//71
f 1//1 34//34 16//16
f 35//35 27//27 38//38
f 20//20 172//172 41//41
f 165//165 156//156 44//44
f 172//172 39//39 41//41
f 72//72 73//73 74//74
f 75//75 40//40 57//57
f 48//48 76//76 46//46
f 48//48 77//77 76//76
f 24//24 35//35 78//78
f 24//24 19//19 35//35
f 79//79 24//24 78//78
f 79//79 48//48 4//4
f 79//79 78//78 33//33
f 42//42 58//58 21//21
f 80//80 13//13 28//28
f 57//57 51//51 81//81
f 52//52 49//49 82//82
f 56//56 40//40 55//55
f 83//83 56//56 55//55
f 84//84 83//83 55//55
f 85//85 183//183 184//184
f 88//88 71//71 34//34
f 156//156 61//61 45//45
f 156//156 45//45 44//44
f 59//59 61//61 156//156
f 12//12 62//62 63//63
f 185//185 186//186 156//156
f 185//185 156//156 187//187
f 26//26 188//188 189//189
f 189//189 94//94 26//26
f 26//26 167//167 188//188
f 7//7 13//13 95//95
f 30//30 8//8 5//5
f 182//182 159//159 8//8
f 182//182 14//14 159//159
f 67//67 33//33 66//66
f 170//170 68//68 32//32
f 77//77 48//48 32//32
f 32//32 48//48 33//33
f 189//189 87//87 94//94
f 96//96 97//97 86//86
f 73//73 96//96 74//74
f 96//96 86//86 74//74
f 97//97 94//94 87//87
f 70//70 11//11 63//63
f 78//78 38//38 66//66
f 71//71 25//25 17//17
f 36//36 171//171 168//168
f 98//98 83//83 99//99
f 100//100 101//101 102//102
f 103//103 104//104 39//39
f 105//105 106//106 107//107
f 108//108 106//106 105//105
f 74//74 99//99 109//109
f 109//109 72//72 74//74
f 99//99 74//74 98//98
f 40//40 75//75 41//41
f 110//110 32//32 30//30
f 79//79 4//4 24//24
f 81//81 42//42 75//75
f 52//52 80//80 111//111
f 52//52 82//82 80//80
f 49//49 47//47 112//112
f 82//82 49//49 112//112
f 13//13 80//80 82//82
f 57//57 113//113 51//51
f 23//23 49//49 52//52
f 114//114 115//115 113//113
f 114//114 190//190 115//115
f 114//114 57//57 175//175
f 114//114 113//113 57//57
f 117//117 85//85 184//184
f 62//62 14//14 181//181
f 118//118 64//64 11//11
f 119//119 60//60 176//176
f 120//120 121//121 107//107
f 187//187 156//156 179//179
f 36//36 122//122 69//69
f 93//93 92//92 71//71
f 95//95 169//169 7//7
f 169//169 95//95 110//110
f 110//110 30//30 169//169
f 80//80 28//28 58//58
f 68//68 8//8 32//32
f 67//67 170//170 33//33
f 93//93 71//71 117//117
f 123//123 124//124 96//96
f 125//125 126//126 127//127
f 97//97 87//87 86//86
f 128//128 97//97 124//124
f 35//35 38//38 78//78
f 78//78 66//66 33//33
f 84//84 129//129 130//130
f 130//130 83//83 84//84
f 100//100 131//131 132//132
f 54//54 102//102 84//84
f 103//103 102//102 104//104
f 39//39 104//104 40//40
f 103//103 100//100 102//102
f 173//173 103//103 39//39
f 132//132 101//101 100//100
f 100//100 60//60 131//131
f 133//133 105//105 107//107
f 75//75 57//57 81//81
f 41//41 75//75 42//42
f 32//32 110//110 77//77
f 48//48 79//79 33//33
f 81//81 111//111 58//58
f 58//58 42//42 81//81
f 112//112 13//13 82//82
f 95//95 13//13 112//112
f 191//191 153//153 53//53
f 134//134 34//34 1//1
f 88//88 34//34 134//134
f 50//50 53//53 3//3
f 53//53 50//50 135//135
f 115//115 190//190 191//191
f 115//115 191//191 53//53
f 117//117 192//192 85//85
f 85//85 98//98 74//74
f 74//74 183//183 85//85
f 117//117 88//88 116//116
f 114//114 193//193 136//136
f 193//193 56//56 83//83
f 193//193 114//114 56//56
f 63//63 36//36 70//70
f 60//60 100//100 177//177
f 133//133 107//107 138//138
f 139//139 89//89 91//91
f 63//63 37//37 36//36
f 122//122 36//36 26//26
f 76//76 47//47 174//174
f 112//112 47//47 76//76
f 117//117 71//71 88//88
f 184//184 93//93 117//117
f 124//124 123//123 140//140
f 97//97 96//96 124//124
f 127//127 65//65 64//64
f 25//25 71//71 92//92
f 141//141 106//106 142//142
f 120//120 106//106 141//141
f 130//130 99//99 83//83
f 60//60 119//119 131//131
f 141//141 129//129 101//101
f 55//55 54//54 84//84
f 54//54 104//104 102//102
f 105//105 143//143 108//108
f 95//95 112//112 76//76
f 76//76 110//110 95//95
f 77//77 110//110 76//76
f 51//51 52//52 81//81
f 81//81 52//52 111//111
f 135//135 50//50 51//51
f 51//51 113//113 135//135
f 135//135 115//115 53//53
f 98//98 137//137 83//83
f 137//137 85//85 192//192
f 137//137 98//98 85//85
f 116//116 192//192 117//117
f 190//190 114//114 136//136
f 177//177 103//103 173//173
f 186//186 59//59 156//156
f 90//90 119//119 176//176
f 144//144 119//119 90//90
f 145//145 131//131 119//119
f 107//107 121//121 145//145
f 120//120 107//107 106//106
f 143//143 146//146 123//123
f 146//146 143//143 105//105
f 146//146 105//105 133//133
f 147//147 133//133 138//138
f 148//148 91//91 65//65
f 139//139 91//91 148//148
f 147//147 139//139 148//148
f 125//125 64//64 118//118
f 127//127 64//64 125//125
f 126//126 149//149 127//127
f 150//150 140//140 123//123
f 147//147 148//148 149//149
f 141//141 121//121 120//120
f 142//142 99//99 130//130
f 121//121 141//141 132//132
f 132//132 141//141 101//101
f 101//101 84//84 102//102
f 101//101 129//129 84//84
f 54//54 40//40 104//104
f 103//103 177//177 100//100
f 108//108 109//109 106//106
f 109//109 108//108 72//72
f 58//58 111//111 80//80
f 23//23 51//51 50//50
f 115//115 135//135 113//113
f 116//116 88//88 134//134
f 62//62 181//181 180//180
f 89//89 151//151 90//90
f 146//146 150//150 123//123
f 138//138 139//139 147//147
f 124//124 140//140 128//128
f 128//128 140//140 152//152
f 152//152 140//140 126//126
f 147//147 150//150 146//146
f 147//147 149//149 150//150
f 147//147 146//146 133//133
f 132//132 145//145 121//121
f 109//109 142//142 106//106
f 89//89 139//139 151//151
f 97//97 128//128 94//94
f 128//128 152//152 94//94
f 150//150 149//149 126//126
f 65//65 149//149 148//148
f 65//65 127//127 149//149
f 131//131 145//145 132//132
f 107//107 144//144 138//138
f 142//142 109//109 99//99
f 11//11 70//70 69//69
f 69//69 118//118 11//11
f 72//72 143//143 73//73
f 143//143 72//72 108//108
f 126//126 140//140 150//150
f 152//152 125//125 69//69
f 130//130 141//141 142//142
f 130//130 129//129 141//141
f 151//151 144//144 90//90
f 107//107 145//145 144//144
f 138//138 144//144 151//151
f 139//139 138//138 151//151
f 126//126 125//125 152//152
f 69//69 125//125 118//118
f 144//144 145//145 119//119
f 94//94 152//152 122//122
f 94//94 122//122 26//26
f 96//96 143//143 123//123
f 143//143 96//96 73//73
f 152//152 69//69 122//122
# 300 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link5.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link5.obj
#
# Vertices: 206
# Faces: 300
#
####
vn -0.297555 0.228111 -0.927052
v -0.043130 0.034598 -0.258994
vn -0.861601 0.493534 -0.118605
v -0.049491 0.104632 -0.007973
vn -0.579070 0.786936 -0.213095
v -0.027600 0.088409 -0.173066
vn -0.603190 -0.049825 0.796040
v -0.029237 0.015796 0.038075
vn -0.806145 -0.044397 0.590051
v -0.038999 0.015812 0.028229
vn -0.131940 -0.973067 0.189030
v -0.007860 -0.051413 -0.216166
vn 0.016583 0.088848 -0.995907
v 0.011487 0.054236 -0.258996
vn -0.021428 0.125032 -0.991921
v -0.007970 0.054581 -0.259003
vn 0.010563 0.924340 -0.381423
v -0.000707 0.085375 -0.198830
vn 0.547336 -0.818752 0.173404
v 0.045218 0.015812 0.016179
vn 0.695640 0.594138 0.403838
v 0.045246 0.101018 0.024398
vn 0.325909 -0.920392 0.216013
v 0.040147 0.015803 0.026312
vn 0.051751 0.017367 -0.998509
v 0.052580 0.017422 -0.259000
vn 0.796411 0.597002 0.096524
v 0.050526 0.103338 0.003046
vn 0.052990 0.000259 -0.998595
v 0.055083 -0.002321 -0.259005
vn 0.934968 -0.338380 0.106459
v 0.047668 0.015861 0.005726
vn 0.201276 -0.950917 0.235040
v 0.031288 0.015806 0.036584
vn 0.452819 0.543101 0.707105
v 0.030516 0.098952 0.042053
vn 0.313814 0.522169 0.793007
v 0.020163 0.098248 0.048192
vn -0.759059 0.605458 0.239270
v -0.049008 0.101881 0.014702
vn -0.763824 0.642687 0.059382
v -0.050406 0.103940 0.000262
vn -0.914549 -0.389074 0.110549
v -0.047662 0.015861 0.005784
vn -0.894877 -0.039178 0.444591
v -0.045413 0.101011 0.023883
vn -0.803349 -0.041248 0.594078
v -0.040353 0.100177 0.032255
vn -0.644037 0.627781 0.437159
v -0.038660 0.108339 0.024701
vn -0.513779 0.226366 -0.827520
v -0.050298 0.022377 -0.259002
vn -0.397357 -0.904076 0.157332
v -0.023453 -0.047983 -0.221382
vn -0.935827 -0.039506 0.350239
v -0.045252 0.015805 0.016002
vn 0.575383 0.581670 0.574973
v 0.037409 0.099821 0.035842
vn -0.355855 -0.051896 0.933099
v -0.017632 0.015806 0.044786
vn -0.073918 0.498419 0.863779
v -0.004649 0.097802 0.052168
vn -0.297636 0.550990 0.779630
v -0.019825 0.098533 0.048275
vn -0.012657 -0.968588 0.248350
v -0.002655 0.015805 0.047984
vn 0.292432 0.671465 0.680895
v 0.015182 0.116651 0.035517
vn 0.093333 0.966828 0.237764
v 0.010322 0.125617 0.027241
vn 0.146818 0.693362 0.705474
v 0.007445 0.117539 0.037264
vn 0.848747 0.518280 -0.104950
v 0.049514 0.104438 -0.008035
vn 0.047209 0.037208 -0.998192
v 0.043474 0.034016 -0.258998
vn -0.119276 0.921596 -0.369371
v -0.011393 0.084303 -0.199691
vn -0.636486 0.697408 -0.329405
v -0.022230 0.084040 -0.194700
vn -0.601429 0.715764 -0.354916
v -0.026016 0.048977 -0.258996
vn -0.214854 0.969431 0.118492
v -0.015768 0.128209 0.010706
vn -0.382951 0.743200 0.548636
v -0.016435 0.125262 0.025051
vn -0.053662 0.977551 0.203749
v -0.004211 0.128983 0.016533
vn -0.062104 0.753817 0.654143
v -0.002979 0.125747 0.028930
vn -0.523456 0.563882 0.638773
v -0.034141 0.099325 0.039097
vn -0.514969 -0.049405 0.855784
v -0.025397 0.098560 0.045450
vn -0.434650 0.588722 0.681533
v -0.027126 0.105324 0.039382
vn 0.757433 0.631670 0.165195
v 0.044603 0.109300 0.009724
vn 0.968610 -0.033553 0.246312
v 0.048581 0.101810 0.015875
vn 0.065243 0.996682 0.048666
v 0.005702 0.129778 0.007863
vn -0.065242 0.994721 0.079205
v -0.006807 0.129518 0.011324
vn 0.105843 0.981941 0.156810
v 0.008238 0.128888 0.014707
vn 0.393378 0.682970 0.615472
v 0.020267 0.117145 0.032245
vn 0.231553 0.954661 0.187098
v 0.021609 0.124624 0.021486
vn 0.535349 0.816978 -0.214356
v 0.027149 0.088218 -0.175367
vn 0.268652 0.870632 -0.412099
v 0.016970 0.082864 -0.200849
vn 0.037508 0.059194 -0.997542
v 0.030975 0.045755 -0.259001
vn 0.120013 0.922387 -0.367150
v 0.010850 0.085165 -0.197911
vn 0.101168 0.992850 -0.063362
v 0.010180 0.129396 -0.000721
vn 0.237637 0.961513 -0.137919
v 0.018286 0.127374 -0.005254
vn 0.091333 0.979490 -0.179607
v 0.008646 0.128414 -0.009444
vn 0.947729 -0.318426 0.020382
v 0.052146 -0.017477 -0.243011
vn 0.052618 -0.012676 -0.998534
v 0.054317 -0.010114 -0.258986
vn 0.054020 0.569919 0.819923
v 0.002603 0.105303 0.047947
vn 0.227872 0.578291 0.783361
v 0.013170 0.105957 0.045491
vn -0.495576 0.841536 0.214990
v -0.028201 0.123798 0.013646
vn -0.536257 0.843640 -0.026454
v -0.032903 0.122164 0.000226
vn -0.712823 0.683223 0.158395
v -0.041418 0.113500 0.007594
vn -0.180317 0.982804 -0.039766
v -0.014582 0.128709 0.000608
vn -0.036307 0.999010 -0.025690
v -0.004047 0.129904 0.002559
vn -0.216298 0.963387 -0.158430
v -0.016543 0.127324 -0.007896
vn -0.066179 0.985551 -0.155914
v -0.006340 0.129112 -0.006773
vn -0.646849 0.687252 0.330563
v -0.034761 0.116530 0.017193
vn -0.713048 0.628714 0.310292
v -0.043473 0.108215 0.015850
vn -0.544084 0.702299 0.459073
v -0.028435 0.118371 0.023551
vn -0.685993 0.128311 -0.716205
v -0.053972 0.011547 -0.259007
vn 0.147527 -0.051403 0.987721
v 0.008457 0.097855 0.051580
vn 0.095381 -0.964695 0.245491
v 0.014791 0.015774 0.045936
vn -0.251135 -0.954278 0.162129
v -0.014812 -0.050694 -0.219569
vn -0.088057 -0.995480 0.035560
v -0.005146 -0.054597 -0.245451
vn -0.158066 -0.983508 0.087907
v -0.011150 -0.053091 -0.233902
vn -0.209356 -0.977229 0.034554
v -0.011589 -0.053809 -0.248529
vn 0.566854 0.819847 -0.080798
v 0.033069 0.121645 -0.002943
vn 0.362970 0.927534 -0.089066
v 0.024511 0.125729 -0.002052
vn 0.530394 0.843639 0.083392
v 0.031426 0.122907 0.006909
vn 0.702753 0.707330 0.076306
v 0.040191 0.115285 0.003949
vn 0.713214 0.696595 -0.077989
v 0.042523 0.112999 -0.006256
vn -0.137510 0.579567 0.803239
v -0.008002 0.106305 0.046502
vn -0.009784 0.676251 0.736607
v -0.000101 0.117598 0.038153
vn 0.251699 0.966013 0.058877
v 0.018216 0.127911 0.008189
vn 0.402191 0.851946 -0.335307
v 0.023166 0.084957 -0.191089
vn 0.768202 0.639385 0.032455
v 0.047339 0.107777 -0.000015
vn 0.149357 0.953749 -0.260876
v 0.014666 0.089405 -0.183272
vn -0.236062 0.943236 -0.233623
v -0.020300 0.089922 -0.177150
vn 0.000653 -0.106998 -0.994259
v 0.003135 -0.055128 -0.258948
vn -0.019646 -0.995812 0.089291
v -0.001501 -0.054086 -0.234891
vn 0.656550 -0.749020 0.088941
v 0.036992 -0.040836 -0.231671
vn 0.464451 0.599151 0.652153
v 0.026981 0.106874 0.038056
vn 0.365771 0.584605 0.724188
v 0.020798 0.105010 0.043209
vn -0.316141 0.948576 0.016090
v -0.020944 0.127182 0.004685
vn -0.102416 0.957634 -0.269161
v -0.010877 0.089085 -0.186003
vn -0.004118 0.963181 -0.268822
v 0.000367 0.089818 -0.185536
vn -0.325140 0.937130 -0.126777
v -0.023461 0.125996 -0.003386
vn -0.422935 0.675401 0.604118
v -0.021875 0.117390 0.030877
vn -0.542741 0.625258 0.560789
v -0.030896 0.110555 0.031109
vn -0.730385 -0.033279 -0.682224
v -0.055017 -0.004388 -0.258986
vn -0.969375 -0.244473 0.023325
v -0.053213 -0.013911 -0.245524
vn 0.691779 0.668481 0.273083
v 0.041120 0.112056 0.013545
vn 0.599247 0.695465 0.396524
v 0.032510 0.117444 0.019462
vn 0.641629 0.622230 0.448488
v 0.038673 0.107987 0.025256
vn 0.323096 0.939113 0.116943
v 0.026521 0.124106 0.015798
vn -0.150220 0.678360 0.719209
v -0.005993 0.115866 0.039041
vn -0.297146 0.628128 0.719138
v -0.015879 0.111456 0.040196
vn -0.256443 0.709805 0.656059
v -0.013213 0.118951 0.033896
vn 0.183395 -0.962334 0.200699
v 0.009960 -0.050737 -0.214368
vn 0.276420 -0.949173 0.150540
v 0.017403 -0.050181 -0.220985
vn -0.712048 0.700149 -0.052719
v -0.041061 0.114696 -0.004035
vn -0.029130 -0.130760 -0.990986
v -0.011763 -0.053896 -0.259001
vn 0.024250 -0.980261 0.196216
v 0.003435 -0.051526 -0.214300
vn 0.532236 0.654154 0.537408
v 0.029629 0.112933 0.029617
vn 0.900558 -0.433095 0.037738
v 0.048872 -0.025426 -0.239856
vn 0.746708 -0.663745 0.043237
v 0.040819 -0.037129 -0.234122
vn 0.046871 -0.038619 -0.998154
v 0.042926 -0.034475 -0.259000
vn 0.832958 -0.552100 0.036977
v 0.045144 -0.031605 -0.235642
vn 0.040704 -0.053210 -0.997753
v 0.034012 -0.043461 -0.258999
vn 0.016664 -0.089093 -0.995884
v 0.011211 -0.053977 -0.259006
vn 0.194858 -0.980013 0.040072
v 0.012804 -0.053442 -0.244006
vn 0.466174 -0.884154 0.030883
v 0.026756 -0.048162 -0.237477
vn 0.315732 -0.947407 0.052289
v 0.020007 -0.051225 -0.239239
vn 0.031350 -0.069809 -0.997068
v 0.022528 -0.050277 -0.258997
vn 0.545081 -0.836231 0.060037
v 0.031565 -0.045209 -0.234630
vn -0.851413 -0.522418 0.046635
v -0.046071 -0.030231 -0.236400
vn -0.382577 -0.233561 -0.893915
v -0.046492 -0.029710 -0.259049
vn -0.774942 -0.630787 0.039660
v -0.042351 -0.035317 -0.234111
vn -0.915954 -0.400348 0.027397
v -0.049871 -0.023523 -0.241469
vn -0.605202 -0.194888 -0.771848
v -0.052037 -0.018093 -0.259016
vn -0.572871 -0.819416 0.019374
v -0.032165 -0.044844 -0.237578
vn -0.198344 -0.209396 -0.957503
v -0.036886 -0.040848 -0.259013
vn -0.093847 -0.169093 -0.981122
v -0.025513 -0.048914 -0.259017
vn -0.437089 -0.897741 0.054907
v -0.025472 -0.048787 -0.236436
vn -0.563573 -0.817579 0.118113
v -0.031338 -0.044683 -0.227250
vn 0.050580 -0.025188 -0.998402
v 0.048748 -0.025715 -0.259002
vn 0.139261 -0.985797 0.093870
v 0.008180 -0.053460 -0.232618
vn 0.422566 -0.895594 0.139106
v 0.024104 -0.048184 -0.223965
vn 0.552297 -0.822353 0.136762
v 0.031089 -0.044128 -0.223477
vn -0.188037 0.934093 -0.303501
v -0.017817 0.087081 -0.188987
vn -0.143759 -0.098100 -0.984738
v -0.049720 -0.003351 -0.264554
vn -0.221017 0.099013 -0.970231
v -0.049702 0.003472 -0.264544
vn -0.678049 -0.732079 0.065645
v -0.038037 -0.039882 -0.232196
vn -0.328949 -0.944153 0.019189
v -0.019695 -0.051360 -0.242356
vn -0.296683 -0.951486 0.081574
v -0.018435 -0.051272 -0.232533
vn -0.753916 0.607996 -0.248901
v -0.043130 0.034598 -0.258994
vn -0.186654 -0.953564 0.236382
v -0.029237 0.015796 0.038075
vn -0.295128 -0.929512 0.221148
v -0.038999 0.015812 0.028229
vn 0.137481 0.880898 -0.452899
v 0.011487 0.054236 -0.258996
vn -0.133201 0.881000 -0.453978
v -0.007970 0.054581 -0.259003
vn 0.937052 -0.038789 0.347028
v 0.045218 0.015812 0.016179
vn 0.887697 -0.038635 0.458805
v 0.045246 0.101018 0.024398
vn 0.829621 -0.043415 0.556637
v 0.040147 0.015803 0.026312
vn 0.956327 0.279405 -0.085860
v 0.052580 0.017422 -0.259000
vn 0.997096 0.073642 0.019415
v 0.050526 0.103338 0.003046
vn 0.999944 -0.001228 0.010479
v 0.055083 -0.002321 -0.259005
vn 0.614341 -0.050316 0.787435
v 0.031288 0.015806 0.036584
vn 0.594792 -0.047259 0.802490
v 0.030516 0.098952 0.042053
vn 0.430692 -0.050971 0.901058
v 0.020163 0.098248 0.048192
vn -0.972793 -0.033337 0.229263
v -0.049008 0.101881 0.014702
vn -0.997424 0.071345 0.007449
v -0.050406 0.103940 0.000262
vn -0.706476 0.587274 0.394969
v -0.045413 0.101011 0.023883
vn -0.616090 0.587195 0.525009
v -0.040353 0.100177 0.032255
vn -0.901658 0.411800 -0.132036
v -0.050298 0.022377 -0.259002
vn -0.516569 -0.837110 0.180009
v -0.045252 0.015805 0.016002
vn 0.754981 -0.043055 0.654332
v 0.037409 0.099821 0.035842
vn -0.080937 -0.965948 0.245753
v -0.017632 0.015806 0.044786
vn -0.139151 -0.051159 0.988949
v -0.004649 0.097802 0.052168
vn -0.353152 -0.048764 0.934294
v -0.019825 0.098533 0.048275
vn -0.015893 -0.055185 0.998350
v -0.002655 0.015805 0.047984
vn 0.248878 0.745594 0.618182
v 0.010322 0.125617 0.027241
vn 0.766913 0.594965 -0.240544
v 0.043474 0.034016 -0.258998
vn -0.258142 0.896722 -0.359517
v -0.022230 0.084040 -0.194700
vn -0.110515 0.176752 -0.978031
v -0.026016 0.048977 -0.258996
vn -0.265063 0.853013 -0.449568
v -0.026016 0.048977 -0.258996
vn -0.188068 0.959109 0.211520
v -0.016435 0.125262 0.025051
vn -0.034547 0.966152 0.255650
v -0.002979 0.125747 0.028930
vn -0.683094 -0.046371 0.728857
v -0.034141 0.099325 0.039097
vn -0.422207 0.543137 0.725771
v -0.025397 0.098560 0.045450
vn 0.758912 0.597019 0.260040
v 0.048581 0.101810 0.015875
vn 0.482171 0.720429 0.498490
v 0.021609 0.124624 0.021486
vn 0.472277 0.785149 -0.400620
v 0.030975 0.045755 -0.259001
vn 0.977448 -0.210474 0.017192
v 0.054317 -0.010114 -0.258986
vn -0.973197 0.220468 -0.065434
v -0.053972 0.011547 -0.259007
vn 0.141809 0.499118 0.854852
v 0.008457 0.097855 0.051580
vn 0.299938 -0.053869 0.952436
v 0.014791 0.015774 0.045936
vn 0.045786 -0.998501 0.030005
v 0.003135 -0.055128 -0.258948
vn -0.996901 -0.078054 0.009774
v -0.055017 -0.004388 -0.258986
vn 0.611813 0.726328 0.313261
v 0.026521 0.124106 0.015798
vn -0.208660 -0.977987 -0.001866
v -0.011763 -0.053896 -0.259001
vn 0.779230 -0.626681 -0.008413
v 0.042926 -0.034475 -0.259000
vn 0.616540 -0.787286 -0.007723
v 0.034012 -0.043461 -0.258999
vn 0.248826 -0.968531 0.005865
v 0.011211 -0.053977 -0.259006
vn 0.412499 -0.910948 -0.004345
v 0.022528 -0.050277 -0.258997
vn -0.839129 -0.543855 -0.009219
v -0.046492 -0.029710 -0.259049
vn -0.946336 -0.323084 -0.008018
v -0.052037 -0.018093 -0.259016
vn -0.679657 -0.733413 -0.013138
v -0.036886 -0.040848 -0.259013
vn -0.459821 -0.887975 -0.008049
v -0.025513 -0.048914 -0.259017
vn 0.893573 -0.448826 -0.009057
v 0.048748 -0.025715 -0.259002
# 206 vertices, 0 vertices normals
f 153//153 2//2 3//3
f 154//154 155//155 6//6
f 156//156 157//157 9//9
f 158//158 159//159 160//160
f 161//161 162//162 163//163
f 163//163 162//162 16//16
f 164//164 165//165 166//166
f 167//167 168//168 22//22
f 169//169 170//170 25//25
f 5//5 24//24 23//23
f 153//153 171//171 2//2
f 27//27 155//155 172//172
f 173//173 165//165 164//164
f 174//174 154//154 6//6
f 175//175 176//176 30//30
f 175//175 30//30 177//177
f 34//34 178//178 36//36
f 37//37 161//161 179//179
f 39//39 9//9 157//157
f 180//180 157//157 182//182
f 28//28 167//167 22//22
f 42//42 183//183 44//44
f 44//44 183//183 184//184
f 4//4 185//185 5//5
f 186//186 48//48 46//46
f 185//185 4//4 47//47
f 14//14 49//49 187//187
f 50//50 16//16 162//162
f 51//51 52//52 53//53
f 178//178 54//54 188//188
f 53//53 35//35 55//55
f 184//184 35//35 44//44
f 56//56 37//37 179//179
f 156//156 57//57 189//189
f 57//57 156//156 59//59
f 60//60 61//61 62//62
f 63//63 190//190 16//16
f 190//190 163//163 16//16
f 65//65 66//66 36//36
f 67//67 68//68 69//69
f 42//42 44//44 52//52
f 70//70 52//52 71//71
f 72//72 70//70 73//73
f 74//74 75//75 25//25
f 67//67 183//183 42//42
f 67//67 76//76 43//43
f 191//191 2//2 171//171
f 153//153 40//40 41//41
f 180//180 39//39 157//157
f 192//192 65//65 31//31
f 175//175 177//177 78//78
f 78//78 177//177 193//193
f 27//27 80//80 155//155
f 6//6 155//155 80//80
f 81//81 82//82 83//83
f 4//4 30//30 47//47
f 50//50 159//159 158//158
f 84//84 85//85 86//86
f 86//86 87//87 84//84
f 84//84 87//87 88//88
f 47//47 30//30 176//176
f 32//32 48//48 186//186
f 31//31 89//89 32//32
f 89//89 31//31 65//65
f 65//65 90//90 89//89
f 65//65 192//192 66//66
f 91//91 53//53 55//55
f 91//91 51//51 53//53
f 92//92 179//179 189//189
f 56//56 179//179 92//92
f 93//93 49//49 14//14
f 9//9 59//59 156//156
f 92//92 189//189 57//57
f 92//92 59//59 94//94
f 73//73 95//95 72//72
f 81//81 194//194 97//97
f 98//98 16//16 10//10
f 99//99 54//54 100//100
f 100//100 54//54 34//34
f 70//70 42//42 52//52
f 42//42 101//101 67//67
f 101//101 68//68 67//67
f 51//51 71//71 52//52
f 102//102 103//103 39//39
f 72//72 104//104 70//70
f 42//42 70//70 101//101
f 101//101 70//70 104//104
f 3//3 104//104 95//95
f 74//74 69//69 75//75
f 23//23 28//28 5//5
f 69//69 74//74 67//67
f 20//20 75//75 69//69
f 20//20 69//69 21//21
f 76//76 105//105 43//43
f 76//76 25//25 106//106
f 185//185 24//24 5//5
f 106//106 25//25 170//170
f 191//191 195//195 168//168
f 153//153 3//3 40//40
f 166//166 78//78 193//193
f 192//192 19//19 66//66
f 195//195 108//108 22//22
f 193//193 164//164 166//166
f 173//173 164//164 160//160
f 187//187 49//49 109//109
f 110//110 111//111 109//109
f 49//49 87//87 109//109
f 53//53 44//44 35//35
f 86//86 196//196 109//109
f 196//196 110//110 109//109
f 91//91 112//112 86//86
f 85//85 91//91 86//86
f 109//109 87//87 86//86
f 113//113 114//114 89//89
f 115//115 43//43 105//105
f 45//45 36//36 178//178
f 36//36 45//45 90//90
f 91//91 60//60 51//51
f 56//56 84//84 88//88
f 85//85 84//84 56//56
f 37//37 162//162 161//161
f 93//93 87//87 49//49
f 59//59 9//9 94//94
f 103//103 94//94 9//9
f 59//59 92//92 57//57
f 94//94 56//56 92//92
f 51//51 60//60 71//71
f 73//73 71//71 60//60
f 116//116 117//117 12//12
f 116//116 12//12 17//17
f 36//36 66//66 34//34
f 52//52 44//44 53//53
f 73//73 70//70 71//71
f 104//104 72//72 95//95
f 74//74 76//76 67//67
f 74//74 25//25 76//76
f 105//105 76//76 106//106
f 21//21 118//118 2//2
f 194//194 81//81 197//197
f 197//197 81//81 83//83
f 195//195 22//22 168//168
f 120//120 6//6 97//97
f 111//111 110//110 121//121
f 121//121 110//110 188//188
f 11//11 187//187 109//109
f 111//111 11//11 109//109
f 50//50 158//158 16//16
f 93//93 37//37 88//88
f 114//114 113//113 115//115
f 115//115 113//113 45//45
f 115//115 45//45 43//43
f 89//89 90//90 113//113
f 114//114 32//32 89//89
f 105//105 114//114 115//115
f 188//188 54//54 121//121
f 34//34 54//54 178//178
f 90//90 65//65 36//36
f 19//19 18//18 100//100
f 99//99 100//100 18//18
f 100//100 66//66 19//19
f 66//66 100//100 34//34
f 91//91 85//85 61//61
f 112//112 91//91 55//55
f 93//93 14//14 37//37
f 73//73 62//62 103//103
f 9//9 39//39 103//103
f 102//102 95//95 73//73
f 122//122 63//63 16//16
f 123//123 198//198 125//125
f 123//123 199//199 198//198
f 123//123 98//98 199//199
f 194//194 200//200 128//128
f 129//129 130//130 201//201
f 79//79 116//116 17//17
f 129//129 201//201 199//199
f 132//132 129//129 199//199
f 29//29 99//99 18//18
f 60//60 62//62 73//73
f 118//118 69//69 68//68
f 118//118 21//21 69//69
f 25//25 75//75 169//169
f 105//105 106//106 48//48
f 106//106 46//46 48//48
f 104//104 3//3 68//68
f 168//168 2//2 191//191
f 133//133 202//202 135//135
f 136//136 203//203 202//202
f 138//138 204//204 205//205
f 141//141 27//27 142//142
f 172//172 142//142 27//27
f 141//141 142//142 138//138
f 120//120 79//79 33//33
f 110//110 196//196 188//188
f 11//11 111//111 29//29
f 159//159 173//173 160//160
f 37//37 56//56 88//88
f 45//45 113//113 90//90
f 60//60 91//91 61//61
f 61//61 85//85 56//56
f 62//62 61//61 94//94
f 94//94 61//61 56//56
f 94//94 103//103 62//62
f 63//63 122//122 206//206
f 63//63 206//206 190//190
f 98//98 123//123 16//16
f 98//98 132//132 199//199
f 97//97 144//144 120//120
f 201//201 130//130 200//200
f 132//132 145//145 129//129
f 146//146 98//98 10//10
f 10//10 145//145 146//146
f 132//132 98//98 146//146
f 68//68 101//101 104//104
f 147//147 95//95 102//102
f 170//170 46//46 106//106
f 118//118 68//68 3//3
f 2//2 118//118 3//3
f 147//147 39//39 180//180
f 39//39 147//147 102//102
f 96//96 119//119 148//148
f 127//127 96//96 148//148
f 148//148 119//119 140//140
f 131//131 127//127 148//148
f 148//148 140//140 139//139
f 126//126 131//131 148//148
f 148//148 124//124 126//126
f 148//148 134//134 137//137
f 148//148 143//143 124//124
f 148//148 64//64 143//143
f 148//148 15//15 64//64
f 149//149 181//181 8//8
f 1//1 181//181 149//149
f 149//149 8//8 7//7
f 149//149 26//26 1//1
f 77//77 26//26 149//149
f 7//7 58//58 149//149
f 149//149 107//107 77//77
f 149//149 148//148 107//107
f 58//58 38//38 149//149
f 149//149 38//38 13//13
f 13//13 15//15 149//149
f 15//15 148//148 149//149
f 150//150 135//135 204//204
f 136//136 108//108 203//203
f 97//97 6//6 82//82
f 82//82 6//6 80//80
f 138//138 150//150 204//204
f 138//138 142//142 150//150
f 205//205 151//151 141//141
f 174//174 6//6 120//120
f 120//120 33//33 174//174
f 29//29 111//111 121//121
f 114//114 48//48 32//32
f 99//99 121//121 54//54
f 88//88 87//87 93//93
f 198//198 206//206 125//125
f 194//194 144//144 97//97
f 95//95 180//180 3//3
f 20//20 169//169 75//75
f 167//167 28//28 23//23
f 137//137 107//107 148//148
f 203//203 108//108 195//195
f 133//133 136//136 202//202
f 97//97 82//82 81//81
f 152//152 82//82 80//80
f 142//142 172//172 22//22
f 142//142 22//22 150//150
f 138//138 205//205 141//141
f 120//120 116//116 79//79
f 29//29 121//121 99//99
f 114//114 105//105 48//48
f 16//16 123//123 125//125
f 122//122 125//125 206//206
f 128//128 144//144 194//194
f 144//144 116//116 120//120
f 128//128 200//200 130//130
f 103//103 102//102 73//73
f 95//95 147//147 180//180
f 135//135 150//150 22//22
f 204//204 135//135 202//202
f 134//134 148//148 139//139
f 151//151 197//197 83//83
f 125//125 122//122 16//16
f 10//10 12//12 145//145
f 12//12 117//117 145//145
f 116//116 144//144 117//117
f 132//132 146//146 145//145
f 27//27 141//141 152//152
f 141//141 151//151 152//152
f 152//152 151//151 83//83
f 152//152 83//83 82//82
f 145//145 130//130 129//129
f 133//133 135//135 22//22
f 136//136 133//133 22//22
f 151//151 205//205 197//197
f 108//108 136//136 22//22
f 152//152 80//80 27//27
f 117//117 130//130 145//145
f 130//130 144//144 128//128
f 144//144 130//130 117//117
# 300 faces, 0 coords texture
# End of File
================================================
FILE: assets/franka/meshes/collision/link6.obj
================================================
####
#
# OBJ File Generated by Meshlab
#
####
# Object link6.obj
#
# Vertices: 143
# Faces: 200
#
####
vn -0.760825 -0.313437 0.568245
v -0.044623 -0.016425 0.028378
vn -0.227174 -0.024276 -0.973551
v -0.048005 -0.003164 -0.014747
vn -0.250817 -0.113303 -0.961381
v -0.043919 -0.019759 -0.014745
vn -0.041341 -0.994369 -0.097580
v 0.082446 -0.051388 -0.043985
vn -0.195639 -0.979522 -0.047568
v -0.010917 -0.047107 -0.014281
vn -0.276602 -0.353944 -0.893429
v -0.024988 -0.041242 -0.014744
vn -0.829417 0.191909 0.524631
v -0.046709 0.007900 0.028003
vn -0.216872 0.039632 -0.975395
v -0.046934 0.010732 -0.014834
vn -0.119085 0.060683 -0.991028
v 0.083335 0.020392 -0.043403
vn -0.263959 -0.893837 0.362466
v -0.014513 -0.042906 0.031953
vn -0.075488 -0.989980 0.119336
v 0.052828 -0.051189 0.031754
vn -0.119869 -0.687952 0.715788
v 0.084025 -0.051216 0.044034
vn -0.790281 0.004006 0.612732
v -0.046951 -0.001408 0.029664
vn -0.728890 -0.684184 0.024747
v -0.035119 -0.033151 -0.014812
vn 0.129546 0.093020 0.987201
v 0.040446 0.018833 0.055529
vn 0.292048 0.158849 0.943120
v 0.099598 0.048589 0.039292
vn 0.231240 0.829489 0.508405
v 0.090083 0.071522 0.036134
vn -0.000859 -0.999981 -0.006132
v 0.096210 -0.051223 0.043315
vn 0.145610 -0.049981 0.988079
v 0.043446 -0.017819 0.055119
vn -0.084144 -0.578348 0.811439
v 0.015562 -0.024034 0.056309
vn 0.586421 0.059774 0.807798
v 0.113921 0.019367 0.035382
vn 0.340553 0.037708 0.939469
v 0.103877 0.012659 0.041045
vn -0.000029 -0.999996 -0.002717
v 0.112193 -0.051199 0.037192
vn -0.403518 -0.909660 0.098445
v -0.020125 -0.043108 0.021211
vn -0.578769 -0.761934 0.290661
v -0.029993 -0.035958 0.029048
vn -0.762049 0.395550 0.512660
v -0.043011 0.020195 0.027855
vn -0.230617 0.149398 -0.961507
v -0.040367 0.026331 -0.014752
vn 0.193475 0.038003 -0.980369
v 0.096678 0.014294 -0.043244
vn 0.006958 -0.999945 -0.007882
v 0.097130 -0.051200 -0.043143
vn -0.202763 -0.970889 0.127524
v -0.009168 -0.046587 0.021677
vn -0.679115 -0.506270 0.531500
v -0.037619 -0.028323 0.028484
vn 0.000691 -1.000000 0.000464
v 0.123994 -0.051197 0.025458
vn 0.765772 0.046628 0.641420
v 0.121453 0.018448 0.028662
vn 0.369273 0.928776 -0.031822
v 0.108684 0.074084 -0.011412
vn 0.094464 0.979820 0.176149
v 0.078251 0.079509 0.024287
vn 0.315937 0.899248 0.302552
v 0.100013 0.075251 0.024123
vn 0.676166 0.733916 0.064549
v 0.118023 0.068405 0.008846
vn 0.893725 0.448572 -0.006256
v 0.126265 0.058419 -0.000245
vn 0.697384 0.714265 -0.058994
v 0.120245 0.066297 -0.006879
vn -0.216668 0.948192 -0.232349
v 0.059885 0.080214 -0.015544
vn -0.275853 0.961199 0.001081
v 0.057760 0.081278 0.000354
vn 0.029229 0.998825 -0.038654
v 0.067158 0.081681 -0.007441
vn 0.08874
gitextract_rq0avka1/
├── .gitattributes
├── .gitignore
├── .gitmodules
├── LICENSE
├── LICENSE_ASSETS.md
├── README.md
├── assets/
│ ├── franka/
│ │ ├── franka_panda.urdf
│ │ └── meshes/
│ │ ├── collision/
│ │ │ ├── finger.obj
│ │ │ ├── hand.obj
│ │ │ ├── link0.obj
│ │ │ ├── link1.obj
│ │ │ ├── link2.obj
│ │ │ ├── link3.obj
│ │ │ ├── link4.obj
│ │ │ ├── link5.obj
│ │ │ ├── link6.obj
│ │ │ └── link7.obj
│ │ └── visual/
│ │ ├── finger.dae
│ │ ├── hand.dae
│ │ ├── link0.dae
│ │ ├── link1.dae
│ │ ├── link2.dae
│ │ ├── link3.dae
│ │ ├── link4.dae
│ │ ├── link5.dae
│ │ ├── link6.dae
│ │ └── link7.dae
│ ├── objects/
│ │ ├── banana.obj
│ │ ├── box.obj
│ │ └── example_object.pcd
│ ├── panda_gripper/
│ │ ├── finger.stl
│ │ └── hand.stl
│ ├── robotiq/
│ │ └── robotiq_140_collision.obj
│ └── suction/
│ └── suction_cup.obj
├── client-server/
│ ├── README.md
│ ├── graspgen_client.py
│ └── graspgen_server.py
├── config/
│ └── grippers/
│ ├── franka_panda.py
│ ├── franka_panda.yaml
│ ├── robotiq_2f_140.py
│ ├── robotiq_2f_140.yaml
│ ├── robotiq_2f_85.yaml
│ ├── single_suction_cup_30mm.py
│ └── single_suction_cup_30mm.yaml
├── docker/
│ ├── build.sh
│ ├── compose.serve.yml
│ ├── graspgen_cuda121.dockerfile
│ ├── graspgen_cuda128.dockerfile
│ ├── run.sh
│ ├── run_meshcat.sh
│ ├── run_server.sh
│ └── serve.dockerfile
├── docs/
│ ├── GRASP_DATASET_FORMAT.md
│ └── GRIPPER_DESCRIPTION.md
├── grasp_gen/
│ ├── __init__.py
│ ├── dataset/
│ │ ├── dataset.py
│ │ ├── dataset_utils.py
│ │ ├── eval_utils.py
│ │ ├── exceptions.py
│ │ ├── image_utils.py
│ │ ├── renderer.py
│ │ ├── suction.py
│ │ ├── visualize_utils.py
│ │ └── webdataset_utils.py
│ ├── grasp_server.py
│ ├── metrics.py
│ ├── models/
│ │ ├── action_decoder.py
│ │ ├── contact_decoder.py
│ │ ├── criterion.py
│ │ ├── discriminator.py
│ │ ├── generator.py
│ │ ├── grasp_gen.py
│ │ ├── m2t2.py
│ │ ├── matcher.py
│ │ ├── model_utils.py
│ │ ├── pointnet/
│ │ │ ├── pointnet2.py
│ │ │ ├── pointnet2_modules.py
│ │ │ └── pointnet2_utils.py
│ │ ├── ptv3/
│ │ │ ├── ptv3.py
│ │ │ └── serialization/
│ │ │ ├── __init__.py
│ │ │ ├── default.py
│ │ │ ├── hilbert.py
│ │ │ └── z_order.py
│ │ └── vit.py
│ ├── robot.py
│ ├── serving/
│ │ ├── __init__.py
│ │ ├── zmq_client.py
│ │ └── zmq_server.py
│ └── utils/
│ ├── logging_config.py
│ ├── math_utils.py
│ ├── meshcat_utils.py
│ ├── plot_utils.py
│ ├── point_cloud_utils.py
│ ├── rotation_conversions.py
│ ├── so3.py
│ ├── train_utils.py
│ └── viser_utils.py
├── install_pointnet.sh
├── install_uv_pointnet.sh
├── mcp/
│ ├── .python-version
│ ├── README.md
│ ├── pyproject.toml
│ └── src/
│ └── mcp_server_graspgen/
│ ├── __init__.py
│ ├── __main__.py
│ └── server.py
├── pointnet2_ops/
│ ├── MANIFEST.in
│ ├── pointnet2_ops/
│ │ ├── __init__.py
│ │ ├── _ext-src/
│ │ │ ├── include/
│ │ │ │ ├── ball_query.h
│ │ │ │ ├── cuda_utils.h
│ │ │ │ ├── group_points.h
│ │ │ │ ├── interpolate.h
│ │ │ │ ├── sampling.h
│ │ │ │ └── utils.h
│ │ │ └── src/
│ │ │ ├── ball_query.cpp
│ │ │ ├── ball_query_gpu.cu
│ │ │ ├── bindings.cpp
│ │ │ ├── group_points.cpp
│ │ │ ├── group_points_gpu.cu
│ │ │ ├── interpolate.cpp
│ │ │ ├── interpolate_gpu.cu
│ │ │ ├── sampling.cpp
│ │ │ └── sampling_gpu.cu
│ │ ├── _version.py
│ │ ├── pointnet2_modules.py
│ │ └── pointnet2_utils.py
│ └── setup.py
├── pyproject.toml
├── requirements.txt
├── runs/
│ ├── train_graspgen_franka_panda_dis.sh
│ ├── train_graspgen_franka_panda_gen.sh
│ ├── train_graspgen_robotiq_2f_140_dis.sh
│ └── train_graspgen_robotiq_2f_140_gen.sh
├── scripts/
│ ├── config.yaml
│ ├── convert_obj_to_usd.py
│ ├── create_grasp_sim_usd.py
│ ├── demo_collision_free_grasps.py
│ ├── demo_object_mesh.py
│ ├── demo_object_pc.py
│ ├── demo_scene_pc.py
│ ├── download_objects.py
│ ├── inference_graspgen.py
│ ├── inference_m2t2.py
│ ├── run_grasp_sim_omniverse.py
│ ├── save_grasps_to_usd.py
│ ├── train_graspgen.py
│ └── train_m2t2.py
├── setup.py
├── tests/
│ ├── conftest.py
│ ├── test_dataset_format.py
│ ├── test_grasp_server.py
│ ├── test_inference_installation.py
│ ├── test_inference_perf.py
│ ├── test_math_utils.py
│ ├── test_point_cloud_utils.py
│ ├── test_robot.py
│ ├── test_rotation_conversions.py
│ ├── test_serving.py
│ └── test_usd_grasp_pipeline.py
└── tutorials/
├── TUTORIAL.md
├── generate_dataset_suction_single_object.py
├── generate_model_inference_config.py
├── tutorial_train_dis.sh
└── tutorial_train_gen.sh
SYMBOL INDEX (818 symbols across 82 files)
FILE: client-server/graspgen_client.py
function parse_args (line 43) | def parse_args():
function load_point_cloud_from_mesh (line 96) | def load_point_cloud_from_mesh(mesh_file: str, scale: float, num_points:...
function load_point_cloud_from_file (line 106) | def load_point_cloud_from_file(pcd_file: str) -> np.ndarray:
function _read_pcd_ascii (line 129) | def _read_pcd_ascii(path: str) -> np.ndarray:
function main (line 144) | def main():
function visualize_results (line 204) | def visualize_results(
FILE: client-server/graspgen_server.py
function parse_args (line 27) | def parse_args():
function main (line 53) | def main():
FILE: config/grippers/franka_panda.py
class GripperModel (line 8) | class GripperModel():
method __init__ (line 9) | def __init__(self, data_root_dir=None):
method set_offset (line 26) | def set_offset(self, offset):
method get_gripper_collision_mesh (line 30) | def get_gripper_collision_mesh(self):
method get_gripper_visual_mesh (line 33) | def get_gripper_visual_mesh(self):
function get_gripper_offset_bins (line 36) | def get_gripper_offset_bins():
function load_control_points (line 52) | def load_control_points() -> torch.Tensor:
function load_control_points_for_visualization (line 65) | def load_control_points_for_visualization():
FILE: config/grippers/robotiq_2f_140.py
class GripperModel (line 8) | class GripperModel(object):
method __init__ (line 9) | def __init__(self, data_root_dir=None):
method get_gripper_collision_mesh (line 15) | def get_gripper_collision_mesh(self):
method get_gripper_visual_mesh (line 18) | def get_gripper_visual_mesh(self):
function get_gripper_offset_bins (line 21) | def get_gripper_offset_bins():
function load_control_points (line 36) | def load_control_points() -> torch.Tensor:
function load_control_points_for_visualization (line 48) | def load_control_points_for_visualization():
FILE: config/grippers/single_suction_cup_30mm.py
class GripperModel (line 9) | class GripperModel(object):
method __init__ (line 10) | def __init__(self, data_root_dir=None, simplified=True):
method get_gripper_collision_mesh (line 17) | def get_gripper_collision_mesh(self):
method get_gripper_visual_mesh (line 23) | def get_gripper_visual_mesh(self):
function load_visualize_control_points_suction (line 27) | def load_visualize_control_points_suction():
function load_control_points (line 33) | def load_control_points() -> torch.Tensor:
function load_control_points_for_visualization (line 44) | def load_control_points_for_visualization():
function get_transform_from_base_link_to_tool_tcp (line 68) | def get_transform_from_base_link_to_tool_tcp():
FILE: grasp_gen/dataset/dataset.py
function get_cache_path (line 78) | def get_cache_path(cache_dir: str, root_dir: str) -> str:
function get_cache_prefix (line 87) | def get_cache_prefix(prob_point_cloud: float, load_discriminator_dataset...
function get_pc_setting_name (line 94) | def get_pc_setting_name(prob_point_cloud: float) -> str:
function get_denylist_path (line 101) | def get_denylist_path(
function is_valid_cache_dir (line 112) | def is_valid_cache_dir(cfg: DictConfig) -> bool:
function load_grasps_with_contacts (line 205) | def load_grasps_with_contacts(
function load_scenes_from_text_file (line 337) | def load_scenes_from_text_file(file_path: str) -> list:
class PickDataset (line 362) | class PickDataset(Dataset):
method __init__ (line 363) | def __init__(
method load_onpolicy_dataset (line 493) | def load_onpolicy_dataset(self):
method load_cache (line 611) | def load_cache(self, cache_save_freq: int = 2000):
method save_to_denylist (line 763) | def save_to_denylist(self, denylist_path, key, error_code):
method from_config (line 775) | def from_config(cls, cfg):
method __len__ (line 814) | def __len__(self):
method __getitem__ (line 817) | def __getitem__(self, idx):
class ObjectPickDataset (line 821) | class ObjectPickDataset(PickDataset):
method calculate_dataset_kappa (line 823) | def calculate_dataset_kappa(self) -> float:
method __getitem__ (line 855) | def __getitem__(self, idx):
function generate_negative_hardnegatives (line 1315) | def generate_negative_hardnegatives(
function generate_negative_retract (line 1414) | def generate_negative_retract(
function generate_negative_freespace (line 1434) | def generate_negative_freespace(num_grasps: int) -> np.ndarray:
function load_discriminator_batch_with_stratified_sampling (line 1451) | def load_discriminator_batch_with_stratified_sampling(
function collate_batch_keys (line 1634) | def collate_batch_keys(batch):
function collate (line 1660) | def collate(batch):
FILE: grasp_gen/dataset/dataset_utils.py
class GraspJsonDatasetReader (line 63) | class GraspJsonDatasetReader:
method __init__ (line 66) | def __init__(self, grasp_root_dir: str):
method _create_uuid_to_path_mapping (line 95) | def _create_uuid_to_path_mapping(self):
method read_grasps_by_uuid (line 125) | def read_grasps_by_uuid(self, object_id: str) -> Union[Dict, None]:
function sample_points (line 152) | def sample_points(xyz, num_points):
function load_from_json (line 160) | def load_from_json(json_path) -> dict:
function convert_trimesh_to_dict (line 167) | def convert_trimesh_to_dict(mesh: trimesh.base.Trimesh) -> Dict:
function convert_dict_to_trimesh (line 193) | def convert_dict_to_trimesh(mesh_data: Dict) -> trimesh.base.Trimesh:
class ObjectGraspDataset (line 208) | class ObjectGraspDataset:
method export_to_dict (line 218) | def export_to_dict(self) -> Dict:
method from_dict (line 231) | def from_dict(cls, data: Dict):
function filter_grasps_by_point_cloud_visibility (line 248) | def filter_grasps_by_point_cloud_visibility(
class GraspGenDatasetCache (line 291) | class GraspGenDatasetCache(dict):
method __init__ (line 292) | def __init__(self):
method __getitem__ (line 295) | def __getitem__(self, key: str) -> Tuple[ObjectGraspDataset, dict]:
method __setitem__ (line 298) | def __setitem__(self, key: str, value: Tuple[ObjectGraspDataset, dict]):
method __len__ (line 301) | def __len__(self):
method __contains__ (line 304) | def __contains__(self, key: str) -> bool:
method load_from_h5_file (line 308) | def load_from_h5_file(cls, path_to_h5_file: str):
method save_to_h5_file (line 344) | def save_to_h5_file(self, path_to_h5_file: str):
function compute_emd_data (line 374) | def compute_emd_data(
function visualize_object_grasp_dataset (line 501) | def visualize_object_grasp_dataset(
function load_object_grasp_data (line 559) | def load_object_grasp_data(
function get_json_file_given_object_id (line 639) | def get_json_file_given_object_id(json_files: List[str], object_id_key: ...
function load_onpolicy_dataset (line 656) | def load_onpolicy_dataset(
function load_object_grasp_acronym (line 710) | def load_object_grasp_acronym(
function load_grasp_data (line 820) | def load_grasp_data(
function load_object_grasp_datapoint_objaverse (line 836) | def load_object_grasp_datapoint_objaverse(
function dump_object_list (line 974) | def dump_object_list(objects, json_file_path):
function purge_redundant_checkpoints (line 980) | def purge_redundant_checkpoints(list_of_dirs: List[str], execute: bool =...
function get_rotation_augmentation (line 1010) | def get_rotation_augmentation(stratified_sampling: bool = True) -> np.nd...
FILE: grasp_gen/dataset/eval_utils.py
function log_worker (line 16) | def log_worker(log_queue, log_file=None):
function get_logger (line 31) | def get_logger(name, log_queue):
function get_timestamp (line 43) | def get_timestamp():
function check_collision (line 56) | def check_collision(scene_mesh, object_mesh, transforms):
function write_to_h5 (line 73) | def write_to_h5(key, src, dst):
function is_empty (line 82) | def is_empty(data):
function load_h5_handle_empty_case (line 86) | def load_h5_handle_empty_case(data):
function write_info (line 93) | def write_info(group: Group, info: dict):
function pose_as_dict (line 127) | def pose_as_dict(p):
function create_scene (line 136) | def create_scene(robot_pose, object_asset):
function create_object_asset (line 151) | def create_object_asset(file_name, scale, actor_name, asset_root, resolu...
function create_robot_asset (line 187) | def create_robot_asset():
function save_to_isaac_grasp_format (line 210) | def save_to_isaac_grasp_format(
function load_from_isaac_grasp_format (line 250) | def load_from_isaac_grasp_format(file_path: str) -> Tuple[np.ndarray, np...
function load_urdf_scene (line 285) | def load_urdf_scene(urdf_path: str) -> URDF:
FILE: grasp_gen/dataset/exceptions.py
class ErrorInfo (line 6) | class ErrorInfo:
class DataLoaderError (line 11) | class DataLoaderError(Enum):
method code (line 55) | def code(self) -> int:
method description (line 59) | def description(self) -> str:
method is_success (line 62) | def is_success(self) -> bool:
method is_error (line 65) | def is_error(self) -> bool:
FILE: grasp_gen/dataset/image_utils.py
function gen_lut (line 38) | def gen_lut() -> np.ndarray:
function labels2rgb (line 55) | def labels2rgb(labels: np.ndarray, lut: np.ndarray = None) -> np.ndarray:
function depth2rgb (line 73) | def depth2rgb(depth: np.ndarray, colormap: int = None) -> np.ndarray:
function draw_circles (line 96) | def draw_circles(
function draw_lines (line 119) | def draw_lines(
function draw_rectangles (line 152) | def draw_rectangles(
function blend_images (line 177) | def blend_images(images: List[np.ndarray], ratios: List[float] = None) -...
function image_grid (line 202) | def image_grid(
function imshow (line 248) | def imshow(im: np.ndarray, name: str = "", is_blocking: bool = True) -> ...
function save_image (line 267) | def save_image(img: Union[np.ndarray, Image.Image], image_fname: str) ->...
function draw_bbox (line 282) | def draw_bbox(
function convert_label_img_to_seg (line 320) | def convert_label_img_to_seg(seg: np.ndarray) -> np.ndarray:
function decompress_png (line 342) | def decompress_png(image_comp: np.ndarray, return_unit8: bool) -> np.nda...
function convert_img_float_uint8 (line 367) | def convert_img_float_uint8(image: np.ndarray) -> Image.Image:
function compress_img (line 389) | def compress_img(image: Union[np.ndarray, Image.Image], is_unit8: bool) ...
function jitter_gaussian (line 420) | def jitter_gaussian(xyz: torch.Tensor, std: float, clip: float) -> torch...
function add_noise_to_xyz (line 437) | def add_noise_to_xyz(
function add_gaussian_noise_to_depth (line 474) | def add_gaussian_noise_to_depth(
function dropout_random_ellipses (line 499) | def dropout_random_ellipses(
function get_xp_yp (line 580) | def get_xp_yp(rows: int, cols: int) -> Tuple[np.ndarray, np.ndarray]:
function add_gaussian_shifts (line 599) | def add_gaussian_shifts(
function mask_object_edge (line 654) | def mask_object_edge(
function add_kinect_noise_to_depth (line 702) | def add_kinect_noise_to_depth(depth: np.ndarray, noise_params: Dict) -> ...
class NormalizeInverse (line 727) | class NormalizeInverse(transforms.Normalize):
method __init__ (line 734) | def __init__(
method __call__ (line 751) | def __call__(self, tensor: torch.Tensor) -> torch.Tensor:
FILE: grasp_gen/dataset/renderer.py
function fov_and_size_to_intrinsics (line 79) | def fov_and_size_to_intrinsics(fov, img_size, device="cpu"):
function depth2points (line 93) | def depth2points(
function compute_camera_pose (line 172) | def compute_camera_pose(center, distance, azimuth, elevation):
function sample_camera_pose (line 185) | def sample_camera_pose(
class Renderer (line 217) | class Renderer:
method __init__ (line 218) | def __init__(self):
method create_camera (line 232) | def create_camera(self, intrinsics, image_size, znear=0.04, zfar=100.0):
method set_camera_pose (line 250) | def set_camera_pose(self, cam_pose):
method get_camera_pose (line 256) | def get_camera_pose(self):
method render_rgbd (line 261) | def render_rgbd(self, depth_only=True):
method render_segmentation (line 269) | def render_segmentation(self, full_depth=None):
method render_all (line 290) | def render_all(self):
method add_object (line 296) | def add_object(self, name, mesh, pose=None):
method set_object_pose (line 308) | def set_object_pose(self, name, pose):
method has_object (line 311) | def has_object(self, name):
method remove_object (line 314) | def remove_object(self, name):
method show_objects (line 318) | def show_objects(self, names=None):
method toggle_wireframe (line 323) | def toggle_wireframe(self, names=None):
method hide_objects (line 328) | def hide_objects(self, names=None):
method reset (line 333) | def reset(self):
function add_gaussian_noise_to_depth (line 339) | def add_gaussian_noise_to_depth(
function add_depth_noise (line 364) | def add_depth_noise(depth: np.array) -> np.array:
function add_noise_to_random_object_region (line 373) | def add_noise_to_random_object_region(
function render_images_given_scene (line 474) | def render_images_given_scene(
function add_edge_noise (line 501) | def add_edge_noise(segmentation_image, noise_level=0.40):
function render_point_cloud_from_object (line 563) | def render_point_cloud_from_object(
function render_pc (line 731) | def render_pc(
FILE: grasp_gen/dataset/suction.py
function make_parser (line 23) | def make_parser():
function colorized_points (line 84) | def colorized_points(points, quality):
function colorize (line 88) | def colorize(quality):
function color_interpolation (line 99) | def color_interpolation(input):
function colorize_for_meshcat (line 110) | def colorize_for_meshcat(quality):
function skew (line 119) | def skew(x):
function adjoint_transform (line 124) | def adjoint_transform(frame_a, frame_b):
function sunflower_radius (line 145) | def sunflower_radius(k, n, b):
function sunflower (line 152) | def sunflower(n, radius, alpha=2.0, geodesic=False):
class SuctionCupArray (line 166) | class SuctionCupArray(object):
method __init__ (line 167) | def __init__(
method _create_pyramid (line 246) | def _create_pyramid(
method sample_grasps (line 343) | def sample_grasps(self, obj_mesh, num_grasps):
method get_spring_lengths (line 380) | def get_spring_lengths(self, obj_mesh, suction_ring_transform):
method is_sealed (line 470) | def is_sealed(self, obj_mesh, grasp_transform):
method is_wrench_resistant (line 566) | def is_wrench_resistant(self, contact_frames, w, qp_solver="clarabel"):
method evaluate_grasps (line 672) | def evaluate_grasps(
method as_dict (line 759) | def as_dict(self):
method from_file (line 776) | def from_file(cls, fname, key=None):
function main_func (line 806) | def main_func(args):
FILE: grasp_gen/dataset/visualize_utils.py
function visualize_generator_dataset (line 26) | def visualize_generator_dataset(
function visualize_discriminator_dataset (line 76) | def visualize_discriminator_dataset(
FILE: grasp_gen/dataset/webdataset_utils.py
function load_uuid_list (line 16) | def load_uuid_list(uuid_list_path: str) -> list[str]:
function convert_to_webdataset (line 45) | def convert_to_webdataset(
function is_webdataset (line 113) | def is_webdataset(dataset_path: str) -> bool:
class GraspWebDatasetReader (line 132) | class GraspWebDatasetReader:
method __init__ (line 135) | def __init__(self, dataset_path: str):
method read_grasps_by_uuid (line 153) | def read_grasps_by_uuid(self, object_uuid: str) -> Optional[Dict]:
FILE: grasp_gen/grasp_server.py
function load_grasp_cfg (line 28) | def load_grasp_cfg(gripper_config: str) -> omegaconf.DictConfig:
class GraspGenSampler (line 51) | class GraspGenSampler:
method __init__ (line 52) | def __init__(
method run_inference (line 91) | def run_inference(
method sample (line 168) | def sample(
FILE: grasp_gen/metrics.py
function compute_recall (line 24) | def compute_recall(
function compute_metrics_given_two_sets_of_poses (line 40) | def compute_metrics_given_two_sets_of_poses(
function angular_distance_phi3 (line 111) | def angular_distance_phi3(
function quat_multiply (line 139) | def quat_multiply(
class OrientationError (line 159) | class OrientationError(Function):
method geodesic_distance (line 161) | def geodesic_distance(goal_quat, current_quat, quat_res):
method forward (line 172) | def forward(ctx, goal_quat, current_quat, quat_res):
method backward (line 179) | def backward(ctx, grad_out):
function normalize_quaternion (line 195) | def normalize_quaternion(in_quaternion: torch.Tensor) -> torch.Tensor:
class GeodesicLoss (line 205) | class GeodesicLoss(nn.Module):
method __init__ (line 235) | def __init__(self, eps: float = 1e-7, reduction: str = "mean") -> None:
method forward (line 240) | def forward(self, input: Tensor, target: Tensor) -> Tensor:
FILE: grasp_gen/models/action_decoder.py
function double_split (line 22) | def double_split(tensor, chunks):
function build_6d_grasp (line 30) | def build_6d_grasp(
function build_6d_place (line 59) | def build_6d_place(contact_pts, rot, offset, ee_pose):
function compute_offset (line 75) | def compute_offset(obj_pts, ee_pose, rot, grid_res=0, cam_pose=None):
function infer_placements (line 95) | def infer_placements(
class ActionDecoder (line 133) | class ActionDecoder(torch.nn.Module):
method __init__ (line 134) | def __init__(
method from_config (line 165) | def from_config(cls, cfg, contact_decoder):
method forward (line 180) | def forward(
FILE: grasp_gen/models/contact_decoder.py
function compute_attention_mask (line 31) | def compute_attention_mask(attn_mask, nn_ids, context_size, num_heads):
class ContactDecoder (line 60) | class ContactDecoder(nn.Module):
method __init__ (line 61) | def __init__(
method from_config (line 168) | def from_config(cls, cfg, scene_channels, obj_channels):
method predict (line 191) | def predict(self, embed, mask_features):
method construct_context (line 211) | def construct_context(self, features, feature_keys, feature_proj):
method forward (line 227) | def forward(self, scene_features, obj_features):
FILE: grasp_gen/models/criterion.py
function dice_loss (line 23) | def dice_loss(pred: torch.Tensor, target: torch.Tensor, num_objs: torch....
function adds (line 40) | def adds(pred_grasps, confidence, target_grasps, ctr_pts):
function average (line 73) | def average(inputs, num_objs, num_points, mask=False):
class MaskCriterion (line 87) | class MaskCriterion(nn.Module):
method __init__ (line 88) | def __init__(self, loss_weights, top_k):
method from_config (line 94) | def from_config(cls, cfg):
method forward (line 100) | def forward(self, key, out_mask, tgt_mask, loss_mask=None):
class SetCriterion (line 126) | class SetCriterion(nn.Module):
method __init__ (line 134) | def __init__(
method from_config (line 169) | def from_config(cls, cfg, matcher):
method get_pseudo_ce_loss (line 179) | def get_pseudo_ce_loss(self, pred_masks, gt_masks, matched_idx):
method get_loss (line 194) | def get_loss(self, pred, data, matched_idx, layer=None):
method forward (line 232) | def forward(self, pred, targets):
class ADDSCriterion (line 253) | class ADDSCriterion(nn.Module):
method __init__ (line 254) | def __init__(self, pred2gt_weight, gt2pred_weight, adds_per_obj, gripp...
method forward (line 264) | def forward(self, pred_grasps, confidence, gt_grasps, device):
class GraspCriterion (line 317) | class GraspCriterion(nn.Module):
method __init__ (line 318) | def __init__(
method from_config (line 336) | def from_config(cls, cfg):
method forward (line 350) | def forward(self, pred, data):
class PlaceCriterion (line 378) | class PlaceCriterion(nn.Module):
method __init__ (line 379) | def __init__(self, mask_criterion, deep_supervision):
method from_config (line 385) | def from_config(cls, cfg):
method forward (line 391) | def forward(self, pred, data):
FILE: grasp_gen/models/discriminator.py
class GraspGenDiscriminator (line 36) | class GraspGenDiscriminator(nn.Module):
method __init__ (line 54) | def __init__(
method from_config (line 171) | def from_config(cls, cfg):
method forward (line 194) | def forward(self, data, cfg=None, eval=False):
method infer (line 331) | def infer(self, data):
FILE: grasp_gen/models/generator.py
class GraspGenGenerator (line 38) | class GraspGenGenerator(nn.Module):
method __init__ (line 68) | def __init__(
method from_config (line 206) | def from_config(cls, cfg):
method forward (line 240) | def forward(self, data, cfg=None, eval=False):
method infer (line 256) | def infer(self, data, return_metrics=False):
method forward_train (line 268) | def forward_train(self, data):
method forward_inference (line 407) | def forward_inference(self, data, return_metrics=False):
class DiffusionNoisePredictionNet (line 657) | class DiffusionNoisePredictionNet(nn.Module):
method __init__ (line 673) | def __init__(
method forward (line 762) | def forward(
FILE: grasp_gen/models/grasp_gen.py
class GraspGen (line 23) | class GraspGen(nn.Module):
method __init__ (line 34) | def __init__(
method forward (line 43) | def forward(self, data):
method infer (line 60) | def infer(self, data, return_metrics=False):
method from_config (line 73) | def from_config(
method load_state_dict (line 87) | def load_state_dict(
FILE: grasp_gen/models/m2t2.py
class M2T2 (line 24) | class M2T2(nn.Module):
method __init__ (line 25) | def __init__(
method from_config (line 45) | def from_config(cls, cfg):
method forward (line 68) | def forward(self, data, cfg):
method infer (line 120) | def infer(self, data, cfg):
FILE: grasp_gen/models/matcher.py
function dice_loss_matrix (line 20) | def dice_loss_matrix(inputs: torch.Tensor, targets: torch.Tensor):
function bce_loss_matrix (line 38) | def bce_loss_matrix(inputs: torch.Tensor, targets: torch.Tensor):
class HungarianMatcher (line 64) | class HungarianMatcher(torch.nn.Module):
method __init__ (line 71) | def __init__(self, object_weight, bce_weight, dice_weight):
method from_config (line 78) | def from_config(cls, cfg):
method forward (line 86) | def forward(self, outputs, data):
FILE: grasp_gen/models/model_utils.py
function load_pretrained_checkpoint_to_dict (line 26) | def load_pretrained_checkpoint_to_dict(checkpoint_path, model_name):
function convert_to_ptv3_pc_format (line 51) | def convert_to_ptv3_pc_format(point_cloud: torch.Tensor, grid_size: floa...
function repeat_new_axis (line 65) | def repeat_new_axis(tensor, rep, dim):
class SinusoidalPosEmb (line 71) | class SinusoidalPosEmb(nn.Module):
method __init__ (line 72) | def __init__(self, dim):
method forward (line 76) | def forward(self, x):
function break_up_pc (line 91) | def break_up_pc(pc):
function offset2bincount (line 97) | def offset2bincount(offset):
function offset2batch (line 103) | def offset2batch(offset):
function compute_grasp_loss (line 110) | def compute_grasp_loss(target_grasps, pred_grasps, ctr_pts):
function get_activation_fn (line 120) | def get_activation_fn(activation):
class PointNetPlusPlus (line 133) | class PointNetPlusPlus(nn.Module):
method __init__ (line 134) | def __init__(
method forward (line 165) | def forward(self, pc):
class MLP (line 174) | class MLP(nn.Module):
method __init__ (line 175) | def __init__(
method forward (line 194) | def forward(self, x):
class AttentionLayer (line 198) | class AttentionLayer(nn.Module):
method __init__ (line 199) | def __init__(self, embed_dim, num_heads):
method forward (line 204) | def forward(self, query, key, value, query_pos_enc, key_pos_enc, attn_...
class FFNLayer (line 211) | class FFNLayer(nn.Module):
method __init__ (line 212) | def __init__(self, embed_dim, hidden_dim, activation="ReLU"):
method forward (line 221) | def forward(self, x):
class PositionEncoding3D (line 225) | class PositionEncoding3D(nn.Module):
method __init__ (line 231) | def __init__(self, enc_dim, scale=np.pi, temperature=10000):
method forward (line 238) | def forward(self, pos):
class PositionEncodingOld3D (line 250) | class PositionEncodingOld3D(nn.Module):
method __init__ (line 256) | def __init__(self, enc_dim, scale=np.pi, temperature=10000):
method forward (line 263) | def forward(self, pos):
FILE: grasp_gen/models/pointnet/pointnet2.py
class PointNet2Base (line 22) | class PointNet2Base(nn.Module):
method __init__ (line 23) | def __init__(self):
method _break_up_pc (line 28) | def _break_up_pc(self, pc):
method forward (line 35) | def forward(self, pointcloud):
class PointNet2MSG (line 76) | class PointNet2MSG(PointNet2Base):
method __init__ (line 77) | def __init__(
method from_config (line 149) | def from_config(cls, cfg):
class PointNet2MSGCls (line 159) | class PointNet2MSGCls(PointNet2Base):
method __init__ (line 160) | def __init__(
method from_config (line 217) | def from_config(cls, cfg):
FILE: grasp_gen/models/pointnet/pointnet2_modules.py
function _get_norm (line 28) | def _get_norm(norm, dim):
function build_shared_mlp (line 35) | def build_shared_mlp(mlp_spec: List[int], norm: str):
class _PointnetSAModuleBase (line 49) | class _PointnetSAModuleBase(nn.Module):
method __init__ (line 50) | def __init__(self):
method forward (line 56) | def forward(
class _PointnetSAModuleVarNPts (line 103) | class _PointnetSAModuleVarNPts(nn.Module):
method __init__ (line 104) | def __init__(self):
method forward (line 110) | def forward(
class PointnetSAModuleMSG (line 181) | class PointnetSAModuleMSG(_PointnetSAModuleBase):
method __init__ (line 198) | def __init__(self, npoint, radii, nsamples, mlps, norm="BN", use_xyz=T...
class PointnetSAModuleMSGVarNPts (line 221) | class PointnetSAModuleMSGVarNPts(_PointnetSAModuleVarNPts):
method __init__ (line 238) | def __init__(self, npoint, radii, nsamples, mlps, norm="BN", use_xyz=T...
class PointnetSAModule (line 261) | class PointnetSAModule(PointnetSAModuleMSG):
method __init__ (line 278) | def __init__(
class PointnetFPModule (line 291) | class PointnetFPModule(nn.Module):
method __init__ (line 302) | def __init__(self, mlp, norm="BN"):
method forward (line 307) | def forward(self, unknown, known, unknow_feats, known_feats):
FILE: grasp_gen/models/pointnet/pointnet2_utils.py
class FurthestPointSampling (line 45) | class FurthestPointSampling(Function):
method forward (line 47) | def forward(ctx, xyz, npoint):
method backward (line 71) | def backward(ctx, grad_out):
class GatherOperation (line 78) | class GatherOperation(Function):
method forward (line 80) | def forward(ctx, features, idx):
method backward (line 102) | def backward(ctx, grad_out):
class ThreeNN (line 113) | class ThreeNN(Function):
method forward (line 115) | def forward(ctx, unknown, known):
method backward (line 141) | def backward(ctx, grad_dist, grad_idx):
class ThreeInterpolate (line 148) | class ThreeInterpolate(Function):
method forward (line 150) | def forward(ctx, features, idx, weight):
method backward (line 173) | def backward(ctx, grad_out):
class GroupingOperation (line 203) | class GroupingOperation(Function):
method forward (line 205) | def forward(ctx, features, idx):
method backward (line 226) | def backward(ctx, grad_out):
class BallQuery (line 252) | class BallQuery(Function):
method forward (line 254) | def forward(ctx, radius, nsample, xyz, new_xyz):
method backward (line 281) | def backward(ctx, grad_out):
class QueryAndGroup (line 288) | class QueryAndGroup(nn.Module):
method __init__ (line 300) | def __init__(self, radius, nsample, use_xyz=True):
method forward (line 305) | def forward(self, xyz, new_xyz, features=None):
class GroupAll (line 350) | class GroupAll(nn.Module):
method __init__ (line 358) | def __init__(self, use_xyz=True):
method forward (line 363) | def forward(self, xyz, new_xyz, features=None):
FILE: grasp_gen/models/ptv3/ptv3.py
function offset2bincount (line 37) | def offset2bincount(offset):
function offset2batch (line 44) | def offset2batch(offset):
function batch2offset (line 52) | def batch2offset(batch):
class Point (line 56) | class Point(Dict):
method __init__ (line 81) | def __init__(self, *args, **kwargs):
method serialization (line 89) | def serialization(self, order="z", depth=None, shuffle_orders=False):
method sparsify (line 146) | def sparsify(self, pad=96):
class PointModule (line 185) | class PointModule(nn.Module):
method __init__ (line 190) | def __init__(self, *args, **kwargs):
class PointSequential (line 194) | class PointSequential(PointModule):
method __init__ (line 200) | def __init__(self, *args, **kwargs):
method __getitem__ (line 215) | def __getitem__(self, idx):
method __len__ (line 225) | def __len__(self):
method add (line 228) | def add(self, module, name=None):
method forward (line 235) | def forward(self, input):
class PDNorm (line 263) | class PDNorm(PointModule):
method __init__ (line 264) | def __init__(
method forward (line 286) | def forward(self, point):
class RPE (line 305) | class RPE(torch.nn.Module):
method __init__ (line 306) | def __init__(self, patch_size, num_heads):
method forward (line 315) | def forward(self, coord):
class SerializedAttention (line 327) | class SerializedAttention(PointModule):
method __init__ (line 328) | def __init__(
method get_rel_pos (line 381) | def get_rel_pos(self, point, order):
method get_padding_and_inverse (line 391) | def get_padding_and_inverse(self, point):
method forward (line 448) | def forward(self, point):
class MLP (line 501) | class MLP(nn.Module):
method __init__ (line 502) | def __init__(
method forward (line 518) | def forward(self, x):
class Block (line 527) | class Block(PointModule):
method __init__ (line 528) | def __init__(
method forward (line 594) | def forward(self, point: Point):
class SerializedPooling (line 617) | class SerializedPooling(PointModule):
method __init__ (line 618) | def __init__(
method forward (line 647) | def forward(self, point: Point):
class SerializedUnpooling (line 723) | class SerializedUnpooling(PointModule):
method __init__ (line 724) | def __init__(
method forward (line 747) | def forward(self, point):
class Embedding (line 761) | class Embedding(PointModule):
method __init__ (line 762) | def __init__(
method forward (line 789) | def forward(self, point: Point):
class PointTransformerV3 (line 794) | class PointTransformerV3(PointModule):
method __init__ (line 795) | def __init__(
method forward (line 974) | def forward(self, data_dict):
FILE: grasp_gen/models/ptv3/serialization/default.py
function encode (line 10) | def encode(grid_coord, batch=None, depth=16, order="z"):
function decode (line 29) | def decode(code, depth=16, order="z"):
function z_order_encode (line 42) | def z_order_encode(grid_coord: torch.Tensor, depth: int = 16):
function z_order_decode (line 49) | def z_order_decode(code: torch.Tensor, depth):
function hilbert_encode (line 55) | def hilbert_encode(grid_coord: torch.Tensor, depth: int = 16):
function hilbert_decode (line 59) | def hilbert_decode(code: torch.Tensor, depth: int = 16):
FILE: grasp_gen/models/ptv3/serialization/hilbert.py
function right_shift (line 12) | def right_shift(binary, k=1, axis=-1):
function binary2gray (line 46) | def binary2gray(binary, axis=-1):
function gray2binary (line 69) | def gray2binary(gray, axis=-1):
function encode (line 91) | def encode(locs, num_dims, num_bits):
function decode (line 201) | def decode(hilberts, num_dims, num_bits):
FILE: grasp_gen/models/ptv3/serialization/z_order.py
class KeyLUT (line 13) | class KeyLUT:
method __init__ (line 14) | def __init__(self):
method encode_lut (line 29) | def encode_lut(self, device=torch.device("cpu")):
method decode_lut (line 35) | def decode_lut(self, device=torch.device("cpu")):
method xyz2key (line 41) | def xyz2key(self, x, y, z, depth):
method key2xyz (line 53) | def key2xyz(self, key, depth):
function xyz2key (line 67) | def xyz2key(
function key2xyz (line 105) | def key2xyz(key: torch.Tensor, depth: int = 16):
FILE: grasp_gen/models/vit.py
class SinusoidalPosEmb (line 66) | class SinusoidalPosEmb(nn.Module):
method __init__ (line 67) | def __init__(self, dim):
method forward (line 71) | def forward(self, x):
class Attention (line 81) | class Attention(nn.Module):
method __init__ (line 84) | def __init__(
method forward (line 108) | def forward(self, x):
class LayerScale (line 138) | class LayerScale(nn.Module):
method __init__ (line 139) | def __init__(self, dim, init_values=1e-5, inplace=False):
method forward (line 144) | def forward(self, x):
class Block (line 148) | class Block(nn.Module):
method __init__ (line 150) | def __init__(
method forward (line 193) | def forward(self, x):
class VisionTransformer (line 199) | class VisionTransformer(nn.Module):
method __init__ (line 208) | def __init__(
method init_weights (line 372) | def init_weights(self, mode=""):
method _init_weights (line 380) | def _init_weights(self, m):
method load_pretrained (line 385) | def load_pretrained(self, checkpoint_path, prefix=""):
method no_weight_decay (line 389) | def no_weight_decay(self):
method group_matcher (line 393) | def group_matcher(self, coarse=False):
method set_grad_checkpointing (line 400) | def set_grad_checkpointing(self, enable=True):
method get_classifier (line 404) | def get_classifier(self):
method reset_classifier (line 407) | def reset_classifier(self, num_classes: int, global_pool=None):
method _pos_embed (line 416) | def _pos_embed(self, x):
method _intermediate_layers (line 449) | def _intermediate_layers(
method get_intermediate_layers (line 471) | def get_intermediate_layers(
method forward_features (line 502) | def forward_features(self, x):
method forward_head (line 520) | def forward_head(self, x, pre_logits: bool = False):
method forward (line 533) | def forward(self, x):
function init_weights_vit_timm (line 539) | def init_weights_vit_timm(module: nn.Module, name: str = ""):
function init_weights_vit_jax (line 549) | def init_weights_vit_jax(module: nn.Module, name: str = "", head_bias: f...
function init_weights_vit_moco (line 571) | def init_weights_vit_moco(module: nn.Module, name: str = ""):
function get_init_weights_vit (line 588) | def get_init_weights_vit(mode="jax", head_bias: float = 0.0):
function resize_pos_embed (line 597) | def resize_pos_embed(
function _load_weights (line 642) | def _load_weights(model: nn.Module, checkpoint_path: str, prefix: str = ...
function _convert_openai_clip (line 832) | def _convert_openai_clip(state_dict, model):
function _convert_dinov2 (line 878) | def _convert_dinov2(state_dict, model):
function checkpoint_filter_fn (line 895) | def checkpoint_filter_fn(
FILE: grasp_gen/robot.py
class GripperInfo (line 31) | class GripperInfo:
function get_canonical_gripper_control_points (line 65) | def get_canonical_gripper_control_points(w, d):
function get_gripper_depth (line 85) | def get_gripper_depth(gripper_name) -> float:
function load_control_points_core (line 100) | def load_control_points_core(gripper_config: Dict):
function load_control_points_for_visualization (line 128) | def load_control_points_for_visualization(gripper_name: str):
function load_control_points (line 142) | def load_control_points(gripper_name: str) -> torch.Tensor:
function generate_circle_points (line 156) | def generate_circle_points(center, radius=0.007, N=30):
function load_visualize_control_points_multi_suction (line 191) | def load_visualize_control_points_multi_suction(
function load_gripper_yaml_file (line 228) | def load_gripper_yaml_file(yaml_path: Path):
function import_module_from_path (line 242) | def import_module_from_path(path):
function load_default_gripper_config (line 267) | def load_default_gripper_config(gripper_name: str) -> Dict:
function parse_offset_transform_from_yaml (line 283) | def parse_offset_transform_from_yaml(offset_transform: List[List[float]]...
function get_gripper_info (line 313) | def get_gripper_info(name: str) -> GripperInfo:
FILE: grasp_gen/serving/__init__.py
function __getattr__ (line 1) | def __getattr__(name):
FILE: grasp_gen/serving/zmq_client.py
class GraspGenClient (line 35) | class GraspGenClient:
method __init__ (line 38) | def __init__(
method _create_socket (line 55) | def _create_socket(self) -> zmq.Socket:
method _wait_for_server (line 63) | def _wait_for_server(self, retry_interval_s: float) -> None:
method _ensure_connected (line 80) | def _ensure_connected(self) -> None:
method _request (line 84) | def _request(self, payload: dict) -> dict:
method server_metadata (line 94) | def server_metadata(self) -> Optional[dict]:
method health_check (line 97) | def health_check(self) -> bool:
method get_metadata (line 104) | def get_metadata(self) -> dict:
method infer (line 107) | def infer(
method close (line 153) | def close(self) -> None:
method __enter__ (line 159) | def __enter__(self):
method __exit__ (line 162) | def __exit__(self, *args):
method __del__ (line 165) | def __del__(self):
FILE: grasp_gen/serving/zmq_server.py
class GraspGenZMQServer (line 25) | class GraspGenZMQServer:
method __init__ (line 35) | def __init__(
method serve_forever (line 64) | def serve_forever(self) -> None:
method _handle (line 87) | def _handle(self, request: dict) -> dict:
method _handle_infer (line 97) | def _handle_infer(self, request: dict) -> dict:
FILE: grasp_gen/utils/logging_config.py
function setup_logging (line 8) | def setup_logging():
function get_logger (line 28) | def get_logger(name):
FILE: grasp_gen/utils/math_utils.py
function matrix_to_rt (line 22) | def matrix_to_rt(
function rt_to_matrix (line 49) | def rt_to_matrix(
function rotation_6d_to_matrix (line 76) | def rotation_6d_to_matrix(d6: torch.Tensor) -> torch.Tensor:
function matrix_to_rotation_6d (line 102) | def matrix_to_rotation_6d(matrix: torch.Tensor) -> torch.Tensor:
function rotation_from_vectors (line 123) | def rotation_from_vectors(v1, v2):
function construct_suction_grasp_from_point_and_vector (line 145) | def construct_suction_grasp_from_point_and_vector(
function rotation_matrix_from_vectors (line 178) | def rotation_matrix_from_vectors(
function compute_pose_distance_batch (line 231) | def compute_pose_distance_batch(
function compute_pose_emd (line 274) | def compute_pose_emd(poses1: torch.Tensor, poses2: torch.Tensor) -> float:
FILE: grasp_gen/utils/meshcat_utils.py
function is_rotation_matrix (line 28) | def is_rotation_matrix(M, tol=1e-4):
function get_color_from_score (line 44) | def get_color_from_score(labels, use_255_scale=False):
function trimesh_to_meshcat_geometry (line 57) | def trimesh_to_meshcat_geometry(
function visualize_mesh (line 68) | def visualize_mesh(
function rgb2hex (line 91) | def rgb2hex(rgb: Tuple[int, int, int]) -> str:
function create_visualizer (line 101) | def create_visualizer(clear=True):
function make_frame (line 112) | def make_frame(
function visualize_bbox (line 161) | def visualize_bbox(
function visualize_pointcloud (line 188) | def visualize_pointcloud(
function load_visualization_gripper_points (line 232) | def load_visualization_gripper_points(
function visualize_grasp (line 252) | def visualize_grasp(
function get_normals_from_mesh (line 274) | def get_normals_from_mesh(
FILE: grasp_gen/utils/plot_utils.py
function get_set_colors (line 22) | def get_set_colors():
function plot_mask_3D (line 33) | def plot_mask_3D(
function plot_place_mask_3D (line 94) | def plot_place_mask_3D(pts, rgb, depth, seg, out_mask, tgt_mask, size):
function plot_3D (line 158) | def plot_3D(
FILE: grasp_gen/utils/point_cloud_utils.py
function knn_points (line 26) | def knn_points(X: torch.Tensor, K: int, norm: int):
function point_cloud_outlier_removal (line 53) | def point_cloud_outlier_removal(
function point_cloud_outlier_removal_with_color (line 91) | def point_cloud_outlier_removal_with_color(
function depth_and_segmentation_to_point_clouds (line 141) | def depth_and_segmentation_to_point_clouds(
function filter_colliding_grasps (line 237) | def filter_colliding_grasps(
function depth_and_segmentation_to_point_clouds (line 309) | def depth_and_segmentation_to_point_clouds(
function filter_colliding_grasps (line 405) | def filter_colliding_grasps(
FILE: grasp_gen/utils/rotation_conversions.py
function quaternion_to_matrix (line 44) | def quaternion_to_matrix(quaternions: torch.Tensor) -> torch.Tensor:
function _copysign (line 76) | def _copysign(a: torch.Tensor, b: torch.Tensor) -> torch.Tensor:
function _sqrt_positive_part (line 94) | def _sqrt_positive_part(x: torch.Tensor) -> torch.Tensor:
function matrix_to_quaternion (line 108) | def matrix_to_quaternion(matrix: torch.Tensor) -> torch.Tensor:
function _axis_angle_rotation (line 170) | def _axis_angle_rotation(axis: str, angle: torch.Tensor) -> torch.Tensor:
function euler_angles_to_matrix (line 200) | def euler_angles_to_matrix(euler_angles: torch.Tensor, convention: str) ...
function _angle_from_tan (line 229) | def _angle_from_tan(
function _index_from_letter (line 262) | def _index_from_letter(letter: str) -> int:
function matrix_to_euler_angles (line 272) | def matrix_to_euler_angles(matrix: torch.Tensor, convention: str) -> tor...
function random_quaternions (line 314) | def random_quaternions(
function random_rotations (line 338) | def random_rotations(
function random_rotation (line 357) | def random_rotation(
function standardize_quaternion (line 374) | def standardize_quaternion(quaternions: torch.Tensor) -> torch.Tensor:
function quaternion_raw_multiply (line 389) | def quaternion_raw_multiply(a: torch.Tensor, b: torch.Tensor) -> torch.T...
function quaternion_multiply (line 410) | def quaternion_multiply(a: torch.Tensor, b: torch.Tensor) -> torch.Tensor:
function quaternion_invert (line 427) | def quaternion_invert(quaternion: torch.Tensor) -> torch.Tensor:
function quaternion_apply (line 444) | def quaternion_apply(quaternion: torch.Tensor, point: torch.Tensor) -> t...
function axis_angle_to_matrix (line 467) | def axis_angle_to_matrix(axis_angle: torch.Tensor, fast: bool = False) -...
function matrix_to_axis_angle (line 508) | def matrix_to_axis_angle(matrix: torch.Tensor, fast: bool = False) -> to...
function axis_angle_to_quaternion (line 565) | def axis_angle_to_quaternion(axis_angle: torch.Tensor) -> torch.Tensor:
function quaternion_to_axis_angle (line 585) | def quaternion_to_axis_angle(quaternions: torch.Tensor) -> torch.Tensor:
function rotation_6d_to_matrix (line 607) | def rotation_6d_to_matrix(d6: torch.Tensor) -> torch.Tensor:
function matrix_to_rotation_6d (line 631) | def matrix_to_rotation_6d(matrix: torch.Tensor) -> torch.Tensor:
FILE: grasp_gen/utils/so3.py
function hat (line 16) | def hat(v: torch.Tensor) -> torch.Tensor:
function so3_exp_map (line 54) | def so3_exp_map(log_rot: torch.Tensor, eps: float = 0.0001) -> torch.Ten...
function _so3_exp_map (line 81) | def _so3_exp_map(
function so3_log_map (line 104) | def so3_log_map(
FILE: grasp_gen/utils/train_utils.py
function worker_init_fn (line 29) | def worker_init_fn(worker_id):
function get_data_loader (line 33) | def get_data_loader(cfg, data_cfg, split, scenes, use_ddp, training, inf...
function build_optimizer (line 127) | def build_optimizer(cfg, model):
function save_model (line 179) | def save_model(epoch, model, optimizer, log_dir, use_ddp, name=None, bat...
function to_gpu (line 193) | def to_gpu(dic):
function to_cpu (line 208) | def to_cpu(dic):
function write_scalar_ddp (line 223) | def write_scalar_ddp(writer, key, value, step, rank, num, reduce=False, ...
function add_to_dict (line 241) | def add_to_dict(dict, key, val):
function get_iou (line 247) | def get_iou(out_masks, tgt_masks, reduce=True):
function compute_iou (line 256) | def compute_iou(out_masks, tgt_masks, thresh=0.0, loss_masks=None, reduc...
function clip_grad_norm (line 300) | def clip_grad_norm(parameters, max_norm, norm_type):
FILE: grasp_gen/utils/viser_utils.py
function is_rotation_matrix (line 28) | def is_rotation_matrix(M, tol=1e-4):
function get_color_from_score (line 44) | def get_color_from_score(labels, use_255_scale=False):
function rgb2hex (line 57) | def rgb2hex(rgb: Tuple[int, int, int]) -> str:
function _matrix_to_wxyz_position (line 67) | def _matrix_to_wxyz_position(T: np.ndarray) -> Tuple[np.ndarray, np.ndar...
function create_visualizer (line 88) | def create_visualizer(clear=True, port: int = 8080):
function make_frame (line 107) | def make_frame(
function visualize_mesh (line 147) | def visualize_mesh(
function visualize_bbox (line 183) | def visualize_bbox(
function visualize_pointcloud (line 229) | def visualize_pointcloud(
function load_visualization_gripper_points (line 317) | def load_visualization_gripper_points(
function visualize_grasp (line 337) | def visualize_grasp(
function get_normals_from_mesh (line 397) | def get_normals_from_mesh(
FILE: mcp/src/mcp_server_graspgen/__init__.py
function main (line 12) | def main():
FILE: mcp/src/mcp_server_graspgen/server.py
function _get_server_addr (line 59) | def _get_server_addr() -> str:
function _get_socket (line 68) | def _get_socket(timeout_ms: int = 30_000) -> zmq.Socket:
function _reset_socket (line 80) | def _reset_socket() -> None:
function _zmq_request (line 90) | def _zmq_request(payload: dict, timeout_ms: int = 60_000) -> dict:
function _gripper_polyline (line 135) | def _gripper_polyline(width: float, depth: float) -> np.ndarray:
function _get_or_create_viser (line 156) | def _get_or_create_viser(port: int) -> viser.ViserServer:
function _visualize_grasps_in_viser (line 167) | def _visualize_grasps_in_viser(
class GenerateGraspsFromMesh (line 228) | class GenerateGraspsFromMesh(BaseModel):
class GenerateGraspsFromPointCloud (line 256) | class GenerateGraspsFromPointCloud(BaseModel):
class VisualizeGrasps (line 282) | class VisualizeGrasps(BaseModel):
function _read_pcd_ascii (line 323) | def _read_pcd_ascii(path: str) -> np.ndarray:
function _load_point_cloud_from_file (line 340) | def _load_point_cloud_from_file(path: str) -> np.ndarray:
function _load_and_sample_mesh (line 388) | def _load_and_sample_mesh(mesh_file: str, scale: float, num_points: int)...
function _format_grasp_results (line 405) | def _format_grasp_results(grasps: np.ndarray, confidences: np.ndarray, t...
function serve (line 446) | async def serve(host: str = "localhost", port: int = 5556) -> None:
FILE: pointnet2_ops/pointnet2_ops/_ext-src/include/cuda_utils.h
function opt_n_threads (line 15) | inline int opt_n_threads(int work_size) {
function dim3 (line 21) | inline dim3 opt_block_config(int x, int y) {
FILE: pointnet2_ops/pointnet2_ops/_ext-src/src/ball_query.cpp
function ball_query (line 13) | at::Tensor ball_query(at::Tensor new_xyz, at::Tensor xyz, const float ra...
FILE: pointnet2_ops/pointnet2_ops/_ext-src/src/bindings.cpp
function PYBIND11_MODULE (line 6) | PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
FILE: pointnet2_ops/pointnet2_ops/_ext-src/src/group_points.cpp
function group_points (line 17) | at::Tensor group_points(at::Tensor points, at::Tensor idx) {
function group_points_grad (line 43) | at::Tensor group_points_grad(at::Tensor grad_out, at::Tensor idx, const ...
FILE: pointnet2_ops/pointnet2_ops/_ext-src/src/interpolate.cpp
function three_nn (line 19) | std::vector<at::Tensor> three_nn(at::Tensor unknowns, at::Tensor knows) {
function three_interpolate (line 47) | at::Tensor three_interpolate(at::Tensor points, at::Tensor idx,
function three_interpolate_grad (line 76) | at::Tensor three_interpolate_grad(at::Tensor grad_out, at::Tensor idx,
FILE: pointnet2_ops/pointnet2_ops/_ext-src/src/sampling.cpp
function gather_points (line 21) | at::Tensor gather_points(at::Tensor points, at::Tensor idx) {
function gather_points_grad (line 46) | at::Tensor gather_points_grad(at::Tensor grad_out, at::Tensor idx,
function furthest_point_sampling (line 73) | at::Tensor furthest_point_sampling(at::Tensor points, const int nsamples) {
FILE: pointnet2_ops/pointnet2_ops/pointnet2_modules.py
function build_shared_mlp (line 9) | def build_shared_mlp(mlp_spec: List[int], bn: bool = True):
class _PointnetSAModuleBase (line 22) | class _PointnetSAModuleBase(nn.Module):
method __init__ (line 23) | def __init__(self):
method forward (line 29) | def forward(
class PointnetSAModuleMSG (line 77) | class PointnetSAModuleMSG(_PointnetSAModuleBase):
method __init__ (line 94) | def __init__(self, npoint, radii, nsamples, mlps, bn=True, use_xyz=True):
class PointnetSAModule (line 118) | class PointnetSAModule(PointnetSAModuleMSG):
method __init__ (line 135) | def __init__(
class PointnetFPModule (line 149) | class PointnetFPModule(nn.Module):
method __init__ (line 160) | def __init__(self, mlp, bn=True):
method forward (line 165) | def forward(self, unknown, known, unknow_feats, known_feats):
FILE: pointnet2_ops/pointnet2_ops/pointnet2_utils.py
class FurthestPointSampling (line 34) | class FurthestPointSampling(Function):
method forward (line 36) | def forward(ctx, xyz, npoint):
method backward (line 60) | def backward(ctx, grad_out):
class GatherOperation (line 67) | class GatherOperation(Function):
method forward (line 69) | def forward(ctx, features, idx):
method backward (line 92) | def backward(ctx, grad_out):
class ThreeNN (line 103) | class ThreeNN(Function):
method forward (line 105) | def forward(ctx, unknown, known):
method backward (line 131) | def backward(ctx, grad_dist, grad_idx):
class ThreeInterpolate (line 138) | class ThreeInterpolate(Function):
method forward (line 140) | def forward(ctx, features, idx, weight):
method backward (line 163) | def backward(ctx, grad_out):
class GroupingOperation (line 193) | class GroupingOperation(Function):
method forward (line 195) | def forward(ctx, features, idx):
method backward (line 216) | def backward(ctx, grad_out):
class BallQuery (line 242) | class BallQuery(Function):
method forward (line 244) | def forward(ctx, radius, nsample, xyz, new_xyz):
method backward (line 271) | def backward(ctx, grad_out):
class QueryAndGroup (line 278) | class QueryAndGroup(nn.Module):
method __init__ (line 290) | def __init__(self, radius, nsample, use_xyz=True):
method forward (line 295) | def forward(self, xyz, new_xyz, features=None):
class GroupAll (line 335) | class GroupAll(nn.Module):
method __init__ (line 343) | def __init__(self, use_xyz=True):
method forward (line 348) | def forward(self, xyz, new_xyz, features=None):
FILE: scripts/convert_obj_to_usd.py
function parse_args (line 21) | def parse_args():
function set_usd_mesh_display_color (line 66) | def set_usd_mesh_display_color(usd_path: str, color_rgb: tuple) -> None:
function convert_mesh_to_usd (line 86) | def convert_mesh_to_usd(
FILE: scripts/create_grasp_sim_usd.py
function _numpy_to_gf_matrix4d (line 36) | def _numpy_to_gf_matrix4d(m: np.ndarray) -> Gf.Matrix4d:
function _env_offset_index (line 40) | def _env_offset_index(i: int, num_envs: int, env_spacing: float):
function create_grasp_sim_usd (line 48) | def create_grasp_sim_usd(
function main (line 130) | def main():
FILE: scripts/demo_collision_free_grasps.py
function parse_args (line 39) | def parse_args():
function process_point_cloud (line 119) | def process_point_cloud(pc, grasps, grasp_conf, pc_colors=None):
FILE: scripts/demo_object_mesh.py
function parse_args (line 32) | def parse_args():
function load_mesh_data (line 98) | def load_mesh_data(mesh_file, scale, num_sample_points):
FILE: scripts/demo_object_pc.py
function parse_args (line 34) | def parse_args():
function process_point_cloud (line 77) | def process_point_cloud(pc, grasps, grasp_conf):
FILE: scripts/demo_scene_pc.py
function process_grasps_for_visualization (line 38) | def process_grasps_for_visualization(pc, grasps, grasp_conf, pc_colors=N...
function parse_args (line 56) | def parse_args():
FILE: scripts/download_objects.py
function load_uuid_list (line 46) | def load_uuid_list(uuid_list_path: str) -> list[str]:
function simplify_mesh (line 73) | def simplify_mesh(input_path: str, output_path: str) -> bool:
function download_with_retry (line 127) | def download_with_retry(uuids: list[str], max_retries: int = 5, batch_si...
function process_single_object (line 174) | def process_single_object(
function process_single_object_with_uuid (line 226) | def process_single_object_with_uuid(
function download_objaverse_meshes (line 252) | def download_objaverse_meshes(
function process_text_file (line 403) | def process_text_file(
function process_directory (line 420) | def process_directory(
function parse_args (line 457) | def parse_args():
FILE: scripts/inference_graspgen.py
function record_grasps_diffusion (line 49) | def record_grasps_diffusion(log, cfg, gripper, inputs, output_file=None):
function main (line 480) | def main(cfg: DictConfig) -> None:
FILE: scripts/inference_m2t2.py
function load_scene (line 50) | def load_scene(inputs):
function select_grasp (line 69) | def select_grasp(contacts, confidence, args):
function record_grasps (line 88) | def record_grasps(log, cfg, gripper, inputs, output_file=None):
function record_worker (line 377) | def record_worker(rank, queue, log_queue, record_fn, gripper, args, outp...
function main (line 389) | def main(cfg: DictConfig) -> None:
FILE: scripts/run_grasp_sim_omniverse.py
function _get_articulation_roots_under_world (line 39) | def _get_articulation_roots_under_world(stage):
function _get_closed_joint_positions (line 56) | def _get_closed_joint_positions(articulation, use_lower=True):
function run_grasp_on_play (line 71) | def run_grasp_on_play():
function main (line 128) | def main():
FILE: scripts/save_grasps_to_usd.py
function save_grasps_to_usd (line 41) | def save_grasps_to_usd(
function load_grasps_from_usd (line 114) | def load_grasps_from_usd(
function _numpy_to_gf_matrix4d (line 148) | def _numpy_to_gf_matrix4d(m: np.ndarray) -> Gf.Matrix4d:
function _gf_matrix4d_to_numpy (line 153) | def _gf_matrix4d_to_numpy(m: Gf.Matrix4d) -> np.ndarray:
function _remove_existing_grasps (line 158) | def _remove_existing_grasps(stage: Usd.Stage, grasps_root: str):
function _get_gripper_wireframe_segments (line 165) | def _get_gripper_wireframe_segments(gripper_name: str) -> np.ndarray:
function _add_basis_curves_prim (line 188) | def _add_basis_curves_prim(
function add_grasps_visualization_to_stage (line 228) | def add_grasps_visualization_to_stage(
function _load_yaml_grasps (line 262) | def _load_yaml_grasps(yaml_path: str):
function parse_args (line 282) | def parse_args():
FILE: scripts/train_graspgen.py
function train_one_epoch (line 60) | def train_one_epoch(
function eval_one_epoch (line 225) | def eval_one_epoch(loader, model, writer, epoch, global_step, cfg):
function init_seeds (line 332) | def init_seeds(seed):
function train (line 342) | def train(rank, cfg):
function main (line 508) | def main(cfg: DictConfig) -> None:
FILE: scripts/train_m2t2.py
function train_one_epoch (line 57) | def train_one_epoch(
function eval_one_epoch (line 276) | def eval_one_epoch(loader, model, writer, epoch, global_step, plot_fn, c...
function init_seeds (line 454) | def init_seeds(seed):
function train (line 464) | def train(rank, cfg):
function main (line 607) | def main(cfg: DictConfig) -> None:
FILE: tests/conftest.py
function pytest_addoption (line 6) | def pytest_addoption(parser):
function device (line 17) | def device():
function random_seed (line 23) | def random_seed():
function sample_point_cloud (line 31) | def sample_point_cloud():
function sample_rotation_matrix (line 46) | def sample_rotation_matrix():
function sample_pose (line 54) | def sample_pose():
FILE: tests/test_dataset_format.py
function test_dataset_format_convention (line 10) | def test_dataset_format_convention():
FILE: tests/test_grasp_server.py
function sample_point_cloud (line 10) | def sample_point_cloud():
function franka_config_path (line 21) | def franka_config_path():
function robotiq_config_path (line 30) | def robotiq_config_path():
function test_grasp_sampler_initialization_franka (line 38) | def test_grasp_sampler_initialization_franka(franka_config_path):
function test_grasp_sampler_initialization_robotiq (line 54) | def test_grasp_sampler_initialization_robotiq(robotiq_config_path):
function test_grasp_sampling_basic_franka (line 70) | def test_grasp_sampling_basic_franka(sample_point_cloud, franka_config_p...
function test_grasp_sampling_basic_robotiq (line 107) | def test_grasp_sampling_basic_robotiq(sample_point_cloud, robotiq_config...
function test_grasp_sampling_parameters_franka (line 143) | def test_grasp_sampling_parameters_franka(sample_point_cloud, franka_con...
function test_grasp_sampling_parameters_robotiq (line 184) | def test_grasp_sampling_parameters_robotiq(sample_point_cloud, robotiq_c...
FILE: tests/test_inference_installation.py
function box_mesh_path (line 36) | def box_mesh_path():
function point_cloud_from_box (line 46) | def point_cloud_from_box(box_mesh_path):
function _make_generator_cfg (line 54) | def _make_generator_cfg(backbone: str) -> DictConfig:
function _make_discriminator_cfg (line 82) | def _make_discriminator_cfg(backbone: str) -> DictConfig:
function _prepare_batch (line 99) | def _prepare_batch(point_cloud: torch.Tensor, device: torch.device) -> d...
function _run_inference (line 114) | def _run_inference(model, data_batch, num_grasps: int = 100):
function test_inference_100_grasps (line 129) | def test_inference_100_grasps(backbone, point_cloud_from_box):
function test_model_components (line 168) | def test_model_components(backbone):
FILE: tests/test_inference_perf.py
function _make_generator_cfg (line 76) | def _make_generator_cfg(backbone: str) -> DictConfig:
function _make_discriminator_cfg (line 103) | def _make_discriminator_cfg(backbone: str) -> DictConfig:
function _prepare_batch (line 119) | def _prepare_batch(point_cloud: torch.Tensor, device: torch.device) -> d...
class BenchResult (line 134) | class BenchResult:
method mean_ms (line 140) | def mean_ms(self) -> float:
method std_ms (line 144) | def std_ms(self) -> float:
method hz_mean (line 148) | def hz_mean(self) -> float:
method hz_std (line 152) | def hz_std(self) -> float:
function _bench_loop (line 156) | def _bench_loop(model, data_batch, warmup_seconds, warmup_min_iters, ben...
function _print_table (line 185) | def _print_table(backbone: str, mesh_name: str, rows):
function mesh_path (line 229) | def mesh_path(request):
function point_cloud_from_mesh (line 246) | def point_cloud_from_mesh(mesh_path):
function test_inference_perf (line 262) | def test_inference_perf(backbone, point_cloud_from_mesh, mesh_path):
FILE: tests/test_math_utils.py
function test_rotation_so3_conversion (line 13) | def test_rotation_so3_conversion():
function test_rotation_so3_batch (line 29) | def test_rotation_so3_batch():
function test_compute_pose_distance_batch (line 43) | def test_compute_pose_distance_batch():
function test_compute_pose_emd (line 62) | def test_compute_pose_emd():
function test_rotation_orthogonality (line 79) | def test_rotation_orthogonality():
FILE: tests/test_point_cloud_utils.py
function test_knn_points_basic (line 7) | def test_knn_points_basic():
function test_knn_points_identical_points (line 34) | def test_knn_points_identical_points():
function test_point_cloud_outlier_removal (line 49) | def test_point_cloud_outlier_removal():
function test_point_cloud_outlier_removal_no_outliers (line 74) | def test_point_cloud_outlier_removal_no_outliers():
function test_point_cloud_outlier_removal_identical_points (line 85) | def test_point_cloud_outlier_removal_identical_points():
FILE: tests/test_robot.py
function test_canonical_gripper_control_points (line 19) | def test_canonical_gripper_control_points():
function test_load_visualize_control_points_multi_suction (line 41) | def test_load_visualize_control_points_multi_suction():
function test_parse_offset_transform_from_yaml (line 63) | def test_parse_offset_transform_from_yaml():
function test_gripper_info_dataclass (line 88) | def test_gripper_info_dataclass():
function test_canonical_gripper_control_points_parameterized (line 118) | def test_canonical_gripper_control_points_parameterized(width, depth):
function test_load_gripper_yaml_file (line 137) | def test_load_gripper_yaml_file(tmp_path):
function test_load_default_gripper_config_franka_panda (line 165) | def test_load_default_gripper_config_franka_panda():
function test_get_gripper_info (line 175) | def test_get_gripper_info():
function test_get_gripper_depth (line 190) | def test_get_gripper_depth():
function test_gripper_info_consistency (line 201) | def test_gripper_info_consistency(gripper_name):
FILE: tests/test_rotation_conversions.py
function test_euler_matrix_conversion (line 12) | def test_euler_matrix_conversion(sample_rotation_matrix):
function test_quaternion_matrix_conversion (line 24) | def test_quaternion_matrix_conversion(sample_rotation_matrix):
function test_euler_angles_consistency (line 36) | def test_euler_angles_consistency():
function test_rotation_identity (line 54) | def test_rotation_identity():
function test_rotation_composition (line 72) | def test_rotation_composition():
FILE: tests/test_serving.py
class TestPCDReader (line 36) | class TestPCDReader:
method test_read_example_pcd (line 39) | def test_read_example_pcd(self):
method test_read_synthetic_pcd (line 50) | def test_read_synthetic_pcd(self, tmp_path):
class TestLoadPointCloudFromFile (line 76) | class TestLoadPointCloudFromFile:
method test_load_pcd (line 79) | def test_load_pcd(self):
method test_load_npy (line 90) | def test_load_npy(self, tmp_path):
method test_load_xyz (line 101) | def test_load_xyz(self, tmp_path):
method test_unsupported_format_raises (line 111) | def test_unsupported_format_raises(self, tmp_path):
method test_bad_shape_raises (line 119) | def test_bad_shape_raises(self, tmp_path):
class TestLoadPointCloudFromMesh (line 129) | class TestLoadPointCloudFromMesh:
method test_load_box_mesh (line 130) | def test_load_box_mesh(self):
method test_mesh_scale (line 140) | def test_mesh_scale(self):
function _make_fake_grasps (line 159) | def _make_fake_grasps(n: int):
class MockGraspGenServer (line 168) | class MockGraspGenServer:
method __init__ (line 171) | def __init__(self, port: int, num_fake_grasps: int = 10):
method _loop (line 181) | def _loop(self):
method _handle (line 192) | def _handle(self, req: dict) -> dict:
method stop (line 218) | def stop(self):
function mock_server (line 226) | def mock_server():
class TestClientProtocol (line 235) | class TestClientProtocol:
method test_health_check (line 238) | def test_health_check(self, mock_server):
method test_get_metadata (line 248) | def test_get_metadata(self, mock_server):
method test_infer_returns_correct_shapes (line 260) | def test_infer_returns_correct_shapes(self, mock_server):
method test_infer_validates_bad_input (line 277) | def test_infer_validates_bad_input(self, mock_server):
method test_context_manager (line 288) | def test_context_manager(self, mock_server):
method test_wait_for_server_connects (line 297) | def test_wait_for_server_connects(self, mock_server):
method test_multiple_infer_calls (line 308) | def test_multiple_infer_calls(self, mock_server):
function _live_server_available (line 328) | def _live_server_available(host: str = "localhost", port: int = 5556) ->...
class TestLiveServer (line 348) | class TestLiveServer:
method _require_live_server (line 356) | def _require_live_server(self):
method test_live_health (line 360) | def test_live_health(self):
method test_live_metadata (line 366) | def test_live_metadata(self):
method test_live_infer_random_cloud (line 374) | def test_live_infer_random_cloud(self):
method test_live_infer_example_pcd (line 386) | def test_live_infer_example_pcd(self):
method test_live_infer_example_mesh (line 404) | def test_live_infer_example_mesh(self):
FILE: tests/test_usd_grasp_pipeline.py
function box_obj_path (line 46) | def box_obj_path():
function tmp_dir (line 53) | def tmp_dir():
function box_usd_path (line 59) | def box_usd_path(box_obj_path, tmp_dir):
function _make_synthetic_grasps (line 67) | def _make_synthetic_grasps(n: int = 10, seed: int = 42):
class TestObjToUsdConversion (line 85) | class TestObjToUsdConversion:
method test_usd_file_created (line 88) | def test_usd_file_created(self, box_usd_path):
method test_usd_mesh_matches_obj (line 92) | def test_usd_mesh_matches_obj(self, box_obj_path, box_usd_path):
class TestSaveGraspsToUsd (line 114) | class TestSaveGraspsToUsd:
method test_save_and_load_roundtrip (line 117) | def test_save_and_load_roundtrip(self, box_usd_path):
method test_grasp_transforms_are_valid_homogeneous (line 139) | def test_grasp_transforms_are_valid_homogeneous(self, box_usd_path):
method test_overwrite_replaces_old_grasps (line 159) | def test_overwrite_replaces_old_grasps(self, box_usd_path):
method test_save_to_separate_output (line 171) | def test_save_to_separate_output(self, box_usd_path, tmp_dir):
class TestUsdGraspPrimStructure (line 185) | class TestUsdGraspPrimStructure:
method test_grasps_root_exists (line 188) | def test_grasps_root_exists(self, box_usd_path):
method test_each_grasp_is_xform_with_confidence (line 199) | def test_each_grasp_is_xform_with_confidence(self, box_usd_path):
method test_object_mesh_preserved (line 218) | def test_object_mesh_preserved(self, box_usd_path):
class TestEndToEndPipeline (line 237) | class TestEndToEndPipeline:
method test_full_pipeline (line 240) | def test_full_pipeline(self, box_obj_path, tmp_dir):
FILE: tutorials/generate_dataset_suction_single_object.py
function parse_args (line 38) | def parse_args():
function setup_directories (line 97) | def setup_directories(output_dir, object_basename):
function copy_object_to_dataset (line 110) | def copy_object_to_dataset(
function generate_grasps (line 129) | def generate_grasps(obj_mesh, suction_gripper, num_grasps, num_disturban...
function create_grasp_dataset_json (line 155) | def create_grasp_dataset_json(
function create_splits_file (line 214) | def create_splits_file(tutorial_object_dir, tutorial_grasp_dir, object_b...
function main (line 232) | def main():
FILE: tutorials/generate_model_inference_config.py
function parse_args (line 30) | def parse_args():
function copy_checkpoint (line 58) | def copy_checkpoint(src_path, dst_path, checkpoint_name):
function create_config_file (line 73) | def create_config_file(gen_log_dir, dis_log_dir, models_dir):
function main (line 131) | def main():
Copy disabled (too large)
Download .json
Condensed preview — 163 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,150K chars).
[
{
"path": ".gitattributes",
"chars": 42,
"preview": "*.pth filter=lfs diff=lfs merge=lfs -text\n"
},
{
"path": ".gitignore",
"chars": 1387,
"preview": "# Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors re"
},
{
"path": ".gitmodules",
"chars": 0,
"preview": ""
},
{
"path": "LICENSE",
"chars": 4000,
"preview": "NVIDIA License\n\n1. Definitions\n\n“Licensor” means any person or entity that distributes its Work.\n“Work” means (a) the or"
},
{
"path": "LICENSE_ASSETS.md",
"chars": 12820,
"preview": "\nLicenses for external assets are listed here:\n\nfranka_panda uRDF\n----------------\n\nThe Franka urdf files in assets/fran"
},
{
"path": "README.md",
"chars": 25944,
"preview": "<!-- <img src=\"fig/cover.png\" width=\"1000\" height=\"250\" title=\"readme1\"> -->\n\n<div align=\"center\">\n <img src=\"fig/cove"
},
{
"path": "assets/franka/franka_panda.urdf",
"chars": 7789,
"preview": "<?xml version=\"1.0\" ?>\n<robot name=\"panda\" xmlns:xacro=\"http://www.ros.org/wiki/xacro\">\n <link name=\"panda_link0\">\n "
},
{
"path": "assets/franka/meshes/collision/finger.obj",
"chars": 4205,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object finger.obj\r\n#\r\n# Vertices: 52\r\n# Faces: 32\r\n#\r\n####\r\nvn 0.99"
},
{
"path": "assets/franka/meshes/collision/hand.obj",
"chars": 18393,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object hand.obj\r\n#\r\n# Vertices: 203\r\n# Faces: 200\r\n#\r\n####\r\nvn 0.67"
},
{
"path": "assets/franka/meshes/collision/link0.obj",
"chars": 16592,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link0.obj\r\n#\r\n# Vertices: 176\r\n# Faces: 200\r\n#\r\n####\r\nvn -0."
},
{
"path": "assets/franka/meshes/collision/link1.obj",
"chars": 20865,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link1.obj\r\n#\r\n# Vertices: 198\r\n# Faces: 300\r\n#\r\n####\r\nvn 0.9"
},
{
"path": "assets/franka/meshes/collision/link2.obj",
"chars": 20791,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link2.obj\r\n#\r\n# Vertices: 200\r\n# Faces: 300\r\n#\r\n####\r\nvn 0.9"
},
{
"path": "assets/franka/meshes/collision/link3.obj",
"chars": 20385,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link3.obj\r\n#\r\n# Vertices: 193\r\n# Faces: 300\r\n#\r\n####\r\nvn 0.0"
},
{
"path": "assets/franka/meshes/collision/link4.obj",
"chars": 20504,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link4.obj\r\n#\r\n# Vertices: 193\r\n# Faces: 300\r\n#\r\n####\r\nvn 0.4"
},
{
"path": "assets/franka/meshes/collision/link5.obj",
"chars": 21313,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link5.obj\r\n#\r\n# Vertices: 206\r\n# Faces: 300\r\n#\r\n####\r\nvn -0."
},
{
"path": "assets/franka/meshes/collision/link6.obj",
"chars": 14325,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link6.obj\r\n#\r\n# Vertices: 143\r\n# Faces: 200\r\n#\r\n####\r\nvn -0."
},
{
"path": "assets/franka/meshes/collision/link7.obj",
"chars": 16747,
"preview": "####\r\n#\r\n# OBJ File Generated by Meshlab\r\n#\r\n####\r\n# Object link7.obj\r\n#\r\n# Vertices: 180\r\n# Faces: 200\r\n#\r\n####\r\nvn -0."
},
{
"path": "assets/franka/meshes/visual/finger.dae",
"chars": 51298,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/hand.dae",
"chars": 549346,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link0.dae",
"chars": 1591811,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link1.dae",
"chars": 978516,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link2.dae",
"chars": 998587,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link3.dae",
"chars": 1099974,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link4.dae",
"chars": 1145814,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link5.dae",
"chars": 1438422,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link6.dae",
"chars": 1729056,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/franka/meshes/visual/link7.dae",
"chars": 936575,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">\r\n"
},
{
"path": "assets/objects/banana.obj",
"chars": 549629,
"preview": "# https://github.com/mikedh/trimesh\nv -0.04755100 -0.06029500 0.00516600\nv -0.04981700 -0.00581500 -0.00850400\nv -0.0300"
},
{
"path": "assets/objects/box.obj",
"chars": 425,
"preview": "# https://github.com/mikedh/trimesh\nv -0.05000000 -0.05000000 -0.05000000\nv -0.05000000 -0.05000000 0.05000000\nv -0.0500"
},
{
"path": "assets/objects/example_object.pcd",
"chars": 207722,
"preview": "# .PCD v0.7 - Point Cloud Data file format\nVERSION 0.7\nFIELDS x y z\nSIZE 4 4 4\nTYPE F F F\nCOUNT 1 1 1\nWIDTH 7674\nHEIGHT "
},
{
"path": "assets/robotiq/robotiq_140_collision.obj",
"chars": 103310,
"preview": "# https://github.com/mikedh/trimesh\n\no robotiq_arg2f_base_link.stl\nv 0.01507979 -0.03433438 0.02995000\nv 0.01326976 -0.0"
},
{
"path": "assets/suction/suction_cup.obj",
"chars": 2336688,
"preview": "mtllib suction_cup.mtl\n\no Material.003\nusemtl material_0\nv 0.01253400 0.00501500 -0.05317400\nv 0.01253400 0.00501500 -0."
},
{
"path": "client-server/README.md",
"chars": 4830,
"preview": "# GraspGen Standalone Server\n\nGraspGen can be run as a standalone ZMQ server so that any application — on the same machi"
},
{
"path": "client-server/graspgen_client.py",
"chars": 8141,
"preview": "#!/usr/bin/env python3\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its lic"
},
{
"path": "client-server/graspgen_server.py",
"chars": 2148,
"preview": "#!/usr/bin/env python3\n# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its lic"
},
{
"path": "config/grippers/franka_panda.py",
"chars": 2760,
"preview": "import torch\nimport numpy as np\nimport trimesh\nimport os\nfrom grasp_gen.robot import load_control_points_core, load_defa"
},
{
"path": "config/grippers/franka_panda.yaml",
"chars": 817,
"preview": "_target_: graspsampling.hands.PandaGripper\n\ncontact_points:\n - link_name: panda_leftfinger\n - link_name: panda_rightfi"
},
{
"path": "config/grippers/robotiq_2f_140.py",
"chars": 2050,
"preview": "import torch\nimport numpy as np\nimport trimesh\nimport os\nfrom grasp_gen.robot import load_control_points_core, load_defa"
},
{
"path": "config/grippers/robotiq_2f_140.yaml",
"chars": 864,
"preview": "\n_target_: graspsampling.hands.URDFHand\nfile_name: /home/clemens/code/graspsampling-py/data/hands/robotiq_2f_140/urdf/ro"
},
{
"path": "config/grippers/robotiq_2f_85.yaml",
"chars": 702,
"preview": "\n_target_: graspsampling.hands.URDFHand\nfile_name: /home/clemens/code/graspsampling-py/data/hands/robotiq_2f_85/urdf/rob"
},
{
"path": "config/grippers/single_suction_cup_30mm.py",
"chars": 2686,
"preview": "import torch\nimport numpy as np\nimport trimesh\nimport os\nfrom grasp_gen.robot import load_control_points_core, load_defa"
},
{
"path": "config/grippers/single_suction_cup_30mm.yaml",
"chars": 447,
"preview": "poses:\n - [[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]\nnum_sides: 15\nradius: 0.015\nheight: "
},
{
"path": "docker/build.sh",
"chars": 129,
"preview": "VER=1.0\ndocker build -f docker/graspgen_cuda121.dockerfile --progress=plain . --network=host -t graspgen:$VER -t graspge"
},
{
"path": "docker/compose.serve.yml",
"chars": 1337,
"preview": "# GraspGen ZMQ Inference Server (Docker Compose)\n#\n# Usage:\n# # From the GraspGen repo root:\n#\n# # 1. Build the base"
},
{
"path": "docker/graspgen_cuda121.dockerfile",
"chars": 1943,
"preview": "# Build base image\nFROM nvcr.io/nvidia/pytorch:23.07-py3 AS base\n\n# tmux is for debugging, osmesa is for rendering. Put "
},
{
"path": "docker/graspgen_cuda128.dockerfile",
"chars": 2026,
"preview": "# Build base image\nFROM nvcr.io/nvidia/pytorch:25.03-py3 AS base\n\n# tmux is for debugging, osmesa is for rendering. Put "
},
{
"path": "docker/run.sh",
"chars": 5441,
"preview": "#!/bin/bash\n\n# Function to display usage information\nshow_usage() {\n echo \"Usage: $0 <grasp_gen_code_dir> [--models <"
},
{
"path": "docker/run_meshcat.sh",
"chars": 189,
"preview": "#!/bin/bash\ndocker run \\\n --gpus all \\\n -e NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility \\\n --runtime nvidia \\\n"
},
{
"path": "docker/run_server.sh",
"chars": 2560,
"preview": "#!/bin/bash\n\n# Start the GraspGen ZMQ inference server in Docker.\n#\n# Usage:\n# bash docker/run_server.sh <graspgen_cod"
},
{
"path": "docker/serve.dockerfile",
"chars": 618,
"preview": "# GraspGen ZMQ Inference Server\n#\n# This Dockerfile builds on top of the graspgen:latest base image\n# (built via `bash d"
},
{
"path": "docs/GRASP_DATASET_FORMAT.md",
"chars": 1512,
"preview": "# GraspGen Gripper Description\n\nversion: `v.1.0.0`\n\nGraspGen expects the dataset to be in the following format.\n\n1. **Sp"
},
{
"path": "docs/GRIPPER_DESCRIPTION.md",
"chars": 2177,
"preview": "# GraspGen Gripper Description\n\nversion: `v.1.0.0`\n\nA gripper is specified by its unique name \"gripper_name\", which is a"
},
{
"path": "grasp_gen/__init__.py",
"chars": 158,
"preview": "from grasp_gen.utils.logging_config import setup_logging\n\n# Set up logging when the package is imported\nsetup_logging()\n"
},
{
"path": "grasp_gen/dataset/dataset.py",
"chars": 65183,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "grasp_gen/dataset/dataset_utils.py",
"chars": 38797,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "grasp_gen/dataset/eval_utils.py",
"chars": 8817,
"preview": "import logging\nimport sys\nfrom logging.handlers import QueueHandler\nfrom pathlib import Path\nfrom typing import List, Tu"
},
{
"path": "grasp_gen/dataset/exceptions.py",
"chars": 2366,
"preview": "from dataclasses import dataclass\nfrom enum import Enum\n\n\n@dataclass\nclass ErrorInfo:\n code: int\n description: str"
},
{
"path": "grasp_gen/dataset/image_utils.py",
"chars": 23832,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATION, its affiliates and l"
},
{
"path": "grasp_gen/dataset/renderer.py",
"chars": 26230,
"preview": "# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all inte"
},
{
"path": "grasp_gen/dataset/suction.py",
"chars": 36583,
"preview": "import os\nimport sys\nimport tqdm\nimport json\nimport scipy\nimport trimesh\nimport argparse\nimport numpy as np\nfrom qpsolve"
},
{
"path": "grasp_gen/dataset/visualize_utils.py",
"chars": 5682,
"preview": "import numpy as np\nimport torch\nimport trimesh\n\nfrom grasp_gen.utils.meshcat_utils import (\n create_visualizer,\n m"
},
{
"path": "grasp_gen/dataset/webdataset_utils.py",
"chars": 5640,
"preview": "import glob\nimport json\nimport os\nimport time\nfrom pathlib import Path\nfrom typing import Dict, Optional, Tuple\n\nimport "
},
{
"path": "grasp_gen/grasp_server.py",
"chars": 9232,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/metrics.py",
"chars": 8858,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATION, its affiliates and l"
},
{
"path": "grasp_gen/models/action_decoder.py",
"chars": 10616,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/contact_decoder.py",
"chars": 11801,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/criterion.py",
"chars": 16877,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/discriminator.py",
"chars": 13388,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "grasp_gen/models/generator.py",
"chars": 35811,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "grasp_gen/models/grasp_gen.py",
"chars": 4076,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "grasp_gen/models/m2t2.py",
"chars": 8098,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/matcher.py",
"chars": 5004,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/model_utils.py",
"chars": 9139,
"preview": "# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/pointnet/pointnet2.py",
"chars": 7229,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/pointnet/pointnet2_modules.py",
"chars": 11236,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/pointnet/pointnet2_utils.py",
"chars": 11315,
"preview": "# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/models/ptv3/ptv3.py",
"chars": 37105,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\r\n#\r\n# NVIDIA CORPORATION and its licensors retain all in"
},
{
"path": "grasp_gen/models/ptv3/serialization/__init__.py",
"chars": 572,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\r\n#\r\n# NVIDIA CORPORATION and its licensors retain all in"
},
{
"path": "grasp_gen/models/ptv3/serialization/default.py",
"chars": 2207,
"preview": "import torch\r\n\r\nfrom grasp_gen.models.ptv3.serialization.hilbert import decode as hilbert_decode_\r\nfrom grasp_gen.models"
},
{
"path": "grasp_gen/models/ptv3/serialization/hilbert.py",
"chars": 10267,
"preview": "\"\"\"\r\nHilbert Order\r\nModified from https://github.com/PrincetonLIPS/numpy-hilbert-curve\r\n\r\nAuthor: Xiaoyang Wu (xiaoyang."
},
{
"path": "grasp_gen/models/ptv3/serialization/z_order.py",
"chars": 4263,
"preview": "# --------------------------------------------------------\r\n# Octree-based Sparse Convolutional Neural Networks\r\n# Copyr"
},
{
"path": "grasp_gen/models/vit.py",
"chars": 35102,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all inte"
},
{
"path": "grasp_gen/robot.py",
"chars": 14451,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/serving/__init__.py",
"chars": 412,
"preview": "def __getattr__(name):\n if name == \"GraspGenZMQServer\":\n from grasp_gen.serving.zmq_server import GraspGenZMQS"
},
{
"path": "grasp_gen/serving/zmq_client.py",
"chars": 5697,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/serving/zmq_server.py",
"chars": 5032,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/utils/logging_config.py",
"chars": 1008,
"preview": "import logging\nimport sys\n\n# Global flag to track if logging is initialized\n_logging_initialized = False\n\n\ndef setup_log"
},
{
"path": "grasp_gen/utils/math_utils.py",
"chars": 10302,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATION, its affiliates and l"
},
{
"path": "grasp_gen/utils/meshcat_utils.py",
"chars": 8301,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/utils/plot_utils.py",
"chars": 7000,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/utils/point_cloud_utils.py",
"chars": 18103,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/utils/rotation_conversions.py",
"chars": 22529,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/utils/so3.py",
"chars": 3904,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all inte"
},
{
"path": "grasp_gen/utils/train_utils.py",
"chars": 12306,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "grasp_gen/utils/viser_utils.py",
"chars": 11879,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "install_pointnet.sh",
"chars": 673,
"preview": "#!/bin/bash\n# Installation script for pointnet2_ops with automatic CUDA environment setup\n# This handles the CUDA compil"
},
{
"path": "install_uv_pointnet.sh",
"chars": 676,
"preview": "#!/bin/bash\n# Installation script for pointnet2_ops with automatic CUDA environment setup\n# This handles the CUDA compil"
},
{
"path": "mcp/.python-version",
"chars": 5,
"preview": "3.10\n"
},
{
"path": "mcp/README.md",
"chars": 5015,
"preview": "# GraspGen MCP Server\n\nA [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that enables LLMs (Clau"
},
{
"path": "mcp/pyproject.toml",
"chars": 1006,
"preview": "[project]\nname = \"mcp-server-graspgen\"\nversion = \"0.1.0\"\ndescription = \"A Model Context Protocol server for GraspGen 6-D"
},
{
"path": "mcp/src/mcp_server_graspgen/__init__.py",
"chars": 1145,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "mcp/src/mcp_server_graspgen/__main__.py",
"chars": 45,
"preview": "from mcp_server_graspgen import main\n\nmain()\n"
},
{
"path": "mcp/src/mcp_server_graspgen/server.py",
"chars": 23600,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "pointnet2_ops/MANIFEST.in",
"chars": 29,
"preview": "graft pointnet2_ops/_ext-src\n"
},
{
"path": "pointnet2_ops/pointnet2_ops/__init__.py",
"chars": 550,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all inte"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/include/ball_query.h",
"chars": 163,
"preview": "#pragma once\n#include <torch/extension.h>\n\nat::Tensor ball_query(at::Tensor new_xyz, at::Tensor xyz, const float radius,"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/include/cuda_utils.h",
"chars": 1303,
"preview": "#ifndef _CUDA_UTILS_H\n#define _CUDA_UTILS_H\n\n#include <ATen/ATen.h>\n#include <ATen/cuda/CUDAContext.h>\n#include <cmath>\n"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/include/group_points.h",
"chars": 183,
"preview": "#pragma once\n#include <torch/extension.h>\n\nat::Tensor group_points(at::Tensor points, at::Tensor idx);\nat::Tensor group_"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/include/interpolate.h",
"chars": 386,
"preview": "#pragma once\n\n#include <torch/extension.h>\n#include <vector>\n\nstd::vector<at::Tensor> three_nn(at::Tensor unknowns, at::"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/include/sampling.h",
"chars": 260,
"preview": "#pragma once\n#include <torch/extension.h>\n\nat::Tensor gather_points(at::Tensor points, at::Tensor idx);\nat::Tensor gathe"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/include/utils.h",
"chars": 983,
"preview": "#pragma once\n#include <ATen/cuda/CUDAContext.h>\n#include <torch/extension.h>\n\n#define CHECK_CUDA(x) "
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/ball_query.cpp",
"chars": 1259,
"preview": "#include \"ball_query.h\"\n#include \"utils.h\"\n#include <ATen/ATen.h>\n#include <ATen/AccumulateType.h>\n#include <ATen/cuda/C"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/ball_query_gpu.cu",
"chars": 1784,
"preview": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cuda_utils.h\"\n\n// input: new_xyz(b, m, 3) xyz(b, n, "
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/bindings.cpp",
"chars": 570,
"preview": "#include \"ball_query.h\"\n#include \"group_points.h\"\n#include \"interpolate.h\"\n#include \"sampling.h\"\n\nPYBIND11_MODULE(TORCH_"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/group_points.cpp",
"chars": 2250,
"preview": "#include \"group_points.h\"\n#include \"utils.h\"\n#include <ATen/ATen.h>\n#include <ATen/AccumulateType.h>\n#include <ATen/cuda"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/group_points_gpu.cu",
"chars": 2885,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cuda_utils.h\"\n\n// input: points(b, c, n) idx(b, npoints, nsample)\n// o"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/interpolate.cpp",
"chars": 3669,
"preview": "#include \"interpolate.h\"\n#include \"utils.h\"\n#include <ATen/ATen.h>\n#include <ATen/AccumulateType.h>\n#include <ATen/cuda/"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/interpolate_gpu.cu",
"chars": 5141,
"preview": "#include <math.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cuda_utils.h\"\n\n// input: unknown(b, n, 3) known(b, m"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/sampling.cpp",
"chars": 3265,
"preview": "#include \"sampling.h\"\n#include \"utils.h\"\n\n#include <ATen/ATen.h>\n#include <ATen/AccumulateType.h>\n#include <ATen/cuda/CU"
},
{
"path": "pointnet2_ops/pointnet2_ops/_ext-src/src/sampling_gpu.cu",
"chars": 7019,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n\n#include \"cuda_utils.h\"\n\n// input: points(b, c, n) idx(b, m)\n// output: out(b, c"
},
{
"path": "pointnet2_ops/pointnet2_ops/_version.py",
"chars": 22,
"preview": "__version__ = \"3.0.0\"\n"
},
{
"path": "pointnet2_ops/pointnet2_ops/pointnet2_modules.py",
"chars": 6530,
"preview": "from typing import List, Optional, Tuple\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom pointn"
},
{
"path": "pointnet2_ops/pointnet2_ops/pointnet2_utils.py",
"chars": 10418,
"preview": "import torch\nimport torch.nn as nn\nimport warnings\nfrom torch.autograd import Function\nfrom typing import *\n\ntry:\n im"
},
{
"path": "pointnet2_ops/setup.py",
"chars": 1038,
"preview": "import glob\nimport os.path as osp\n\nfrom setuptools import find_packages, setup\nfrom torch.utils.cpp_extension import Bui"
},
{
"path": "pyproject.toml",
"chars": 3528,
"preview": "[build-system]\nrequires = [\"setuptools>=45,<78\", \"wheel\", \"setuptools-scm\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[pr"
},
{
"path": "requirements.txt",
"chars": 307,
"preview": "pickle5\nh5py\nhydra-core\nmatplotlib\nmeshcat\nnumpy==1.26.4\nwebdataset\nscikit-learn\nscipy\ntensorboard\ntrimesh==4.5.3\ntransf"
},
{
"path": "runs/train_graspgen_franka_panda_dis.sh",
"chars": 2670,
"preview": "#!/usr/bin/env bash\n\n# Fixed parameters\nexport NGPU=1\nexport NWORKER=4\nexport NEPOCH=5000\nexport BATCH=8\nexport PRINT_FR"
},
{
"path": "runs/train_graspgen_franka_panda_gen.sh",
"chars": 2985,
"preview": "#!/usr/bin/env bash\n\n# Fixed parameters\nexport NGPU=1\nexport NWORKER=4\nexport NEPOCH=5000\nexport BATCH=8\nexport PRINT_FR"
},
{
"path": "runs/train_graspgen_robotiq_2f_140_dis.sh",
"chars": 2639,
"preview": "#!/usr/bin/env bash\n\n# Fixed parameters\nexport NGPU=1\nexport NWORKER=4\nexport NEPOCH=5000\nexport BATCH=8\nexport PRINT_FR"
},
{
"path": "runs/train_graspgen_robotiq_2f_140_gen.sh",
"chars": 2808,
"preview": "#!/usr/bin/env bash\n\n# Fixed parameters\nexport NGPU=1\nexport NWORKER=4\nexport NEPOCH=5000\nexport BATCH=8\nexport PRINT_FR"
},
{
"path": "scripts/config.yaml",
"chars": 5901,
"preview": "data:\n root_dir: ''\n cache_dir: '/tmp/graspgen_train_cache/'\n tasks: ['pick']\n num_points: 16384\n num_obj"
},
{
"path": "scripts/convert_obj_to_usd.py",
"chars": 4659,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/create_grasp_sim_usd.py",
"chars": 7219,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/demo_collision_free_grasps.py",
"chars": 15010,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/demo_object_mesh.py",
"chars": 7207,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/demo_object_pc.py",
"chars": 5823,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/demo_scene_pc.py",
"chars": 14741,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/download_objects.py",
"chars": 16751,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/inference_graspgen.py",
"chars": 23839,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/inference_m2t2.py",
"chars": 19645,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "scripts/run_grasp_sim_omniverse.py",
"chars": 4902,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/save_grasps_to_usd.py",
"chars": 12259,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "scripts/train_graspgen.py",
"chars": 18479,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "scripts/train_m2t2.py",
"chars": 21644,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "setup.py",
"chars": 1008,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all inte"
},
{
"path": "tests/conftest.py",
"chars": 1422,
"preview": "import pytest\nimport torch\nimport numpy as np\n\n\ndef pytest_addoption(parser):\n parser.addoption(\n \"--mesh\",\n "
},
{
"path": "tests/test_dataset_format.py",
"chars": 8353,
"preview": "import pytest\nimport json\nimport os\nimport numpy as np\nfrom pathlib import Path\nfrom grasp_gen.dataset.webdataset_utils "
},
{
"path": "tests/test_grasp_server.py",
"chars": 7871,
"preview": "import pytest\nimport torch\nimport numpy as np\nimport os\nfrom grasp_gen.grasp_server import GraspGenSampler, load_grasp_c"
},
{
"path": "tests/test_inference_installation.py",
"chars": 6666,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "tests/test_inference_perf.py",
"chars": 9599,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "tests/test_math_utils.py",
"chars": 2800,
"preview": "import pytest\nimport torch\nimport numpy as np\nfrom grasp_gen.utils.math_utils import (\n rotation_6d_to_matrix,\n ma"
},
{
"path": "tests/test_point_cloud_utils.py",
"chars": 3015,
"preview": "import pytest\nimport torch\nimport numpy as np\nfrom grasp_gen.utils.point_cloud_utils import knn_points, point_cloud_outl"
},
{
"path": "tests/test_robot.py",
"chars": 7507,
"preview": "import pytest\nimport torch\nimport numpy as np\nimport trimesh\nfrom pathlib import Path\nfrom grasp_gen.robot import (\n "
},
{
"path": "tests/test_rotation_conversions.py",
"chars": 3231,
"preview": "import pytest\nimport torch\nimport numpy as np\nfrom grasp_gen.utils.rotation_conversions import (\n matrix_to_euler_ang"
},
{
"path": "tests/test_serving.py",
"chars": 15349,
"preview": "\"\"\"Tests for the GraspGen ZMQ server/client architecture.\n\nThree test categories:\n 1. Unit tests for client-side point "
},
{
"path": "tests/test_usd_grasp_pipeline.py",
"chars": 10174,
"preview": "#!/usr/bin/env python3\n\n# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n#\n# NVIDIA CORPORATI"
},
{
"path": "tutorials/TUTORIAL.md",
"chars": 7283,
"preview": "# Tutorial: Training a GraspGen model on a single object\n\nThis is a minimal tutorial demonstrating how to generate a dat"
},
{
"path": "tutorials/generate_dataset_suction_single_object.py",
"chars": 11761,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "tutorials/generate_model_inference_config.py",
"chars": 7113,
"preview": "# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intel"
},
{
"path": "tutorials/tutorial_train_dis.sh",
"chars": 2573,
"preview": "#!/usr/bin/env bash\n\n# Fixed parameters\nexport NGPU=1\nexport NWORKER=4\nexport NEPOCH=5000\nexport BATCH=8\nexport PRINT_FR"
},
{
"path": "tutorials/tutorial_train_gen.sh",
"chars": 2890,
"preview": "#!/usr/bin/env bash\n\n# Fixed parameters\nexport NGPU=1\nexport NWORKER=4\nexport NEPOCH=5000\nexport BATCH=8\nexport PRINT_FR"
}
]
// ... and 2 more files (download for full content)
About this extraction
This page contains the full source code of the NVlabs/GraspGen GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 163 files (14.3 MB), approximately 3.7M tokens, and a symbol index with 818 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.