Spaces:
Runtime error
Runtime error
clone cap
Browse files- LICENSE.md +7 -0
- app.py +169 -0
- bowl/bowl.urdf +29 -0
- bowl/cup.obj +1413 -0
- bowl/textured-0008192.obj +0 -0
- cfg.yaml +90 -0
- consts.py +33 -0
- lmp.py +258 -0
- md_logger.py +16 -0
- prompts/fgen.py +49 -0
- prompts/parse_obj_name.py +59 -0
- prompts/parse_position.py +54 -0
- prompts/parse_question.py +27 -0
- prompts/tabletop_ui.py +173 -0
- prompts/transform_shape_pts.py +19 -0
- requirements.txt +11 -0
- sim.py +655 -0
- ur5e/collision/base.stl +0 -0
- ur5e/collision/forearm.stl +0 -0
- ur5e/collision/shoulder.stl +0 -0
- ur5e/collision/upperarm.stl +0 -0
- ur5e/collision/wrist1.stl +0 -0
- ur5e/collision/wrist2.stl +0 -0
- ur5e/collision/wrist3.stl +0 -0
- ur5e/ur5e.urdf +279 -0
- ur5e/visual/base.dae +0 -0
- ur5e/visual/forearm.dae +0 -0
- ur5e/visual/shoulder.dae +0 -0
- ur5e/visual/upperarm.dae +0 -0
- ur5e/visual/wrist1.dae +0 -0
- ur5e/visual/wrist2.dae +0 -0
- ur5e/visual/wrist3.dae +100 -0
LICENSE.md
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0
|
2 |
+
|
3 |
+
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
|
4 |
+
|
5 |
+
https://www.apache.org/licenses/LICENSE-2.0
|
6 |
+
|
7 |
+
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.
|
app.py
ADDED
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import openai
|
2 |
+
import numpy as np
|
3 |
+
from tempfile import NamedTemporaryFile
|
4 |
+
import copy
|
5 |
+
import shapely
|
6 |
+
from shapely.geometry import *
|
7 |
+
from shapely.affinity import *
|
8 |
+
from omegaconf import OmegaConf
|
9 |
+
from moviepy.editor import ImageSequenceClip
|
10 |
+
import gradio as gr
|
11 |
+
|
12 |
+
from lmp import LMP, LMPFGen
|
13 |
+
from sim import PickPlaceEnv, LMP_wrapper
|
14 |
+
from consts import ALL_BLOCKS, ALL_BOWLS
|
15 |
+
from md_logger import MarkdownLogger
|
16 |
+
|
17 |
+
|
18 |
+
class DemoRunner:
|
19 |
+
|
20 |
+
def __init__(self):
|
21 |
+
self._cfg = OmegaConf.to_container(OmegaConf.load('cfg.yaml'), resolve=True)
|
22 |
+
self._env = None
|
23 |
+
self._md_logger = MarkdownLogger()
|
24 |
+
|
25 |
+
def make_LMP(self, env):
|
26 |
+
# LMP env wrapper
|
27 |
+
cfg = copy.deepcopy(self._cfg)
|
28 |
+
cfg['env'] = {
|
29 |
+
'init_objs': list(env.obj_name_to_id.keys()),
|
30 |
+
'coords': cfg['tabletop_coords']
|
31 |
+
}
|
32 |
+
|
33 |
+
LMP_env = LMP_wrapper(env, cfg)
|
34 |
+
# creating APIs that the LMPs can interact with
|
35 |
+
fixed_vars = {
|
36 |
+
'np': np
|
37 |
+
}
|
38 |
+
fixed_vars.update({
|
39 |
+
name: eval(name)
|
40 |
+
for name in shapely.geometry.__all__ + shapely.affinity.__all__
|
41 |
+
})
|
42 |
+
variable_vars = {
|
43 |
+
k: getattr(LMP_env, k)
|
44 |
+
for k in [
|
45 |
+
'get_bbox', 'get_obj_pos', 'get_color', 'is_obj_visible', 'denormalize_xy',
|
46 |
+
'put_first_on_second', 'get_obj_names',
|
47 |
+
'get_corner_name', 'get_side_name',
|
48 |
+
]
|
49 |
+
}
|
50 |
+
variable_vars['say'] = lambda msg: self._md_logger.log_text(f'Robot says: "{msg}"')
|
51 |
+
|
52 |
+
# creating the function-generating LMP
|
53 |
+
lmp_fgen = LMPFGen(cfg['lmps']['fgen'], fixed_vars, variable_vars, self._md_logger)
|
54 |
+
|
55 |
+
# creating other low-level LMPs
|
56 |
+
variable_vars.update({
|
57 |
+
k: LMP(k, cfg['lmps'][k], lmp_fgen, fixed_vars, variable_vars, self._md_logger)
|
58 |
+
for k in ['parse_obj_name', 'parse_position', 'parse_question', 'transform_shape_pts']
|
59 |
+
})
|
60 |
+
|
61 |
+
# creating the LMP that deals w/ high-level language commands
|
62 |
+
lmp_tabletop_ui = LMP(
|
63 |
+
'tabletop_ui', cfg['lmps']['tabletop_ui'], lmp_fgen, fixed_vars, variable_vars, self._md_logger
|
64 |
+
)
|
65 |
+
|
66 |
+
return lmp_tabletop_ui
|
67 |
+
|
68 |
+
def setup(self, api_key, n_blocks, n_bowls):
|
69 |
+
openai.api_key = api_key
|
70 |
+
|
71 |
+
self._env = PickPlaceEnv(render=True, high_res=True, high_frame_rate=False)
|
72 |
+
list_idxs = np.random.choice(len(ALL_BLOCKS), size=max(n_blocks, n_bowls), replace=False)
|
73 |
+
block_list = [ALL_BLOCKS[i] for i in list_idxs[:n_blocks]]
|
74 |
+
bowl_list = [ALL_BOWLS[i] for i in list_idxs[:n_bowls]]
|
75 |
+
obj_list = block_list + bowl_list
|
76 |
+
self._env.reset(obj_list)
|
77 |
+
|
78 |
+
self._lmp_tabletop_ui = self.make_LMP(self._env)
|
79 |
+
|
80 |
+
info = '### Available Objects: \n- ' + '\n- '.join(obj_list)
|
81 |
+
img = self._env.get_camera_image()
|
82 |
+
|
83 |
+
return info, img
|
84 |
+
|
85 |
+
def run(self, instruction):
|
86 |
+
if self._env is None:
|
87 |
+
return 'Please run setup first!', None, None
|
88 |
+
|
89 |
+
self._env.cache_video = []
|
90 |
+
self._md_logger.clear()
|
91 |
+
|
92 |
+
try:
|
93 |
+
self._lmp_tabletop_ui(instruction, f'objects = {self._env.object_list}')
|
94 |
+
except Exception as e:
|
95 |
+
return f'Error: {e}', None, None
|
96 |
+
|
97 |
+
video_file_name = None
|
98 |
+
if self._env.cache_video:
|
99 |
+
rendered_clip = ImageSequenceClip(self._env.cache_video, fps=25)
|
100 |
+
video_file_name = NamedTemporaryFile(suffix='.mp4').name
|
101 |
+
rendered_clip.write_videofile(video_file_name, fps=25)
|
102 |
+
|
103 |
+
return self._md_logger.get_log(), self._env.get_camera_image(), video_file_name
|
104 |
+
|
105 |
+
|
106 |
+
def setup(api_key, n_blocks, n_bowls):
|
107 |
+
if not api_key:
|
108 |
+
return 'Please enter your OpenAI API key!', None, None
|
109 |
+
|
110 |
+
if n_blocks + n_bowls == 0:
|
111 |
+
return 'Please select at least one object!', None, None
|
112 |
+
|
113 |
+
demo_runner = DemoRunner()
|
114 |
+
|
115 |
+
info, img = demo_runner.setup(api_key, n_blocks, n_bowls)
|
116 |
+
return info, img, demo_runner
|
117 |
+
|
118 |
+
|
119 |
+
def run(instruction, demo_runner):
|
120 |
+
if demo_runner is None:
|
121 |
+
return 'Please run setup first!', None, None
|
122 |
+
return demo_runner.run(instruction)
|
123 |
+
|
124 |
+
|
125 |
+
if __name__ == '__main__':
|
126 |
+
with open('README.md', 'r') as f:
|
127 |
+
for _ in range(12):
|
128 |
+
next(f)
|
129 |
+
readme_text = f.read()
|
130 |
+
|
131 |
+
with gr.Blocks() as demo:
|
132 |
+
state = gr.State(None)
|
133 |
+
|
134 |
+
gr.Markdown(readme_text)
|
135 |
+
gr.Markdown('# Interactive Demo')
|
136 |
+
with gr.Row():
|
137 |
+
with gr.Column():
|
138 |
+
with gr.Row():
|
139 |
+
inp_api_key = gr.Textbox(label='OpenAI API Key (this is not stored anywhere)', lines=1)
|
140 |
+
with gr.Row():
|
141 |
+
inp_n_blocks = gr.Slider(label='Number of Blocks', minimum=0, maximum=4, value=3, step=1)
|
142 |
+
inp_n_bowls = gr.Slider(label='Number of Bowls', minimum=0, maximum=4, value=3, step=1)
|
143 |
+
|
144 |
+
btn_setup = gr.Button("Setup/Reset Simulation")
|
145 |
+
info_setup = gr.Markdown(label='Setup Info')
|
146 |
+
with gr.Column():
|
147 |
+
img_setup = gr.Image(label='Current Simulation')
|
148 |
+
|
149 |
+
with gr.Row():
|
150 |
+
with gr.Column():
|
151 |
+
|
152 |
+
inp_instruction = gr.Textbox(label='Instruction', lines=1)
|
153 |
+
btn_run = gr.Button("Run (this may take 30+ seconds)")
|
154 |
+
info_run = gr.Markdown(label='Generated Code')
|
155 |
+
with gr.Column():
|
156 |
+
video_run = gr.Video(label='Video of Last Instruction')
|
157 |
+
|
158 |
+
btn_setup.click(
|
159 |
+
setup,
|
160 |
+
inputs=[inp_api_key, inp_n_blocks, inp_n_bowls],
|
161 |
+
outputs=[info_setup, img_setup, state]
|
162 |
+
)
|
163 |
+
btn_run.click(
|
164 |
+
run,
|
165 |
+
inputs=[inp_instruction, state],
|
166 |
+
outputs=[info_run, img_setup, video_run]
|
167 |
+
)
|
168 |
+
|
169 |
+
demo.launch()
|
bowl/bowl.urdf
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" ?>
|
2 |
+
<robot name="bowl.urdf">
|
3 |
+
<link name="baseLink">
|
4 |
+
<contact>
|
5 |
+
<lateral_friction value="1.0"/>
|
6 |
+
<inertia_scaling value="3.0"/>
|
7 |
+
</contact>
|
8 |
+
<inertial>
|
9 |
+
<origin rpy="0 0 0" xyz="-0.025 0 0.02"/>
|
10 |
+
<mass value=".1"/>
|
11 |
+
<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
|
12 |
+
</inertial>
|
13 |
+
<visual>
|
14 |
+
<origin rpy="0 0 0" xyz="0 0 0"/>
|
15 |
+
<geometry>
|
16 |
+
<mesh filename="textured-0008192.obj" scale="1.25 1.25 0.25"/>
|
17 |
+
</geometry>
|
18 |
+
<material name="green">
|
19 |
+
<color rgba="0.34901961 0.6627451 0.30980392 1"/>
|
20 |
+
</material>
|
21 |
+
</visual>
|
22 |
+
<collision>
|
23 |
+
<origin rpy="0 0 0" xyz="0 0 0"/>
|
24 |
+
<geometry>
|
25 |
+
<mesh filename="cup.obj" scale="1.25 1.25 0.25"/>
|
26 |
+
</geometry>
|
27 |
+
</collision>
|
28 |
+
</link>
|
29 |
+
</robot>
|
bowl/cup.obj
ADDED
@@ -0,0 +1,1413 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Blender v2.69 (sub 0) OBJ File: ''
|
2 |
+
# www.blender.org
|
3 |
+
mtllib cup_vhacd.mtl
|
4 |
+
o ShapeIndexedFaceSet.013_ShapeIndexedFaceSet
|
5 |
+
v 0.000000 0.000000 0.000000
|
6 |
+
v -0.018137 0.054263 0.137619
|
7 |
+
v -0.033504 0.036700 0.027862
|
8 |
+
v -0.033504 0.041091 0.027862
|
9 |
+
v -0.033504 0.052066 0.139822
|
10 |
+
v -0.018137 0.045481 0.122254
|
11 |
+
v -0.018137 0.043286 0.027862
|
12 |
+
v -0.033504 0.045481 0.139822
|
13 |
+
v -0.022528 0.036700 0.030065
|
14 |
+
v -0.029114 0.043286 0.027862
|
15 |
+
v -0.031308 0.041091 0.100303
|
16 |
+
v -0.018137 0.047673 0.139822
|
17 |
+
v -0.018137 0.038897 0.027862
|
18 |
+
v -0.029114 0.052066 0.122254
|
19 |
+
v -0.033504 0.036700 0.045430
|
20 |
+
v -0.020333 0.054263 0.135427
|
21 |
+
v -0.029114 0.043286 0.122254
|
22 |
+
v -0.033504 0.043286 0.041035
|
23 |
+
v -0.018137 0.045481 0.045430
|
24 |
+
v -0.018137 0.038897 0.041035
|
25 |
+
v -0.033504 0.052066 0.135427
|
26 |
+
v -0.018137 0.043286 0.098100
|
27 |
+
v -0.022528 0.045481 0.045430
|
28 |
+
v -0.031308 0.043286 0.032257
|
29 |
+
v -0.033504 0.041091 0.100303
|
30 |
+
v -0.018137 0.052066 0.139822
|
31 |
+
v -0.031308 0.036700 0.045430
|
32 |
+
v -0.031308 0.045481 0.139822
|
33 |
+
usemtl Shape.027
|
34 |
+
s off
|
35 |
+
f 17 12 28
|
36 |
+
f 4 3 5
|
37 |
+
f 3 4 7
|
38 |
+
f 2 6 7
|
39 |
+
f 5 3 8
|
40 |
+
f 7 4 10
|
41 |
+
f 6 2 12
|
42 |
+
f 5 8 12
|
43 |
+
f 3 7 13
|
44 |
+
f 7 6 13
|
45 |
+
f 9 3 13
|
46 |
+
f 8 3 15
|
47 |
+
f 3 9 15
|
48 |
+
f 5 2 16
|
49 |
+
f 10 14 16
|
50 |
+
f 11 9 17
|
51 |
+
f 6 12 17
|
52 |
+
f 4 5 18
|
53 |
+
f 2 7 19
|
54 |
+
f 7 10 19
|
55 |
+
f 16 2 19
|
56 |
+
f 13 6 20
|
57 |
+
f 9 13 20
|
58 |
+
f 5 16 21
|
59 |
+
f 16 14 21
|
60 |
+
f 18 5 21
|
61 |
+
f 6 17 22
|
62 |
+
f 17 9 22
|
63 |
+
f 20 6 22
|
64 |
+
f 9 20 22
|
65 |
+
f 10 16 23
|
66 |
+
f 19 10 23
|
67 |
+
f 16 19 23
|
68 |
+
f 10 4 24
|
69 |
+
f 14 10 24
|
70 |
+
f 4 18 24
|
71 |
+
f 21 14 24
|
72 |
+
f 18 21 24
|
73 |
+
f 8 15 25
|
74 |
+
f 15 11 25
|
75 |
+
f 17 8 25
|
76 |
+
f 11 17 25
|
77 |
+
f 2 5 26
|
78 |
+
f 12 2 26
|
79 |
+
f 5 12 26
|
80 |
+
f 9 11 27
|
81 |
+
f 15 9 27
|
82 |
+
f 11 15 27
|
83 |
+
f 12 8 28
|
84 |
+
f 8 17 28
|
85 |
+
o ShapeIndexedFaceSet.012_ShapeIndexedFaceSet.027
|
86 |
+
v 0.000000 0.000000 0.000000
|
87 |
+
v -0.033504 0.049872 0.139822
|
88 |
+
v -0.046676 0.025724 0.027862
|
89 |
+
v -0.046676 0.034505 0.027862
|
90 |
+
v -0.033504 0.034505 0.027862
|
91 |
+
v -0.046676 0.036704 0.133235
|
92 |
+
v -0.046676 0.045480 0.131032
|
93 |
+
v -0.035700 0.041091 0.027862
|
94 |
+
v -0.033504 0.043284 0.133235
|
95 |
+
v -0.042285 0.025724 0.030065
|
96 |
+
v -0.037896 0.049872 0.124446
|
97 |
+
v -0.044480 0.034505 0.117848
|
98 |
+
v -0.033504 0.041091 0.027862
|
99 |
+
v -0.044480 0.047676 0.135427
|
100 |
+
v -0.046676 0.038892 0.139822
|
101 |
+
v -0.042285 0.038892 0.036651
|
102 |
+
v -0.033504 0.049872 0.120062
|
103 |
+
v -0.035700 0.043284 0.139822
|
104 |
+
v -0.040090 0.049872 0.139822
|
105 |
+
v -0.046676 0.025724 0.034449
|
106 |
+
v -0.037896 0.041091 0.034449
|
107 |
+
v -0.033504 0.038892 0.084927
|
108 |
+
v -0.046676 0.045480 0.139822
|
109 |
+
v -0.044480 0.036704 0.133235
|
110 |
+
v -0.044480 0.036704 0.030065
|
111 |
+
v -0.033504 0.034505 0.032257
|
112 |
+
v -0.042285 0.047676 0.122254
|
113 |
+
v -0.046676 0.034505 0.117848
|
114 |
+
v -0.035700 0.043284 0.049824
|
115 |
+
v -0.042285 0.025724 0.027862
|
116 |
+
v -0.044480 0.025724 0.034449
|
117 |
+
v -0.033504 0.041091 0.111273
|
118 |
+
usemtl Shape.026
|
119 |
+
s off
|
120 |
+
f 38 50 60
|
121 |
+
f 31 32 33
|
122 |
+
f 32 31 34
|
123 |
+
f 32 34 35
|
124 |
+
f 33 32 36
|
125 |
+
f 33 30 37
|
126 |
+
f 38 37 40
|
127 |
+
f 30 33 41
|
128 |
+
f 33 36 41
|
129 |
+
f 35 34 43
|
130 |
+
f 39 30 45
|
131 |
+
f 30 41 45
|
132 |
+
f 37 30 46
|
133 |
+
f 30 43 46
|
134 |
+
f 30 39 47
|
135 |
+
f 39 42 47
|
136 |
+
f 43 30 47
|
137 |
+
f 34 31 48
|
138 |
+
f 31 38 48
|
139 |
+
f 33 37 50
|
140 |
+
f 42 35 51
|
141 |
+
f 35 43 51
|
142 |
+
f 47 42 51
|
143 |
+
f 43 47 51
|
144 |
+
f 34 40 52
|
145 |
+
f 40 37 52
|
146 |
+
f 43 34 52
|
147 |
+
f 37 46 52
|
148 |
+
f 46 43 52
|
149 |
+
f 32 35 53
|
150 |
+
f 36 32 53
|
151 |
+
f 35 42 53
|
152 |
+
f 42 44 53
|
153 |
+
f 49 36 53
|
154 |
+
f 44 49 53
|
155 |
+
f 38 33 54
|
156 |
+
f 33 50 54
|
157 |
+
f 50 38 54
|
158 |
+
f 42 39 55
|
159 |
+
f 44 42 55
|
160 |
+
f 39 49 55
|
161 |
+
f 49 44 55
|
162 |
+
f 40 34 56
|
163 |
+
f 34 48 56
|
164 |
+
f 48 40 56
|
165 |
+
f 41 36 57
|
166 |
+
f 39 45 57
|
167 |
+
f 45 41 57
|
168 |
+
f 36 49 57
|
169 |
+
f 49 39 57
|
170 |
+
f 31 33 58
|
171 |
+
f 38 31 58
|
172 |
+
f 33 38 58
|
173 |
+
f 38 40 59
|
174 |
+
f 48 38 59
|
175 |
+
f 40 48 59
|
176 |
+
f 37 38 60
|
177 |
+
f 50 37 60
|
178 |
+
o ShapeIndexedFaceSet.011_ShapeIndexedFaceSet.026
|
179 |
+
v 0.000000 0.000000 0.000000
|
180 |
+
v -0.066434 -0.002813 0.135413
|
181 |
+
v -0.051068 -0.007203 0.058606
|
182 |
+
v -0.051068 -0.009399 0.058606
|
183 |
+
v -0.057654 0.005965 0.038839
|
184 |
+
v -0.059846 0.005965 0.137608
|
185 |
+
v -0.057654 -0.009399 0.139812
|
186 |
+
v -0.057654 -0.009399 0.052024
|
187 |
+
v -0.053264 0.005965 0.038839
|
188 |
+
v -0.066434 0.005965 0.139812
|
189 |
+
v -0.064236 -0.009399 0.139812
|
190 |
+
v -0.051068 -0.009399 0.038839
|
191 |
+
v -0.059846 0.001575 0.049829
|
192 |
+
v -0.057654 -0.007203 0.041052
|
193 |
+
v -0.055458 -0.007203 0.122248
|
194 |
+
v -0.066434 -0.005009 0.137608
|
195 |
+
v -0.059846 0.005965 0.049829
|
196 |
+
v -0.057654 0.005965 0.109073
|
197 |
+
v -0.055458 -0.009399 0.038839
|
198 |
+
v -0.053264 0.005965 0.043247
|
199 |
+
v -0.066434 0.005965 0.135413
|
200 |
+
v -0.051068 -0.005009 0.038839
|
201 |
+
v -0.062042 0.005965 0.139812
|
202 |
+
v -0.055458 -0.009399 0.122248
|
203 |
+
v -0.064236 -0.009399 0.135413
|
204 |
+
v -0.057654 -0.007203 0.139812
|
205 |
+
v -0.057654 -0.005009 0.038839
|
206 |
+
v -0.053264 -0.007203 0.091519
|
207 |
+
usemtl Shape.025
|
208 |
+
s off
|
209 |
+
f 75 84 88
|
210 |
+
f 64 67 68
|
211 |
+
f 65 66 69
|
212 |
+
f 66 65 70
|
213 |
+
f 67 70 71
|
214 |
+
f 68 67 71
|
215 |
+
f 63 64 72
|
216 |
+
f 64 68 72
|
217 |
+
f 65 69 72
|
218 |
+
f 70 62 76
|
219 |
+
f 71 70 76
|
220 |
+
f 62 73 76
|
221 |
+
f 74 68 76
|
222 |
+
f 73 74 76
|
223 |
+
f 70 65 77
|
224 |
+
f 65 73 77
|
225 |
+
f 73 62 77
|
226 |
+
f 69 66 78
|
227 |
+
f 66 75 78
|
228 |
+
f 72 68 79
|
229 |
+
f 65 72 79
|
230 |
+
f 68 74 79
|
231 |
+
f 78 63 80
|
232 |
+
f 69 78 80
|
233 |
+
f 62 70 81
|
234 |
+
f 77 62 81
|
235 |
+
f 70 77 81
|
236 |
+
f 63 72 82
|
237 |
+
f 72 69 82
|
238 |
+
f 80 63 82
|
239 |
+
f 69 80 82
|
240 |
+
f 66 70 83
|
241 |
+
f 70 67 83
|
242 |
+
f 67 64 84
|
243 |
+
f 75 67 84
|
244 |
+
f 68 71 85
|
245 |
+
f 71 76 85
|
246 |
+
f 76 68 85
|
247 |
+
f 75 66 86
|
248 |
+
f 67 75 86
|
249 |
+
f 66 83 86
|
250 |
+
f 83 67 86
|
251 |
+
f 73 65 87
|
252 |
+
f 74 73 87
|
253 |
+
f 65 79 87
|
254 |
+
f 79 74 87
|
255 |
+
f 64 63 88
|
256 |
+
f 63 78 88
|
257 |
+
f 78 75 88
|
258 |
+
f 84 64 88
|
259 |
+
o ShapeIndexedFaceSet.010_ShapeIndexedFaceSet.025
|
260 |
+
v 0.000000 0.000000 0.000000
|
261 |
+
v -0.062040 -0.013792 0.122248
|
262 |
+
v -0.042286 -0.018180 0.049829
|
263 |
+
v -0.053261 -0.009401 0.104685
|
264 |
+
v -0.055455 -0.009401 0.038839
|
265 |
+
v -0.059844 -0.020377 0.139812
|
266 |
+
v -0.051069 -0.020377 0.049829
|
267 |
+
v -0.051069 -0.020377 0.139812
|
268 |
+
v -0.064236 -0.009401 0.139812
|
269 |
+
v -0.048873 -0.009401 0.038839
|
270 |
+
v -0.042286 -0.020377 0.038839
|
271 |
+
v -0.055455 -0.011597 0.139812
|
272 |
+
v -0.053261 -0.015986 0.038839
|
273 |
+
v -0.048873 -0.018180 0.122248
|
274 |
+
v -0.055455 -0.011597 0.038839
|
275 |
+
v -0.057651 -0.009401 0.139812
|
276 |
+
v -0.064236 -0.011597 0.137608
|
277 |
+
v -0.048873 -0.020377 0.038839
|
278 |
+
v -0.042286 -0.020377 0.049829
|
279 |
+
v -0.048873 -0.009401 0.045441
|
280 |
+
v -0.059844 -0.018180 0.122248
|
281 |
+
v -0.055455 -0.013792 0.047635
|
282 |
+
v -0.051069 -0.018180 0.139812
|
283 |
+
v -0.042286 -0.018180 0.038839
|
284 |
+
v -0.053261 -0.011597 0.122248
|
285 |
+
v -0.059844 -0.020377 0.137608
|
286 |
+
v -0.048873 -0.020377 0.122248
|
287 |
+
usemtl Shape.024
|
288 |
+
s off
|
289 |
+
f 107 102 115
|
290 |
+
f 94 95 96
|
291 |
+
f 92 93 97
|
292 |
+
f 94 96 97
|
293 |
+
f 93 92 98
|
294 |
+
f 96 95 99
|
295 |
+
f 93 98 99
|
296 |
+
f 97 96 100
|
297 |
+
f 93 99 101
|
298 |
+
f 93 101 103
|
299 |
+
f 92 97 104
|
300 |
+
f 100 92 104
|
301 |
+
f 97 100 104
|
302 |
+
f 97 93 105
|
303 |
+
f 94 97 105
|
304 |
+
f 93 103 105
|
305 |
+
f 99 95 106
|
306 |
+
f 95 101 106
|
307 |
+
f 101 99 106
|
308 |
+
f 99 91 107
|
309 |
+
f 96 99 107
|
310 |
+
f 91 102 107
|
311 |
+
f 92 91 108
|
312 |
+
f 98 92 108
|
313 |
+
f 91 98 108
|
314 |
+
f 103 101 110
|
315 |
+
f 90 105 110
|
316 |
+
f 105 103 110
|
317 |
+
f 109 90 110
|
318 |
+
f 101 109 110
|
319 |
+
f 100 96 111
|
320 |
+
f 96 102 111
|
321 |
+
f 102 100 111
|
322 |
+
f 98 91 112
|
323 |
+
f 91 99 112
|
324 |
+
f 99 98 112
|
325 |
+
f 91 92 113
|
326 |
+
f 92 100 113
|
327 |
+
f 102 91 113
|
328 |
+
f 100 102 113
|
329 |
+
f 95 94 114
|
330 |
+
f 101 95 114
|
331 |
+
f 105 90 114
|
332 |
+
f 94 105 114
|
333 |
+
f 90 109 114
|
334 |
+
f 109 101 114
|
335 |
+
f 102 96 115
|
336 |
+
f 96 107 115
|
337 |
+
o ShapeIndexedFaceSet.009_ShapeIndexedFaceSet.024
|
338 |
+
v 0.000000 0.000000 0.000000
|
339 |
+
v -0.018137 0.043284 0.036653
|
340 |
+
v 0.019183 0.034509 0.139822
|
341 |
+
v 0.019183 0.030119 0.139822
|
342 |
+
v -0.018137 0.047673 0.139822
|
343 |
+
v -0.004964 0.052067 0.135419
|
344 |
+
v 0.001618 0.038898 0.036653
|
345 |
+
v -0.000573 0.030119 0.038855
|
346 |
+
v 0.010401 0.030119 0.045439
|
347 |
+
v 0.012596 0.030119 0.137610
|
348 |
+
v -0.018137 0.038898 0.045439
|
349 |
+
v 0.008205 0.045480 0.139822
|
350 |
+
v -0.018137 0.052067 0.120048
|
351 |
+
v -0.007160 0.043284 0.038855
|
352 |
+
v 0.010401 0.032313 0.045439
|
353 |
+
v -0.018137 0.043284 0.100295
|
354 |
+
v -0.015942 0.045480 0.045439
|
355 |
+
v -0.018137 0.052067 0.139822
|
356 |
+
v 0.008205 0.045480 0.135419
|
357 |
+
v 0.008205 0.030119 0.036653
|
358 |
+
v 0.019183 0.030119 0.122250
|
359 |
+
v -0.018137 0.038898 0.036653
|
360 |
+
v 0.001618 0.047673 0.120048
|
361 |
+
v 0.019183 0.034509 0.135419
|
362 |
+
v 0.008205 0.030119 0.109071
|
363 |
+
v -0.011551 0.052067 0.122250
|
364 |
+
v -0.004964 0.052067 0.139822
|
365 |
+
v -0.018137 0.045480 0.122250
|
366 |
+
v 0.014792 0.038898 0.133217
|
367 |
+
v 0.008205 0.034509 0.045439
|
368 |
+
v 0.019183 0.032313 0.122250
|
369 |
+
v -0.018137 0.045480 0.045439
|
370 |
+
v -0.000573 0.041092 0.045439
|
371 |
+
v 0.014792 0.030119 0.139822
|
372 |
+
v -0.000573 0.030119 0.036653
|
373 |
+
v -0.011551 0.045480 0.052024
|
374 |
+
v -0.009355 0.043284 0.036653
|
375 |
+
v 0.008205 0.032313 0.036653
|
376 |
+
v -0.002769 0.049869 0.122250
|
377 |
+
v 0.006009 0.045480 0.122250
|
378 |
+
usemtl Shape.023
|
379 |
+
s off
|
380 |
+
f 148 138 155
|
381 |
+
f 119 118 120
|
382 |
+
f 119 123 124
|
383 |
+
f 123 119 125
|
384 |
+
f 120 117 126
|
385 |
+
f 120 118 127
|
386 |
+
f 117 120 128
|
387 |
+
f 120 126 131
|
388 |
+
f 120 127 133
|
389 |
+
f 128 120 133
|
390 |
+
f 121 128 133
|
391 |
+
f 121 127 134
|
392 |
+
f 117 122 135
|
393 |
+
f 124 123 135
|
394 |
+
f 130 124 135
|
395 |
+
f 118 119 136
|
396 |
+
f 119 124 136
|
397 |
+
f 124 130 136
|
398 |
+
f 123 126 137
|
399 |
+
f 126 117 137
|
400 |
+
f 117 135 137
|
401 |
+
f 121 134 138
|
402 |
+
f 118 136 139
|
403 |
+
f 123 125 140
|
404 |
+
f 126 123 140
|
405 |
+
f 125 131 140
|
406 |
+
f 131 126 140
|
407 |
+
f 128 121 141
|
408 |
+
f 132 128 141
|
409 |
+
f 127 121 142
|
410 |
+
f 133 127 142
|
411 |
+
f 121 133 142
|
412 |
+
f 125 120 143
|
413 |
+
f 120 131 143
|
414 |
+
f 131 125 143
|
415 |
+
f 127 118 144
|
416 |
+
f 134 127 144
|
417 |
+
f 118 139 144
|
418 |
+
f 139 130 144
|
419 |
+
f 122 134 145
|
420 |
+
f 134 144 145
|
421 |
+
f 144 130 145
|
422 |
+
f 136 130 146
|
423 |
+
f 130 139 146
|
424 |
+
f 139 136 146
|
425 |
+
f 117 128 147
|
426 |
+
f 132 117 147
|
427 |
+
f 128 132 147
|
428 |
+
f 122 129 148
|
429 |
+
f 119 120 149
|
430 |
+
f 125 119 149
|
431 |
+
f 120 125 149
|
432 |
+
f 135 123 150
|
433 |
+
f 123 137 150
|
434 |
+
f 137 135 150
|
435 |
+
f 121 129 151
|
436 |
+
f 129 132 151
|
437 |
+
f 141 121 151
|
438 |
+
f 132 141 151
|
439 |
+
f 122 117 152
|
440 |
+
f 129 122 152
|
441 |
+
f 117 132 152
|
442 |
+
f 132 129 152
|
443 |
+
f 135 122 153
|
444 |
+
f 130 135 153
|
445 |
+
f 122 145 153
|
446 |
+
f 145 130 153
|
447 |
+
f 129 121 154
|
448 |
+
f 121 138 154
|
449 |
+
f 148 129 154
|
450 |
+
f 138 148 154
|
451 |
+
f 134 122 155
|
452 |
+
f 138 134 155
|
453 |
+
f 122 148 155
|
454 |
+
o ShapeIndexedFaceSet.008_ShapeIndexedFaceSet.023
|
455 |
+
v 0.000000 0.000000 0.000000
|
456 |
+
v 0.014792 0.030114 0.139822
|
457 |
+
v 0.012598 0.005966 0.036653
|
458 |
+
v 0.016986 0.005966 0.036653
|
459 |
+
v 0.010404 0.030114 0.036653
|
460 |
+
v 0.025768 0.021331 0.139822
|
461 |
+
v 0.021376 0.005966 0.139822
|
462 |
+
v 0.003816 0.027919 0.049832
|
463 |
+
v 0.016986 0.019135 0.036653
|
464 |
+
v 0.025768 0.005966 0.120048
|
465 |
+
v 0.021376 0.030114 0.135419
|
466 |
+
v 0.003816 0.030114 0.036653
|
467 |
+
v 0.010404 0.027919 0.113464
|
468 |
+
v 0.019180 0.008162 0.043248
|
469 |
+
v 0.025768 0.016946 0.122250
|
470 |
+
v 0.019180 0.005966 0.122250
|
471 |
+
v 0.025768 0.005966 0.139822
|
472 |
+
v 0.012598 0.027919 0.036653
|
473 |
+
v 0.021376 0.027919 0.120048
|
474 |
+
v 0.012598 0.005966 0.041046
|
475 |
+
v 0.010404 0.030114 0.113464
|
476 |
+
v 0.025768 0.021331 0.135419
|
477 |
+
v 0.014792 0.025720 0.137610
|
478 |
+
v 0.019180 0.005966 0.043248
|
479 |
+
v 0.021376 0.030114 0.139822
|
480 |
+
v 0.003816 0.027919 0.036653
|
481 |
+
v 0.012598 0.030114 0.049832
|
482 |
+
v 0.003816 0.030114 0.049832
|
483 |
+
v 0.019180 0.012557 0.047631
|
484 |
+
v 0.014792 0.025720 0.045439
|
485 |
+
v 0.016986 0.005966 0.095902
|
486 |
+
v 0.025768 0.012557 0.120048
|
487 |
+
usemtl Shape.022
|
488 |
+
s off
|
489 |
+
f 169 170 187
|
490 |
+
f 159 158 160
|
491 |
+
f 158 159 162
|
492 |
+
f 161 157 162
|
493 |
+
f 159 160 164
|
494 |
+
f 162 159 165
|
495 |
+
f 160 157 166
|
496 |
+
f 160 158 167
|
497 |
+
f 157 160 167
|
498 |
+
f 159 164 169
|
499 |
+
f 161 165 170
|
500 |
+
f 158 162 171
|
501 |
+
f 168 163 171
|
502 |
+
f 162 168 171
|
503 |
+
f 161 162 172
|
504 |
+
f 165 161 172
|
505 |
+
f 162 165 172
|
506 |
+
f 164 160 173
|
507 |
+
f 163 158 175
|
508 |
+
f 158 171 175
|
509 |
+
f 157 167 176
|
510 |
+
f 163 168 176
|
511 |
+
f 168 157 176
|
512 |
+
f 166 161 177
|
513 |
+
f 161 170 177
|
514 |
+
f 170 164 177
|
515 |
+
f 174 166 177
|
516 |
+
f 164 174 177
|
517 |
+
f 162 157 178
|
518 |
+
f 157 168 178
|
519 |
+
f 168 162 178
|
520 |
+
f 165 159 179
|
521 |
+
f 159 169 179
|
522 |
+
f 169 165 179
|
523 |
+
f 157 161 180
|
524 |
+
f 166 157 180
|
525 |
+
f 161 166 180
|
526 |
+
f 158 163 181
|
527 |
+
f 167 158 181
|
528 |
+
f 163 167 181
|
529 |
+
f 160 166 182
|
530 |
+
f 173 160 182
|
531 |
+
f 166 174 182
|
532 |
+
f 174 173 182
|
533 |
+
f 167 163 183
|
534 |
+
f 176 167 183
|
535 |
+
f 163 176 183
|
536 |
+
f 169 164 184
|
537 |
+
f 170 169 184
|
538 |
+
f 164 170 184
|
539 |
+
f 164 173 185
|
540 |
+
f 173 174 185
|
541 |
+
f 174 164 185
|
542 |
+
f 171 163 186
|
543 |
+
f 163 175 186
|
544 |
+
f 175 171 186
|
545 |
+
f 165 169 187
|
546 |
+
f 170 165 187
|
547 |
+
o ShapeIndexedFaceSet.007_ShapeIndexedFaceSet.022
|
548 |
+
v 0.000000 0.000000 0.000000
|
549 |
+
v -0.051069 0.043286 0.139822
|
550 |
+
v -0.057651 0.005966 0.027862
|
551 |
+
v -0.057651 0.014748 0.027862
|
552 |
+
v -0.066430 0.016948 0.139822
|
553 |
+
v -0.059846 0.005966 0.135427
|
554 |
+
v -0.046678 0.023530 0.036651
|
555 |
+
v -0.046678 0.036700 0.139822
|
556 |
+
v -0.048875 0.032305 0.027862
|
557 |
+
v -0.051069 0.008162 0.030065
|
558 |
+
v -0.062040 0.030110 0.135427
|
559 |
+
v -0.066430 0.005966 0.139822
|
560 |
+
v -0.046678 0.043286 0.122254
|
561 |
+
v -0.046678 0.032305 0.027862
|
562 |
+
v -0.055459 0.023530 0.036651
|
563 |
+
v -0.057651 0.036700 0.135427
|
564 |
+
v -0.064235 0.025722 0.137619
|
565 |
+
v -0.053264 0.005966 0.027862
|
566 |
+
v -0.066430 0.016948 0.135427
|
567 |
+
v -0.046678 0.032305 0.115667
|
568 |
+
v -0.059846 0.005966 0.049824
|
569 |
+
v -0.051069 0.030110 0.030065
|
570 |
+
v -0.057651 0.005966 0.109081
|
571 |
+
v -0.051069 0.043286 0.135427
|
572 |
+
v -0.062040 0.005966 0.139822
|
573 |
+
v -0.046678 0.043286 0.139822
|
574 |
+
v -0.046678 0.023530 0.027862
|
575 |
+
v -0.062040 0.030110 0.139822
|
576 |
+
v -0.048875 0.043286 0.122254
|
577 |
+
v -0.066430 0.005966 0.135427
|
578 |
+
v -0.055459 0.021335 0.027862
|
579 |
+
v -0.053264 0.005966 0.043238
|
580 |
+
v -0.064235 0.021335 0.122254
|
581 |
+
v -0.057651 0.016948 0.034449
|
582 |
+
v -0.059846 0.008162 0.049824
|
583 |
+
usemtl Shape.021
|
584 |
+
s off
|
585 |
+
f 208 206 222
|
586 |
+
f 189 192 195
|
587 |
+
f 190 191 196
|
588 |
+
f 190 193 199
|
589 |
+
f 195 192 199
|
590 |
+
f 195 194 200
|
591 |
+
f 196 200 201
|
592 |
+
f 190 196 201
|
593 |
+
f 200 194 201
|
594 |
+
f 198 202 204
|
595 |
+
f 193 190 205
|
596 |
+
f 190 201 205
|
597 |
+
f 199 192 206
|
598 |
+
f 192 204 206
|
599 |
+
f 194 195 207
|
600 |
+
f 197 194 207
|
601 |
+
f 191 190 208
|
602 |
+
f 190 199 208
|
603 |
+
f 202 198 209
|
604 |
+
f 203 196 209
|
605 |
+
f 198 203 209
|
606 |
+
f 195 193 210
|
607 |
+
f 193 205 210
|
608 |
+
f 207 195 210
|
609 |
+
f 197 207 210
|
610 |
+
f 189 200 211
|
611 |
+
f 203 189 211
|
612 |
+
f 196 203 211
|
613 |
+
f 193 195 212
|
614 |
+
f 199 193 212
|
615 |
+
f 195 199 212
|
616 |
+
f 189 195 213
|
617 |
+
f 200 189 213
|
618 |
+
f 195 200 213
|
619 |
+
f 194 197 214
|
620 |
+
f 201 194 214
|
621 |
+
f 197 205 214
|
622 |
+
f 205 201 214
|
623 |
+
f 192 189 215
|
624 |
+
f 189 203 215
|
625 |
+
f 203 198 215
|
626 |
+
f 198 204 215
|
627 |
+
f 204 192 215
|
628 |
+
f 200 196 216
|
629 |
+
f 211 200 216
|
630 |
+
f 196 211 216
|
631 |
+
f 199 206 217
|
632 |
+
f 208 199 217
|
633 |
+
f 206 208 217
|
634 |
+
f 196 191 218
|
635 |
+
f 204 202 218
|
636 |
+
f 209 196 218
|
637 |
+
f 202 209 218
|
638 |
+
f 205 197 219
|
639 |
+
f 210 205 219
|
640 |
+
f 197 210 219
|
641 |
+
f 191 206 220
|
642 |
+
f 206 204 220
|
643 |
+
f 218 191 221
|
644 |
+
f 204 218 221
|
645 |
+
f 191 220 221
|
646 |
+
f 220 204 221
|
647 |
+
f 206 191 222
|
648 |
+
f 191 208 222
|
649 |
+
o ShapeIndexedFaceSet.006_ShapeIndexedFaceSet.021
|
650 |
+
v 0.000000 0.000000 0.000000
|
651 |
+
v 0.023572 -0.013791 0.139822
|
652 |
+
v 0.001623 -0.020377 0.041034
|
653 |
+
v 0.008210 -0.020377 0.041034
|
654 |
+
v 0.014791 0.005966 0.041034
|
655 |
+
v 0.021376 0.005966 0.139822
|
656 |
+
v 0.012600 -0.020377 0.139822
|
657 |
+
v 0.019181 0.001575 0.043239
|
658 |
+
v 0.025768 0.005966 0.120056
|
659 |
+
v 0.001623 -0.018180 0.045434
|
660 |
+
v 0.019181 -0.020377 0.124437
|
661 |
+
v 0.014791 -0.013791 0.045434
|
662 |
+
v 0.008210 -0.018180 0.113471
|
663 |
+
v 0.016987 0.005966 0.098096
|
664 |
+
v 0.025768 -0.007205 0.135422
|
665 |
+
v 0.025768 0.005966 0.139822
|
666 |
+
v 0.016987 -0.007205 0.041034
|
667 |
+
v 0.019181 0.005966 0.043239
|
668 |
+
v 0.014791 0.005966 0.067384
|
669 |
+
v 0.023572 -0.011594 0.122251
|
670 |
+
v 0.025768 -0.002819 0.122251
|
671 |
+
v 0.010404 -0.020377 0.045434
|
672 |
+
v 0.019181 -0.020377 0.139822
|
673 |
+
v 0.019181 0.005966 0.122251
|
674 |
+
v 0.012600 -0.018180 0.139822
|
675 |
+
v 0.008210 -0.020377 0.113471
|
676 |
+
v 0.025768 -0.005014 0.126642
|
677 |
+
v 0.012600 -0.018180 0.049824
|
678 |
+
v 0.012600 -0.015986 0.041034
|
679 |
+
v 0.001623 -0.018180 0.041034
|
680 |
+
v 0.025768 -0.007205 0.139822
|
681 |
+
v 0.021376 -0.018180 0.135422
|
682 |
+
v 0.006014 -0.018180 0.091520
|
683 |
+
v 0.019181 -0.002819 0.052019
|
684 |
+
v 0.016987 -0.009400 0.047629
|
685 |
+
v 0.025768 -0.000620 0.120056
|
686 |
+
v 0.021376 -0.015986 0.122251
|
687 |
+
usemtl Shape.020
|
688 |
+
s off
|
689 |
+
f 254 233 259
|
690 |
+
f 226 225 227
|
691 |
+
f 225 226 229
|
692 |
+
f 224 228 229
|
693 |
+
f 227 228 231
|
694 |
+
f 229 226 233
|
695 |
+
f 228 227 236
|
696 |
+
f 228 224 238
|
697 |
+
f 231 228 238
|
698 |
+
f 237 231 238
|
699 |
+
f 226 227 239
|
700 |
+
f 227 231 240
|
701 |
+
f 231 230 240
|
702 |
+
f 239 227 240
|
703 |
+
f 230 239 240
|
704 |
+
f 227 232 241
|
705 |
+
f 232 236 241
|
706 |
+
f 236 227 241
|
707 |
+
f 237 224 242
|
708 |
+
f 231 237 243
|
709 |
+
f 233 226 244
|
710 |
+
f 224 229 245
|
711 |
+
f 229 233 245
|
712 |
+
f 235 228 246
|
713 |
+
f 236 232 246
|
714 |
+
f 228 236 246
|
715 |
+
f 229 228 247
|
716 |
+
f 235 229 247
|
717 |
+
f 228 235 247
|
718 |
+
f 225 229 248
|
719 |
+
f 232 225 248
|
720 |
+
f 229 235 248
|
721 |
+
f 237 242 249
|
722 |
+
f 242 239 249
|
723 |
+
f 243 237 249
|
724 |
+
f 234 233 250
|
725 |
+
f 233 244 250
|
726 |
+
f 250 244 251
|
727 |
+
f 226 239 251
|
728 |
+
f 239 234 251
|
729 |
+
f 244 226 251
|
730 |
+
f 234 250 251
|
731 |
+
f 227 225 252
|
732 |
+
f 225 232 252
|
733 |
+
f 232 227 252
|
734 |
+
f 224 237 253
|
735 |
+
f 238 224 253
|
736 |
+
f 237 238 253
|
737 |
+
f 242 224 254
|
738 |
+
f 224 245 254
|
739 |
+
f 245 233 254
|
740 |
+
f 235 246 255
|
741 |
+
f 246 232 255
|
742 |
+
f 232 248 255
|
743 |
+
f 248 235 255
|
744 |
+
f 239 230 256
|
745 |
+
f 230 243 256
|
746 |
+
f 249 239 256
|
747 |
+
f 243 249 256
|
748 |
+
f 234 239 257
|
749 |
+
f 242 234 257
|
750 |
+
f 239 242 257
|
751 |
+
f 230 231 258
|
752 |
+
f 243 230 258
|
753 |
+
f 231 243 258
|
754 |
+
f 233 234 259
|
755 |
+
f 234 242 259
|
756 |
+
f 242 254 259
|
757 |
+
o ShapeIndexedFaceSet.005_ShapeIndexedFaceSet.020
|
758 |
+
v 0.000000 0.000000 0.000000
|
759 |
+
v -0.004961 -0.037936 0.122251
|
760 |
+
v 0.019183 -0.020377 0.139822
|
761 |
+
v 0.019183 -0.022576 0.139822
|
762 |
+
v 0.006008 -0.020377 0.041034
|
763 |
+
v -0.020333 -0.033546 0.133227
|
764 |
+
v -0.020333 -0.033546 0.045434
|
765 |
+
v -0.018136 -0.026966 0.043239
|
766 |
+
v -0.000575 -0.029160 0.045434
|
767 |
+
v 0.010398 -0.020377 0.139822
|
768 |
+
v -0.020333 -0.040133 0.139822
|
769 |
+
v 0.003815 -0.035741 0.139822
|
770 |
+
v -0.000575 -0.020377 0.052019
|
771 |
+
v 0.008205 -0.022576 0.045434
|
772 |
+
v 0.010398 -0.031351 0.135422
|
773 |
+
v -0.007154 -0.031351 0.041034
|
774 |
+
v -0.009351 -0.040133 0.135422
|
775 |
+
v -0.020333 -0.029160 0.071784
|
776 |
+
v -0.020333 -0.029160 0.041034
|
777 |
+
v -0.020333 -0.035741 0.139822
|
778 |
+
v -0.020333 -0.040133 0.128837
|
779 |
+
v -0.015939 -0.033546 0.045434
|
780 |
+
v -0.000575 -0.037936 0.137607
|
781 |
+
v 0.006008 -0.020377 0.111276
|
782 |
+
v -0.000575 -0.020377 0.041034
|
783 |
+
v 0.008205 -0.020377 0.045434
|
784 |
+
v 0.019183 -0.022576 0.137607
|
785 |
+
v -0.020333 -0.031351 0.104681
|
786 |
+
v 0.003815 -0.026966 0.052019
|
787 |
+
v 0.001618 -0.026966 0.041034
|
788 |
+
v 0.003815 -0.035741 0.137607
|
789 |
+
v -0.009351 -0.040133 0.139822
|
790 |
+
v 0.016985 -0.024771 0.135422
|
791 |
+
v -0.020333 -0.031351 0.041034
|
792 |
+
v -0.011545 -0.033546 0.054224
|
793 |
+
v -0.018136 -0.040133 0.128837
|
794 |
+
v 0.010398 -0.031351 0.139822
|
795 |
+
usemtl Shape.019
|
796 |
+
s off
|
797 |
+
f 274 292 296
|
798 |
+
f 263 262 269
|
799 |
+
f 262 264 269
|
800 |
+
f 265 266 270
|
801 |
+
f 263 269 270
|
802 |
+
f 263 270 271
|
803 |
+
f 269 264 272
|
804 |
+
f 275 261 276
|
805 |
+
f 266 265 277
|
806 |
+
f 264 275 278
|
807 |
+
f 266 277 278
|
808 |
+
f 277 267 278
|
809 |
+
f 269 265 279
|
810 |
+
f 265 270 279
|
811 |
+
f 270 269 279
|
812 |
+
f 270 266 280
|
813 |
+
f 276 270 280
|
814 |
+
f 266 275 281
|
815 |
+
f 280 266 281
|
816 |
+
f 261 275 282
|
817 |
+
f 275 268 282
|
818 |
+
f 276 261 282
|
819 |
+
f 272 267 283
|
820 |
+
f 269 272 283
|
821 |
+
f 267 277 283
|
822 |
+
f 272 264 284
|
823 |
+
f 267 272 284
|
824 |
+
f 264 278 284
|
825 |
+
f 278 267 284
|
826 |
+
f 264 262 285
|
827 |
+
f 273 264 285
|
828 |
+
f 273 285 286
|
829 |
+
f 262 263 286
|
830 |
+
f 285 262 286
|
831 |
+
f 265 269 287
|
832 |
+
f 277 265 287
|
833 |
+
f 269 283 287
|
834 |
+
f 283 277 287
|
835 |
+
f 274 268 288
|
836 |
+
f 273 274 288
|
837 |
+
f 264 273 289
|
838 |
+
f 275 264 289
|
839 |
+
f 268 275 289
|
840 |
+
f 288 268 289
|
841 |
+
f 273 288 289
|
842 |
+
f 268 274 290
|
843 |
+
f 274 271 290
|
844 |
+
f 282 268 290
|
845 |
+
f 271 282 290
|
846 |
+
f 271 270 291
|
847 |
+
f 270 276 291
|
848 |
+
f 282 271 291
|
849 |
+
f 276 282 291
|
850 |
+
f 274 273 292
|
851 |
+
f 273 286 292
|
852 |
+
f 286 263 292
|
853 |
+
f 275 266 293
|
854 |
+
f 266 278 293
|
855 |
+
f 278 275 293
|
856 |
+
f 275 276 294
|
857 |
+
f 276 281 294
|
858 |
+
f 281 275 294
|
859 |
+
f 276 280 295
|
860 |
+
f 281 276 295
|
861 |
+
f 280 281 295
|
862 |
+
f 263 271 296
|
863 |
+
f 271 274 296
|
864 |
+
f 292 263 296
|
865 |
+
o ShapeIndexedFaceSet.004_ShapeIndexedFaceSet.019
|
866 |
+
v 0.000000 0.000000 0.000000
|
867 |
+
v -0.046671 -0.022576 0.038839
|
868 |
+
v -0.020333 -0.035741 0.139812
|
869 |
+
v -0.020333 -0.040133 0.139812
|
870 |
+
v -0.057652 -0.020377 0.139812
|
871 |
+
v -0.022528 -0.026966 0.038839
|
872 |
+
v -0.037897 -0.037936 0.135413
|
873 |
+
v -0.024724 -0.033546 0.045441
|
874 |
+
v -0.048870 -0.020377 0.139812
|
875 |
+
v -0.040088 -0.020377 0.038839
|
876 |
+
v -0.046671 -0.033546 0.139812
|
877 |
+
v -0.033509 -0.031351 0.038839
|
878 |
+
v -0.020333 -0.031351 0.106879
|
879 |
+
v -0.020333 -0.033546 0.045441
|
880 |
+
v -0.048870 -0.022576 0.045441
|
881 |
+
v -0.031314 -0.040133 0.137608
|
882 |
+
v -0.057652 -0.022576 0.135413
|
883 |
+
v -0.040088 -0.029160 0.045441
|
884 |
+
v -0.048870 -0.020377 0.045441
|
885 |
+
v -0.020333 -0.029160 0.071781
|
886 |
+
v -0.040088 -0.020377 0.054218
|
887 |
+
v -0.053261 -0.026966 0.126637
|
888 |
+
v -0.020333 -0.033546 0.131025
|
889 |
+
v -0.020333 -0.040133 0.131025
|
890 |
+
v -0.020333 -0.031351 0.038839
|
891 |
+
v -0.046671 -0.033546 0.137608
|
892 |
+
v -0.046671 -0.024771 0.047635
|
893 |
+
v -0.022528 -0.026966 0.043247
|
894 |
+
v -0.046671 -0.020377 0.122248
|
895 |
+
v -0.042284 -0.026966 0.038839
|
896 |
+
v -0.031314 -0.040133 0.139812
|
897 |
+
v -0.020333 -0.029160 0.038839
|
898 |
+
v -0.044476 -0.033546 0.122248
|
899 |
+
v -0.022528 -0.033546 0.137608
|
900 |
+
v -0.057652 -0.022576 0.139812
|
901 |
+
v -0.046671 -0.020377 0.038839
|
902 |
+
v -0.022528 -0.040133 0.131025
|
903 |
+
v -0.035701 -0.031351 0.047635
|
904 |
+
v -0.057652 -0.020377 0.135413
|
905 |
+
usemtl Shape.018
|
906 |
+
s off
|
907 |
+
f 315 313 335
|
908 |
+
f 300 299 301
|
909 |
+
f 301 299 305
|
910 |
+
f 302 298 306
|
911 |
+
f 301 305 306
|
912 |
+
f 300 301 307
|
913 |
+
f 298 302 308
|
914 |
+
f 299 300 309
|
915 |
+
f 304 308 310
|
916 |
+
f 309 300 310
|
917 |
+
f 303 308 312
|
918 |
+
f 308 304 312
|
919 |
+
f 301 306 315
|
920 |
+
f 298 311 315
|
921 |
+
f 311 313 315
|
922 |
+
f 305 309 316
|
923 |
+
f 309 310 316
|
924 |
+
f 302 306 317
|
925 |
+
f 306 305 317
|
926 |
+
f 313 311 318
|
927 |
+
f 299 309 319
|
928 |
+
f 309 305 319
|
929 |
+
f 310 300 320
|
930 |
+
f 304 310 320
|
931 |
+
f 300 312 320
|
932 |
+
f 308 302 321
|
933 |
+
f 310 308 321
|
934 |
+
f 316 310 321
|
935 |
+
f 303 307 322
|
936 |
+
f 307 318 322
|
937 |
+
f 322 318 323
|
938 |
+
f 318 311 323
|
939 |
+
f 314 322 323
|
940 |
+
f 316 302 324
|
941 |
+
f 302 317 324
|
942 |
+
f 324 317 325
|
943 |
+
f 305 316 325
|
944 |
+
f 317 305 325
|
945 |
+
f 316 324 325
|
946 |
+
f 298 308 326
|
947 |
+
f 311 298 326
|
948 |
+
f 308 314 326
|
949 |
+
f 323 311 326
|
950 |
+
f 314 323 326
|
951 |
+
f 300 307 327
|
952 |
+
f 307 303 327
|
953 |
+
f 312 300 327
|
954 |
+
f 303 312 327
|
955 |
+
f 302 316 328
|
956 |
+
f 321 302 328
|
957 |
+
f 316 321 328
|
958 |
+
f 314 303 329
|
959 |
+
f 303 322 329
|
960 |
+
f 322 314 329
|
961 |
+
f 305 299 330
|
962 |
+
f 299 319 330
|
963 |
+
f 319 305 330
|
964 |
+
f 307 301 331
|
965 |
+
f 301 313 331
|
966 |
+
f 318 307 331
|
967 |
+
f 313 318 331
|
968 |
+
f 306 298 332
|
969 |
+
f 298 315 332
|
970 |
+
f 315 306 332
|
971 |
+
f 312 304 333
|
972 |
+
f 304 320 333
|
973 |
+
f 320 312 333
|
974 |
+
f 308 303 334
|
975 |
+
f 303 314 334
|
976 |
+
f 314 308 334
|
977 |
+
f 313 301 335
|
978 |
+
f 301 315 335
|
979 |
+
o ShapeIndexedFaceSet.003_ShapeIndexedFaceSet.018
|
980 |
+
v 0.000000 0.000000 0.000000
|
981 |
+
v 0.001618 0.038895 0.036643
|
982 |
+
v -0.004962 0.005966 -0.000677
|
983 |
+
v 0.014790 0.005966 -0.000677
|
984 |
+
v -0.013743 0.041091 -0.000677
|
985 |
+
v -0.018137 0.005966 0.025666
|
986 |
+
v 0.016987 0.005966 0.036643
|
987 |
+
v -0.018137 0.043286 0.036643
|
988 |
+
v 0.008206 0.030110 0.003714
|
989 |
+
v -0.018137 0.005966 0.001519
|
990 |
+
v 0.014790 0.023530 0.036643
|
991 |
+
v -0.018137 0.041091 -0.000677
|
992 |
+
v 0.014790 0.016948 0.001519
|
993 |
+
v -0.004962 0.038895 -0.000677
|
994 |
+
v 0.010400 0.005966 0.036643
|
995 |
+
v -0.009353 0.043286 0.030057
|
996 |
+
v -0.018137 0.038895 0.036643
|
997 |
+
v 0.016987 0.014748 0.023467
|
998 |
+
v 0.012597 0.021335 -0.000677
|
999 |
+
v 0.012597 0.027918 0.034448
|
1000 |
+
v 0.016987 0.005966 0.012500
|
1001 |
+
v 0.006009 0.032305 0.001519
|
1002 |
+
v -0.018137 0.023530 -0.000677
|
1003 |
+
v -0.018137 0.043286 0.019079
|
1004 |
+
v -0.002765 0.038895 0.005910
|
1005 |
+
v 0.016987 0.016948 0.036643
|
1006 |
+
v 0.008206 0.032305 0.023467
|
1007 |
+
v 0.012597 0.023530 0.005910
|
1008 |
+
v -0.009353 0.043286 0.036643
|
1009 |
+
v -0.009353 0.041091 0.003714
|
1010 |
+
v -0.002765 0.041091 0.032252
|
1011 |
+
v 0.014790 0.023530 0.032252
|
1012 |
+
v -0.013743 0.043286 0.019079
|
1013 |
+
v 0.003816 0.036700 0.027861
|
1014 |
+
v 0.001618 0.036700 0.010301
|
1015 |
+
v 0.016987 0.016948 0.030057
|
1016 |
+
v 0.008206 0.027918 -0.000677
|
1017 |
+
usemtl Shape.017
|
1018 |
+
s off
|
1019 |
+
f 357 344 372
|
1020 |
+
f 339 338 340
|
1021 |
+
f 338 339 341
|
1022 |
+
f 341 339 342
|
1023 |
+
f 342 337 343
|
1024 |
+
f 338 341 345
|
1025 |
+
f 341 343 345
|
1026 |
+
f 337 342 346
|
1027 |
+
f 340 338 347
|
1028 |
+
f 345 343 347
|
1029 |
+
f 339 340 349
|
1030 |
+
f 341 342 350
|
1031 |
+
f 342 343 350
|
1032 |
+
f 343 341 352
|
1033 |
+
f 341 350 352
|
1034 |
+
f 350 343 352
|
1035 |
+
f 348 339 354
|
1036 |
+
f 339 349 354
|
1037 |
+
f 337 346 355
|
1038 |
+
f 342 339 356
|
1039 |
+
f 339 348 356
|
1040 |
+
f 353 342 356
|
1041 |
+
f 348 353 356
|
1042 |
+
f 338 345 358
|
1043 |
+
f 347 338 358
|
1044 |
+
f 345 347 358
|
1045 |
+
f 340 347 359
|
1046 |
+
f 347 343 359
|
1047 |
+
f 343 351 359
|
1048 |
+
f 357 349 360
|
1049 |
+
f 346 342 361
|
1050 |
+
f 342 353 361
|
1051 |
+
f 355 344 362
|
1052 |
+
f 344 357 362
|
1053 |
+
f 354 344 363
|
1054 |
+
f 348 354 363
|
1055 |
+
f 344 355 363
|
1056 |
+
f 343 337 364
|
1057 |
+
f 351 343 364
|
1058 |
+
f 349 340 365
|
1059 |
+
f 351 360 365
|
1060 |
+
f 360 349 365
|
1061 |
+
f 337 360 366
|
1062 |
+
f 360 351 366
|
1063 |
+
f 364 337 366
|
1064 |
+
f 351 364 366
|
1065 |
+
f 355 346 367
|
1066 |
+
f 346 361 367
|
1067 |
+
f 348 363 367
|
1068 |
+
f 363 355 367
|
1069 |
+
f 340 359 368
|
1070 |
+
f 359 351 368
|
1071 |
+
f 365 340 368
|
1072 |
+
f 351 365 368
|
1073 |
+
f 337 355 369
|
1074 |
+
f 355 362 369
|
1075 |
+
f 362 357 369
|
1076 |
+
f 360 337 370
|
1077 |
+
f 357 360 370
|
1078 |
+
f 337 369 370
|
1079 |
+
f 369 357 370
|
1080 |
+
f 353 348 371
|
1081 |
+
f 361 353 371
|
1082 |
+
f 348 367 371
|
1083 |
+
f 367 361 371
|
1084 |
+
f 344 354 372
|
1085 |
+
f 354 349 372
|
1086 |
+
f 349 357 372
|
1087 |
+
o ShapeIndexedFaceSet.002_ShapeIndexedFaceSet.017
|
1088 |
+
v 0.000000 0.000000 0.000000
|
1089 |
+
v -0.053255 0.021335 0.001519
|
1090 |
+
v -0.018137 0.043286 0.027862
|
1091 |
+
v -0.018137 0.043286 0.016883
|
1092 |
+
v -0.018137 0.005966 0.025666
|
1093 |
+
v -0.057649 0.005966 0.027862
|
1094 |
+
v -0.018137 0.005966 0.001519
|
1095 |
+
v -0.046672 0.034504 0.027862
|
1096 |
+
v -0.026925 0.041091 -0.000677
|
1097 |
+
v -0.055452 0.005966 -0.000677
|
1098 |
+
v -0.018137 0.041091 -0.000677
|
1099 |
+
v -0.042283 0.034504 -0.000677
|
1100 |
+
v -0.035704 0.041091 0.023468
|
1101 |
+
v -0.057649 0.014748 0.027862
|
1102 |
+
v -0.018137 0.025722 -0.000677
|
1103 |
+
v -0.053255 0.025722 0.021272
|
1104 |
+
v -0.029117 0.043286 0.027862
|
1105 |
+
v -0.048865 0.027918 -0.000677
|
1106 |
+
v -0.040086 0.005966 -0.000677
|
1107 |
+
v -0.037893 0.038895 0.008106
|
1108 |
+
v -0.055452 0.016948 0.003718
|
1109 |
+
v -0.018137 0.036700 0.027862
|
1110 |
+
v -0.051062 0.005966 0.027862
|
1111 |
+
v -0.044476 0.034504 0.005911
|
1112 |
+
v -0.057649 0.008162 0.016883
|
1113 |
+
v -0.031314 0.041091 0.003718
|
1114 |
+
v -0.051062 0.027918 0.012500
|
1115 |
+
v -0.055452 0.021335 0.027862
|
1116 |
+
v -0.055452 0.012553 -0.000677
|
1117 |
+
v -0.040086 0.038895 0.021272
|
1118 |
+
v -0.026925 0.043286 0.021272
|
1119 |
+
v -0.040086 0.038895 0.027862
|
1120 |
+
v -0.053255 0.023530 0.008106
|
1121 |
+
v -0.055452 0.021335 0.023468
|
1122 |
+
v -0.035704 0.038895 0.001519
|
1123 |
+
usemtl Shape.016
|
1124 |
+
s off
|
1125 |
+
f 392 398 407
|
1126 |
+
f 376 375 377
|
1127 |
+
f 376 377 379
|
1128 |
+
f 377 378 379
|
1129 |
+
f 378 375 380
|
1130 |
+
f 379 378 382
|
1131 |
+
f 382 381 383
|
1132 |
+
f 376 379 383
|
1133 |
+
f 381 376 383
|
1134 |
+
f 381 382 384
|
1135 |
+
f 378 380 386
|
1136 |
+
f 382 383 387
|
1137 |
+
f 383 379 387
|
1138 |
+
f 375 376 389
|
1139 |
+
f 380 375 389
|
1140 |
+
f 384 382 390
|
1141 |
+
f 379 382 391
|
1142 |
+
f 387 379 391
|
1143 |
+
f 382 387 391
|
1144 |
+
f 377 375 394
|
1145 |
+
f 375 378 394
|
1146 |
+
f 394 378 395
|
1147 |
+
f 378 377 395
|
1148 |
+
f 377 394 395
|
1149 |
+
f 384 390 396
|
1150 |
+
f 382 378 397
|
1151 |
+
f 378 386 397
|
1152 |
+
f 386 393 397
|
1153 |
+
f 385 389 398
|
1154 |
+
f 392 385 398
|
1155 |
+
f 388 380 399
|
1156 |
+
f 380 396 399
|
1157 |
+
f 396 390 399
|
1158 |
+
f 386 380 400
|
1159 |
+
f 380 388 400
|
1160 |
+
f 374 390 401
|
1161 |
+
f 390 382 401
|
1162 |
+
f 393 374 401
|
1163 |
+
f 382 397 401
|
1164 |
+
f 397 393 401
|
1165 |
+
f 385 392 402
|
1166 |
+
f 396 380 402
|
1167 |
+
f 392 396 402
|
1168 |
+
f 376 381 403
|
1169 |
+
f 389 376 403
|
1170 |
+
f 381 398 403
|
1171 |
+
f 398 389 403
|
1172 |
+
f 380 389 404
|
1173 |
+
f 389 385 404
|
1174 |
+
f 402 380 404
|
1175 |
+
f 385 402 404
|
1176 |
+
f 390 374 405
|
1177 |
+
f 374 393 405
|
1178 |
+
f 388 399 405
|
1179 |
+
f 399 390 405
|
1180 |
+
f 393 386 406
|
1181 |
+
f 386 400 406
|
1182 |
+
f 400 388 406
|
1183 |
+
f 405 393 406
|
1184 |
+
f 388 405 406
|
1185 |
+
f 381 384 407
|
1186 |
+
f 384 396 407
|
1187 |
+
f 396 392 407
|
1188 |
+
f 398 381 407
|
1189 |
+
o ShapeIndexedFaceSet.001_ShapeIndexedFaceSet.016
|
1190 |
+
v 0.000000 0.000000 0.000000
|
1191 |
+
v 0.006010 -0.022571 0.023469
|
1192 |
+
v 0.016987 0.005966 0.041034
|
1193 |
+
v 0.012596 0.005966 0.041034
|
1194 |
+
v -0.004964 0.005966 -0.000677
|
1195 |
+
v -0.020333 -0.031353 0.041034
|
1196 |
+
v -0.020333 0.005966 0.025666
|
1197 |
+
v -0.020333 -0.029158 -0.000677
|
1198 |
+
v 0.014792 -0.002819 -0.000677
|
1199 |
+
v 0.012596 -0.015985 0.041034
|
1200 |
+
v -0.020333 0.005966 0.001520
|
1201 |
+
v -0.002765 -0.026962 0.001520
|
1202 |
+
v -0.007160 -0.031353 0.041034
|
1203 |
+
v 0.014792 0.005966 -0.000677
|
1204 |
+
v 0.010401 -0.013789 -0.000677
|
1205 |
+
v 0.016987 -0.007210 0.036641
|
1206 |
+
v -0.020333 -0.026962 0.041034
|
1207 |
+
v -0.015942 -0.031353 0.012503
|
1208 |
+
v 0.016987 0.005966 0.012503
|
1209 |
+
v 0.001619 -0.026962 0.041034
|
1210 |
+
v 0.010401 -0.015985 0.005913
|
1211 |
+
v -0.011551 -0.029158 -0.000677
|
1212 |
+
v 0.003814 -0.022571 0.001520
|
1213 |
+
v -0.020333 -0.013789 -0.000677
|
1214 |
+
v 0.014792 -0.007210 0.008106
|
1215 |
+
v -0.007160 -0.029158 0.005913
|
1216 |
+
v 0.012596 -0.015985 0.032247
|
1217 |
+
v 0.001619 -0.026962 0.034444
|
1218 |
+
v 0.016987 -0.000620 0.016888
|
1219 |
+
v -0.020333 -0.031353 0.012503
|
1220 |
+
v 0.016987 -0.007210 0.041034
|
1221 |
+
v -0.002765 -0.029158 0.030055
|
1222 |
+
v -0.000577 -0.024767 -0.000677
|
1223 |
+
v 0.012596 -0.011601 0.003717
|
1224 |
+
v -0.007160 -0.031353 0.036641
|
1225 |
+
v 0.008205 -0.020376 0.021273
|
1226 |
+
v 0.014792 -0.011601 0.030055
|
1227 |
+
v 0.008205 -0.018180 0.001520
|
1228 |
+
v 0.001619 -0.024767 0.005913
|
1229 |
+
usemtl Shape.015
|
1230 |
+
s off
|
1231 |
+
f 409 435 446
|
1232 |
+
f 411 410 412
|
1233 |
+
f 410 411 413
|
1234 |
+
f 411 412 414
|
1235 |
+
f 413 414 415
|
1236 |
+
f 415 412 416
|
1237 |
+
f 410 413 417
|
1238 |
+
f 414 412 418
|
1239 |
+
f 415 414 418
|
1240 |
+
f 417 413 420
|
1241 |
+
f 412 410 421
|
1242 |
+
f 416 412 421
|
1243 |
+
f 415 416 422
|
1244 |
+
f 413 411 424
|
1245 |
+
f 411 414 424
|
1246 |
+
f 414 413 424
|
1247 |
+
f 420 413 425
|
1248 |
+
f 421 410 426
|
1249 |
+
f 416 421 426
|
1250 |
+
f 410 423 426
|
1251 |
+
f 417 420 427
|
1252 |
+
f 415 422 429
|
1253 |
+
f 425 415 429
|
1254 |
+
f 412 415 431
|
1255 |
+
f 418 412 431
|
1256 |
+
f 415 418 431
|
1257 |
+
f 429 419 433
|
1258 |
+
f 425 429 433
|
1259 |
+
f 417 427 434
|
1260 |
+
f 434 427 435
|
1261 |
+
f 416 426 436
|
1262 |
+
f 426 423 436
|
1263 |
+
f 432 416 436
|
1264 |
+
f 423 432 436
|
1265 |
+
f 413 415 437
|
1266 |
+
f 425 413 437
|
1267 |
+
f 415 425 437
|
1268 |
+
f 410 417 438
|
1269 |
+
f 423 410 438
|
1270 |
+
f 427 420 439
|
1271 |
+
f 433 419 439
|
1272 |
+
f 419 435 439
|
1273 |
+
f 435 427 439
|
1274 |
+
f 419 429 440
|
1275 |
+
f 429 422 440
|
1276 |
+
f 430 419 440
|
1277 |
+
f 422 430 440
|
1278 |
+
f 422 416 441
|
1279 |
+
f 416 432 441
|
1280 |
+
f 434 428 441
|
1281 |
+
f 420 425 442
|
1282 |
+
f 425 433 442
|
1283 |
+
f 439 420 442
|
1284 |
+
f 433 439 442
|
1285 |
+
f 409 430 443
|
1286 |
+
f 428 434 443
|
1287 |
+
f 435 409 443
|
1288 |
+
f 434 435 443
|
1289 |
+
f 432 423 444
|
1290 |
+
f 417 434 444
|
1291 |
+
f 438 417 444
|
1292 |
+
f 423 438 444
|
1293 |
+
f 441 432 444
|
1294 |
+
f 434 441 444
|
1295 |
+
f 430 422 445
|
1296 |
+
f 422 441 445
|
1297 |
+
f 441 428 445
|
1298 |
+
f 443 430 445
|
1299 |
+
f 428 443 445
|
1300 |
+
f 430 409 446
|
1301 |
+
f 419 430 446
|
1302 |
+
f 435 419 446
|
1303 |
+
o ShapeIndexedFaceSet_ShapeIndexedFaceSet.015
|
1304 |
+
v 0.000000 0.000000 0.000000
|
1305 |
+
v -0.057652 -0.000620 0.021270
|
1306 |
+
v -0.022528 -0.031353 0.012498
|
1307 |
+
v -0.020333 -0.031353 0.012498
|
1308 |
+
v -0.020333 -0.031353 0.038838
|
1309 |
+
v -0.020333 0.005966 0.001520
|
1310 |
+
v -0.051066 -0.013789 -0.000677
|
1311 |
+
v -0.053261 0.005966 0.038838
|
1312 |
+
v -0.042284 -0.026962 0.038838
|
1313 |
+
v -0.020333 0.005966 0.025664
|
1314 |
+
v -0.055457 0.005966 -0.000677
|
1315 |
+
v -0.026919 -0.029158 -0.000677
|
1316 |
+
v -0.055457 -0.011601 0.038838
|
1317 |
+
v -0.037897 -0.026962 0.001520
|
1318 |
+
v -0.020333 -0.029158 -0.000677
|
1319 |
+
v -0.057652 0.005966 0.038838
|
1320 |
+
v -0.031314 -0.031353 0.030050
|
1321 |
+
v -0.020333 -0.026962 0.038838
|
1322 |
+
v -0.048870 -0.018180 0.001520
|
1323 |
+
v -0.055457 -0.005015 0.001520
|
1324 |
+
v -0.020333 -0.013789 -0.000677
|
1325 |
+
v -0.053261 -0.015985 0.036641
|
1326 |
+
v -0.040088 0.005966 -0.000677
|
1327 |
+
v -0.046671 -0.022571 0.023467
|
1328 |
+
v -0.057652 -0.005015 0.038838
|
1329 |
+
v -0.031314 -0.031353 0.038838
|
1330 |
+
v -0.033509 -0.029158 0.005911
|
1331 |
+
v -0.057652 0.005966 0.016892
|
1332 |
+
v -0.053261 -0.011601 0.005911
|
1333 |
+
v -0.037897 -0.029158 0.032247
|
1334 |
+
v -0.044476 -0.022571 0.001520
|
1335 |
+
v -0.040088 -0.024767 -0.000677
|
1336 |
+
v -0.057652 -0.005015 0.032247
|
1337 |
+
v -0.042284 -0.026962 0.034444
|
1338 |
+
v -0.055457 -0.011601 0.034444
|
1339 |
+
v -0.055457 -0.000620 -0.000677
|
1340 |
+
v -0.026919 -0.031353 0.016892
|
1341 |
+
v -0.031314 -0.029158 0.001520
|
1342 |
+
usemtl Shape.014
|
1343 |
+
s off
|
1344 |
+
f 449 483 484
|
1345 |
+
f 449 450 451
|
1346 |
+
f 451 450 452
|
1347 |
+
f 451 454 455
|
1348 |
+
f 451 452 456
|
1349 |
+
f 452 454 456
|
1350 |
+
f 454 452 457
|
1351 |
+
f 450 449 458
|
1352 |
+
f 453 457 458
|
1353 |
+
f 455 454 459
|
1354 |
+
f 452 450 461
|
1355 |
+
f 450 458 461
|
1356 |
+
f 458 457 461
|
1357 |
+
f 454 457 462
|
1358 |
+
f 459 454 462
|
1359 |
+
f 449 451 463
|
1360 |
+
f 454 451 464
|
1361 |
+
f 451 456 464
|
1362 |
+
f 456 454 464
|
1363 |
+
f 452 461 467
|
1364 |
+
f 461 457 467
|
1365 |
+
f 455 459 468
|
1366 |
+
f 457 452 469
|
1367 |
+
f 452 467 469
|
1368 |
+
f 467 457 469
|
1369 |
+
f 468 465 470
|
1370 |
+
f 462 448 471
|
1371 |
+
f 459 462 471
|
1372 |
+
f 451 455 472
|
1373 |
+
f 463 451 472
|
1374 |
+
f 448 462 474
|
1375 |
+
f 462 457 474
|
1376 |
+
f 466 448 474
|
1377 |
+
f 453 465 475
|
1378 |
+
f 466 453 475
|
1379 |
+
f 465 468 475
|
1380 |
+
f 472 455 476
|
1381 |
+
f 463 472 476
|
1382 |
+
f 460 473 476
|
1383 |
+
f 473 463 476
|
1384 |
+
f 470 465 477
|
1385 |
+
f 453 458 478
|
1386 |
+
f 465 453 478
|
1387 |
+
f 460 477 478
|
1388 |
+
f 477 465 478
|
1389 |
+
f 448 466 479
|
1390 |
+
f 471 448 479
|
1391 |
+
f 459 471 479
|
1392 |
+
f 455 468 480
|
1393 |
+
f 468 470 480
|
1394 |
+
f 476 455 480
|
1395 |
+
f 460 476 480
|
1396 |
+
f 477 460 480
|
1397 |
+
f 470 477 480
|
1398 |
+
f 468 459 481
|
1399 |
+
f 466 475 481
|
1400 |
+
f 475 468 481
|
1401 |
+
f 479 466 481
|
1402 |
+
f 459 479 481
|
1403 |
+
f 457 453 482
|
1404 |
+
f 453 466 482
|
1405 |
+
f 474 457 482
|
1406 |
+
f 466 474 482
|
1407 |
+
f 449 463 483
|
1408 |
+
f 463 473 483
|
1409 |
+
f 483 473 484
|
1410 |
+
f 458 449 484
|
1411 |
+
f 473 460 484
|
1412 |
+
f 478 458 484
|
1413 |
+
f 460 478 484
|
bowl/textured-0008192.obj
ADDED
The diff for this file is too large to render.
See raw diff
|
|
cfg.yaml
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
lmps:
|
3 |
+
tabletop_ui:
|
4 |
+
prompt_path: prompts/tabletop_ui.py
|
5 |
+
engine: text-davinci-003
|
6 |
+
max_tokens: 256
|
7 |
+
temperature: 0
|
8 |
+
query_prefix: '# '
|
9 |
+
query_suffix: '.'
|
10 |
+
stop: ['#', 'objects = [']
|
11 |
+
maintain_session: True
|
12 |
+
debug_mode: False
|
13 |
+
include_context: True
|
14 |
+
has_return: False
|
15 |
+
return_val_name: ret_val
|
16 |
+
parse_obj_name:
|
17 |
+
prompt_path: prompts/parse_obj_name.py
|
18 |
+
engine: text-davinci-003
|
19 |
+
max_tokens: 512
|
20 |
+
temperature: 0
|
21 |
+
query_prefix: '# '
|
22 |
+
query_suffix: '.'
|
23 |
+
stop: ['#', 'objects = [']
|
24 |
+
maintain_session: False
|
25 |
+
debug_mode: False
|
26 |
+
include_context: True
|
27 |
+
has_return: True
|
28 |
+
return_val_name: ret_val
|
29 |
+
parse_position:
|
30 |
+
prompt_path: prompts/parse_position.py
|
31 |
+
engine: text-davinci-003
|
32 |
+
max_tokens: 512
|
33 |
+
temperature: 0
|
34 |
+
query_prefix: '# '
|
35 |
+
query_suffix: '.'
|
36 |
+
stop: ['#']
|
37 |
+
maintain_session: False
|
38 |
+
debug_mode: False
|
39 |
+
include_context: True
|
40 |
+
has_return: True
|
41 |
+
return_val_name: ret_val
|
42 |
+
parse_question:
|
43 |
+
prompt_path: prompts/parse_question.py
|
44 |
+
engine: text-davinci-003
|
45 |
+
max_tokens: 512
|
46 |
+
temperature: 0
|
47 |
+
query_prefix: '# '
|
48 |
+
query_suffix: '.'
|
49 |
+
stop: ['#', 'objects = [']
|
50 |
+
maintain_session: False
|
51 |
+
debug_mode: False
|
52 |
+
include_context: True
|
53 |
+
has_return: True
|
54 |
+
return_val_name: ret_val
|
55 |
+
transform_shape_pts:
|
56 |
+
prompt_path: prompts/transform_shape_pts.py
|
57 |
+
engine: text-davinci-003
|
58 |
+
max_tokens: 512
|
59 |
+
temperature: 0
|
60 |
+
query_prefix: '# '
|
61 |
+
query_suffix: '.'
|
62 |
+
stop: ['#']
|
63 |
+
maintain_session: False
|
64 |
+
debug_mode: False
|
65 |
+
include_context: True
|
66 |
+
has_return: True
|
67 |
+
return_val_name: new_shape_pts
|
68 |
+
fgen:
|
69 |
+
prompt_path: prompts/fgen.py
|
70 |
+
engine: text-davinci-003
|
71 |
+
max_tokens: 512
|
72 |
+
temperature: 0
|
73 |
+
query_prefix: '# define function: '
|
74 |
+
query_suffix: '.'
|
75 |
+
stop: ['# define', '# example']
|
76 |
+
maintain_session: False
|
77 |
+
debug_mode: False
|
78 |
+
include_context: True
|
79 |
+
|
80 |
+
tabletop_coords:
|
81 |
+
top_left: [-0.25, -0.25]
|
82 |
+
top_side: [0, -0.25]
|
83 |
+
top_right: [0.25, -0.25]
|
84 |
+
left_side: [-0.25, -0.5]
|
85 |
+
middle: [0, -0.5]
|
86 |
+
right_side: [0.25, -0.5]
|
87 |
+
bottom_left: [-0.25, -0.75]
|
88 |
+
bottom_side: [0, -0.75]
|
89 |
+
bottom_right: [0.25, -0.75]
|
90 |
+
table_z: 0
|
consts.py
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
|
3 |
+
# # Global constants: pick and place objects, colors, workspace bounds
|
4 |
+
COLORS = {
|
5 |
+
'blue': (78/255, 121/255, 167/255, 255/255),
|
6 |
+
'red': (255/255, 87/255, 89/255, 255/255),
|
7 |
+
'green': (89/255, 169/255, 79/255, 255/255),
|
8 |
+
'orange': (242/255, 142/255, 43/255, 255/255),
|
9 |
+
'yellow': (237/255, 201/255, 72/255, 255/255),
|
10 |
+
'purple': (176/255, 122/255, 161/255, 255/255),
|
11 |
+
'pink': (255/255, 157/255, 167/255, 255/255),
|
12 |
+
'cyan': (118/255, 183/255, 178/255, 255/255),
|
13 |
+
'brown': (156/255, 117/255, 95/255, 255/255),
|
14 |
+
'gray': (186/255, 176/255, 172/255, 255/255),
|
15 |
+
}
|
16 |
+
|
17 |
+
CORNER_POS = {
|
18 |
+
'top left corner': (-0.3 + 0.05, -0.2 - 0.05, 0),
|
19 |
+
'top side': (0, -0.2 - 0.05, 0),
|
20 |
+
'top right corner': (0.3 - 0.05, -0.2 - 0.05, 0),
|
21 |
+
'left side': (-0.3 + 0.05, -0.5, 0),
|
22 |
+
'middle': (0, -0.5, 0),
|
23 |
+
'right side': (0.3 - 0.05, -0.5, 0),
|
24 |
+
'bottom left corner': (-0.3 + 0.05, -0.8 + 0.05, 0),
|
25 |
+
'bottom side': (0, -0.8 + 0.05, 0),
|
26 |
+
'bottom right corner': (0.3 - 0.05, -0.8 + 0.05, 0),
|
27 |
+
}
|
28 |
+
|
29 |
+
ALL_BLOCKS = ['blue block', 'red block', 'green block', 'orange block', 'yellow block', 'purple block', 'pink block', 'cyan block', 'brown block', 'gray block']
|
30 |
+
ALL_BOWLS = ['blue bowl', 'red bowl', 'green bowl', 'orange bowl', 'yellow bowl', 'purple bowl', 'pink bowl', 'cyan bowl', 'brown bowl', 'gray bowl']
|
31 |
+
|
32 |
+
PIXEL_SIZE = 0.00267857
|
33 |
+
BOUNDS = np.float32([[-0.3, 0.3], [-0.8, -0.2], [0, 0.15]]) # X Y Z
|
lmp.py
ADDED
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from time import sleep
|
2 |
+
import ast
|
3 |
+
import astunparse
|
4 |
+
import openai
|
5 |
+
from openai.error import RateLimitError, APIConnectionError
|
6 |
+
from pygments import highlight
|
7 |
+
from pygments.lexers import PythonLexer
|
8 |
+
from pygments.formatters import TerminalFormatter
|
9 |
+
|
10 |
+
|
11 |
+
class LMP:
|
12 |
+
|
13 |
+
def __init__(self, name, cfg, lmp_fgen, fixed_vars, variable_vars, md_logger):
|
14 |
+
self._name = name
|
15 |
+
self._cfg = cfg
|
16 |
+
self._md_logger = md_logger
|
17 |
+
|
18 |
+
with open(self._cfg['prompt_path'], 'r') as f:
|
19 |
+
self._base_prompt = f.read()
|
20 |
+
|
21 |
+
self._stop_tokens = list(self._cfg['stop'])
|
22 |
+
|
23 |
+
self._lmp_fgen = lmp_fgen
|
24 |
+
|
25 |
+
self._fixed_vars = fixed_vars
|
26 |
+
self._variable_vars = variable_vars
|
27 |
+
self.exec_hist = ''
|
28 |
+
|
29 |
+
def clear_exec_hist(self):
|
30 |
+
self.exec_hist = ''
|
31 |
+
|
32 |
+
def build_prompt(self, query, context=''):
|
33 |
+
if len(self._variable_vars) > 0:
|
34 |
+
variable_vars_imports_str = f"from utils import {', '.join(self._variable_vars.keys())}"
|
35 |
+
else:
|
36 |
+
variable_vars_imports_str = ''
|
37 |
+
prompt = self._base_prompt.replace('{variable_vars_imports}', variable_vars_imports_str)
|
38 |
+
|
39 |
+
if self._cfg['maintain_session']:
|
40 |
+
prompt += f'\n{self.exec_hist}'
|
41 |
+
|
42 |
+
if context != '':
|
43 |
+
prompt += f'\n{context}'
|
44 |
+
|
45 |
+
use_query = f'{self._cfg["query_prefix"]}{query}{self._cfg["query_suffix"]}'
|
46 |
+
prompt += f'\n{use_query}'
|
47 |
+
|
48 |
+
return prompt, use_query
|
49 |
+
|
50 |
+
def __call__(self, query, context='', **kwargs):
|
51 |
+
prompt, use_query = self.build_prompt(query, context=context)
|
52 |
+
|
53 |
+
while True:
|
54 |
+
try:
|
55 |
+
code_str = openai.Completion.create(
|
56 |
+
prompt=prompt,
|
57 |
+
stop=self._stop_tokens,
|
58 |
+
temperature=self._cfg['temperature'],
|
59 |
+
engine=self._cfg['engine'],
|
60 |
+
max_tokens=self._cfg['max_tokens']
|
61 |
+
)['choices'][0]['text'].strip()
|
62 |
+
break
|
63 |
+
except (RateLimitError, APIConnectionError) as e:
|
64 |
+
print(f'OpenAI API got err {e}')
|
65 |
+
print('Retrying after 10s.')
|
66 |
+
sleep(10)
|
67 |
+
|
68 |
+
if self._cfg['include_context'] and context != '':
|
69 |
+
to_exec = f'{context}\n{code_str}'
|
70 |
+
to_log = f'{context}\n{use_query}\n{code_str}'
|
71 |
+
else:
|
72 |
+
to_exec = code_str
|
73 |
+
to_log = f'{use_query}\n{to_exec}'
|
74 |
+
|
75 |
+
to_log_pretty = highlight(to_log, PythonLexer(), TerminalFormatter())
|
76 |
+
print(f'LMP {self._name} generated code:\n{to_log_pretty}')
|
77 |
+
self._md_logger.log_text(f'LMP {self._name} Generated Code:')
|
78 |
+
self._md_logger.log_code(to_log)
|
79 |
+
|
80 |
+
new_fs = self._lmp_fgen.create_new_fs_from_code(code_str)
|
81 |
+
self._variable_vars.update(new_fs)
|
82 |
+
|
83 |
+
gvars = merge_dicts([self._fixed_vars, self._variable_vars])
|
84 |
+
lvars = kwargs
|
85 |
+
|
86 |
+
if not self._cfg['debug_mode']:
|
87 |
+
exec_safe(to_exec, gvars, lvars)
|
88 |
+
|
89 |
+
self.exec_hist += f'\n{to_exec}'
|
90 |
+
|
91 |
+
if self._cfg['maintain_session']:
|
92 |
+
self._variable_vars.update(lvars)
|
93 |
+
|
94 |
+
if self._cfg['has_return']:
|
95 |
+
return lvars[self._cfg['return_val_name']]
|
96 |
+
|
97 |
+
|
98 |
+
class LMPFGen:
|
99 |
+
|
100 |
+
def __init__(self, cfg, fixed_vars, variable_vars, md_logger):
|
101 |
+
self._cfg = cfg
|
102 |
+
|
103 |
+
self._stop_tokens = list(self._cfg['stop'])
|
104 |
+
self._fixed_vars = fixed_vars
|
105 |
+
self._variable_vars = variable_vars
|
106 |
+
self._md_logger = md_logger
|
107 |
+
|
108 |
+
with open(self._cfg['prompt_path'], 'r') as f:
|
109 |
+
self._base_prompt = f.read()
|
110 |
+
|
111 |
+
def create_f_from_sig(self, f_name, f_sig, other_vars=None, fix_bugs=False, return_src=False):
|
112 |
+
print(f'Creating function: {f_sig}')
|
113 |
+
|
114 |
+
use_query = f'{self._cfg["query_prefix"]}{f_sig}{self._cfg["query_suffix"]}'
|
115 |
+
prompt = f'{self._base_prompt}\n{use_query}'
|
116 |
+
|
117 |
+
while True:
|
118 |
+
try:
|
119 |
+
f_src = openai.Completion.create(
|
120 |
+
prompt=prompt,
|
121 |
+
stop=self._stop_tokens,
|
122 |
+
temperature=self._cfg['temperature'],
|
123 |
+
engine=self._cfg['engine'],
|
124 |
+
max_tokens=self._cfg['max_tokens']
|
125 |
+
)['choices'][0]['text'].strip()
|
126 |
+
break
|
127 |
+
except (RateLimitError, APIConnectionError) as e:
|
128 |
+
print(f'OpenAI API got err {e}')
|
129 |
+
print('Retrying after 10s.')
|
130 |
+
sleep(10)
|
131 |
+
|
132 |
+
if fix_bugs:
|
133 |
+
f_src = openai.Edit.create(
|
134 |
+
model='code-davinci-edit-001',
|
135 |
+
input='# ' + f_src,
|
136 |
+
temperature=0,
|
137 |
+
instruction='Fix the bug if there is one. Improve readability. Keep same inputs and outputs. Only small changes. No comments.',
|
138 |
+
)['choices'][0]['text'].strip()
|
139 |
+
|
140 |
+
if other_vars is None:
|
141 |
+
other_vars = {}
|
142 |
+
gvars = merge_dicts([self._fixed_vars, self._variable_vars, other_vars])
|
143 |
+
lvars = {}
|
144 |
+
|
145 |
+
exec_safe(f_src, gvars, lvars)
|
146 |
+
|
147 |
+
f = lvars[f_name]
|
148 |
+
|
149 |
+
to_print = f'{use_query}\n{f_src}'
|
150 |
+
to_print_pretty = highlight(to_print, PythonLexer(), TerminalFormatter())
|
151 |
+
print(f'LMPFGen generated code:\n{to_print_pretty}')
|
152 |
+
self._md_logger.log_text('Generated Function:')
|
153 |
+
self._md_logger.log_code(to_print)
|
154 |
+
|
155 |
+
if return_src:
|
156 |
+
return f, f_src
|
157 |
+
return f
|
158 |
+
|
159 |
+
def create_new_fs_from_code(self, code_str, other_vars=None, fix_bugs=False, return_src=False):
|
160 |
+
fs, f_assigns = {}, {}
|
161 |
+
f_parser = FunctionParser(fs, f_assigns)
|
162 |
+
f_parser.visit(ast.parse(code_str))
|
163 |
+
for f_name, f_assign in f_assigns.items():
|
164 |
+
if f_name in fs:
|
165 |
+
fs[f_name] = f_assign
|
166 |
+
|
167 |
+
if other_vars is None:
|
168 |
+
other_vars = {}
|
169 |
+
|
170 |
+
new_fs = {}
|
171 |
+
srcs = {}
|
172 |
+
for f_name, f_sig in fs.items():
|
173 |
+
all_vars = merge_dicts([self._fixed_vars, self._variable_vars, new_fs, other_vars])
|
174 |
+
if not var_exists(f_name, all_vars):
|
175 |
+
f, f_src = self.create_f_from_sig(f_name, f_sig, new_fs, fix_bugs=fix_bugs, return_src=True)
|
176 |
+
|
177 |
+
# recursively define child_fs in the function body if needed
|
178 |
+
f_def_body = astunparse.unparse(ast.parse(f_src).body[0].body)
|
179 |
+
child_fs, child_f_srcs = self.create_new_fs_from_code(
|
180 |
+
f_def_body, other_vars=all_vars, fix_bugs=fix_bugs, return_src=True
|
181 |
+
)
|
182 |
+
|
183 |
+
if len(child_fs) > 0:
|
184 |
+
new_fs.update(child_fs)
|
185 |
+
srcs.update(child_f_srcs)
|
186 |
+
|
187 |
+
# redefine parent f so newly created child_fs are in scope
|
188 |
+
gvars = merge_dicts([self._fixed_vars, self._variable_vars, new_fs, other_vars])
|
189 |
+
lvars = {}
|
190 |
+
|
191 |
+
exec_safe(f_src, gvars, lvars)
|
192 |
+
|
193 |
+
f = lvars[f_name]
|
194 |
+
|
195 |
+
new_fs[f_name], srcs[f_name] = f, f_src
|
196 |
+
|
197 |
+
if return_src:
|
198 |
+
return new_fs, srcs
|
199 |
+
return new_fs
|
200 |
+
|
201 |
+
|
202 |
+
class FunctionParser(ast.NodeTransformer):
|
203 |
+
|
204 |
+
def __init__(self, fs, f_assigns):
|
205 |
+
super().__init__()
|
206 |
+
self._fs = fs
|
207 |
+
self._f_assigns = f_assigns
|
208 |
+
|
209 |
+
def visit_Call(self, node):
|
210 |
+
self.generic_visit(node)
|
211 |
+
if isinstance(node.func, ast.Name):
|
212 |
+
f_sig = astunparse.unparse(node).strip()
|
213 |
+
f_name = astunparse.unparse(node.func).strip()
|
214 |
+
self._fs[f_name] = f_sig
|
215 |
+
return node
|
216 |
+
|
217 |
+
def visit_Assign(self, node):
|
218 |
+
self.generic_visit(node)
|
219 |
+
if isinstance(node.value, ast.Call):
|
220 |
+
assign_str = astunparse.unparse(node).strip()
|
221 |
+
f_name = astunparse.unparse(node.value.func).strip()
|
222 |
+
self._f_assigns[f_name] = assign_str
|
223 |
+
return node
|
224 |
+
|
225 |
+
|
226 |
+
def var_exists(name, all_vars):
|
227 |
+
try:
|
228 |
+
eval(name, all_vars)
|
229 |
+
except:
|
230 |
+
exists = False
|
231 |
+
else:
|
232 |
+
exists = True
|
233 |
+
return exists
|
234 |
+
|
235 |
+
|
236 |
+
def merge_dicts(dicts):
|
237 |
+
return {
|
238 |
+
k : v
|
239 |
+
for d in dicts
|
240 |
+
for k, v in d.items()
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
def exec_safe(code_str, gvars=None, lvars=None):
|
245 |
+
banned_phrases = ['import', '__']
|
246 |
+
for phrase in banned_phrases:
|
247 |
+
assert phrase not in code_str
|
248 |
+
|
249 |
+
if gvars is None:
|
250 |
+
gvars = {}
|
251 |
+
if lvars is None:
|
252 |
+
lvars = {}
|
253 |
+
empty_fn = lambda *args, **kwargs: None
|
254 |
+
custom_gvars = merge_dicts([
|
255 |
+
gvars,
|
256 |
+
{'exec': empty_fn, 'eval': empty_fn}
|
257 |
+
])
|
258 |
+
exec(code_str, custom_gvars, lvars)
|
md_logger.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
class MarkdownLogger:
|
2 |
+
|
3 |
+
def __init__(self):
|
4 |
+
self._log = ''
|
5 |
+
|
6 |
+
def log_text(self, text):
|
7 |
+
self._log += '\n' + text + '\n'
|
8 |
+
|
9 |
+
def log_code(self, code):
|
10 |
+
self._log += f'\n```python\n{code}\n```\n'
|
11 |
+
|
12 |
+
def clear(self):
|
13 |
+
self._log = ''
|
14 |
+
|
15 |
+
def get_log(self):
|
16 |
+
return self._log
|
prompts/fgen.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
from shapely.geometry import *
|
3 |
+
from shapely.affinity import *
|
4 |
+
|
5 |
+
from env_utils import get_obj_pos, get_obj_names
|
6 |
+
from ctrl_utils import put_first_on_second
|
7 |
+
|
8 |
+
# define function: total = get_total(xs=numbers).
|
9 |
+
def get_total(xs):
|
10 |
+
return np.sum(xs)
|
11 |
+
|
12 |
+
# define function: y = eval_line(x, slope, y_intercept=0).
|
13 |
+
def eval_line(x, slope, y_intercept):
|
14 |
+
return x * slope + y_intercept
|
15 |
+
|
16 |
+
# define function: pt = get_pt_to_the_left(pt, dist).
|
17 |
+
def get_pt_to_the_left(pt, dist):
|
18 |
+
return pt + [-dist, 0]
|
19 |
+
|
20 |
+
# define function: pt = get_pt_to_the_top(pt, dist).
|
21 |
+
def get_pt_to_the_top(pt, dist):
|
22 |
+
return pt + [0, dist]
|
23 |
+
|
24 |
+
# define function line = make_line_by_length(length=x).
|
25 |
+
def make_line_by_length(length):
|
26 |
+
line = LineString([[0, 0], [length, 0]])
|
27 |
+
return line
|
28 |
+
|
29 |
+
# define function: line = make_vertical_line_by_length(length=x).
|
30 |
+
def make_vertical_line_by_length(length):
|
31 |
+
line = make_line_by_length(length)
|
32 |
+
vertical_line = rotate(line, 90)
|
33 |
+
return vertical_line
|
34 |
+
|
35 |
+
# define function: pt = interpolate_line(line, t=0.5).
|
36 |
+
def interpolate_line(line, t):
|
37 |
+
pt = line.interpolate(t, normalized=True)
|
38 |
+
return np.array(pt.coords[0])
|
39 |
+
|
40 |
+
# example: scale a line by 2.
|
41 |
+
line = make_line_by_length(1)
|
42 |
+
new_shape = scale(line, xfact=2, yfact=2)
|
43 |
+
|
44 |
+
# example: put object1 on top of object0.
|
45 |
+
put_first_on_second('object1', 'object0')
|
46 |
+
|
47 |
+
# example: get the position of the first object.
|
48 |
+
obj_names = get_obj_names()
|
49 |
+
pos_2d = get_obj_pos(obj_names[0])
|
prompts/parse_obj_name.py
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
from env_utils import get_obj_pos, parse_position
|
3 |
+
from utils import get_obj_positions_np
|
4 |
+
|
5 |
+
objects = ['blue block', 'cyan block', 'purple bowl', 'gray bowl', 'brown bowl', 'pink block', 'purple block']
|
6 |
+
# the block closest to the purple bowl.
|
7 |
+
block_names = ['blue block', 'cyan block', 'purple block']
|
8 |
+
closest_block_idx = get_closest_idx(points=get_obj_positions_np(block_names), point=get_obj_pos('purple bowl'))
|
9 |
+
closest_block_name = block_names[closest_block_idx]
|
10 |
+
ret_val = closest_block_name
|
11 |
+
objects = ['brown bowl', 'banana', 'brown block', 'apple', 'blue bowl', 'blue block']
|
12 |
+
# the blocks.
|
13 |
+
ret_val = ['brown block', 'blue block']
|
14 |
+
objects = ['brown bowl', 'banana', 'brown block', 'apple', 'blue bowl', 'blue block']
|
15 |
+
# the brown objects.
|
16 |
+
ret_val = ['brown bowl', 'brown block']
|
17 |
+
objects = ['brown bowl', 'banana', 'brown block', 'apple', 'blue bowl', 'blue block']
|
18 |
+
# a fruit that's not the apple
|
19 |
+
fruit_names = ['banana', 'apple']
|
20 |
+
for fruit_name in fruit_names:
|
21 |
+
if fruit_name != 'apple':
|
22 |
+
ret_val = fruit_name
|
23 |
+
objects = ['blue block', 'cyan block', 'purple bowl', 'brown bowl', 'purple block']
|
24 |
+
# blocks above the brown bowl.
|
25 |
+
block_names = ['blue block', 'cyan block', 'purple block']
|
26 |
+
brown_bowl_pos = get_obj_pos('brown bowl')
|
27 |
+
use_block_names = []
|
28 |
+
for block_name in block_names:
|
29 |
+
if get_obj_pos(block_name)[1] > brown_bowl_pos[1]:
|
30 |
+
use_block_names.append(block_name)
|
31 |
+
ret_val = use_block_names
|
32 |
+
objects = ['blue block', 'cyan block', 'purple bowl', 'brown bowl', 'purple block']
|
33 |
+
# the blue block.
|
34 |
+
ret_val = 'blue block'
|
35 |
+
objects = ['blue block', 'cyan block', 'purple bowl', 'brown bowl', 'purple block']
|
36 |
+
# the block closest to the bottom right corner.
|
37 |
+
corner_pos = parse_position('bottom right corner')
|
38 |
+
block_names = ['blue block', 'cyan block', 'purple block']
|
39 |
+
closest_block_idx = get_closest_idx(points=get_obj_positions_np(block_names), point=corner_pos)
|
40 |
+
closest_block_name = block_names[closest_block_idx]
|
41 |
+
ret_val = closest_block_name
|
42 |
+
objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
|
43 |
+
# the left most block.
|
44 |
+
block_names = ['green block', 'brown block', 'blue block']
|
45 |
+
left_block_idx = np.argsort(get_obj_positions_np(block_names)[:, 0])[0]
|
46 |
+
left_block_name = block_names[left_block_idx]
|
47 |
+
ret_val = left_block_name
|
48 |
+
objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
|
49 |
+
# the bowl on near the top.
|
50 |
+
bowl_names = ['brown bowl', 'green bowl', 'blue bowl']
|
51 |
+
top_bowl_idx = np.argsort(get_obj_positions_np(bowl_names)[:, 1])[-1]
|
52 |
+
top_bowl_name = bowl_names[top_bowl_idx]
|
53 |
+
ret_val = top_bowl_name
|
54 |
+
objects = ['yellow bowl', 'purple block', 'yellow block', 'purple bowl', 'pink bowl', 'pink block']
|
55 |
+
# the third bowl from the right.
|
56 |
+
bowl_names = ['yellow bowl', 'purple bowl', 'pink bowl']
|
57 |
+
bowl_idx = np.argsort(get_obj_positions_np(bowl_names)[:, 0])[-3]
|
58 |
+
bowl_name = bowl_names[bowl_idx]
|
59 |
+
ret_val = bowl_name
|
prompts/parse_position.py
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
from shapely.geometry import *
|
3 |
+
from shapely.affinity import *
|
4 |
+
from env_utils import denormalize_xy, parse_obj_name, get_obj_names, get_obj_pos
|
5 |
+
|
6 |
+
# a 30cm horizontal line in the middle with 3 points.
|
7 |
+
middle_pos = denormalize_xy([0.5, 0.5])
|
8 |
+
start_pos = middle_pos + [-0.3/2, 0]
|
9 |
+
end_pos = middle_pos + [0.3/2, 0]
|
10 |
+
line = make_line(start=start_pos, end=end_pos)
|
11 |
+
points = interpolate_pts_on_line(line=line, n=3)
|
12 |
+
ret_val = points
|
13 |
+
# a 20cm vertical line near the right with 4 points.
|
14 |
+
middle_pos = denormalize_xy([1, 0.5])
|
15 |
+
start_pos = middle_pos + [0, -0.2/2]
|
16 |
+
end_pos = middle_pos + [0, 0.2/2]
|
17 |
+
line = make_line(start=start_pos, end=end_pos)
|
18 |
+
points = interpolate_pts_on_line(line=line, n=4)
|
19 |
+
ret_val = points
|
20 |
+
# a diagonal line from the top left to the bottom right corner with 5 points.
|
21 |
+
top_left_corner = denormalize_xy([0, 1])
|
22 |
+
bottom_right_corner = denormalize_xy([1, 0])
|
23 |
+
line = make_line(start=top_left_corner, end=bottom_right_corner)
|
24 |
+
points = interpolate_pts_on_line(line=line, n=5)
|
25 |
+
ret_val = points
|
26 |
+
# a triangle with size 10cm with 3 points.
|
27 |
+
polygon = make_triangle(size=0.1, center=denormalize_xy([0.5, 0.5]))
|
28 |
+
points = get_points_from_polygon(polygon)
|
29 |
+
ret_val = points
|
30 |
+
# the corner closest to the sun colored block.
|
31 |
+
block_name = parse_obj_name('the sun colored block', f'objects = {get_obj_names()}')
|
32 |
+
corner_positions = np.array([denormalize_xy(pos) for pos in [[0, 0], [0, 1], [1, 1], [1, 0]]])
|
33 |
+
closest_corner_pos = get_closest_point(points=corner_positions, point=get_obj_pos(block_name))
|
34 |
+
ret_val = closest_corner_pos
|
35 |
+
# the side farthest from the right most bowl.
|
36 |
+
bowl_name = parse_obj_name('the right most bowl', f'objects = {get_obj_names()}')
|
37 |
+
side_positions = np.array([denormalize_xy(pos) for pos in [[0.5, 0], [0.5, 1], [1, 0.5], [0, 0.5]]])
|
38 |
+
farthest_side_pos = get_farthest_point(points=side_positions, point=get_obj_pos(bowl_name))
|
39 |
+
ret_val = farthest_side_pos
|
40 |
+
# a point above the third block from the bottom.
|
41 |
+
block_name = parse_obj_name('the third block from the bottom', f'objects = {get_obj_names()}')
|
42 |
+
ret_val = get_obj_pos(block_name) + [0.1, 0]
|
43 |
+
# a point 10cm left of the bowls.
|
44 |
+
bowl_names = parse_obj_name('the bowls', f'objects = {get_obj_names()}')
|
45 |
+
bowl_positions = get_all_object_positions_np(obj_names=bowl_names)
|
46 |
+
left_obj_pos = bowl_positions[np.argmin(bowl_positions[:, 0])] + [-0.1, 0]
|
47 |
+
ret_val = left_obj_pos
|
48 |
+
# the bottom side.
|
49 |
+
bottom_pos = denormalize_xy([0.5, 0])
|
50 |
+
ret_val = bottom_pos
|
51 |
+
# the top corners.
|
52 |
+
top_left_pos = denormalize_xy([0, 1])
|
53 |
+
top_right_pos = denormalize_xy([1, 1])
|
54 |
+
ret_val = [top_left_pos, top_right_pos]
|
prompts/parse_question.py
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from utils import get_obj_pos, get_obj_names, parse_obj_name, bbox_contains_pt, is_obj_visible
|
2 |
+
|
3 |
+
objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl', 'fruit', 'green block', 'black bowl']
|
4 |
+
# is the blue block to the right of the yellow bowl?
|
5 |
+
ret_val = get_obj_pos('blue block')[0] > get_obj_pos('yellow bowl')[0]
|
6 |
+
objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl', 'fruit', 'green block', 'black bowl']
|
7 |
+
# how many yellow objects are there?
|
8 |
+
yellow_object_names = parse_obj_name('the yellow objects', f'objects = {get_obj_names()}')
|
9 |
+
ret_val = len(yellow_object_names)
|
10 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
11 |
+
# what are the blocks left of the green bowl?
|
12 |
+
block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
|
13 |
+
green_bowl_pos = get_obj_pos('green bowl')
|
14 |
+
left_block_names = []
|
15 |
+
for block_name in block_names:
|
16 |
+
if get_obj_pos(block_name)[0] < green_bowl_pos[0]:
|
17 |
+
left_block_names.append(block_name)
|
18 |
+
ret_val = left_block_names
|
19 |
+
objects = ['pink block', 'yellow block', 'pink bowl', 'blue block', 'blue bowl', 'yellow bowl']
|
20 |
+
# is the sun colored block above the blue bowl?
|
21 |
+
sun_block_name = parse_obj_name('sun colored block', f'objects = {get_obj_names()}')
|
22 |
+
sun_block_pos = get_obj_pos(sun_block_name)
|
23 |
+
blue_bowl_pos = get_obj_pos('blue bowl')
|
24 |
+
ret_val = sun_block_pos[1] > blue_bowl_pos[1]
|
25 |
+
objects = ['pink block', 'yellow block', 'pink bowl', 'blue block', 'blue bowl', 'yellow bowl']
|
26 |
+
# is the green block below the blue bowl?
|
27 |
+
ret_val = get_obj_pos('green block')[1] < get_obj_pos('blue bowl')[1]
|
prompts/tabletop_ui.py
ADDED
@@ -0,0 +1,173 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Python 2D robot control script
|
2 |
+
import numpy as np
|
3 |
+
from env_utils import put_first_on_second, get_obj_pos, get_obj_names, say, get_corner_name, get_side_name, is_obj_visible, stack_objects_in_order
|
4 |
+
from plan_utils import parse_obj_name, parse_position, parse_question, transform_shape_pts
|
5 |
+
|
6 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
7 |
+
# place the yellow block on the yellow bowl.
|
8 |
+
say('Ok - putting the yellow block on the yellow bowl')
|
9 |
+
put_first_on_second('yellow block', 'yellow bowl')
|
10 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
11 |
+
# which block did you move.
|
12 |
+
say('I moved the yellow block')
|
13 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
14 |
+
# move the green block to the top right corner.
|
15 |
+
say('Got it - putting the green block on the top right corner')
|
16 |
+
corner_pos = parse_position('top right corner')
|
17 |
+
put_first_on_second('green block', corner_pos)
|
18 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
19 |
+
# stack the blue bowl on the yellow bowl on the green block.
|
20 |
+
order_bottom_to_top = ['green block', 'yellow block', 'blue bowl']
|
21 |
+
say(f'Sure - stacking from top to bottom: {", ".join(order_bottom_to_top)}')
|
22 |
+
stack_objects_in_order(object_names=order_bottom_to_top)
|
23 |
+
objects = ['cyan block', 'white block', 'cyan bowl', 'blue block', 'blue bowl', 'white bowl']
|
24 |
+
# move the cyan block into its corresponding bowl.
|
25 |
+
matches = {'cyan block': 'cyan bowl'}
|
26 |
+
say('Got it - placing the cyan block on the cyan bowl')
|
27 |
+
for first, second in matches.items():
|
28 |
+
put_first_on_second(first, get_obj_pos(second))
|
29 |
+
objects = ['cyan block', 'white block', 'cyan bowl', 'blue block', 'blue bowl', 'white bowl']
|
30 |
+
# make a line of blocks on the right side.
|
31 |
+
say('No problem! Making a line of blocks on the right side')
|
32 |
+
block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
|
33 |
+
line_pts = parse_position(f'a 30cm vertical line on the right with {len(block_names)} points')
|
34 |
+
for block_name, pt in zip(block_names, line_pts):
|
35 |
+
put_first_on_second(block_name, pt)
|
36 |
+
objects = ['yellow block', 'red block', 'yellow bowl', 'gray block', 'gray bowl', 'red bowl']
|
37 |
+
# put the small banana colored thing in between the blue bowl and green block.
|
38 |
+
say('Sure thing - putting the yellow block between the blue bowl and the green block')
|
39 |
+
target_pos = parse_position('a point in the middle betweeen the blue bowl and the green block')
|
40 |
+
put_first_on_second('yellow block', target_pos)
|
41 |
+
objects = ['yellow block', 'red block', 'yellow bowl', 'gray block', 'gray bowl', 'red bowl']
|
42 |
+
# can you cut the bowls in half.
|
43 |
+
say('no, I can only move objects around')
|
44 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'gray block', 'gray bowl', 'green bowl']
|
45 |
+
# stack the blocks on the right side with the gray one on the bottom.
|
46 |
+
say('Ok. stacking the blocks on the right side with the gray block on the bottom')
|
47 |
+
right_side = parse_position('the right side')
|
48 |
+
put_first_on_second('gray block', right_side)
|
49 |
+
order_bottom_to_top = ['gray block', 'green block', 'yellow block']
|
50 |
+
stack_objects_in_order(object_names=order_bottom_to_top)
|
51 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
52 |
+
# hide the blue bowl.
|
53 |
+
bowl_name = np.random.choice(['yellow bowl', 'green bowl'])
|
54 |
+
say(f'Sounds good! Hiding the blue bowl under the {bowl_name}')
|
55 |
+
put_first_on_second(bowl_name, 'blue bowl')
|
56 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
57 |
+
# move the grass-colored bowl to the left.
|
58 |
+
say('Sure - moving the green bowl left by 10 centimeters')
|
59 |
+
left_pos = parse_position('a point 10cm left of the green bowl')
|
60 |
+
put_first_on_second('green bowl', left_pos)
|
61 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
62 |
+
# why did you move the red bowl.
|
63 |
+
say(f'I did not move the red bowl')
|
64 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
65 |
+
# undo that.
|
66 |
+
say('Sure - moving the green bowl right by 10 centimeters')
|
67 |
+
left_pos = parse_position('a point 10cm right of the green bowl')
|
68 |
+
put_first_on_second('green bowl', left_pos)
|
69 |
+
objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
|
70 |
+
# place the top most block to the corner closest to the bottom most block.
|
71 |
+
top_block_name = parse_obj_name('top most block', f'objects = {get_obj_names()}')
|
72 |
+
bottom_block_name = parse_obj_name('bottom most block', f'objects = {get_obj_names()}')
|
73 |
+
closest_corner_pos = parse_position(f'the corner closest to the {bottom_block_name}', f'objects = {get_obj_names()}')
|
74 |
+
say(f'Putting the {top_block_name} on the {get_corner_name(closest_corner_pos)}')
|
75 |
+
put_first_on_second(top_block_name, closest_corner_pos)
|
76 |
+
objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
|
77 |
+
# move the brown bowl to the side closest to the green block.
|
78 |
+
closest_side_position = parse_position('the side closest to the green block')
|
79 |
+
say(f'Got it - putting the brown bowl on the {get_side_name(closest_side_position)}')
|
80 |
+
put_first_on_second('brown bowl', closest_side_position)
|
81 |
+
objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
|
82 |
+
# place the green block to the right of the bowl that has the blue block.
|
83 |
+
bowl_name = parse_obj_name('the bowl that has the blue block', f'objects = {get_obj_names()}')
|
84 |
+
if bowl_name:
|
85 |
+
target_pos = parse_position(f'a point 10cm to the right of the {bowl_name}')
|
86 |
+
say(f'No problem - placing the green block to the right of the {bowl_name}')
|
87 |
+
put_first_on_second('green block', target_pos)
|
88 |
+
else:
|
89 |
+
say('There are no bowls that has the blue block')
|
90 |
+
objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
|
91 |
+
# move the other blocks to the bottom corners.
|
92 |
+
block_names = parse_obj_name('blocks other than the blue block', f'objects = {get_obj_names()}')
|
93 |
+
corners = parse_position('the bottom corners')
|
94 |
+
for block_name, pos in zip(block_names, corners):
|
95 |
+
put_first_on_second(block_name, pos)
|
96 |
+
objects = ['pink block', 'gray block', 'orange block']
|
97 |
+
# move the pinkish colored block on the bottom side.
|
98 |
+
say('Ok - putting the pink block on the bottom side')
|
99 |
+
bottom_side_pos = parse_position('the bottom side')
|
100 |
+
put_first_on_second('pink block', bottom_side_pos)
|
101 |
+
objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl']
|
102 |
+
# is the blue block to the right of the yellow bowl?
|
103 |
+
if parse_question('is the blue block to the right of the yellow bowl?', f'objects = {get_obj_names()}'):
|
104 |
+
say('yes, there is a blue block to the right of the yellow bow')
|
105 |
+
else:
|
106 |
+
say('no, there is\'t a blue block to the right of the yellow bow')
|
107 |
+
objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl']
|
108 |
+
# how many yellow objects are there?
|
109 |
+
n_yellow_objs = parse_question('how many yellow objects are there', f'objects = {get_obj_names()}')
|
110 |
+
say(f'there are {n_yellow_objs} yellow object')
|
111 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
112 |
+
# move the left most block to the green bowl.
|
113 |
+
left_block_name = parse_obj_name('left most block', f'objects = {get_obj_names()}')
|
114 |
+
say(f'Moving the {left_block_name} on the green bowl')
|
115 |
+
put_first_on_second(left_block_name, 'green bowl')
|
116 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
117 |
+
# move the other blocks to different corners.
|
118 |
+
block_names = parse_obj_name(f'blocks other than the {left_block_name}', f'objects = {get_obj_names()}')
|
119 |
+
corners = parse_position('the corners')
|
120 |
+
say(f'Ok - moving the other {len(block_names)} blocks to different corners')
|
121 |
+
for block_name, pos in zip(block_names, corners):
|
122 |
+
put_first_on_second(block_name, pos)
|
123 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
124 |
+
# is the pink block on the green bowl.
|
125 |
+
if parse_question('is the pink block on the green bowl', f'objects = {get_obj_names()}'):
|
126 |
+
say('Yes - the pink block is on the green bowl.')
|
127 |
+
else:
|
128 |
+
say('No - the pink block is not on the green bowl.')
|
129 |
+
objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
|
130 |
+
# what are the blocks left of the green bowl.
|
131 |
+
left_block_names = parse_question('what are the blocks left of the green bowl', f'objects = {get_obj_names()}')
|
132 |
+
if len(left_block_names) > 0:
|
133 |
+
say(f'These blocks are left of the green bowl: {", ".join(left_block_names)}')
|
134 |
+
else:
|
135 |
+
say('There are no blocks left of the green bowl')
|
136 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
137 |
+
# imagine that the bowls are different biomes on earth and imagine that the blocks are parts of a building.
|
138 |
+
say('ok')
|
139 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
|
140 |
+
# now build a tower in the grasslands.
|
141 |
+
order_bottom_to_top = ['green bowl', 'blue block', 'green block', 'yellow block']
|
142 |
+
say('stacking the blocks on the green bowl')
|
143 |
+
stack_objects_in_order(object_names=order_bottom_to_top)
|
144 |
+
objects = ['yellow block', 'green block', 'yellow bowl', 'gray block', 'gray bowl', 'green bowl']
|
145 |
+
# show me what happens when the desert gets flooded by the ocean.
|
146 |
+
say('putting the yellow bowl on the blue bowl')
|
147 |
+
put_first_on_second('yellow bowl', 'blue bowl')
|
148 |
+
objects = ['pink block', 'gray block', 'orange block']
|
149 |
+
# move all blocks 5cm toward the top.
|
150 |
+
say('Ok - moving all blocks 5cm toward the top')
|
151 |
+
block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
|
152 |
+
for block_name in block_names:
|
153 |
+
target_pos = parse_position(f'a point 5cm above the {block_name}')
|
154 |
+
put_first_on_second(block_name, target_pos)
|
155 |
+
objects = ['cyan block', 'white block', 'purple bowl', 'blue block', 'blue bowl', 'white bowl']
|
156 |
+
# make a triangle of blocks in the middle.
|
157 |
+
block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
|
158 |
+
triangle_pts = parse_position(f'a triangle with size 10cm around the middle with {len(block_names)} points')
|
159 |
+
say('Making a triangle of blocks around the middle of the workspace')
|
160 |
+
for block_name, pt in zip(block_names, triangle_pts):
|
161 |
+
put_first_on_second(block_name, pt)
|
162 |
+
objects = ['cyan block', 'white block', 'purple bowl', 'blue block', 'blue bowl', 'white bowl']
|
163 |
+
# make the triangle smaller.
|
164 |
+
triangle_pts = transform_shape_pts('scale it by 0.5x', shape_pts=triangle_pts)
|
165 |
+
say('Making the triangle smaller')
|
166 |
+
block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
|
167 |
+
for block_name, pt in zip(block_names, triangle_pts):
|
168 |
+
put_first_on_second(block_name, pt)
|
169 |
+
objects = ['brown bowl', 'red block', 'brown block', 'red bowl', 'pink bowl', 'pink block']
|
170 |
+
# put the red block on the farthest bowl.
|
171 |
+
farthest_bowl_name = parse_obj_name('the bowl farthest from the red block', f'objects = {get_obj_names()}')
|
172 |
+
say(f'Putting the red block on the {farthest_bowl_name}')
|
173 |
+
put_first_on_second('red block', farthest_bowl_name)
|
prompts/transform_shape_pts.py
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
from utils import get_obj_pos, get_obj_names, parse_position, parse_obj_name
|
3 |
+
|
4 |
+
# make it bigger by 1.5.
|
5 |
+
new_shape_pts = scale_pts_around_centroid_np(shape_pts, scale_x=1.5, scale_y=1.5)
|
6 |
+
# move it to the right by 10cm.
|
7 |
+
new_shape_pts = translate_pts_np(shape_pts, delta=[0.1, 0])
|
8 |
+
# move it to the top by 20cm.
|
9 |
+
new_shape_pts = translate_pts_np(shape_pts, delta=[0, 0.2])
|
10 |
+
# rotate it clockwise by 40 degrees.
|
11 |
+
new_shape_pts = rotate_pts_around_centroid_np(shape_pts, angle=-np.deg2rad(40))
|
12 |
+
# rotate by 30 degrees and make it slightly smaller
|
13 |
+
new_shape_pts = rotate_pts_around_centroid_np(shape_pts, angle=np.deg2rad(30))
|
14 |
+
new_shape_pts = scale_pts_around_centroid_np(new_shape_pts, scale_x=0.7, scale_y=0.7)
|
15 |
+
# move it toward the blue block.
|
16 |
+
block_name = parse_obj_name('the blue block', f'objects = {get_obj_names()}')
|
17 |
+
block_pos = get_obj_pos(block_name)
|
18 |
+
mean_delta = np.mean(block_pos - shape_pts, axis=1)
|
19 |
+
new_shape_pts = translate_pts_np(shape_pts, mean_delta)
|
requirements.txt
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
numpy
|
2 |
+
scipy
|
3 |
+
shapely
|
4 |
+
astunparse
|
5 |
+
pygments
|
6 |
+
openai
|
7 |
+
pybullet
|
8 |
+
imageio==2.4.1
|
9 |
+
imageio-ffmpeg
|
10 |
+
moviepy
|
11 |
+
omegaconf
|
sim.py
ADDED
@@ -0,0 +1,655 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pybullet
|
2 |
+
from pybullet_utils.bullet_client import BulletClient
|
3 |
+
import pybullet_data
|
4 |
+
import threading
|
5 |
+
from time import sleep
|
6 |
+
import numpy as np
|
7 |
+
import os
|
8 |
+
from consts import BOUNDS, COLORS, PIXEL_SIZE, CORNER_POS
|
9 |
+
from shapely.geometry import box
|
10 |
+
|
11 |
+
|
12 |
+
# Gripper (Robotiq 2F85) code
|
13 |
+
class Robotiq2F85:
|
14 |
+
"""Gripper handling for Robotiq 2F85."""
|
15 |
+
|
16 |
+
def __init__(self, robot, tool, p):
|
17 |
+
self.robot = robot
|
18 |
+
self.tool = tool
|
19 |
+
self._p = p
|
20 |
+
pos = [0.1339999999999999, -0.49199999999872496, 0.5]
|
21 |
+
rot = self._p.getQuaternionFromEuler([np.pi, 0, np.pi])
|
22 |
+
urdf = 'robotiq_2f_85/robotiq_2f_85.urdf'
|
23 |
+
self.body = self._p.loadURDF(urdf, pos, rot)
|
24 |
+
self.n_joints = self._p.getNumJoints(self.body)
|
25 |
+
self.activated = False
|
26 |
+
|
27 |
+
# Connect gripper base to robot tool.
|
28 |
+
self._p.createConstraint(self.robot, tool, self.body, 0, jointType=self._p.JOINT_FIXED, jointAxis=[0, 0, 0], parentFramePosition=[0, 0, 0], childFramePosition=[0, 0, -0.07], childFrameOrientation=self._p.getQuaternionFromEuler([0, 0, np.pi / 2]))
|
29 |
+
|
30 |
+
# Set friction coefficients for gripper fingers.
|
31 |
+
for i in range(self._p.getNumJoints(self.body)):
|
32 |
+
self._p.changeDynamics(self.body, i, lateralFriction=10.0, spinningFriction=1.0, rollingFriction=1.0, frictionAnchor=True)
|
33 |
+
|
34 |
+
# Start thread to handle additional gripper constraints.
|
35 |
+
self.motor_joint = 1
|
36 |
+
self.constraints_thread = threading.Thread(target=self.step)
|
37 |
+
self.constraints_thread.daemon = True
|
38 |
+
self.constraints_thread.start()
|
39 |
+
|
40 |
+
# Control joint positions by enforcing hard contraints on gripper behavior.
|
41 |
+
# Set one joint as the open/close motor joint (other joints should mimic).
|
42 |
+
def step(self):
|
43 |
+
while True:
|
44 |
+
try:
|
45 |
+
currj = [self._p.getJointState(self.body, i)[0] for i in range(self.n_joints)]
|
46 |
+
indj = [6, 3, 8, 5, 10]
|
47 |
+
targj = [currj[1], -currj[1], -currj[1], currj[1], currj[1]]
|
48 |
+
self._p.setJointMotorControlArray(self.body, indj, self._p.POSITION_CONTROL, targj, positionGains=np.ones(5))
|
49 |
+
except:
|
50 |
+
return
|
51 |
+
sleep(0.001)
|
52 |
+
|
53 |
+
# Close gripper fingers.
|
54 |
+
def activate(self):
|
55 |
+
self._p.setJointMotorControl2(self.body, self.motor_joint, self._p.VELOCITY_CONTROL, targetVelocity=1, force=10)
|
56 |
+
self.activated = True
|
57 |
+
|
58 |
+
# Open gripper fingers.
|
59 |
+
def release(self):
|
60 |
+
self._p.setJointMotorControl2(self.body, self.motor_joint, self._p.VELOCITY_CONTROL, targetVelocity=-1, force=10)
|
61 |
+
self.activated = False
|
62 |
+
|
63 |
+
# If activated and object in gripper: check object contact.
|
64 |
+
# If activated and nothing in gripper: check gripper contact.
|
65 |
+
# If released: check proximity to surface (disabled).
|
66 |
+
def detect_contact(self):
|
67 |
+
obj, _, ray_frac = self.check_proximity()
|
68 |
+
if self.activated:
|
69 |
+
empty = self.grasp_width() < 0.01
|
70 |
+
cbody = self.body if empty else obj
|
71 |
+
if obj == self.body or obj == 0:
|
72 |
+
return False
|
73 |
+
return self.external_contact(cbody)
|
74 |
+
# else:
|
75 |
+
# return ray_frac < 0.14 or self.external_contact()
|
76 |
+
|
77 |
+
# Return if body is in contact with something other than gripper
|
78 |
+
def external_contact(self, body=None):
|
79 |
+
if body is None:
|
80 |
+
body = self.body
|
81 |
+
pts = self._p.getContactPoints(bodyA=body)
|
82 |
+
pts = [pt for pt in pts if pt[2] != self.body]
|
83 |
+
return len(pts) > 0 # pylint: disable=g-explicit-length-test
|
84 |
+
|
85 |
+
def check_grasp(self):
|
86 |
+
while self.moving():
|
87 |
+
sleep(0.001)
|
88 |
+
success = self.grasp_width() > 0.01
|
89 |
+
return success
|
90 |
+
|
91 |
+
def grasp_width(self):
|
92 |
+
lpad = np.array(self._p.getLinkState(self.body, 4)[0])
|
93 |
+
rpad = np.array(self._p.getLinkState(self.body, 9)[0])
|
94 |
+
dist = np.linalg.norm(lpad - rpad) - 0.047813
|
95 |
+
return dist
|
96 |
+
|
97 |
+
def check_proximity(self):
|
98 |
+
ee_pos = np.array(self._p.getLinkState(self.robot, self.tool)[0])
|
99 |
+
tool_pos = np.array(self._p.getLinkState(self.body, 0)[0])
|
100 |
+
vec = (tool_pos - ee_pos) / np.linalg.norm((tool_pos - ee_pos))
|
101 |
+
ee_targ = ee_pos + vec
|
102 |
+
ray_data = self._p.rayTest(ee_pos, ee_targ)[0]
|
103 |
+
obj, link, ray_frac = ray_data[0], ray_data[1], ray_data[2]
|
104 |
+
return obj, link, ray_frac
|
105 |
+
|
106 |
+
|
107 |
+
# Gym-style environment code
|
108 |
+
class PickPlaceEnv():
|
109 |
+
|
110 |
+
def __init__(self, render=False, high_res=False, high_frame_rate=False):
|
111 |
+
self.dt = 1/480
|
112 |
+
self.sim_step = 0
|
113 |
+
|
114 |
+
# Configure and start PyBullet
|
115 |
+
# self._p = pybullet.connect(pybullet.DIRECT)
|
116 |
+
self._p = BulletClient(connection_mode=pybullet.DIRECT)
|
117 |
+
self._p.configureDebugVisualizer(self._p.COV_ENABLE_GUI, 0)
|
118 |
+
self._p.setPhysicsEngineParameter(enableFileCaching=0)
|
119 |
+
assets_path = os.path.dirname(os.path.abspath(""))
|
120 |
+
self._p.setAdditionalSearchPath(assets_path)
|
121 |
+
self._p.setAdditionalSearchPath(pybullet_data.getDataPath())
|
122 |
+
self._p.setTimeStep(self.dt)
|
123 |
+
|
124 |
+
self.home_joints = (np.pi / 2, -np.pi / 2, np.pi / 2, -np.pi / 2, 3 * np.pi / 2, 0) # Joint angles: (J0, J1, J2, J3, J4, J5).
|
125 |
+
self.home_ee_euler = (np.pi, 0, np.pi) # (RX, RY, RZ) rotation in Euler angles.
|
126 |
+
self.ee_link_id = 9 # Link ID of UR5 end effector.
|
127 |
+
self.tip_link_id = 10 # Link ID of gripper finger tips.
|
128 |
+
self.gripper = None
|
129 |
+
|
130 |
+
self.render = render
|
131 |
+
self.high_res = high_res
|
132 |
+
self.high_frame_rate = high_frame_rate
|
133 |
+
|
134 |
+
def reset(self, object_list):
|
135 |
+
self._p.resetSimulation(self._p.RESET_USE_DEFORMABLE_WORLD)
|
136 |
+
self._p.setGravity(0, 0, -9.8)
|
137 |
+
self.cache_video = []
|
138 |
+
|
139 |
+
# Temporarily disable rendering to load URDFs faster.
|
140 |
+
self._p.configureDebugVisualizer(self._p.COV_ENABLE_RENDERING, 0)
|
141 |
+
|
142 |
+
# Add robot.
|
143 |
+
self._p.loadURDF("plane.urdf", [0, 0, -0.001])
|
144 |
+
self.robot_id = self._p.loadURDF("ur5e/ur5e.urdf", [0, 0, 0], flags=self._p.URDF_USE_MATERIAL_COLORS_FROM_MTL)
|
145 |
+
self.ghost_id = self._p.loadURDF("ur5e/ur5e.urdf", [0, 0, -10]) # For forward kinematics.
|
146 |
+
self.joint_ids = [self._p.getJointInfo(self.robot_id, i) for i in range(self._p.getNumJoints(self.robot_id))]
|
147 |
+
self.joint_ids = [j[0] for j in self.joint_ids if j[2] == self._p.JOINT_REVOLUTE]
|
148 |
+
|
149 |
+
# Move robot to home configuration.
|
150 |
+
for i in range(len(self.joint_ids)):
|
151 |
+
self._p.resetJointState(self.robot_id, self.joint_ids[i], self.home_joints[i])
|
152 |
+
|
153 |
+
# Add gripper.
|
154 |
+
if self.gripper is not None:
|
155 |
+
while self.gripper.constraints_thread.is_alive():
|
156 |
+
self.constraints_thread_active = False
|
157 |
+
self.gripper = Robotiq2F85(self.robot_id, self.ee_link_id, self._p)
|
158 |
+
self.gripper.release()
|
159 |
+
|
160 |
+
# Add workspace.
|
161 |
+
plane_shape = self._p.createCollisionShape(self._p.GEOM_BOX, halfExtents=[0.3, 0.3, 0.001])
|
162 |
+
plane_visual = self._p.createVisualShape(self._p.GEOM_BOX, halfExtents=[0.3, 0.3, 0.001])
|
163 |
+
plane_id = self._p.createMultiBody(0, plane_shape, plane_visual, basePosition=[0, -0.5, 0])
|
164 |
+
self._p.changeVisualShape(plane_id, -1, rgbaColor=[0.2, 0.2, 0.2, 1.0])
|
165 |
+
|
166 |
+
# Load objects according to config.
|
167 |
+
self.object_list = object_list
|
168 |
+
self.obj_name_to_id = {}
|
169 |
+
obj_xyz = np.zeros((0, 3))
|
170 |
+
for obj_name in object_list:
|
171 |
+
if ('block' in obj_name) or ('bowl' in obj_name):
|
172 |
+
|
173 |
+
# Get random position 15cm+ from other objects.
|
174 |
+
while True:
|
175 |
+
rand_x = np.random.uniform(BOUNDS[0, 0] + 0.1, BOUNDS[0, 1] - 0.1)
|
176 |
+
rand_y = np.random.uniform(BOUNDS[1, 0] + 0.1, BOUNDS[1, 1] - 0.1)
|
177 |
+
rand_xyz = np.float32([rand_x, rand_y, 0.03]).reshape(1, 3)
|
178 |
+
if len(obj_xyz) == 0:
|
179 |
+
obj_xyz = np.concatenate((obj_xyz, rand_xyz), axis=0)
|
180 |
+
break
|
181 |
+
else:
|
182 |
+
nn_dist = np.min(np.linalg.norm(obj_xyz - rand_xyz, axis=1)).squeeze()
|
183 |
+
if nn_dist > 0.15:
|
184 |
+
obj_xyz = np.concatenate((obj_xyz, rand_xyz), axis=0)
|
185 |
+
break
|
186 |
+
|
187 |
+
object_color = COLORS[obj_name.split(' ')[0]]
|
188 |
+
object_type = obj_name.split(' ')[1]
|
189 |
+
object_position = rand_xyz.squeeze()
|
190 |
+
if object_type == 'block':
|
191 |
+
object_shape = self._p.createCollisionShape(self._p.GEOM_BOX, halfExtents=[0.02, 0.02, 0.02])
|
192 |
+
object_visual = self._p.createVisualShape(self._p.GEOM_BOX, halfExtents=[0.02, 0.02, 0.02])
|
193 |
+
object_id = self._p.createMultiBody(0.01, object_shape, object_visual, basePosition=object_position)
|
194 |
+
elif object_type == 'bowl':
|
195 |
+
object_position[2] = 0
|
196 |
+
object_id = self._p.loadURDF("bowl/bowl.urdf", object_position, useFixedBase=1)
|
197 |
+
self._p.changeVisualShape(object_id, -1, rgbaColor=object_color)
|
198 |
+
self.obj_name_to_id[obj_name] = object_id
|
199 |
+
|
200 |
+
# Re-enable rendering.
|
201 |
+
self._p.configureDebugVisualizer(self._p.COV_ENABLE_RENDERING, 1)
|
202 |
+
|
203 |
+
for _ in range(200):
|
204 |
+
self._p.stepSimulation()
|
205 |
+
|
206 |
+
# record object positions at reset
|
207 |
+
self.init_pos = {name: self.get_obj_pos(name) for name in object_list}
|
208 |
+
|
209 |
+
return self.get_observation()
|
210 |
+
|
211 |
+
def servoj(self, joints):
|
212 |
+
"""Move to target joint positions with position control."""
|
213 |
+
self._p.setJointMotorControlArray(
|
214 |
+
bodyIndex=self.robot_id,
|
215 |
+
jointIndices=self.joint_ids,
|
216 |
+
controlMode=self._p.POSITION_CONTROL,
|
217 |
+
targetPositions=joints,
|
218 |
+
positionGains=[0.01]*6)
|
219 |
+
|
220 |
+
def movep(self, position):
|
221 |
+
"""Move to target end effector position."""
|
222 |
+
joints = self._p.calculateInverseKinematics(
|
223 |
+
bodyUniqueId=self.robot_id,
|
224 |
+
endEffectorLinkIndex=self.tip_link_id,
|
225 |
+
targetPosition=position,
|
226 |
+
targetOrientation=self._p.getQuaternionFromEuler(self.home_ee_euler),
|
227 |
+
maxNumIterations=100)
|
228 |
+
self.servoj(joints)
|
229 |
+
|
230 |
+
def get_ee_pos(self):
|
231 |
+
ee_xyz = np.float32(self._p.getLinkState(self.robot_id, self.tip_link_id)[0])
|
232 |
+
return ee_xyz
|
233 |
+
|
234 |
+
def step(self, action=None):
|
235 |
+
"""Do pick and place motion primitive."""
|
236 |
+
pick_pos, place_pos = action['pick'].copy(), action['place'].copy()
|
237 |
+
|
238 |
+
# Set fixed primitive z-heights.
|
239 |
+
hover_xyz = np.float32([pick_pos[0], pick_pos[1], 0.2])
|
240 |
+
if pick_pos.shape[-1] == 2:
|
241 |
+
pick_xyz = np.append(pick_pos, 0.025)
|
242 |
+
else:
|
243 |
+
pick_xyz = pick_pos
|
244 |
+
pick_xyz[2] = 0.025
|
245 |
+
if place_pos.shape[-1] == 2:
|
246 |
+
place_xyz = np.append(place_pos, 0.15)
|
247 |
+
else:
|
248 |
+
place_xyz = place_pos
|
249 |
+
place_xyz[2] = 0.15
|
250 |
+
|
251 |
+
# Move to object.
|
252 |
+
ee_xyz = self.get_ee_pos()
|
253 |
+
while np.linalg.norm(hover_xyz - ee_xyz) > 0.01:
|
254 |
+
self.movep(hover_xyz)
|
255 |
+
self.step_sim_and_render()
|
256 |
+
ee_xyz = self.get_ee_pos()
|
257 |
+
|
258 |
+
while np.linalg.norm(pick_xyz - ee_xyz) > 0.01:
|
259 |
+
self.movep(pick_xyz)
|
260 |
+
self.step_sim_and_render()
|
261 |
+
ee_xyz = self.get_ee_pos()
|
262 |
+
|
263 |
+
# Pick up object.
|
264 |
+
self.gripper.activate()
|
265 |
+
for _ in range(240):
|
266 |
+
self.step_sim_and_render()
|
267 |
+
while np.linalg.norm(hover_xyz - ee_xyz) > 0.01:
|
268 |
+
self.movep(hover_xyz)
|
269 |
+
self.step_sim_and_render()
|
270 |
+
ee_xyz = self.get_ee_pos()
|
271 |
+
|
272 |
+
for _ in range(50):
|
273 |
+
self.step_sim_and_render()
|
274 |
+
|
275 |
+
# Move to place location.
|
276 |
+
while np.linalg.norm(place_xyz - ee_xyz) > 0.01:
|
277 |
+
self.movep(place_xyz)
|
278 |
+
self.step_sim_and_render()
|
279 |
+
ee_xyz = self.get_ee_pos()
|
280 |
+
|
281 |
+
# Place down object.
|
282 |
+
while (not self.gripper.detect_contact()) and (place_xyz[2] > 0.03):
|
283 |
+
place_xyz[2] -= 0.001
|
284 |
+
self.movep(place_xyz)
|
285 |
+
for _ in range(3):
|
286 |
+
self.step_sim_and_render()
|
287 |
+
self.gripper.release()
|
288 |
+
for _ in range(240):
|
289 |
+
self.step_sim_and_render()
|
290 |
+
place_xyz[2] = 0.2
|
291 |
+
ee_xyz = self.get_ee_pos()
|
292 |
+
while np.linalg.norm(place_xyz - ee_xyz) > 0.01:
|
293 |
+
self.movep(place_xyz)
|
294 |
+
self.step_sim_and_render()
|
295 |
+
ee_xyz = self.get_ee_pos()
|
296 |
+
place_xyz = np.float32([0, -0.5, 0.2])
|
297 |
+
while np.linalg.norm(place_xyz - ee_xyz) > 0.01:
|
298 |
+
self.movep(place_xyz)
|
299 |
+
self.step_sim_and_render()
|
300 |
+
ee_xyz = self.get_ee_pos()
|
301 |
+
|
302 |
+
observation = self.get_observation()
|
303 |
+
reward = self.get_reward()
|
304 |
+
done = False
|
305 |
+
info = {}
|
306 |
+
return observation, reward, done, info
|
307 |
+
|
308 |
+
def set_alpha_transparency(self, alpha: float) -> None:
|
309 |
+
for id in range(20):
|
310 |
+
visual_shape_data = self._p.getVisualShapeData(id)
|
311 |
+
for i in range(len(visual_shape_data)):
|
312 |
+
object_id, link_index, _, _, _, _, _, rgba_color = visual_shape_data[i]
|
313 |
+
rgba_color = list(rgba_color[0:3]) + [alpha]
|
314 |
+
self._p.changeVisualShape(
|
315 |
+
self.robot_id, linkIndex=i, rgbaColor=rgba_color)
|
316 |
+
self._p.changeVisualShape(
|
317 |
+
self.gripper.body, linkIndex=i, rgbaColor=rgba_color)
|
318 |
+
|
319 |
+
def step_sim_and_render(self):
|
320 |
+
self._p.stepSimulation()
|
321 |
+
self.sim_step += 1
|
322 |
+
|
323 |
+
interval = 40 if self.high_frame_rate else 60
|
324 |
+
# Render current image at 8 FPS.
|
325 |
+
if self.sim_step % interval == 0 and self.render:
|
326 |
+
self.cache_video.append(self.get_camera_image())
|
327 |
+
|
328 |
+
def get_camera_image(self):
|
329 |
+
if not self.high_res:
|
330 |
+
image_size = (240, 240)
|
331 |
+
intrinsics = (120., 0, 120., 0, 120., 120., 0, 0, 1)
|
332 |
+
else:
|
333 |
+
image_size=(360, 360)
|
334 |
+
intrinsics=(180., 0, 180., 0, 180., 180., 0, 0, 1)
|
335 |
+
color, _, _, _, _ = self.render_image(image_size, intrinsics)
|
336 |
+
return color
|
337 |
+
|
338 |
+
def get_reward(self):
|
339 |
+
return None
|
340 |
+
|
341 |
+
def get_observation(self):
|
342 |
+
observation = {}
|
343 |
+
|
344 |
+
# Render current image.
|
345 |
+
color, depth, position, orientation, intrinsics = self.render_image()
|
346 |
+
|
347 |
+
# Get heightmaps and colormaps.
|
348 |
+
points = self.get_pointcloud(depth, intrinsics)
|
349 |
+
position = np.float32(position).reshape(3, 1)
|
350 |
+
rotation = self._p.getMatrixFromQuaternion(orientation)
|
351 |
+
rotation = np.float32(rotation).reshape(3, 3)
|
352 |
+
transform = np.eye(4)
|
353 |
+
transform[:3, :] = np.hstack((rotation, position))
|
354 |
+
points = self.transform_pointcloud(points, transform)
|
355 |
+
heightmap, colormap, xyzmap = self.get_heightmap(points, color, BOUNDS, PIXEL_SIZE)
|
356 |
+
|
357 |
+
observation["image"] = colormap
|
358 |
+
observation["xyzmap"] = xyzmap
|
359 |
+
|
360 |
+
return observation
|
361 |
+
|
362 |
+
def render_image(self, image_size=(720, 720), intrinsics=(360., 0, 360., 0, 360., 360., 0, 0, 1)):
|
363 |
+
|
364 |
+
# Camera parameters.
|
365 |
+
position = (0, -0.85, 0.4)
|
366 |
+
orientation = (np.pi / 4 + np.pi / 48, np.pi, np.pi)
|
367 |
+
orientation = self._p.getQuaternionFromEuler(orientation)
|
368 |
+
zrange = (0.01, 10.)
|
369 |
+
noise=True
|
370 |
+
|
371 |
+
# OpenGL camera settings.
|
372 |
+
lookdir = np.float32([0, 0, 1]).reshape(3, 1)
|
373 |
+
updir = np.float32([0, -1, 0]).reshape(3, 1)
|
374 |
+
rotation = self._p.getMatrixFromQuaternion(orientation)
|
375 |
+
rotm = np.float32(rotation).reshape(3, 3)
|
376 |
+
lookdir = (rotm @ lookdir).reshape(-1)
|
377 |
+
updir = (rotm @ updir).reshape(-1)
|
378 |
+
lookat = position + lookdir
|
379 |
+
focal_len = intrinsics[0]
|
380 |
+
znear, zfar = (0.01, 10.)
|
381 |
+
viewm = self._p.computeViewMatrix(position, lookat, updir)
|
382 |
+
fovh = (image_size[0] / 2) / focal_len
|
383 |
+
fovh = 180 * np.arctan(fovh) * 2 / np.pi
|
384 |
+
|
385 |
+
# Notes: 1) FOV is vertical FOV 2) aspect must be float
|
386 |
+
aspect_ratio = image_size[1] / image_size[0]
|
387 |
+
projm = self._p.computeProjectionMatrixFOV(fovh, aspect_ratio, znear, zfar)
|
388 |
+
|
389 |
+
# Render with OpenGL camera settings.
|
390 |
+
_, _, color, depth, segm = self._p.getCameraImage(
|
391 |
+
width=image_size[1],
|
392 |
+
height=image_size[0],
|
393 |
+
viewMatrix=viewm,
|
394 |
+
projectionMatrix=projm,
|
395 |
+
shadow=1,
|
396 |
+
flags=self._p.ER_SEGMENTATION_MASK_OBJECT_AND_LINKINDEX,
|
397 |
+
renderer=self._p.ER_BULLET_HARDWARE_OPENGL)
|
398 |
+
|
399 |
+
# Get color image.
|
400 |
+
color_image_size = (image_size[0], image_size[1], 4)
|
401 |
+
color = np.array(color, dtype=np.uint8).reshape(color_image_size)
|
402 |
+
color = color[:, :, :3] # remove alpha channel
|
403 |
+
if noise:
|
404 |
+
color = np.int32(color)
|
405 |
+
color += np.int32(np.random.normal(0, 3, color.shape))
|
406 |
+
color = np.uint8(np.clip(color, 0, 255))
|
407 |
+
|
408 |
+
# Get depth image.
|
409 |
+
depth_image_size = (image_size[0], image_size[1])
|
410 |
+
zbuffer = np.float32(depth).reshape(depth_image_size)
|
411 |
+
depth = (zfar + znear - (2 * zbuffer - 1) * (zfar - znear))
|
412 |
+
depth = (2 * znear * zfar) / depth
|
413 |
+
if noise:
|
414 |
+
depth += np.random.normal(0, 0.003, depth.shape)
|
415 |
+
|
416 |
+
intrinsics = np.float32(intrinsics).reshape(3, 3)
|
417 |
+
return color, depth, position, orientation, intrinsics
|
418 |
+
|
419 |
+
def get_pointcloud(self, depth, intrinsics):
|
420 |
+
"""Get 3D pointcloud from perspective depth image.
|
421 |
+
Args:
|
422 |
+
depth: HxW float array of perspective depth in meters.
|
423 |
+
intrinsics: 3x3 float array of camera intrinsics matrix.
|
424 |
+
Returns:
|
425 |
+
points: HxWx3 float array of 3D points in camera coordinates.
|
426 |
+
"""
|
427 |
+
height, width = depth.shape
|
428 |
+
xlin = np.linspace(0, width - 1, width)
|
429 |
+
ylin = np.linspace(0, height - 1, height)
|
430 |
+
px, py = np.meshgrid(xlin, ylin)
|
431 |
+
px = (px - intrinsics[0, 2]) * (depth / intrinsics[0, 0])
|
432 |
+
py = (py - intrinsics[1, 2]) * (depth / intrinsics[1, 1])
|
433 |
+
points = np.float32([px, py, depth]).transpose(1, 2, 0)
|
434 |
+
return points
|
435 |
+
|
436 |
+
def transform_pointcloud(self, points, transform):
|
437 |
+
"""Apply rigid transformation to 3D pointcloud.
|
438 |
+
Args:
|
439 |
+
points: HxWx3 float array of 3D points in camera coordinates.
|
440 |
+
transform: 4x4 float array representing a rigid transformation matrix.
|
441 |
+
Returns:
|
442 |
+
points: HxWx3 float array of transformed 3D points.
|
443 |
+
"""
|
444 |
+
padding = ((0, 0), (0, 0), (0, 1))
|
445 |
+
homogen_points = np.pad(points.copy(), padding,
|
446 |
+
'constant', constant_values=1)
|
447 |
+
for i in range(3):
|
448 |
+
points[Ellipsis, i] = np.sum(transform[i, :] * homogen_points, axis=-1)
|
449 |
+
return points
|
450 |
+
|
451 |
+
def get_heightmap(self, points, colors, bounds, pixel_size):
|
452 |
+
"""Get top-down (z-axis) orthographic heightmap image from 3D pointcloud.
|
453 |
+
Args:
|
454 |
+
points: HxWx3 float array of 3D points in world coordinates.
|
455 |
+
colors: HxWx3 uint8 array of values in range 0-255 aligned with points.
|
456 |
+
bounds: 3x2 float array of values (rows: X,Y,Z; columns: min,max) defining
|
457 |
+
region in 3D space to generate heightmap in world coordinates.
|
458 |
+
pixel_size: float defining size of each pixel in meters.
|
459 |
+
Returns:
|
460 |
+
heightmap: HxW float array of height (from lower z-bound) in meters.
|
461 |
+
colormap: HxWx3 uint8 array of backprojected color aligned with heightmap.
|
462 |
+
xyzmap: HxWx3 float array of XYZ points in world coordinates.
|
463 |
+
"""
|
464 |
+
width = int(np.round((bounds[0, 1] - bounds[0, 0]) / pixel_size))
|
465 |
+
height = int(np.round((bounds[1, 1] - bounds[1, 0]) / pixel_size))
|
466 |
+
heightmap = np.zeros((height, width), dtype=np.float32)
|
467 |
+
colormap = np.zeros((height, width, colors.shape[-1]), dtype=np.uint8)
|
468 |
+
xyzmap = np.zeros((height, width, 3), dtype=np.float32)
|
469 |
+
|
470 |
+
# Filter out 3D points that are outside of the predefined bounds.
|
471 |
+
ix = (points[Ellipsis, 0] >= bounds[0, 0]) & (points[Ellipsis, 0] < bounds[0, 1])
|
472 |
+
iy = (points[Ellipsis, 1] >= bounds[1, 0]) & (points[Ellipsis, 1] < bounds[1, 1])
|
473 |
+
iz = (points[Ellipsis, 2] >= bounds[2, 0]) & (points[Ellipsis, 2] < bounds[2, 1])
|
474 |
+
valid = ix & iy & iz
|
475 |
+
points = points[valid]
|
476 |
+
colors = colors[valid]
|
477 |
+
|
478 |
+
# Sort 3D points by z-value, which works with array assignment to simulate
|
479 |
+
# z-buffering for rendering the heightmap image.
|
480 |
+
iz = np.argsort(points[:, -1])
|
481 |
+
points, colors = points[iz], colors[iz]
|
482 |
+
px = np.int32(np.floor((points[:, 0] - bounds[0, 0]) / pixel_size))
|
483 |
+
py = np.int32(np.floor((points[:, 1] - bounds[1, 0]) / pixel_size))
|
484 |
+
px = np.clip(px, 0, width - 1)
|
485 |
+
py = np.clip(py, 0, height - 1)
|
486 |
+
heightmap[py, px] = points[:, 2] - bounds[2, 0]
|
487 |
+
for c in range(colors.shape[-1]):
|
488 |
+
colormap[py, px, c] = colors[:, c]
|
489 |
+
xyzmap[py, px, c] = points[:, c]
|
490 |
+
colormap = colormap[::-1, :, :] # Flip up-down.
|
491 |
+
xv, yv = np.meshgrid(np.linspace(BOUNDS[0, 0], BOUNDS[0, 1], height),
|
492 |
+
np.linspace(BOUNDS[1, 0], BOUNDS[1, 1], width))
|
493 |
+
xyzmap[:, :, 0] = xv
|
494 |
+
xyzmap[:, :, 1] = yv
|
495 |
+
xyzmap = xyzmap[::-1, :, :] # Flip up-down.
|
496 |
+
heightmap = heightmap[::-1, :] # Flip up-down.
|
497 |
+
return heightmap, colormap, xyzmap
|
498 |
+
|
499 |
+
def on_top_of(self, obj_a, obj_b):
|
500 |
+
"""
|
501 |
+
check if obj_a is on top of obj_b
|
502 |
+
condition 1: l2 distance on xy plane is less than a threshold
|
503 |
+
condition 2: obj_a is higher than obj_b
|
504 |
+
"""
|
505 |
+
obj_a_pos = self.get_obj_pos(obj_a)
|
506 |
+
obj_b_pos = self.get_obj_pos(obj_b)
|
507 |
+
xy_dist = np.linalg.norm(obj_a_pos[:2] - obj_b_pos[:2])
|
508 |
+
if obj_b in CORNER_POS:
|
509 |
+
is_near = xy_dist < 0.06
|
510 |
+
return is_near
|
511 |
+
elif 'bowl' in obj_b:
|
512 |
+
is_near = xy_dist < 0.06
|
513 |
+
is_higher = obj_a_pos[2] > obj_b_pos[2]
|
514 |
+
return is_near and is_higher
|
515 |
+
else:
|
516 |
+
is_near = xy_dist < 0.04
|
517 |
+
is_higher = obj_a_pos[2] > obj_b_pos[2]
|
518 |
+
return is_near and is_higher
|
519 |
+
|
520 |
+
def get_obj_id(self, obj_name):
|
521 |
+
try:
|
522 |
+
if obj_name in self.obj_name_to_id:
|
523 |
+
obj_id = self.obj_name_to_id[obj_name]
|
524 |
+
else:
|
525 |
+
obj_name = obj_name.replace('circle', 'bowl').replace('square', 'block').replace('small', '').strip()
|
526 |
+
obj_id = self.obj_name_to_id[obj_name]
|
527 |
+
return obj_id
|
528 |
+
except:
|
529 |
+
raise Exception('Object name "{}" not found'.format(obj_name))
|
530 |
+
|
531 |
+
def get_obj_pos(self, obj_name):
|
532 |
+
obj_name = obj_name.replace('the', '').replace('_', ' ').strip()
|
533 |
+
if obj_name in CORNER_POS:
|
534 |
+
position = np.float32(np.array(CORNER_POS[obj_name]))
|
535 |
+
else:
|
536 |
+
pick_id = self.get_obj_id(obj_name)
|
537 |
+
pose = self._p.getBasePositionAndOrientation(pick_id)
|
538 |
+
position = np.float32(pose[0])
|
539 |
+
return position
|
540 |
+
|
541 |
+
def get_bounding_box(self, obj_name):
|
542 |
+
obj_id = self.get_obj_id(obj_name)
|
543 |
+
return self._p.getAABB(obj_id)
|
544 |
+
|
545 |
+
|
546 |
+
class LMP_wrapper():
|
547 |
+
|
548 |
+
def __init__(self, env, cfg, render=False):
|
549 |
+
self.env = env
|
550 |
+
self._cfg = cfg
|
551 |
+
self.object_names = list(self._cfg['env']['init_objs'])
|
552 |
+
|
553 |
+
self._min_xy = np.array(self._cfg['env']['coords']['bottom_left'])
|
554 |
+
self._max_xy = np.array(self._cfg['env']['coords']['top_right'])
|
555 |
+
self._range_xy = self._max_xy - self._min_xy
|
556 |
+
|
557 |
+
self._table_z = self._cfg['env']['coords']['table_z']
|
558 |
+
self.render = render
|
559 |
+
|
560 |
+
def is_obj_visible(self, obj_name):
|
561 |
+
return obj_name in self.object_names
|
562 |
+
|
563 |
+
def get_obj_names(self):
|
564 |
+
return self.object_names[::]
|
565 |
+
|
566 |
+
def denormalize_xy(self, pos_normalized):
|
567 |
+
return pos_normalized * self._range_xy + self._min_xy
|
568 |
+
|
569 |
+
def get_corner_positions(self):
|
570 |
+
unit_square = box(0, 0, 1, 1)
|
571 |
+
normalized_corners = np.array(list(unit_square.exterior.coords))[:4]
|
572 |
+
corners = np.array(([self.denormalize_xy(corner) for corner in normalized_corners]))
|
573 |
+
return corners
|
574 |
+
|
575 |
+
def get_side_positions(self):
|
576 |
+
side_xs = np.array([0, 0.5, 0.5, 1])
|
577 |
+
side_ys = np.array([0.5, 0, 1, 0.5])
|
578 |
+
normalized_side_positions = np.c_[side_xs, side_ys]
|
579 |
+
side_positions = np.array(([self.denormalize_xy(corner) for corner in normalized_side_positions]))
|
580 |
+
return side_positions
|
581 |
+
|
582 |
+
def get_obj_pos(self, obj_name):
|
583 |
+
# return the xy position of the object in robot base frame
|
584 |
+
return self.env.get_obj_pos(obj_name)[:2]
|
585 |
+
|
586 |
+
def get_obj_position_np(self, obj_name):
|
587 |
+
return self.get_pos(obj_name)
|
588 |
+
|
589 |
+
def get_bbox(self, obj_name):
|
590 |
+
# return the axis-aligned object bounding box in robot base frame (not in pixels)
|
591 |
+
# the format is (min_x, min_y, max_x, max_y)
|
592 |
+
bbox = self.env.get_bounding_box(obj_name)
|
593 |
+
return bbox
|
594 |
+
|
595 |
+
def get_color(self, obj_name):
|
596 |
+
for color, rgb in COLORS.items():
|
597 |
+
if color in obj_name:
|
598 |
+
return rgb
|
599 |
+
|
600 |
+
def pick_place(self, pick_pos, place_pos):
|
601 |
+
pick_pos_xyz = np.r_[pick_pos, [self._table_z]]
|
602 |
+
place_pos_xyz = np.r_[place_pos, [self._table_z]]
|
603 |
+
pass
|
604 |
+
|
605 |
+
def put_first_on_second(self, arg1, arg2):
|
606 |
+
# put the object with obj_name on top of target
|
607 |
+
# target can either be another object name, or it can be an x-y position in robot base frame
|
608 |
+
pick_pos = self.get_obj_pos(arg1) if isinstance(arg1, str) else arg1
|
609 |
+
place_pos = self.get_obj_pos(arg2) if isinstance(arg2, str) else arg2
|
610 |
+
self.env.step(action={'pick': pick_pos, 'place': place_pos})
|
611 |
+
|
612 |
+
def get_robot_pos(self):
|
613 |
+
# return robot end-effector xy position in robot base frame
|
614 |
+
return self.env.get_ee_pos()
|
615 |
+
|
616 |
+
def goto_pos(self, position_xy):
|
617 |
+
# move the robot end-effector to the desired xy position while maintaining same z
|
618 |
+
ee_xyz = self.env.get_ee_pos()
|
619 |
+
position_xyz = np.concatenate([position_xy, ee_xyz[-1]])
|
620 |
+
while np.linalg.norm(position_xyz - ee_xyz) > 0.01:
|
621 |
+
self.env.movep(position_xyz)
|
622 |
+
self.env.step_sim_and_render()
|
623 |
+
ee_xyz = self.env.get_ee_pos()
|
624 |
+
|
625 |
+
def follow_traj(self, traj):
|
626 |
+
for pos in traj:
|
627 |
+
self.goto_pos(pos)
|
628 |
+
|
629 |
+
def get_corner_positions(self):
|
630 |
+
normalized_corners = np.array([
|
631 |
+
[0, 1],
|
632 |
+
[1, 1],
|
633 |
+
[0, 0],
|
634 |
+
[1, 0]
|
635 |
+
])
|
636 |
+
return np.array(([self.denormalize_xy(corner) for corner in normalized_corners]))
|
637 |
+
|
638 |
+
def get_side_positions(self):
|
639 |
+
normalized_sides = np.array([
|
640 |
+
[0.5, 1],
|
641 |
+
[1, 0.5],
|
642 |
+
[0.5, 0],
|
643 |
+
[0, 0.5]
|
644 |
+
])
|
645 |
+
return np.array(([self.denormalize_xy(side) for side in normalized_sides]))
|
646 |
+
|
647 |
+
def get_corner_name(self, pos):
|
648 |
+
corner_positions = self.get_corner_positions()
|
649 |
+
corner_idx = np.argmin(np.linalg.norm(corner_positions - pos, axis=1))
|
650 |
+
return ['top left corner', 'top right corner', 'bottom left corner', 'botom right corner'][corner_idx]
|
651 |
+
|
652 |
+
def get_side_name(self, pos):
|
653 |
+
side_positions = self.get_side_positions()
|
654 |
+
side_idx = np.argmin(np.linalg.norm(side_positions - pos, axis=1))
|
655 |
+
return ['top side', 'right side', 'bottom side', 'left side'][side_idx]
|
ur5e/collision/base.stl
ADDED
Binary file (21.1 kB). View file
|
|
ur5e/collision/forearm.stl
ADDED
Binary file (53.3 kB). View file
|
|
ur5e/collision/shoulder.stl
ADDED
Binary file (70.1 kB). View file
|
|
ur5e/collision/upperarm.stl
ADDED
Binary file (99.7 kB). View file
|
|
ur5e/collision/wrist1.stl
ADDED
Binary file (59.6 kB). View file
|
|
ur5e/collision/wrist2.stl
ADDED
Binary file (67.6 kB). View file
|
|
ur5e/collision/wrist3.stl
ADDED
Binary file (7.18 kB). View file
|
|
ur5e/ur5e.urdf
ADDED
@@ -0,0 +1,279 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" ?>
|
2 |
+
<!-- ============================================================================================= -->
|
3 |
+
<!-- | This document was autogenerated by xacro from ur_description/urdf/ur5_robot.urdf.xacro | -->
|
4 |
+
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
|
5 |
+
<!-- ============================================================================================= -->
|
6 |
+
<robot name="ur5" xmlns:xacro="http://ros.org/wiki/xacro">
|
7 |
+
<material name="LightGrey">
|
8 |
+
<color rgba="0.8 0.8 0.8 1.0"/>
|
9 |
+
</material>
|
10 |
+
|
11 |
+
<material name="DarkGrey">
|
12 |
+
<color rgba="0.2 0.2 0.2 1.0"/>
|
13 |
+
</material>
|
14 |
+
|
15 |
+
<link name="base_link">
|
16 |
+
<visual>
|
17 |
+
<geometry>
|
18 |
+
<mesh filename="visual/base.dae"/>
|
19 |
+
</geometry>
|
20 |
+
<material name="LightGrey"/>
|
21 |
+
</visual>
|
22 |
+
<!-- <collision>
|
23 |
+
<geometry>
|
24 |
+
<mesh filename="collision/base.stl"/>
|
25 |
+
</geometry>
|
26 |
+
</collision> -->
|
27 |
+
<inertial>
|
28 |
+
<mass value="4.0"/>
|
29 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
30 |
+
<inertia ixx="0.00443333156" ixy="0.0" ixz="0.0" iyy="0.00443333156" iyz="0.0" izz="0.0072"/>
|
31 |
+
</inertial>
|
32 |
+
</link>
|
33 |
+
<joint name="shoulder_pan_joint" type="revolute">
|
34 |
+
<parent link="base_link"/>
|
35 |
+
<child link="shoulder_link"/>
|
36 |
+
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.163"/>
|
37 |
+
<axis xyz="0 0 1"/>
|
38 |
+
<limit effort="150.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.15"/>
|
39 |
+
<dynamics damping="0.0" friction="0.0"/>
|
40 |
+
</joint>
|
41 |
+
<link name="shoulder_link">
|
42 |
+
<visual>
|
43 |
+
<geometry>
|
44 |
+
<mesh filename="visual/shoulder.dae"/>
|
45 |
+
</geometry>
|
46 |
+
<material name="DarkGrey"/>
|
47 |
+
</visual>
|
48 |
+
<!-- <collision>
|
49 |
+
<geometry>
|
50 |
+
<mesh filename="collision/shoulder.stl"/>
|
51 |
+
</geometry>
|
52 |
+
</collision> -->
|
53 |
+
<inertial>
|
54 |
+
<mass value="3.7"/>
|
55 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
56 |
+
<inertia ixx="0.010267495893" ixy="0.0" ixz="0.0" iyy="0.010267495893" iyz="0.0" izz="0.00666"/>
|
57 |
+
</inertial>
|
58 |
+
</link>
|
59 |
+
<joint name="shoulder_lift_joint" type="revolute">
|
60 |
+
<parent link="shoulder_link"/>
|
61 |
+
<child link="upper_arm_link"/>
|
62 |
+
<origin rpy="0.0 1.57079632679 0.0" xyz="0.0 0.138 0.0"/>
|
63 |
+
<axis xyz="0 1 0"/>
|
64 |
+
<limit effort="150.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.15"/>
|
65 |
+
<dynamics damping="0.0" friction="0.0"/>
|
66 |
+
</joint>
|
67 |
+
<link name="upper_arm_link">
|
68 |
+
<visual>
|
69 |
+
<geometry>
|
70 |
+
<mesh filename="visual/upperarm.dae"/>
|
71 |
+
</geometry>
|
72 |
+
<material name="LightGrey"/>
|
73 |
+
</visual>
|
74 |
+
<!-- <collision>
|
75 |
+
<geometry>
|
76 |
+
<mesh filename="collision/upperarm.stl"/>
|
77 |
+
</geometry>
|
78 |
+
</collision> -->
|
79 |
+
<inertial>
|
80 |
+
<mass value="8.393"/>
|
81 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.28"/>
|
82 |
+
<inertia ixx="0.22689067591" ixy="0.0" ixz="0.0" iyy="0.22689067591" iyz="0.0" izz="0.0151074"/>
|
83 |
+
</inertial>
|
84 |
+
</link>
|
85 |
+
<joint name="elbow_joint" type="revolute">
|
86 |
+
<parent link="upper_arm_link"/>
|
87 |
+
<child link="forearm_link"/>
|
88 |
+
<origin rpy="0.0 0.0 0.0" xyz="0.0 -0.131 0.425"/>
|
89 |
+
<axis xyz="0 1 0"/>
|
90 |
+
<limit effort="150.0" lower="-3.14159265359" upper="3.14159265359" velocity="3.15"/>
|
91 |
+
<dynamics damping="0.0" friction="0.0"/>
|
92 |
+
</joint>
|
93 |
+
<link name="forearm_link">
|
94 |
+
<visual>
|
95 |
+
<geometry>
|
96 |
+
<mesh filename="visual/forearm.dae"/>
|
97 |
+
</geometry>
|
98 |
+
<material name="DarkGrey"/>
|
99 |
+
</visual>
|
100 |
+
<!-- <collision>
|
101 |
+
<geometry>
|
102 |
+
<mesh filename="collision/forearm.stl"/>
|
103 |
+
</geometry>
|
104 |
+
</collision> -->
|
105 |
+
<inertial>
|
106 |
+
<mass value="2.275"/>
|
107 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.25"/>
|
108 |
+
<inertia ixx="0.049443313556" ixy="0.0" ixz="0.0" iyy="0.049443313556" iyz="0.0" izz="0.004095"/>
|
109 |
+
</inertial>
|
110 |
+
</link>
|
111 |
+
<joint name="wrist_1_joint" type="revolute">
|
112 |
+
<parent link="forearm_link"/>
|
113 |
+
<child link="wrist_1_link"/>
|
114 |
+
<origin rpy="0.0 1.57079632679 0.0" xyz="0.0 0.0 0.392"/>
|
115 |
+
<axis xyz="0 1 0"/>
|
116 |
+
<limit effort="28.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.2"/>
|
117 |
+
<dynamics damping="0.0" friction="0.0"/>
|
118 |
+
</joint>
|
119 |
+
<link name="wrist_1_link">
|
120 |
+
<visual>
|
121 |
+
<geometry>
|
122 |
+
<mesh filename="visual/wrist1.dae"/>
|
123 |
+
</geometry>
|
124 |
+
<material name="LightGrey"/>
|
125 |
+
</visual>
|
126 |
+
<!-- <collision>
|
127 |
+
<geometry>
|
128 |
+
<mesh filename="collision/wrist1.stl"/>
|
129 |
+
</geometry>
|
130 |
+
</collision> -->
|
131 |
+
<inertial>
|
132 |
+
<mass value="1.219"/>
|
133 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
134 |
+
<inertia ixx="0.111172755531" ixy="0.0" ixz="0.0" iyy="0.111172755531" iyz="0.0" izz="0.21942"/>
|
135 |
+
</inertial>
|
136 |
+
</link>
|
137 |
+
<joint name="wrist_2_joint" type="revolute">
|
138 |
+
<parent link="wrist_1_link"/>
|
139 |
+
<child link="wrist_2_link"/>
|
140 |
+
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.127 0.0"/>
|
141 |
+
<axis xyz="0 0 1"/>
|
142 |
+
<limit effort="28.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.2"/>
|
143 |
+
<dynamics damping="0.0" friction="0.0"/>
|
144 |
+
</joint>
|
145 |
+
<link name="wrist_2_link">
|
146 |
+
<visual>
|
147 |
+
<geometry>
|
148 |
+
<mesh filename="visual/wrist2.dae"/>
|
149 |
+
</geometry>
|
150 |
+
<material name="DarkGrey"/>
|
151 |
+
</visual>
|
152 |
+
<collision>
|
153 |
+
<geometry>
|
154 |
+
<mesh filename="collision/wrist2.stl"/>
|
155 |
+
</geometry>
|
156 |
+
</collision>
|
157 |
+
<inertial>
|
158 |
+
<mass value="1.219"/>
|
159 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
160 |
+
<inertia ixx="0.111172755531" ixy="0.0" ixz="0.0" iyy="0.111172755531" iyz="0.0" izz="0.21942"/>
|
161 |
+
</inertial>
|
162 |
+
</link>
|
163 |
+
<joint name="wrist_3_joint" type="revolute">
|
164 |
+
<parent link="wrist_2_link"/>
|
165 |
+
<child link="wrist_3_link"/>
|
166 |
+
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.100"/>
|
167 |
+
<axis xyz="0 1 0"/>
|
168 |
+
<limit effort="28.0" lower="-6.28318530718" upper="6.28318530718" velocity="3.2"/>
|
169 |
+
<dynamics damping="0.0" friction="0.0"/>
|
170 |
+
</joint>
|
171 |
+
<link name="wrist_3_link">
|
172 |
+
<visual>
|
173 |
+
<geometry>
|
174 |
+
<mesh filename="visual/wrist3.dae"/>
|
175 |
+
</geometry>
|
176 |
+
<material name="LightGrey"/>
|
177 |
+
</visual>
|
178 |
+
<collision>
|
179 |
+
<geometry>
|
180 |
+
<mesh filename="collision/wrist3.stl"/>
|
181 |
+
</geometry>
|
182 |
+
</collision>
|
183 |
+
<inertial>
|
184 |
+
<mass value="0.1879"/>
|
185 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
186 |
+
<inertia ixx="0.0171364731454" ixy="0.0" ixz="0.0" iyy="0.0171364731454" iyz="0.0" izz="0.033822"/>
|
187 |
+
</inertial>
|
188 |
+
</link>
|
189 |
+
<joint name="ee_fixed_joint" type="fixed">
|
190 |
+
<parent link="wrist_3_link"/>
|
191 |
+
<child link="ee_link"/>
|
192 |
+
<origin rpy="-1.5707963267948966 0.0 0.0" xyz="0.0 0.100 0.0"/>
|
193 |
+
</joint>
|
194 |
+
<link name="ee_link">
|
195 |
+
<!-- <collision>
|
196 |
+
<geometry>
|
197 |
+
<box size="0.01 0.01 0.01"/>
|
198 |
+
</geometry>
|
199 |
+
<origin rpy="0 0 0" xyz="-0.01 0 0"/>
|
200 |
+
</collision> -->
|
201 |
+
<inertial>
|
202 |
+
<mass value="0.0"/>
|
203 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
204 |
+
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
|
205 |
+
</inertial>
|
206 |
+
</link>
|
207 |
+
<!-- nothing to do here at the moment -->
|
208 |
+
<!-- ROS base_link to UR 'Base' Coordinates transform -->
|
209 |
+
<link name="base">
|
210 |
+
<inertial>
|
211 |
+
<mass value="0.0"/>
|
212 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
213 |
+
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
|
214 |
+
</inertial>
|
215 |
+
</link>
|
216 |
+
<joint name="base_link-base_fixed_joint" type="fixed">
|
217 |
+
<!-- NOTE: this rotation is only needed as long as base_link itself is
|
218 |
+
not corrected wrt the real robot (ie: rotated over 180
|
219 |
+
degrees)
|
220 |
+
-->
|
221 |
+
<origin rpy="0 0 -3.14159265359" xyz="0 0 0"/>
|
222 |
+
<parent link="base_link"/>
|
223 |
+
<child link="base"/>
|
224 |
+
</joint>
|
225 |
+
<!-- Frame coincident with all-zeros TCP on UR controller -->
|
226 |
+
<link name="tool0">
|
227 |
+
<inertial>
|
228 |
+
<mass value="0.0"/>
|
229 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
230 |
+
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
|
231 |
+
</inertial>
|
232 |
+
</link>
|
233 |
+
<joint name="wrist_3_link-tool0_fixed_joint" type="fixed">
|
234 |
+
<origin rpy="-1.57079632679 0 0" xyz="0 0.0823 0"/>
|
235 |
+
<parent link="wrist_3_link"/>
|
236 |
+
<child link="tool0"/>
|
237 |
+
</joint>
|
238 |
+
|
239 |
+
<link name="tool_tip">
|
240 |
+
<inertial>
|
241 |
+
<mass value="0.0"/>
|
242 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
243 |
+
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
|
244 |
+
</inertial>
|
245 |
+
<!-- <visual>
|
246 |
+
<geometry>
|
247 |
+
<box size="0.01 0.01 0.01"/>
|
248 |
+
</geometry>
|
249 |
+
<material name="DarkGrey"/>
|
250 |
+
<origin rpy="0 0 0" xyz="0 0 0"/>
|
251 |
+
</visual> -->
|
252 |
+
</link>
|
253 |
+
<joint name="tool0_fixed_joint-tool_tip" type="fixed">
|
254 |
+
<origin rpy="0 0 0" xyz="0 0 0.175"/>
|
255 |
+
<parent link="tool0"/>
|
256 |
+
<child link="tool_tip"/>
|
257 |
+
</joint>
|
258 |
+
|
259 |
+
<link name="world"/>
|
260 |
+
<joint name="world_joint" type="fixed">
|
261 |
+
<parent link="world"/>
|
262 |
+
<child link="rotated_base_link"/>
|
263 |
+
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
|
264 |
+
</joint>
|
265 |
+
|
266 |
+
<link name="rotated_base_link">
|
267 |
+
<inertial>
|
268 |
+
<mass value="0.0"/>
|
269 |
+
<origin rpy="0 0 0" xyz="0.0 0.0 0.0"/>
|
270 |
+
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
|
271 |
+
</inertial>
|
272 |
+
</link>>
|
273 |
+
|
274 |
+
<joint name="rotated_base-base_fixed_joint" type="fixed">
|
275 |
+
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 3.141592653589793"/>
|
276 |
+
<parent link="rotated_base_link"/>
|
277 |
+
<child link="base_link"/>
|
278 |
+
</joint>
|
279 |
+
</robot>
|
ur5e/visual/base.dae
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ur5e/visual/forearm.dae
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ur5e/visual/shoulder.dae
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ur5e/visual/upperarm.dae
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ur5e/visual/wrist1.dae
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ur5e/visual/wrist2.dae
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ur5e/visual/wrist3.dae
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
|
3 |
+
<asset>
|
4 |
+
<contributor>
|
5 |
+
<author>Blender User</author>
|
6 |
+
<authoring_tool>Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f2352830</authoring_tool>
|
7 |
+
</contributor>
|
8 |
+
<created>2018-08-20T16:30:31</created>
|
9 |
+
<modified>2018-08-20T16:30:31</modified>
|
10 |
+
<unit name="meter" meter="1"/>
|
11 |
+
<up_axis>Z_UP</up_axis>
|
12 |
+
</asset>
|
13 |
+
<library_images/>
|
14 |
+
<library_effects>
|
15 |
+
<effect id="LinkGrey-effect">
|
16 |
+
<profile_COMMON>
|
17 |
+
<technique sid="common">
|
18 |
+
<phong>
|
19 |
+
<emission>
|
20 |
+
<color sid="emission">0 0 0 1</color>
|
21 |
+
</emission>
|
22 |
+
<ambient>
|
23 |
+
<color sid="ambient">0.25 0.25 0.25 1</color>
|
24 |
+
</ambient>
|
25 |
+
<diffuse>
|
26 |
+
<color sid="diffuse">0.8203922 0.8203922 0.8203922 1</color>
|
27 |
+
</diffuse>
|
28 |
+
<specular>
|
29 |
+
<color sid="specular">0.5 0.5 0.5 1</color>
|
30 |
+
</specular>
|
31 |
+
<shininess>
|
32 |
+
<float sid="shininess">0</float>
|
33 |
+
</shininess>
|
34 |
+
<index_of_refraction>
|
35 |
+
<float sid="index_of_refraction">1</float>
|
36 |
+
</index_of_refraction>
|
37 |
+
</phong>
|
38 |
+
</technique>
|
39 |
+
</profile_COMMON>
|
40 |
+
</effect>
|
41 |
+
</library_effects>
|
42 |
+
<library_materials>
|
43 |
+
<material id="LinkGrey-material" name="LinkGrey">
|
44 |
+
<instance_effect url="#LinkGrey-effect"/>
|
45 |
+
</material>
|
46 |
+
</library_materials>
|
47 |
+
<library_geometries>
|
48 |
+
<geometry id="eSeries_UR5e_058-mesh" name="eSeries UR5e.058">
|
49 |
+
<mesh>
|
50 |
+
<source id="eSeries_UR5e_058-mesh-positions">
|
51 |
+
<float_array id="eSeries_UR5e_058-mesh-positions-array" count="1455">1.911164 43.51731 66.91934 -1.930693 43.44939 65.90201 -2.183813 43.44381 68.34186 2.078753 43.41179 65.51548 -0.9332018 40.8521 72.15565 0.7674334 41.31041 72.13608 2.358598 41.3104 71.58493 3.696645 40.85204 70.56025 4.507632 41.55351 69.07719 4.866287 41.27283 67.03349 4.381724 41.34799 65.26049 3.403427 41.34797 63.8878 1.37716 41.15232 62.64779 -0.1223266 41.38584 62.53082 -1.586951 41.31039 62.76651 -3.384526 41.31544 63.83565 -4.529929 41.31043 65.61894 -4.854666 41.29059 67.28862 -4.499549 41.24213 69.25669 -2.916456 40.86779 71.31809 -1.182612 41.91432 71.79449 -1.508891 43.037 70.61665 -3.249703 42.14373 70.44701 -3.442518 43.0025 68.52941 -3.69445 42.94204 66.73839 -2.900552 42.63394 64.47216 -1.900191 43.16608 64.61894 -0.2247034 42.5634 63.18352 0.7821912 43.34275 64.43846 2.269175 42.18852 63.53231 3.325075 42.69643 65.15615 3.697303 42.97077 67.18048 3.332834 42.9069 68.9614 3.7092 41.90756 70.07672 1.438681 42.76676 71.03916 2.03089 43.34052 69.46076 0.0102477 43.43203 69.93967 -4.98148 39.43616 66.96067 -4.065622 39.43604 70.25263 -1.653111 39.43603 72.01772 0.9031314 39.43603 72.2187 3.21732 39.43603 71.11466 4.838231 39.43604 68.59597 4.745429 39.43603 66.03951 3.76642 39.43604 64.1311 1.247725 39.43604 62.51014 -1.735037 39.43603 62.70875 -3.822391 39.43603 64.19792 4.36633e-5 24.43604 90.89574 -3.028306 25.04068 92.69477 -2.538931 22.73727 92.69612 -0.8527937 21.50272 92.69612 0.982804 21.57116 92.69692 2.464757 22.63122 92.69612 3.052535 24.90377 92.69477 1.804748 26.90085 92.69612 -0.2015526 27.48427 92.69612 -1.902943 26.79244 92.69692 15.12117 12.94469 89.79833 18.21953 21.92053 89.79833 18.40644 12.37369 89.79833 12.97548 15.97892 89.79833 13.09358 18.4189 89.79833 14.63446 20.94197 89.79833 20.47263 20.97461 89.79833 22.31593 18.66407 89.79833 22.14703 15.37472 89.79833 20.67892 13.37312 89.79833 -20.23418 12.94469 89.79833 -17.13581 21.92053 89.79833 -16.9489 12.37369 89.79833 -22.37986 15.97892 89.79833 -22.26176 18.4189 89.79833 -20.72088 20.94197 89.79833 -14.17292 20.44786 89.79833 -13.05513 18.27573 89.79833 -13.0379 15.74564 89.79833 -14.67643 13.37312 89.79833 18.39885 -23.07856 89.79833 18.21953 -13.43482 89.79833 14.80481 -22.13334 89.79833 12.97548 -19.37643 89.79833 13.09358 -16.93644 89.79833 14.63446 -14.41338 89.79833 21.18243 -14.90749 89.79833 22.30022 -17.07962 89.79833 22.31744 -19.60971 89.79833 20.99526 -21.66389 89.79833 -16.95649 -23.07856 89.79833 -17.13581 -13.43482 89.79833 -20.55053 -22.13334 89.79833 -22.37986 -19.37643 89.79833 -22.26176 -16.93644 89.79833 -20.72088 -14.41338 89.79833 -14.17292 -14.90749 89.79833 -13.05513 -17.07962 89.79833 -13.0379 -19.60971 89.79833 -14.36008 -21.66389 89.79833 -1.294488 15.18517 92.69831 -13.829 7.079706 92.69832 3.847384 14.76277 92.6983 8.579229 12.70613 92.69829 14.89126 4.718681 92.69828 12.39584 9.235257 92.69828 15.79814 -0.3628844 92.69827 12.63268 -10.04805 92.69828 15.01805 -5.466911 92.69826 8.895459 -13.61575 92.6983 -1.394039 -16.32954 92.69837 4.203702 -15.78701 92.69834 -6.639836 -14.89454 92.69831 -14.01392 -7.855438 92.69827 -10.91075 -11.98588 92.69828 -15.618 -2.946669 92.69826 -15.55352 2.215297 92.69827 -10.62928 11.12834 92.69829 -6.296473 13.92945 92.6983 -4.753172 36.43603 66.06483 -3.791726 36.43603 64.1599 -1.29021 36.43603 62.52075 1.699404 36.43603 62.69474 3.798536 36.43603 64.1679 4.758208 36.43603 66.0833 4.878022 36.43603 68.21376 4.027591 36.43603 70.18016 2.108984 36.43603 71.87852 -1.296383 36.43603 72.17425 -3.488126 36.43603 70.82297 -4.827542 36.43603 68.63853 -0.796177 21.40692 98.79719 1.057285 21.51952 98.79102 2.679122 22.78203 98.79513 3.097666 25.05752 98.80152 2.006174 26.81396 98.80825 0.2584391 27.55746 98.79718 -1.534057 27.14595 98.81213 -2.726375 26.02113 98.80984 -3.108368 24.13763 98.78349 -2.379192 22.44515 98.79104 18.5739 12.40263 98.3852 20.78827 13.46295 98.39478 22.19683 15.50719 98.39478 22.39618 17.97457 98.40036 20.78649 20.88631 98.38842 17.21509 21.92837 98.39219 14.22862 20.50475 98.3922 12.94783 17.90803 98.39918 13.18309 15.43992 98.39478 15.27214 12.85817 98.38762 -16.80916 12.39683 98.39476 -14.5671 13.46292 98.39477 -12.99511 15.90183 98.39218 -13.46627 19.59595 98.38697 -16.46597 21.7963 98.39218 -18.95385 21.70631 98.39144 -21.12675 20.50472 98.3922 -22.40751 17.90803 98.39918 -21.88857 14.63089 98.38761 -19.28105 12.59358 98.3992 17.7136 -23.03766 98.39476 20.88128 -21.93258 98.36882 22.49953 -18.62217 98.39217 21.36855 -15.03789 98.36904 18.05827 -13.41981 98.39219 14.50148 -14.52569 98.38763 12.85589 -17.86102 98.39218 13.54399 -20.67367 98.39918 15.31039 -22.41283 98.39478 -18.05786 -23.06344 98.39218 -14.86942 -22.17975 98.39217 -13.15748 -19.84495 98.39918 -13.09943 -16.52801 98.38763 -15.3105 -14.07027 98.39476 -18.17379 -13.43112 98.37814 -21.12676 -14.85064 98.3922 -22.49945 -17.86103 98.39218 -21.81134 -20.67367 98.39918 -20.37591 -22.17103 98.39144 -1.169513 15.23702 97.89898 4.783272 14.49003 97.89467 8.417615 12.74799 97.89832 11.24462 10.5306 97.89543 14.14678 6.463265 97.91197 15.65487 1.551327 97.88961 15.53165 -3.447024 97.90504 13.81276 -8.230002 97.90513 10.60761 -12.27152 97.89031 6.412875 -15.00241 97.90515 2.526382 -16.11 97.89834 -1.610235 -16.2853 97.89176 -4.98762 -15.50326 97.89833 -8.659039 -13.77751 97.91379 -12.39965 -10.35237 97.90515 -14.86569 -5.908195 97.90509 -15.75635 -1.319583 97.9223 -15.43164 2.586563 97.89833 -14.13455 6.487237 97.90473 -11.16312 10.61073 97.90453 -7.026411 13.58142 97.9122 17.07917 22.42492 98.89673 13.80551 20.79762 98.89655 21.21146 21.29445 98.92314 22.24323 14.09945 98.8927 22.86974 18.12453 98.89781 12.22202 16.53511 98.89558 15.10148 12.36562 98.89522 18.80719 11.92415 98.89787 -22.61687 15.1919 98.89774 -20.25936 12.39149 98.8955 -20.44899 21.62375 98.89788 -22.77593 18.836 98.89491 -13.39862 20.49594 98.89619 -17.34495 22.44815 98.89673 -16.16577 11.98677 98.89718 -13.22431 14.15822 98.89673 -12.38884 17.11363 98.89786 18.9173 -12.92682 98.89311 14.09689 -14.19687 98.89523 12.34328 -17.90894 98.89673 22.30463 -20.80471 98.89775 22.88033 -20.6213 98.91772 22.46397 -15.8625 98.89688 20.87799 -22.63478 98.9365 13.61467 -21.80965 98.8954 17.3451 -23.57598 98.89673 -22.01652 -21.49654 98.93031 -19.35754 -23.35761 98.895 -21.55036 -14.55759 98.89699 -23.01221 -17.90893 98.89688 -13.05071 -20.80471 98.89775 -12.38488 -17.16317 98.89471 -14.72205 -13.78816 98.89688 -18.40409 -12.92756 98.89695 -15.29824 -23.0278 98.897 -4.018386 -16.8792 98.89761 -8.967308 -14.74846 98.89797 -13.90171 -10.15937 98.8968 -16.74091 -2.664334 98.89707 -16.13968 4.11133 98.89775 -13.8289 8.981401 98.89791 -9.947895 12.99927 98.89802 -5.320919 15.37438 98.89761 -0.2723121 16.2175 98.89787 4.946775 15.48297 98.89772 9.692212 13.1595 98.89808 13.59492 9.293125 98.89797 16.11474 4.233342 98.8977 16.74154 -2.664403 98.89762 14.55216 -8.965528 98.89785 11.3318 -12.94484 98.898 6.818603 -15.94503 98.89794 1.595023 -17.28679 98.89791 -4.885943 33.43282 68.17621 -4.7519 33.43282 66.05437 -3.774839 33.43282 64.13764 -1.66372 33.43282 62.68033 0.4492345 33.43282 62.44388 2.094844 33.39454 62.82079 3.817525 33.43282 64.18841 4.762338 33.43282 66.093 5.024706 33.40277 67.10101 4.071759 33.43282 70.24767 2.063234 33.43282 71.82031 0.4092838 33.43282 72.25626 -2.148192 33.43282 71.86166 -4.04567 33.43282 70.15679 -10.75566 28.06883 98.89849 -18.30907 23.90184 98.89844 15.58799 25.85326 98.8988 -2.13081 29.9102 98.89842 5.624785 29.49856 98.89843 26.80252 14.21256 98.89877 30.42261 3.587103 98.89894 -30.49541 -1.862897 98.89838 -23.94874 18.36002 98.89842 -29.30059 8.794404 98.89994 14.23392 -27.59361 98.89847 5.773744 -30.62265 98.89847 29.94952 -6.868041 98.89882 26.90606 -15.03025 98.89847 -15.94574 -26.80319 98.89886 -4.856221 -30.79422 98.89881 -28.30504 -12.60282 98.89981 -12.89702 28.2314 97.9186 -7.398867 30.05481 97.89833 -19.22258 24.45783 97.88661 -23.24171 20.698 97.89833 -31.48612 0.3695068 97.89833 -30.89889 5.826431 97.90331 -27.87339 14.41088 97.86993 -30.89025 -7.416829 97.86993 -27.57819 -15.89431 97.9033 -21.94001 -23.36618 97.87857 -5.426847 -31.73806 97.89318 -14.30896 -28.68566 97.90329 3.924966 -31.87036 97.91862 12.90067 -29.45804 97.90663 22.14208 -23.17009 97.87857 31.54193 -1.404008 97.88658 30.46607 -8.773863 97.9033 27.6855 -15.69981 97.9033 25.59338 17.79993 97.89833 28.43797 13.10599 97.9033 30.85324 6.043748 97.9033 21.83722 22.20974 97.91856 17.59742 25.56238 97.89833 12.54091 28.38831 97.91862 -1.980224 30.92668 97.90329 5.472026 30.5108 97.90329 2.200063 30.90948 92.39834 9.531154 29.51227 92.39834 16.32866 26.43229 92.39834 23.66116 20.44326 92.39834 28.62455 12.70468 92.39834 31.36034 3.641132 92.39834 31.15385 -5.549724 92.39834 29.11116 -12.72785 92.39834 24.27014 -20.86445 92.39834 17.34951 -26.91562 92.39834 10.67435 -30.25359 92.39834 3.40214 -31.93014 92.39834 -4.060378 -31.85173 92.39834 -11.29576 -30.02274 92.39834 -17.8993 -26.54525 92.39834 -24.86386 -20.13264 92.39834 -29.36023 -12.11349 92.39834 -31.25164 -4.894032 92.39834 -31.22112 4.57311 92.39834 -28.33934 13.30321 92.39834 -23.02488 21.13868 92.39834 -14.02717 27.79787 92.39834 -5.254286 30.54571 92.39834 4.333391 33.42885 64.31397 -0.4611958 33.42885 62.07835 -2.990505 33.43053 63.07731 -4.794441 33.42886 65.11261 -5.110973 33.43001 68.71771 -3.37191 33.42991 71.36682 -0.4609349 33.42918 72.61863 3.03423 33.42886 71.68182 4.929498 33.42991 69.14241 -34.58701 -6.718372 92.39891 -30.81139 -17.4399 92.39884 -25.2115 -24.90813 92.39849 -16.02919 -31.9569 92.39963 -3.323593 -35.53669 92.39891 22.40319 26.64915 92.39975 12.65914 32.11639 92.39849 3.323687 34.40895 92.39884 -8.017374 33.63941 92.39884 -16.71229 30.24114 92.39851 9.951461 -34.37851 92.39964 19.9451 -29.38142 92.39849 28.38611 -21.46109 92.39964 -25.9604 23.27966 92.39964 -32.80918 11.99394 92.39884 -34.87579 2.890646 92.39849 34.53695 -7.610457 92.39975 34.58715 5.590579 92.39884 30.81138 16.31227 92.39884 -35.74442 7.446655 53.14831 -36.4087 3.46582 53.14831 -34.64625 11.3302 53.14831 -33.12753 15.06934 53.14831 -31.20668 18.61878 53.14831 -28.90702 21.9353 53.14831 -23.2872 27.71216 53.14831 -26.25647 24.97888 53.14831 -20.03525 30.10242 53.14831 -16.54011 32.12036 53.14831 -12.84418 33.74158 53.14831 -8.992353 34.94629 53.14831 -5.031364 35.71997 53.14831 3.025014 35.94202 53.14831 -1.009301 36.05322 53.14831 7.02261 35.38769 53.14831 10.93496 34.39697 53.14831 14.71458 32.98181 53.14831 18.31558 31.15942 53.14831 21.69426 28.95203 53.14831 27.62378 23.49365 53.14831 24.8096 26.38648 53.14831 30.10265 20.30884 53.14831 32.21611 16.87061 53.14831 33.93851 13.2207 53.14831 36.13151 5.465332 53.14831 35.24895 9.403565 53.14831 36.57549 1.453979 53.14831 36.57549 -2.581909 53.14831 36.13151 -6.59314 53.14831 35.24895 -10.53137 53.14831 33.93851 -14.34851 53.14831 30.10265 -21.43665 53.14831 32.21611 -17.99841 53.14831 27.62378 -24.62146 53.14831 24.8096 -27.51428 53.14831 21.69426 -30.07996 53.14831 18.31558 -32.28735 53.14831 14.71458 -34.10962 53.14831 7.02261 -36.5155 53.14831 10.93496 -35.52478 53.14831 3.025014 -37.06982 53.14831 -1.009301 -37.18103 53.14831 -5.031364 -36.84778 53.14831 -12.84418 -34.86938 53.14831 -8.992353 -36.0741 53.14831 -16.54011 -33.24817 53.14831 -20.03525 -31.23023 53.14831 -23.2872 -28.84009 53.14831 -26.25647 -26.10669 53.14831 -28.90702 -23.06323 53.14831 -33.12753 -16.19727 53.14831 -31.20668 -19.74658 53.14831 -34.64625 -12.45801 53.14831 -35.74442 -8.574463 53.14831 -36.4087 -4.593628 53.14831 -36.63103 -0.5639649 53.14831 15.78429 33.43595 73.3589 -9.209785 35.7955 75.73618 2.124264 36.90701 76.84078 -15.78247 33.43601 61.33686 -12.92859 34.64598 60.11116 -8.152644 36.07307 58.69514 -2.101033 36.9058 57.85337 2.187032 36.89397 89.92891 9.507431 35.75517 89.9251 15.74588 33.47009 89.89833 20.97866 30.58213 89.90333 28.57853 23.93589 89.90625 34.0312 15.31305 89.90316 36.64859 7.626446 89.90317 37.55245 -0.4433306 89.90318 36.70043 -8.518769 89.90319 34.13227 -16.22247 89.90317 29.9684 -23.19337 89.9032 22.91747 -30.42631 89.90626 12.18255 -36.18077 89.90625 2.153662 -38.05477 89.90316 -5.955579 -37.64123 89.9032 -13.78725 -35.49402 89.90318 -22.6439 -30.63422 89.90623 -31.06011 -21.82977 89.90622 -35.54812 -12.66871 89.90319 -37.3192 -4.743949 89.90318 -37.17414 5.35657 89.90625 -34.1324 15.09412 89.90319 -29.96837 22.06552 89.90319 -24.40288 27.97894 89.90318 -19.33323 31.56824 89.89833 -13.04812 34.63294 89.91052 -5.497727 36.55691 89.9208 -36.74782 -8.28375 53.14831 -37.54822 -0.2036533 53.14831 -36.12794 9.998272 53.14831 -31.98751 19.10324 53.14831 -27.01192 25.51967 53.14831 -20.66014 30.80093 53.14831 -13.25021 34.54553 53.14901 -5.917582 36.51664 53.14883 3.584626 36.87557 53.1487 13.30772 34.52523 53.14881 20.70828 30.81143 53.14773 29.01682 23.41138 53.14831 34.22933 14.87488 53.14831 36.7479 7.155948 53.14831 37.55392 -3.112583 53.14831 35.46773 -12.89455 53.14831 30.86477 -22.10819 53.14831 22.3699 -30.83565 53.14831 13.56318 -35.57887 53.14831 5.718395 -37.67592 53.14831 -2.392536 -38.03765 53.14831 -12.50297 -36.06697 53.14831 -23.18488 -30.21605 53.14831 -30.11013 -22.99995 53.14831 -34.22904 -16.00325 53.14831 12.17738 34.93448 59.82674 15.7961 33.43609 61.31904 7.087593 36.26489 58.49852 3.270331 36.80754 57.94678 -15.79765 33.43607 73.37878 -4.103998 36.73905 76.66783 12.9903 34.62224 74.56211 -12.92607 34.65119 74.59443 8.396646 36.01351 75.94995</float_array>
|
52 |
+
<technique_common>
|
53 |
+
<accessor source="#eSeries_UR5e_058-mesh-positions-array" count="485" stride="3">
|
54 |
+
<param name="X" type="float"/>
|
55 |
+
<param name="Y" type="float"/>
|
56 |
+
<param name="Z" type="float"/>
|
57 |
+
</accessor>
|
58 |
+
</technique_common>
|
59 |
+
</source>
|
60 |
+
<source id="eSeries_UR5e_058-mesh-normals">
|
61 |
+
<float_array id="eSeries_UR5e_058-mesh-normals-array" count="2583">0.002150475 0.9972043 -0.07469272 -0.01779347 0.9998417 4.43543e-4 -0.01041597 0.9997109 0.02167063 -0.3783033 0.2171291 0.8998564 -0.1535174 0.963819 0.2179116 -0.7400171 0.5829507 0.3354749 -0.8154255 0.5560721 0.1608261 -0.7999817 0.5928488 0.09251844 -0.8319238 0.5326645 -0.1554718 -0.7317873 0.4948434 -0.4686335 -0.4220776 0.8667503 -0.2656963 -0.360688 0.9089055 -0.209273 -0.2875034 0.7159588 -0.6361956 0.195325 0.5340406 -0.8225866 0.2008437 0.7518067 -0.6280513 0.5979058 0.5673418 -0.5662438 0.3403425 0.8114426 -0.4751085 0.3384783 0.8208199 -0.4600948 0.7003772 0.5102028 -0.4991642 0.7999774 0.5676078 -0.1945707 0.8245098 0.5618029 0.06753683 0.7362138 0.6539651 0.1741235 0.2850727 0.9570316 0.05314314 0.798052 0.2430915 0.5513797 0.6978553 0.634234 0.3327842 0.6427119 0.3127328 0.6993709 0.4938904 0.5609467 0.6643878 0.2854714 0.4891712 0.8241467 0.1319622 0.9146882 0.3820099 -0.07153379 0.3059868 0.9493446 0.04103285 0.588993 0.8070958 -0.03364229 0.7187761 0.6944271 0.005223155 0.8585524 0.5126994 -0.3822332 0.6137039 0.690844 -0.4646356 0.4132941 0.7831359 -0.2868674 0.9246489 0.2504629 -0.4486727 0.7979454 0.4024625 -0.7523427 0.2259672 0.6188048 -0.2884664 0.9570884 -0.0277332 -0.3289158 0.9442497 0.01439255 -0.7248888 0.6015217 -0.33572 -0.07867342 0.9730561 -0.216731 -0.3330715 0.6032807 -0.7246488 -0.4367933 0.5160385 -0.7368283 -0.08954393 0.8767063 -0.4726182 -0.1638815 0.4673034 -0.8687753 0.002859473 0.9977222 -0.06739789 0.143306 0.4892879 -0.8602678 0.4778828 0.2949252 -0.8274341 0.29725 0.9541124 -0.03622466 0.4437423 0.8735571 -0.1999772 0.7756565 0.5905761 -0.2226594 0.3502865 0.9307309 0.1050688 0.4322614 0.7832224 0.4468923 0.4822725 0.7270469 0.4886883 0.06084287 0.9959357 0.06641036 -0.9600573 -0.08337664 0.2670924 -0.9833262 0.03571057 0.1783097 -0.7693659 0.1566568 0.619302 -0.5857934 -0.1256485 0.8006615 -0.3860917 0.1070378 0.9162293 -0.07825058 -0.05716335 0.9952936 -3.65875e-4 0.04400873 0.9990311 0.4303978 -0.02916222 0.9021682 0.3266109 0.0652064 0.942907 0.6250748 0.09189897 0.7751364 0.8386936 -0.07257521 0.5397462 0.8720682 0.02508276 0.4887412 0.9807304 0.1176787 0.1559483 0.9982805 -0.04607522 -0.03623843 0.8896276 -0.01671659 -0.4563807 0.9625689 0.07725268 -0.2597943 0.8117079 0.08049327 -0.5784906 0.5411733 -0.004260241 -0.8409003 0.5196999 0.02928692 -0.8538469 -0.06639337 -0.03607869 -0.9971411 0.08885699 0.0729689 -0.9933681 -0.1608988 0.04309797 -0.9860295 -0.5806413 -0.02160191 -0.8138729 -0.5099064 0.06671595 -0.857639 -0.9207525 -0.05470514 -0.3862931 -0.837975 0.09153521 -0.5379772 -0.9768903 0.100194 -0.1888031 0.5239365 0.1118105 0.8443868 0.3138871 0.4287039 0.8471648 -0.02001523 0.527216 0.8494957 -0.3064716 0.4290767 0.8496873 -0.5183449 0.1345685 0.8445175 -0.4540841 -0.284291 0.8443852 -0.1483583 -0.5101798 0.8471756 0.1990627 -0.4885797 0.8495081 0.4460645 -0.2876003 0.8475332 -2.44084e-7 0 1 0 0 1 -2.52343e-6 0 1 -4.35204e-6 0 1 4.18398e-6 0 1 -2.44084e-7 0 1 -2.1296e-6 0 1 5.04686e-6 0 1 -4.04877e-6 0 1 5.94784e-6 0 1 -4.61454e-6 0 1 2.78932e-6 0 1 2.40993e-6 0 1 -2.52343e-6 0 1 -6.37155e-6 0 1 5.52117e-6 0 1 -4.82629e-6 0 1 2.52342e-6 0 1 -2.97392e-6 0 1 -1.80986e-6 0 1 2.5988e-6 -3.65581e-7 1 1.25917e-6 -3.65248e-7 1 1.7252e-6 -8.47052e-7 1 1.22993e-6 -5.48993e-7 1 4.24437e-7 -1.23506e-6 1 1.50629e-6 1.81749e-6 1 2.3322e-6 -1.70483e-6 1 3.08224e-6 2.74328e-6 1 3.54379e-6 4.61392e-6 1 7.08553e-6 5.18635e-6 1 -1.04676e-5 -4.03946e-6 1 -1.5547e-5 -3.45798e-6 1 -7.53115e-6 -3.45466e-6 1 -7.364e-6 -3.38857e-6 1 -4.26408e-5 -1.13102e-6 1 -4.92149e-6 6.93268e-6 1 -7.11433e-6 1.8258e-5 1 -0.9973172 -0.06729 -0.0288186 -0.9211853 0.0453003 -0.3864787 -0.8927308 -0.003415346 -0.4505775 -0.5807706 0.004379689 -0.8140555 -0.5478512 -0.02883869 -0.8360786 -0.06634509 0.05260419 -0.9964092 0.05801963 -0.05260783 -0.9969284 0.5409435 0.02972376 -0.8405337 0.5744439 -0.003892362 -0.8185348 0.8897458 0.003925144 -0.4564397 0.894056 -0.002730786 -0.447947 0.9993349 0.003727436 -0.03627657 0.9982149 0.020392 -0.05613797 0.9171649 -0.03837043 0.3966564 0.8394768 0.0584473 0.5402432 0.6618474 -0.05414384 0.7476808 0.4295057 0.07055342 0.9003039 0.08625513 -0.07795453 0.9932186 -0.07831335 0.04265767 0.9960159 -0.5902373 -0.02809131 0.8067409 -0.5238412 0.06069082 0.8496512 -0.8507225 -0.0645948 0.521631 -0.9585838 0.09996539 0.2666909 -0.03725796 0.999177 0.01603502 -0.06060522 0.9981195 0.009198188 -0.5817298 0.8132616 0.01400017 -0.6142721 0.7890916 0.002077996 -0.9677634 0.25032 0.0278244 -0.9834991 0.180893 0.002713859 -0.8479029 -0.5297889 0.01960515 -0.8491474 -0.5277587 0.02048116 -0.3914582 -0.9201959 -1.8077e-4 -0.2790778 -0.9597166 0.03255605 0.2237115 -0.9746417 -0.005173087 0.3765071 -0.9259012 0.03081232 0.6862159 -0.7273977 6.55408e-4 0.8404667 -0.5399849 0.04508042 0.9799585 -0.1985127 -0.01655685 0.9772299 0.2076454 0.04364693 0.9183879 0.3956484 -0.005106568 0.5905987 0.8066324 0.0231831 0.5483855 0.836187 0.008040428 -0.4025804 0.9153723 0.004766762 -0.4318608 0.9019318 -0.003930687 -0.8063434 0.5914337 0.004077255 -0.8234443 0.5673834 -0.00397408 -0.9986721 0.0512759 0.004994153 -0.9966313 0.08048796 0.01574915 -0.8747062 -0.4836862 -0.03060972 -0.7815234 -0.623483 0.02214604 -0.3870938 -0.9220287 0.004665374 -0.2799884 -0.9594751 -0.03184854 0.2631894 -0.9642252 0.03164082 0.4301598 -0.90239 -0.02559542 0.8533495 -0.521157 0.0137853 0.8967754 -0.4423477 -0.01107895 0.9987322 -0.04833912 0.01405239 0.9953222 0.09490334 -0.01808655 0.8163662 0.5772994 0.01648217 0.777351 0.6290245 -0.007327675 0.1712327 0.9852064 0.0069139 0.1366679 0.9905988 -0.006002962 -0.4025803 0.9153757 0.004080653 -0.4294194 0.9030964 -0.003972887 -0.8228304 0.568269 0.004527926 -0.840521 0.5417493 -0.005660593 -0.9999639 -0.00680691 0.00510317 -0.9915698 -0.1265079 -0.02802079 -0.8888289 -0.4573978 0.02776038 -0.5912085 -0.8059114 -0.03129565 -0.4449841 -0.8952745 0.02174216 0.03614455 -0.9991975 -0.01726114 0.2631899 -0.9642249 0.03164649 0.4838058 -0.8749073 -0.02166467 0.8533506 -0.5211551 0.01378577 0.8967766 -0.442345 -0.01107829 0.9987322 -0.04833841 0.01405251 0.987173 0.1564322 -0.03191357 0.8156912 0.5768218 0.04387217 0.615378 0.7874073 -0.03605067 0.1711975 0.9850078 0.02123892 0.07933634 0.99684 -0.003972232 -0.3294599 0.9436687 -0.03075248 -0.4783406 0.8779194 0.02116221 -0.8408601 0.5412217 0.005785226 -0.8978714 0.4391341 -0.03143697 -0.9997356 -0.00680536 0.0219655 -0.9531061 -0.3009493 -0.03191316 -0.889104 -0.4575387 0.01234656 -0.4450858 -0.8954793 -0.003958046 -0.4391756 -0.8983765 -0.006672024 0.2633156 -0.9646871 0.006625711 0.2969003 -0.954876 -0.007888913 0.8534131 -0.5211962 0.006397783 0.8965438 -0.4423683 -0.02279627 0.9985798 -0.04833197 0.02241867 0.9709791 0.2374767 -0.02836334 0.8329167 0.5526741 0.02830344 0.7014523 0.7124869 -0.01809 0.2543118 0.9669818 0.01648187 0.2516022 0.9677074 0.0154525 -0.2669122 0.9630519 -0.0359016 -0.4783051 0.8778563 0.024347 -0.8407472 0.54115 -0.01734536 -0.806443 0.591291 0.004960894 -0.9997577 0.01745015 -0.01342183 -0.9999658 -0.006807029 -0.00472033 -0.8888977 -0.4574344 0.02479183 -0.7430663 -0.6683921 -0.03323489 -0.4449113 -0.8951273 0.02830249 -0.2176427 -0.9756845 -0.02590906 0.2631837 -0.9642064 0.03225594 0.4330126 -0.9010303 -0.02539342 0.8533496 -0.5211569 0.01378649 0.9097005 -0.4148086 -0.01946735 0.9985798 -0.04833257 0.02241867 0.9709788 0.2374777 -0.02836358 0.8329166 0.5526745 0.02830308 0.7217977 0.6920064 -0.01163232 0.3592764 0.9332257 -0.003207683 0.2542253 0.966652 0.03088015 -0.08186733 -0.9965721 0.01190471 -0.1244757 -0.9917801 -0.0296362 -0.3985033 -0.916862 0.02364897 -0.4322249 -0.9017448 -0.006174504 -0.6723827 -0.7393596 0.0353406 -0.617119 -0.786765 -0.01284658 -0.8746958 -0.4832726 0.03680944 -0.8134451 -0.5805583 -0.03548491 -0.98375 -0.1755653 0.03758728 -0.9553046 -0.2931285 -0.03832602 -0.987774 0.1509695 0.03886872 -0.9990289 0.02451646 -0.03661048 -0.8862646 0.4614721 0.03973317 -0.9403821 0.337952 -0.03834205 -0.6899474 0.7227312 0.0404033 -0.7828371 0.6209779 -0.03940105 -0.4196285 0.9067511 0.04140543 -0.5453147 0.837415 -0.03698474 -0.09642058 0.9948675 0.03069144 -0.2739133 0.9613278 -0.02864319 -0.04232019 0.9990514 -0.01027214 0.2637465 0.9641541 0.02906429 0.2255841 0.9742231 0.001091241 0.4251167 0.9046683 -0.02917236 0.5624254 0.8258373 0.04087239 0.6748779 0.7369394 -0.03821438 0.7988591 0.6001772 0.0401436 0.8737579 0.4848441 -0.03838491 0.9498013 0.3103757 0.03930205 0.9811083 0.1905602 -0.03336948 0.9994612 -0.01248431 0.030357 0.9964024 -0.08293652 -0.01743364 0.9423823 -0.334091 0.01728731 0.9489119 -0.3155411 2.86549e-4 0.7844194 -0.6199458 0.01879853 0.8111549 -0.5845257 -0.01891231 0.5428046 -0.8396222 0.0199477 0.5832011 -0.812058 -0.02093422 0.2434876 -0.9698965 0.003819048 0.2718688 -0.961979 -0.02614998 -0.20191 -0.6945081 0.6905729 -0.2024571 -0.7246862 0.6586661 0.3036103 -0.6369221 0.7086262 0.3319224 -0.6678031 0.6662331 0.6320966 -0.3098723 0.7102345 -0.6263728 -0.3433949 0.6998123 -0.6055538 -0.3225954 0.7274867 -0.3021122 0.6244406 0.7202792 -0.4815719 0.7616984 0.433479 -0.421014 0.2900964 0.8594135 -0.9497863 0.07604956 0.3035171 -0.7364646 0.1137897 0.6668371 0.8681538 -0.3225975 0.3771473 0.5026686 0.04637271 0.8632346 0.7722735 0.6245774 0.1161757 0.6338141 0.4376524 0.6377618 0.09679985 0.6978346 0.7096878 0.088642 0.7479806 0.6577748 0.9028256 0.1415306 0.4060481 0.5869852 0.02624905 0.809172 0.714221 0.6009756 0.3587712 0.3349164 0.4334057 0.8366545 0.2971219 -0.5368025 0.7896592 0.7150602 -0.5972582 0.3632789 0.5007281 -0.2447395 0.8302855 -0.3262887 -0.4467951 0.8330126 -0.4136654 -0.836306 0.3598241 0.02124214 -0.5938846 0.8042699 0.2202106 -0.8283915 0.5150485 0.0699799 0.8681054 0.4914225 0.08087921 0.8204182 0.5660148 -0.263486 0.5541101 0.7896438 -0.5365969 0.7269631 0.4284725 -0.4670118 0.3018907 0.831121 -0.8599454 0.2429301 0.4488641 -0.5534841 -0.06942343 0.8299614 -0.8099321 -0.2415341 0.5344824 -0.2252497 -0.4729936 0.8517861 0.2721373 -0.8768578 0.3963105 0.1963366 -0.7441219 0.6385409 0.6341481 -0.3119087 0.7075092 0.6794836 -0.3207229 0.659878 0.6833239 0.1689413 0.7103008 -0.4981902 0.2376498 0.8338639 -0.1078777 0.233492 0.966356 -0.9260568 -0.07940775 0.3689355 -0.5235453 -0.1598003 0.8368778 -0.6331622 -0.7647823 0.1192224 -0.6190473 0.4954888 0.6093204 0.8247778 0.2686597 0.4975577 0.3854806 0.3893973 0.8365254 0.4025263 0.8503766 0.338869 0.1593179 0.6127339 0.774064 -0.2556105 0.747117 0.6135793 -0.1736909 0.6196172 0.765445 0.4324235 0.4103958 0.8028606 0.4648499 0.6527881 0.5981491 0.299105 -0.6149514 0.7296376 0.3416686 -0.6594872 0.6695815 0.641959 -0.2927309 0.7086589 0.6835601 -0.2981994 0.6662003 0.68335 0.1689392 0.7102764 0.7522032 0.2145722 0.6230161 -0.8590294 0.1574763 0.4871035 -0.5710653 0.01285225 0.8208041 -0.7510111 -0.5203148 0.4065155 -0.4641892 -0.4198634 0.7798995 -0.1729077 -0.7582333 0.6286377 -0.1739067 -0.7441044 0.6450311 0.2015069 0.5241011 0.8274739 -0.07604038 0.9337522 0.3497496 -0.1558236 0.5622532 0.8121517 -0.6039784 0.6104393 0.5124198 -0.4912992 0.3578508 0.7940831 0.1516169 0.6485378 0.7459296 0.2967596 0.6891446 0.6610701 0.2994583 0.6306506 0.7159641 0.4971649 0.5347483 0.6832799 0.5067699 0.5551075 0.6595757 0.5515856 0.3060833 0.7759294 0.7985486 0.3024734 0.5204133 0.6140738 0.1162668 0.7806379 0.7409639 -0.05748802 0.6690796 0.7624616 -0.06772065 0.64348 0.6204832 -0.2075697 0.756251 0.7059682 -0.3349962 0.6240084 0.5147278 -0.3708814 0.7729829 0.5642214 -0.5450161 0.6201707 0.3645438 -0.5096313 0.7793484 0.351756 -0.6851531 0.6378346 0.1695873 -0.593656 0.7866467 0.1273255 -0.7626141 0.6341986 -0.09386134 -0.6670563 0.739071 -0.08742862 -0.7007966 0.7079834 -0.3171467 -0.6476383 0.6928079 -0.3181692 -0.6623607 0.6782674 -0.4126171 -0.5270186 0.7429661 -0.5568165 -0.562066 0.611586 -0.5223858 -0.3696209 0.7684358 -0.7063104 -0.351784 0.6143075 -0.6021003 -0.1883928 0.775876 -0.817753 -0.0743162 0.5707515 -0.6411595 0.01817548 0.7671924 -0.7063237 0.2538485 0.6608085 -0.6859372 0.2383581 0.687514 -0.5433589 0.4282752 0.7220398 -0.5554559 0.4495356 0.6995618 -0.4004907 0.6024643 0.6903941 -0.380333 0.588084 0.7137956 -0.1925175 0.6711386 0.7158982 -0.1841504 0.7169002 0.6724156 -0.02917951 0.6604265 0.7503236 0.0575627 0.7932412 0.6061807 -0.9980105 -2.03075e-4 -0.06304764 -0.8927373 0.001191437 -0.450576 -0.8909222 -0.001644194 -0.4541531 -0.5480773 0.003116428 -0.836422 -0.5678872 0.02691471 -0.8226664 -0.111127 -0.03894621 -0.9930428 0.0580008 0.05909937 -0.9965657 0.2229915 -0.01140475 -0.9747537 0.5739738 0.04073005 -0.8178601 0.6217871 -0.001416444 -0.7831852 0.8940544 0.002594172 -0.4479509 0.8958321 -2.02968e-4 -0.4443928 0.9984217 0.001191437 -0.05615019 0.9596759 0.1365488 -0.245717 0.9551824 -0.06013792 0.2898449 0.9176107 0.02241563 0.3968477 0.6625882 0.0265693 0.7485125 0.6163 -0.02464556 0.7871258 0.2548075 -0.02262002 0.9667272 0.08626967 0.07611984 0.9933597 -0.1522208 -0.05951213 0.9865531 -0.5238533 0.06014269 0.8496828 -0.6677834 -0.04089045 0.7432317 -0.8517411 0.04227775 0.5222546 -0.919759 -0.04218381 0.3902101 -0.9992978 0.02387785 -0.028876 0.006689131 0.01612097 0.9998477 0.001814842 0.02502256 0.9996852 0.005356311 0.03449791 0.9993904 -0.006877303 0.005575537 0.9999608 0.01261651 -0.004707694 0.9999094 0.008130729 0.007966101 0.9999352 0.007105767 -0.01542979 0.9998558 -0.007700681 -0.00138992 0.9999695 -0.008696138 0.002795517 0.9999583 0.0228641 -0.02626478 0.9993936 0.005033373 -0.02354222 0.9997102 0.01475703 -0.02801537 0.9994986 -0.006638109 -0.01804172 0.9998153 -0.002412676 -0.04543709 0.9989643 -0.01310139 -0.01592522 0.9997873 -0.01511096 -0.01322019 0.9997984 9.61306e-4 4.24752e-4 0.9999995 -6.90767e-4 2.19142e-4 0.9999998 -1.04367e-5 -1.4157e-5 1 6.15798e-4 5.94294e-4 0.9999997 5.72169e-4 3.10764e-4 0.9999998 -0.017062 -0.0169214 0.9997113 0.001658499 -2.53107e-4 0.9999987 -2.70497e-4 3.82581e-4 1 -0.001305878 -0.001066744 0.9999986 -0.001319289 -4.34345e-4 0.9999991 0.01167482 -0.004504442 0.9999217 -0.007438898 -0.003839135 0.999965 2.01217e-4 -5.15871e-4 0.9999999 -3.63314e-4 4.63325e-4 0.9999998 -4.78474e-4 -2.46196e-4 0.9999999 -3.00647e-4 2.63507e-4 1 9.54904e-5 -1.09887e-5 1 -1.97389e-5 2.30427e-4 1 -2.19821e-4 7.19249e-5 1 -0.001888751 6.64351e-5 0.9999982 5.80782e-4 -7.90271e-4 0.9999996 4.72077e-4 -8.64141e-4 0.9999995 -9.57899e-6 -3.0031e-4 1 0.005194544 -0.005391418 0.999972 0.002932488 -0.003127515 0.9999908 5.71517e-4 -2.1039e-4 0.9999998 6.04946e-4 -2.88786e-4 0.9999998 3.78189e-4 -5.42802e-5 1 0.002624034 8.91554e-4 0.9999962 -0.01432234 0.01152515 0.9998311 -1.11743e-4 5.18445e-4 1 -1.82592e-4 5.10687e-4 0.9999999 -0.05498623 0.063923 0.9964389 9.35328e-5 -4.19209e-4 1 -5.25281e-4 1.28107e-5 0.9999999 -7.30716e-4 3.95586e-4 0.9999997 -3.80062e-4 9.76727e-5 1 -0.001161813 0.004278361 0.9999902 5.66682e-4 -1.55769e-4 0.9999998 1.3916e-4 -2.26817e-4 1 9.74816e-4 -5.62352e-5 0.9999995 7.46949e-4 -5.65129e-4 0.9999997 0.002019166 -6.79532e-4 0.9999978 5.34311e-4 -3.27773e-4 0.9999999 -2.41626e-4 -9.16242e-5 1 1.70261e-4 4.63749e-4 1 -5.402e-4 5.85697e-4 0.9999998 9.25175e-5 -2.70097e-5 1 4.54775e-5 -1.93099e-5 1 2.4948e-5 1.55204e-5 1 3.5847e-4 7.67681e-4 0.9999997 -1.82369e-4 6.1849e-5 1 -3.33993e-4 -8.75355e-4 0.9999996 0.01370501 0.01312202 0.9998199 3.66285e-4 -1.92181e-4 1 4.82823e-4 2.32505e-4 0.9999999 4.98163e-5 -7.38703e-5 1 0.04572039 0.04638987 0.9978766 3.17673e-5 1.31674e-4 1 -5.89656e-4 -5.16885e-4 0.9999998 1.44981e-4 1.66542e-4 1 2.29044e-4 1.97358e-5 1 -1.62181e-5 3.69577e-5 1 -5.15186e-5 2.53036e-5 1 -2.56194e-5 2.3072e-4 1 0.001517891 9.54955e-4 0.9999984 2.09057e-4 5.84639e-4 0.9999998 -7.84725e-5 1.5517e-4 1 1.61326e-4 8.85292e-4 0.9999996 1.60542e-4 9.26526e-4 0.9999997 -0.2389619 0.7276921 0.6429319 -0.3765054 0.6253249 0.6835295 -0.3091064 0.5603009 0.7684506 -0.477755 0.5129357 0.7131951 -0.4549421 0.4629807 0.760708 -0.612339 0.06517565 0.7879042 -0.8374798 0.2969381 0.4587542 -0.4944101 0.2767471 0.8239961 -0.6267995 0.4589092 0.6297021 -0.6260499 0.07007396 0.7766281 -0.774376 -0.06155759 0.6297242 -0.5551677 -0.1131168 0.8240106 -0.8282616 -0.321788 0.4587323 -0.4585701 -0.3487271 0.8173756 -0.5892837 -0.4143003 0.6936138 -0.2015533 -0.589094 0.7825245 -0.4899526 -0.7004607 0.5189426 -0.3995826 -0.461811 0.791874 -0.2306082 -0.6407838 0.7322677 -0.01213711 -0.7256517 0.6879553 0.0101431 -0.6268507 0.7790734 0.209577 -0.7768514 0.593784 0.2038769 -0.5694348 0.7963532 0.4419319 -0.6467215 0.621649 0.3962486 -0.5366246 0.7449975 0.7778717 -0.1121536 0.6183342 0.6132687 -0.2287026 0.7560402 0.6636172 -0.2664275 0.6990198 0.5668957 -0.4057072 0.7169595 0.5967854 -0.4450643 0.6676564 0.4557566 -0.4460535 0.7702741 0.6585572 0.3997737 0.6375605 0.6069881 0.2068147 0.7673287 0.6034569 0.2063794 0.7702255 0.8333409 0.07583004 0.5475334 0.6010773 -0.02720725 0.7987277 0.5230273 0.4421549 0.7286574 0.4889497 0.3833248 0.7835753 0.4340823 0.5532323 0.7109899 0.4215942 0.5240064 0.7400512 0.395665 0.7037443 0.590079 -0.1309867 0.6135642 0.778705 -0.1138483 0.7035749 0.7014421 0.03695303 0.6962858 0.7168129 0.03925979 0.7035228 0.7095875 0.2091321 0.7014213 0.681375 0.2034358 0.556101 0.8058322 0.1870672 0.9815284 -0.0401023 0.2872882 0.9570809 0.03823322 0.4123927 0.9101482 -0.03953129 0.4877715 0.8725991 0.02549451 0.6202052 0.7842087 -0.01903671 0.6321102 0.7739067 -0.03879582 0.760635 0.6476831 0.04405999 0.8541122 0.5175502 -0.05132418 0.8416934 0.5398475 -0.01082783 0.9461615 0.3235841 0.008478999 0.9566506 0.2887612 -0.03790473 0.99444 0.09184056 0.051521 0.9983079 -0.02242887 -0.05365061 0.9887703 -0.1442528 0.03904759 0.96104 -0.2734847 -0.04010474 0.9272931 -0.372282 0.03916347 0.8581686 -0.5105831 -0.05340236 0.8014613 -0.5949361 0.06091773 0.6570082 -0.751411 -0.06100654 0.5612031 -0.8244779 0.07271355 0.4466621 -0.8932179 -0.05152446 0.2594392 -0.9651418 0.03453534 0.2246353 -0.974384 -0.01072341 -0.01417732 -0.9998255 0.01216912 -0.01050484 -0.9997816 0.01807069 -0.2448702 -0.9686948 -0.04085606 -0.3245124 -0.9444637 0.05177164 -0.4655774 -0.8840982 -0.04010319 -0.5711393 -0.8190733 0.05402821 -0.6755722 -0.733722 -0.07248634 -0.7961606 -0.6010044 0.07015776 -0.8709969 -0.4883714 -0.05345946 -0.9302618 -0.3632406 0.05166602 -0.9659988 -0.2530803 -0.05288523 -0.9966089 -0.07638013 0.03060799 -0.9989514 0.003221273 -0.04567039 -0.9936939 0.1069033 0.03382647 -0.9429661 0.3322603 -0.02044987 -0.9494575 0.3134129 0.0174067 -0.8268272 0.5608012 -0.04311686 -0.8050461 0.5930024 0.01577675 -0.6827699 0.7299511 0.03157025 -0.5932725 0.8016144 -0.07377165 -0.5121011 0.8581085 0.03745013 -0.3147987 0.9491049 -0.01008987 -0.2987533 0.9538151 -0.0313602 -0.1588267 0.9869599 0.02616018 -0.04870319 0.998008 -0.04010027 0.05567574 0.9976807 0.03916257 0.8401483 0.5026333 -0.2037416 0.008746087 0.9999524 -0.004340469 0.02087879 0.9983095 -0.05424183 0.0590744 0.9856919 -0.1578665 -9.48839e-4 0.9999638 -0.008466243 -0.009181439 0.9996473 -0.02492207 -0.003044724 0.9999856 -0.004404962 -0.02031427 0.9996464 -0.01716154 -0.007576525 0.9999638 -0.00386542 -0.03877758 0.9992449 -0.002449452 -0.0167731 0.9998578 -0.001797199 -0.006165266 0.9999776 0.002608835 -0.02370613 0.9995967 0.01563739 -0.00431925 0.9999791 0.004807651 -0.04352909 0.9938274 0.1020421 -0.001131713 0.9999727 0.007324934 0.007216811 0.9995988 0.02738857 0.008608102 0.9994566 0.03181958 0.004986047 0.9999673 0.006365418 0.1017125 0.9918677 0.07650518 -0.01461428 0.9997956 -0.0139752 1.46324e-4 3.87883e-5 1 1.60848e-4 5.08171e-5 1 1.1234e-4 6.36224e-5 1 9.98582e-5 2.34196e-5 1 2.23582e-5 2.84479e-5 1 8.02447e-5 2.65663e-4 1 1.54505e-4 2.91262e-4 1 1.0458e-4 4.11848e-4 1 1.06372e-4 1.74444e-4 1 -2.23131e-4 -2.72562e-4 1 -2.28079e-4 -1.71551e-4 1 -1.22804e-5 -3.60465e-5 1 1.74487e-5 -7.86134e-5 1 -2.46608e-5 -1.35593e-4 1 7.13099e-6 -1.46181e-4 1 1.02512e-5 -1.53462e-4 1 3.86596e-5 -1.27184e-4 1 -8.0392e-6 -7.77374e-5 1 2.22421e-6 1.53533e-4 1 -8.18367e-5 3.09842e-4 1 -7.6333e-5 3.27669e-4 1 -1.74931e-4 3.44632e-4 1 5.51728e-5 1.18016e-4 1 -2.60745e-5 3.06124e-5 1 -2.91909e-4 1.64901e-4 1 -2.88579e-4 1.72597e-4 1 9.75664e-5 3.58371e-5 1 2.2252e-4 -3.0068e-4 1 2.98259e-4 -2.00494e-4 1 1.64807e-4 -1.68648e-4 1 1.28133e-4 -4.11666e-5 1 6.96547e-5 -5.40427e-5 1 4.24003e-5 -1.28048e-7 1 1.46141e-4 4.79675e-5 1 -4.33226e-4 1.84561e-4 0.9999999 -3.55581e-4 1.01184e-4 1 -4.18273e-4 9.24682e-6 1 -1.95315e-4 6.95277e-5 1 -1.30614e-4 -3.98378e-5 1 -1.48192e-4 -5.1291e-5 1 -1.12156e-4 -7.17586e-5 1 -2.24343e-4 -2.73772e-4 1 -0.01439172 0.7281541 0.6852624 0.001472413 0.7056044 0.7086045 3.97761e-4 0.7061483 0.7080639 2.96073e-4 0.7070906 0.7071229 -6.22458e-4 0.7107927 0.7034013 6.42448e-4 0.7072328 0.7069804 -4.41978e-4 0.707781 -0.7064319 -4.98617e-4 0.7071241 -0.7070893 -8.90446e-4 0.7050478 -0.7091593 4.57125e-4 0.7091026 -0.7051052 0.001387536 0.7109299 -0.7032616 0.01216888 0.7260152 -0.687571 0.113295 0.7260004 0.6782977 0.1584908 0.6452634 0.7473392 0.253601 0.6843442 0.683637 0.3330044 0.5936692 0.7325742 0.323718 0.5878387 0.7413855 0.511249 0.5848796 0.6297146 0.4882578 0.3970912 0.7771248 0.6356387 0.4017118 0.6592353 0.6395879 0.2252364 0.7349802 0.6545177 0.2228748 0.7224496 0.734399 0.08225673 0.6737152 0.6410704 -0.002385556 0.7674783 0.7391986 -0.07799094 0.6689566 0.6922105 -0.2307602 0.6838088 0.5703911 -0.2533086 0.7813378 0.6381311 -0.381168 0.6689543 0.5223516 -0.5089176 0.6842161 0.4552749 -0.4853106 0.7464572 0.3310889 -0.6619867 0.6724238 0.3242376 -0.6048644 0.7273302 0.1380621 -0.7399269 0.658367 0.05571579 -0.6391038 0.7670997 -0.03793001 -0.7438522 0.667267 -0.1825998 -0.6482449 0.739213 -0.1753228 -0.6394535 0.7485727 -0.3735514 -0.6811707 0.6296554 -0.3908606 -0.5090436 0.7668785 -0.5527231 -0.5283459 0.6444748 -0.5285173 -0.3963288 0.7507284 -0.6796041 -0.3327223 0.6537845 -0.6173318 -0.2174006 0.7560678 -0.7269005 -0.1624516 0.6672519 -0.6823192 -0.02047443 0.7307677 -0.7299969 0.01027691 0.6833732 -0.6500359 0.1475392 0.7454432 -0.7176666 0.2243853 0.6592466 -0.5757516 0.3493458 0.7392345 -0.5692571 0.340018 0.7485547 -0.558748 0.5258736 0.6412939 -0.3987229 0.5298114 0.7485453 -0.4003402 0.5664267 0.7203393 -0.3207816 0.6551402 0.6840253 -0.2439303 0.6240524 0.7423319 -0.1854588 0.7242548 0.6641236 -0.04540723 0.6691927 0.7417003 -0.0313431 0.6973569 0.7160384 -3.74904e-6 0 -1 8.08159e-6 0 -1 0 0 -1 -9.47252e-6 0 -1 3.55559e-6 0 -1 6.13187e-6 0 -1 -4.15702e-6 0 -1 0 -2.47321e-6 -1 2.02631e-6 -3.29473e-6 -1 0 -3.60118e-6 -1 -1.56611e-4 5.03961e-4 -1 -3.13196e-4 7.06959e-4 -0.9999998 -2.31915e-4 7.4578e-4 -0.9999997 -2.37799e-4 7.96402e-4 -0.9999997 -1.05266e-4 5.34965e-4 -0.9999999 -4.90517e-5 5.96251e-4 -0.9999999 -4.08371e-5 6.9331e-4 -0.9999998 9.96386e-6 4.05993e-4 -1 5.28479e-5 3.81031e-4 -1 1.64278e-4 6.24175e-4 -0.9999999 1.69945e-4 6.64038e-4 -0.9999998 1.78693e-4 4.8403e-4 -1 2.95593e-4 5.9186e-4 -0.9999999 -2.8048e-4 -2.76577e-4 -1 -3.15886e-4 -4.80276e-4 -0.9999998 -4.58263e-4 -5.57218e-4 -0.9999998 -2.66403e-4 -3.82779e-4 -1 -5.02159e-7 0 -1 -2.16146e-5 0 -1 -3.89297e-6 0 -1 1.91743e-5 0 -1 -9.66026e-6 0 -1 -3.88077e-6 0 -1 -5.6659e-6 0 -1 7.45809e-6 0 -1 5.59922e-6 0 -1 -3.77256e-6 0 -1 1.21524e-7 0 -1 -1.38983e-6 0 -1 1.95305e-6 0 -1 1.81572e-6 0 -1 8.01841e-6 0 -1 -3.95351e-5 0 -1 7.9802e-6 0 -1 4.29145e-4 0.9999999 -4.16184e-4 4.53579e-4 1 -2.58531e-4 -2.11152e-6 0.9999586 -0.009105145 -5.86344e-4 0.9999998 -1.91221e-5 4.4364e-4 0.9999998 -2.8334e-4 2.87591e-6 0.9999541 0.009589672 -0.01049154 0.99985 -0.01378703 0.00170356 0.9999586 0.008940219 -3.43479e-4 0.9999986 -0.001619577 4.88153e-4 0.9999999 -4.40512e-4 0.001475036 0.9991536 0.04110884 -0.004766702 0.9998634 -0.01583307 -5.57881e-4 0.9999999 1.03363e-5 0.003806531 0.999984 0.004200398 4.28846e-4 1 -4.75394e-6 -0.4509496 0.8923569 -0.01854336 -0.4382839 0.8988027 0.007822573 -0.3889826 0.921243 -0.002001404 -0.2469236 0.9689529 0.01260703 -0.2939442 0.9558219 -0.001202344 -0.1807507 0.9835137 -0.005492329 -0.0438193 0.9990388 0.001205801 -0.02725774 0.9995694 0.01086944 0.1419976 0.9898422 0.007012188 0.1537168 0.988115 2.4715e-4 0.3904545 0.9206217 -9.93513e-4 0.3439618 0.938943 0.008736491 0.2884154 0.9574912 -0.005223631 0.4484482 0.8936384 -0.0174548 0.4718741 0.881666 4.7223e-4 0.3798751 0.9250065 0.007611811 0.2347455 0.9711118 -0.0428543 0.2567108 0.9663597 -0.01577144 0.1374405 0.990242 0.02304452 0.01802021 0.9997198 0.01535451 -0.03769648 0.9979371 -0.05196708 -0.1327598 0.9908139 0.02574241 -0.2595013 0.965355 -0.02736812 -0.3886397 0.9213781 0.004659652 -0.2864605 0.958092 -5.89001e-4 0.483195 0.8755126 -6.85041e-4 0.4766731 0.8790784 0.001977682 0.6583001 0.7527556 -1.46385e-4 0.6650986 0.7467507 -0.002725005 0.8451918 0.5344578 0.002451539 0.8534694 0.5211406 -0.001611709 0.9466233 0.3223397 0.00126034 0.9506736 0.31019 -0.00140196 0.993785 0.1113098 0.00126034 0.9969177 0.07825249 -0.005643069 0.9944508 -0.1049241 0.007659554 0.9779745 -0.2085725 -0.007968485 0.9486582 -0.3162494 0.005834102 0.8945484 -0.4469003 -0.007961273 0.8584914 -0.5127952 0.005796492 0.7160553 -0.6980366 -0.003146529 0.7165883 -0.6974904 -0.002907395 0.4724492 -0.8813536 0.002776801 0.4741849 -0.8804188 0.003393948 0.2582451 -0.9660601 -0.006119132 0.1836733 -0.9829574 0.007682025 0.04455351 -0.9989892 -0.005975723 -0.050929 -0.9986853 0.005834221 -0.1913098 -0.9814974 -0.007959425 -0.264407 -0.9643938 0.005794107 -0.4810544 -0.8766851 -0.003142714 -0.4803946 -0.8770478 -0.002907395 -0.722862 -0.6909869 0.002777755 -0.7214937 -0.6924127 0.003396391 -0.8617458 -0.5073033 -0.006121158 -0.8979996 -0.4399294 0.007683932 -0.9506565 -0.3101878 -0.005976378 -0.9759086 -0.2181019 0.005833983 -0.9951118 -0.09857439 -0.00597614 -0.999865 0.01435738 0.008003652 -0.9903905 0.137879 -0.01077741 -0.9544612 0.298151 0.01048386 -0.9102696 0.4139395 -0.007968783 -0.8584987 0.5127827 0.005833923 -0.7902306 0.6127806 -0.005975723 -0.7281927 0.6853477 0.005834102 -0.6393229 0.7689145 -0.006065666 -0.5778282 0.8161496 0.003822684 -0.4720804 0.8815544 -0.001360774 -0.4745242 0.8802423 -6.02649e-4</float_array>
|
62 |
+
<technique_common>
|
63 |
+
<accessor source="#eSeries_UR5e_058-mesh-normals-array" count="861" stride="3">
|
64 |
+
<param name="X" type="float"/>
|
65 |
+
<param name="Y" type="float"/>
|
66 |
+
<param name="Z" type="float"/>
|
67 |
+
</accessor>
|
68 |
+
</technique_common>
|
69 |
+
</source>
|
70 |
+
<vertices id="eSeries_UR5e_058-mesh-vertices">
|
71 |
+
<input semantic="POSITION" source="#eSeries_UR5e_058-mesh-positions"/>
|
72 |
+
</vertices>
|
73 |
+
<polylist material="LinkGrey-material" count="911">
|
74 |
+
<input semantic="VERTEX" source="#eSeries_UR5e_058-mesh-vertices" offset="0"/>
|
75 |
+
<input semantic="NORMAL" source="#eSeries_UR5e_058-mesh-normals" offset="1"/>
|
76 |
+
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
|
77 |
+
<p>0 0 3 0 1 0 1 1 2 1 0 1 0 2 2 2 36 2 19 3 4 3 20 3 21 4 36 4 2 4 18 5 22 5 23 5 17 6 18 6 23 6 17 7 23 7 24 7 16 8 17 8 24 8 15 9 16 9 25 9 25 10 24 10 26 10 26 11 24 11 1 11 27 12 25 12 26 12 29 13 12 13 27 13 29 14 27 14 28 14 11 15 29 15 30 15 30 16 29 16 28 16 30 17 28 17 3 17 10 18 11 18 30 18 9 19 10 19 31 19 8 20 9 20 31 20 8 21 31 21 32 21 31 22 0 22 35 22 7 23 8 23 33 23 33 24 8 24 32 24 6 25 7 25 33 25 6 26 33 26 34 26 5 27 6 27 34 27 34 28 35 28 36 28 4 29 5 29 20 29 20 30 5 30 34 30 20 31 34 31 21 31 21 32 34 32 36 32 21 33 22 33 20 33 20 34 22 34 19 34 2 35 23 35 21 35 21 36 23 36 22 36 22 37 18 37 19 37 2 38 1 38 24 38 2 39 24 39 23 39 24 40 25 40 16 40 1 41 28 41 26 41 25 42 27 42 14 42 25 43 14 43 15 43 26 44 28 44 27 44 27 45 13 45 14 45 28 46 1 46 3 46 27 47 12 47 13 47 29 48 11 48 12 48 0 49 31 49 3 49 3 50 31 50 30 50 30 51 31 51 10 51 31 52 35 52 32 52 32 53 35 53 34 53 32 54 34 54 33 54 0 55 36 55 35 55 38 56 18 56 37 56 37 57 18 57 17 57 38 58 19 58 18 58 39 59 19 59 38 59 39 60 4 60 19 60 40 61 4 61 39 61 40 62 5 62 4 62 41 63 6 63 40 63 40 64 6 64 5 64 41 65 7 65 6 65 42 66 7 66 41 66 42 67 8 67 7 67 42 68 9 68 8 68 43 69 9 69 42 69 44 70 10 70 43 70 43 71 10 71 9 71 44 72 11 72 10 72 45 73 11 73 44 73 45 74 12 74 11 74 46 75 13 75 45 75 45 76 13 76 12 76 46 77 14 77 13 77 47 78 15 78 46 78 46 79 15 79 14 79 37 80 16 80 47 80 47 81 16 81 15 81 37 82 17 82 16 82 48 83 49 83 50 83 50 84 51 84 48 84 51 85 52 85 48 85 52 86 53 86 48 86 48 87 53 87 54 87 54 88 55 88 48 88 48 89 55 89 56 89 56 90 57 90 48 90 57 91 49 91 48 91 59 92 58 92 60 92 59 93 61 93 58 93 59 94 62 94 61 94 59 93 63 93 62 93 65 93 64 93 59 93 59 95 66 95 65 95 59 93 67 93 66 93 59 96 60 96 67 96 69 97 68 97 70 97 69 98 71 98 68 98 69 99 72 99 71 99 69 100 73 100 72 100 69 93 75 93 74 93 69 101 76 101 75 101 69 102 77 102 76 102 69 103 70 103 77 103 80 93 78 93 79 93 79 104 81 104 80 104 79 105 82 105 81 105 79 93 83 93 82 93 79 106 85 106 84 106 79 93 86 93 85 93 79 107 87 107 86 107 79 108 78 108 87 108 90 93 88 93 89 93 89 93 91 93 90 93 89 109 92 109 91 109 89 93 93 93 92 93 89 93 95 93 94 93 89 110 96 110 95 110 89 93 97 93 96 93 89 111 88 111 97 111 98 112 99 112 100 112 99 113 101 113 100 113 102 114 103 114 99 114 99 115 103 115 101 115 99 116 104 116 102 116 105 117 106 117 99 117 99 118 106 118 104 118 99 119 107 119 105 119 108 120 109 120 99 120 99 121 109 121 107 121 99 122 110 122 108 122 111 123 112 123 99 123 99 124 112 124 110 124 99 125 113 125 111 125 99 126 114 126 113 126 98 127 116 127 99 127 99 128 116 128 115 128 128 129 37 129 117 129 117 130 37 130 47 130 117 131 47 131 118 131 118 132 47 132 46 132 118 133 46 133 119 133 119 134 46 134 45 134 119 135 45 135 120 135 120 136 45 136 44 136 120 137 44 137 121 137 121 138 44 138 43 138 121 139 43 139 122 139 122 140 43 140 42 140 122 141 42 141 123 141 123 142 42 142 124 142 124 143 42 143 41 143 124 144 41 144 125 144 125 145 41 145 40 145 125 146 40 146 126 146 126 147 40 147 39 147 126 148 39 148 38 148 126 149 38 149 127 149 127 150 38 150 128 150 128 151 38 151 37 151 51 152 129 152 52 152 52 153 129 153 130 153 52 154 130 154 53 154 53 155 130 155 131 155 53 156 131 156 54 156 54 157 131 157 132 157 54 158 132 158 55 158 55 159 132 159 133 159 55 160 133 160 134 160 55 161 134 161 56 161 56 162 134 162 135 162 56 163 135 163 57 163 57 164 135 164 136 164 57 165 136 165 49 165 49 166 136 166 137 166 49 167 137 167 50 167 50 168 137 168 138 168 50 169 138 169 51 169 51 170 138 170 129 170 60 171 139 171 67 171 67 172 139 172 140 172 67 173 140 173 66 173 66 174 140 174 141 174 66 175 141 175 65 175 65 176 141 176 142 176 65 177 142 177 143 177 65 178 143 178 64 178 64 179 143 179 59 179 59 180 143 180 144 180 59 181 144 181 63 181 63 182 144 182 145 182 63 183 145 183 62 183 62 184 145 184 146 184 62 185 146 185 61 185 61 186 146 186 147 186 61 187 147 187 58 187 58 188 147 188 148 188 58 189 148 189 60 189 60 190 148 190 139 190 70 191 149 191 77 191 77 192 149 192 150 192 77 193 150 193 76 193 76 194 150 194 151 194 76 195 151 195 75 195 75 196 151 196 152 196 75 197 152 197 74 197 74 198 152 198 153 198 74 199 153 199 69 199 69 200 153 200 154 200 69 201 154 201 73 201 73 202 154 202 155 202 73 203 155 203 72 203 72 204 155 204 156 204 72 205 156 205 71 205 71 206 156 206 157 206 71 207 157 207 68 207 68 208 157 208 158 208 68 209 158 209 70 209 70 210 158 210 149 210 78 211 159 211 160 211 78 212 160 212 87 212 87 213 160 213 86 213 86 214 160 214 161 214 86 215 161 215 85 215 85 216 161 216 162 216 85 217 162 217 84 217 84 218 162 218 79 218 79 219 162 219 163 219 79 220 163 220 83 220 83 221 163 221 164 221 83 222 164 222 82 222 82 223 164 223 165 223 82 224 165 224 81 224 81 225 165 225 166 225 81 226 166 226 80 226 80 227 166 227 167 227 80 228 167 228 78 228 78 229 167 229 159 229 88 230 168 230 169 230 88 231 169 231 97 231 97 232 169 232 96 232 96 233 169 233 170 233 96 234 170 234 171 234 96 235 171 235 95 235 95 236 171 236 94 236 94 237 171 237 172 237 94 238 172 238 89 238 89 239 172 239 173 239 89 240 173 240 93 240 93 241 173 241 174 241 93 242 174 242 92 242 92 243 174 243 175 243 92 244 175 244 91 244 91 245 175 245 176 245 91 246 176 246 90 246 90 247 176 247 177 247 90 248 177 248 168 248 90 249 168 249 88 249 178 250 98 250 100 250 100 251 179 251 178 251 101 252 179 252 100 252 101 253 180 253 179 253 103 254 181 254 101 254 101 255 181 255 180 255 102 256 182 256 103 256 103 257 182 257 181 257 104 258 183 258 102 258 102 259 183 259 182 259 106 260 184 260 104 260 104 261 184 261 183 261 105 262 185 262 106 262 106 263 185 263 184 263 107 264 186 264 105 264 105 265 186 265 185 265 109 266 187 266 107 266 107 267 187 267 186 267 108 268 188 268 109 268 109 269 188 269 187 269 108 270 189 270 188 270 110 271 190 271 108 271 108 272 190 272 189 272 110 273 191 273 190 273 112 274 191 274 110 274 112 275 192 275 191 275 111 276 192 276 112 276 111 277 193 277 192 277 113 278 193 278 111 278 113 279 194 279 193 279 114 280 194 280 113 280 114 281 195 281 194 281 99 282 196 282 114 282 114 283 196 283 195 283 115 284 197 284 99 284 99 285 197 285 196 285 116 286 198 286 115 286 115 287 198 287 197 287 98 288 178 288 116 288 116 289 178 289 198 289 143 290 201 290 144 290 144 291 201 291 199 291 144 292 199 292 145 292 145 293 199 293 200 293 145 294 200 294 146 294 142 295 203 295 143 295 143 296 203 296 201 296 139 297 206 297 140 297 140 298 206 298 202 298 140 299 202 299 141 299 141 300 202 300 142 300 142 301 202 301 203 301 200 302 204 302 146 302 146 303 204 303 147 303 147 304 204 304 148 304 148 305 204 305 205 305 148 306 205 306 139 306 139 307 205 307 206 307 156 308 210 308 157 308 157 309 210 309 207 309 157 310 207 310 208 310 157 311 208 311 158 311 154 312 209 312 155 312 155 313 209 313 210 313 155 314 210 314 156 314 152 315 211 315 153 315 153 316 211 316 212 316 153 317 212 317 154 317 154 318 212 318 209 318 158 319 208 319 149 319 149 320 208 320 213 320 149 321 213 321 150 321 150 322 213 322 214 322 150 323 214 323 151 323 151 324 214 324 215 324 151 325 215 325 152 325 152 326 215 326 211 326 162 327 216 327 163 327 163 328 216 328 164 328 164 329 216 329 217 329 164 330 217 330 165 330 165 331 217 331 218 331 165 332 218 332 166 332 160 333 219 333 161 333 161 334 219 334 220 334 161 335 220 335 221 335 161 336 221 336 162 336 162 337 221 337 216 337 160 338 222 338 219 338 218 339 223 339 166 339 166 340 223 340 167 340 167 341 223 341 224 341 167 342 224 342 159 342 159 343 224 343 160 343 160 344 224 344 222 344 176 345 225 345 177 345 177 346 225 346 226 346 173 347 232 347 174 347 174 348 232 348 227 348 174 349 227 349 175 349 175 350 227 350 228 350 175 351 228 351 176 351 176 352 228 352 225 352 170 353 229 353 230 353 170 354 230 354 171 354 171 355 230 355 231 355 171 356 231 356 172 356 172 357 231 357 173 357 173 358 231 358 232 358 177 359 226 359 168 359 168 360 226 360 233 360 168 361 233 361 169 361 169 362 233 362 229 362 169 363 229 363 170 363 189 364 190 364 234 364 234 365 190 365 235 365 235 366 190 366 191 366 235 367 191 367 236 367 191 368 192 368 236 368 192 369 193 369 236 369 236 370 193 370 237 370 193 371 194 371 237 371 237 372 194 372 195 372 237 373 195 373 238 373 195 374 196 374 238 374 238 375 196 375 239 375 196 376 197 376 239 376 239 377 197 377 240 377 240 378 197 378 198 378 240 379 198 379 241 379 198 380 178 380 241 380 241 381 178 381 242 381 242 382 178 382 243 382 178 383 179 383 243 383 243 384 179 384 244 384 244 385 179 385 180 385 180 386 181 386 244 386 244 387 181 387 245 387 181 388 182 388 245 388 245 389 182 389 246 389 246 390 182 390 183 390 246 391 183 391 247 391 247 392 183 392 184 392 247 393 184 393 185 393 247 394 185 394 248 394 248 395 185 395 186 395 248 396 186 396 249 396 249 397 186 397 250 397 250 398 186 398 187 398 250 399 187 399 188 399 250 400 188 400 251 400 251 401 188 401 189 401 251 402 189 402 234 402 252 403 117 403 253 403 253 404 117 404 118 404 253 405 118 405 254 405 254 406 118 406 119 406 254 407 119 407 255 407 255 408 119 408 256 408 256 409 119 409 120 409 256 410 120 410 257 410 257 411 120 411 121 411 257 412 121 412 258 412 258 413 121 413 122 413 258 414 122 414 259 414 259 415 122 415 123 415 259 416 123 416 260 416 260 417 123 417 261 417 261 418 123 418 124 418 261 419 124 419 125 419 261 420 125 420 262 420 262 421 125 421 263 421 263 422 125 422 126 422 263 423 126 423 264 423 264 424 126 424 127 424 264 425 127 425 265 425 265 426 127 426 128 426 265 427 128 427 252 427 252 428 128 428 117 428 211 429 129 429 138 429 204 430 130 430 129 430 204 431 129 431 211 431 204 432 131 432 130 432 137 433 266 433 211 433 137 434 211 434 138 434 266 435 137 435 136 435 268 436 132 436 131 436 268 437 131 437 204 437 135 438 269 438 136 438 136 439 269 439 266 439 134 440 269 440 135 440 270 441 132 441 268 441 134 442 270 442 269 442 134 443 133 443 270 443 270 444 133 444 132 444 205 445 245 445 246 445 205 446 246 446 206 446 206 447 246 447 247 447 245 448 205 448 244 448 244 449 205 449 204 449 203 450 271 450 201 450 206 451 247 451 202 451 202 452 247 452 272 452 203 453 202 453 271 453 271 454 202 454 272 454 200 455 268 455 204 455 268 456 199 456 201 456 200 457 199 457 268 457 213 458 208 458 273 458 215 459 214 459 240 459 240 460 214 460 239 460 273 461 237 461 213 461 239 462 214 462 213 462 239 463 213 463 238 463 238 464 213 464 237 464 209 465 212 465 267 465 267 466 212 466 266 466 266 467 212 467 211 467 274 468 210 468 209 468 274 469 209 469 267 469 273 470 208 470 275 470 275 471 208 471 207 471 275 472 207 472 274 472 274 473 207 473 210 473 222 474 224 474 276 474 276 475 224 475 223 475 276 476 223 476 277 476 220 477 219 477 222 477 247 478 216 478 272 478 272 479 216 479 278 479 278 480 216 480 221 480 278 481 221 481 279 481 279 482 221 482 220 482 277 483 223 483 218 483 250 484 218 484 249 484 249 485 218 485 217 485 249 486 217 486 248 486 248 487 217 487 247 487 247 488 217 488 216 488 281 489 229 489 233 489 281 490 233 490 280 490 280 491 233 491 226 491 273 492 232 492 237 492 237 493 232 493 236 493 236 494 232 494 231 494 277 495 230 495 229 495 236 496 231 496 235 496 235 497 231 497 230 497 225 498 228 498 282 498 282 499 228 499 227 499 282 500 227 500 273 500 273 501 227 501 232 501 280 502 226 502 225 502 281 503 277 503 229 503 235 504 230 504 277 504 235 505 277 505 234 505 218 506 250 506 277 506 250 507 251 507 277 507 277 508 251 508 234 508 241 509 211 509 240 509 240 510 211 510 215 510 244 511 204 511 243 511 211 512 241 512 242 512 211 513 242 513 204 513 204 514 242 514 243 514 283 515 266 515 284 515 285 516 267 516 283 516 283 517 267 517 266 517 286 518 267 518 285 518 286 519 274 519 267 519 287 520 275 520 288 520 288 521 275 521 289 521 289 522 275 522 274 522 289 523 274 523 286 523 287 524 273 524 275 524 287 525 290 525 273 525 273 526 290 526 282 526 282 527 290 527 291 527 282 528 291 528 292 528 282 529 292 529 225 529 293 530 280 530 294 530 294 531 280 531 292 531 292 532 280 532 225 532 293 533 281 533 280 533 281 534 293 534 295 534 281 535 295 535 277 535 277 536 295 536 296 536 277 537 296 537 276 537 276 538 296 538 297 538 276 539 297 539 222 539 298 540 278 540 299 540 299 541 278 541 279 541 299 542 279 542 300 542 300 543 279 543 220 543 300 544 220 544 297 544 297 545 220 545 222 545 301 546 271 546 302 546 302 547 271 547 272 547 302 548 272 548 303 548 303 549 272 549 298 549 298 550 272 550 278 550 304 551 201 551 301 551 301 552 201 552 271 552 305 553 268 553 304 553 304 554 268 554 201 554 306 555 268 555 305 555 284 556 266 556 269 556 284 557 269 557 307 557 307 558 269 558 270 558 307 559 270 559 308 559 308 560 270 560 306 560 306 561 270 561 268 561 309 562 308 562 310 562 310 563 308 563 306 563 310 564 306 564 311 564 311 565 306 565 305 565 311 566 305 566 304 566 311 567 304 567 312 567 312 568 304 568 301 568 312 569 301 569 302 569 312 570 302 570 313 570 313 571 302 571 303 571 313 572 303 572 314 572 314 573 303 573 298 573 314 574 298 574 315 574 315 575 298 575 299 575 315 576 299 576 316 576 316 577 299 577 300 577 316 578 300 578 317 578 317 579 300 579 297 579 317 580 297 580 318 580 318 581 297 581 296 581 318 582 296 582 319 582 319 583 296 583 295 583 319 584 295 584 320 584 320 585 295 585 293 585 320 586 293 586 321 586 321 587 293 587 322 587 322 588 293 588 294 588 322 589 294 589 323 589 323 590 294 590 292 590 323 591 292 591 324 591 324 592 292 592 291 592 324 593 291 593 325 593 325 594 291 594 290 594 325 595 290 595 326 595 326 596 290 596 287 596 326 597 287 597 327 597 327 598 287 598 288 598 327 599 288 599 289 599 327 600 289 600 328 600 328 601 289 601 329 601 329 602 289 602 286 602 329 603 286 603 285 603 329 604 285 604 330 604 330 605 285 605 283 605 330 606 283 606 284 606 330 607 284 607 331 607 331 608 284 608 307 608 331 609 307 609 309 609 309 610 307 610 308 610 259 611 260 611 332 611 259 612 332 612 258 612 258 613 332 613 257 613 256 614 257 614 333 614 256 615 333 615 255 615 255 616 333 616 334 616 255 617 334 617 254 617 254 618 334 618 335 618 254 619 335 619 253 619 253 620 335 620 252 620 252 621 335 621 336 621 252 622 336 622 265 622 265 623 336 623 337 623 265 624 337 624 264 624 264 625 337 625 338 625 264 626 338 626 263 626 263 627 338 627 262 627 262 628 338 628 339 628 262 629 339 629 261 629 261 630 339 630 340 630 261 631 340 631 260 631 326 632 341 632 325 632 325 633 341 633 342 633 325 634 342 634 324 634 324 635 342 635 343 635 324 636 343 636 323 636 323 637 343 637 344 637 323 638 344 638 322 638 322 639 344 639 321 639 321 640 344 640 345 640 312 641 346 641 311 641 311 642 346 642 347 642 311 643 347 643 310 643 310 644 347 644 348 644 310 645 348 645 309 645 309 646 348 646 331 646 331 647 348 647 349 647 331 648 349 648 330 648 330 649 349 649 350 649 321 650 345 650 320 650 320 651 345 651 351 651 320 652 351 652 319 652 319 653 351 653 318 653 318 654 351 654 352 654 318 655 352 655 317 655 317 656 352 656 353 656 317 657 353 657 316 657 330 658 350 658 354 658 330 659 354 659 329 659 329 660 354 660 328 660 328 661 354 661 355 661 328 662 355 662 327 662 327 663 355 663 356 663 327 664 356 664 326 664 326 665 356 665 341 665 353 666 357 666 316 666 316 667 357 667 315 667 315 668 357 668 314 668 314 669 357 669 358 669 314 670 358 670 313 670 313 671 358 671 359 671 313 672 359 672 312 672 312 673 359 673 346 673 421 674 420 674 422 674 422 675 420 675 423 675 477 676 476 676 420 676 420 677 476 677 478 677 478 678 479 678 420 678 479 679 423 679 420 679 483 680 417 680 480 680 417 681 483 681 418 681 417 682 418 682 481 682 481 683 419 683 417 683 417 684 419 684 484 684 417 685 484 685 482 685 424 686 348 686 425 686 425 687 348 687 347 687 425 688 347 688 426 688 426 689 347 689 346 689 426 690 346 690 427 690 427 691 346 691 428 691 428 692 346 692 359 692 428 693 359 693 429 693 429 694 359 694 358 694 429 695 358 695 430 695 430 696 358 696 431 696 431 697 358 697 357 697 431 698 357 698 432 698 432 699 357 699 433 699 433 700 357 700 353 700 433 701 353 701 434 701 434 702 353 702 435 702 435 703 353 703 352 703 435 704 352 704 351 704 435 705 351 705 436 705 436 706 351 706 437 706 437 707 351 707 345 707 437 708 345 708 438 708 438 709 345 709 344 709 438 710 344 710 439 710 439 711 344 711 440 711 440 712 344 712 343 712 440 713 343 713 441 713 441 714 343 714 342 714 441 715 342 715 442 715 442 716 342 716 341 716 442 717 341 717 443 717 443 718 341 718 356 718 443 719 356 719 444 719 444 720 356 720 355 720 444 721 355 721 445 721 445 722 355 722 354 722 445 723 354 723 446 723 446 724 354 724 447 724 447 725 354 725 350 725 447 726 350 726 448 726 448 727 350 727 449 727 449 728 350 728 349 728 449 729 349 729 450 729 450 730 349 730 348 730 450 731 348 731 424 731 451 732 452 732 416 732 416 733 452 733 361 733 361 734 452 734 453 734 361 735 453 735 360 735 360 736 453 736 362 736 362 734 453 734 363 734 363 734 453 734 454 734 363 734 454 734 364 734 364 734 454 734 365 734 365 734 454 734 455 734 365 737 455 737 367 737 367 738 455 738 366 738 366 739 455 739 456 739 366 740 456 740 368 740 368 741 456 741 369 741 369 742 456 742 457 742 369 743 457 743 370 743 370 744 457 744 371 744 371 745 457 745 458 745 371 746 458 746 372 746 372 747 458 747 374 747 374 748 458 748 459 748 374 749 459 749 373 749 373 750 459 750 375 750 375 751 459 751 376 751 376 752 459 752 460 752 376 753 460 753 377 753 377 754 460 754 378 754 378 755 460 755 461 755 378 756 461 756 379 756 379 757 461 757 381 757 381 758 461 758 462 758 381 759 462 759 380 759 380 734 462 734 382 734 382 760 462 760 383 760 383 734 462 734 463 734 383 734 463 734 384 734 384 734 463 734 386 734 386 734 463 734 464 734 386 761 464 761 385 761 385 734 464 734 387 734 387 762 464 762 465 762 387 763 465 763 388 763 388 734 465 734 389 734 389 734 465 734 390 734 390 734 465 734 466 734 390 764 466 764 391 764 391 734 466 734 393 734 393 734 466 734 467 734 393 765 467 765 392 765 392 766 467 766 394 766 394 734 467 734 395 734 395 734 467 734 468 734 395 767 468 767 396 767 396 768 468 768 397 768 397 734 468 734 398 734 398 734 468 734 469 734 398 769 469 769 400 769 400 734 469 734 399 734 399 734 469 734 470 734 399 734 470 734 401 734 401 770 470 770 402 770 402 734 470 734 471 734 402 771 471 771 403 771 403 734 471 734 405 734 405 734 471 734 472 734 405 772 472 772 404 772 404 734 472 734 406 734 406 734 472 734 407 734 407 734 472 734 473 734 407 734 473 734 408 734 408 773 473 773 409 773 409 774 473 774 410 774 410 734 473 734 474 734 410 734 474 734 412 734 412 734 474 734 411 734 411 734 474 734 475 734 411 775 475 775 413 775 413 734 475 734 414 734 414 734 475 734 451 734 414 734 451 734 415 734 415 734 451 734 416 734 337 776 480 776 338 776 480 777 337 777 336 777 338 778 480 778 417 778 339 779 477 779 340 779 335 780 480 780 336 780 477 781 420 781 333 781 477 782 260 782 340 782 260 783 477 783 332 783 417 784 339 784 338 784 420 785 334 785 333 785 477 786 333 786 257 786 477 787 257 787 332 787 477 788 339 788 417 788 335 789 334 789 480 789 480 790 334 790 420 790 457 791 456 791 420 791 480 792 448 792 449 792 480 793 449 793 483 793 449 794 450 794 418 794 449 795 418 795 483 795 450 796 481 796 418 796 424 797 419 797 450 797 450 798 419 798 481 798 484 799 419 799 425 799 425 800 419 800 424 800 417 801 482 801 426 801 426 802 482 802 425 802 425 803 482 803 484 803 460 804 477 804 461 804 461 805 477 805 417 805 460 806 476 806 477 806 459 807 478 807 460 807 460 808 478 808 476 808 459 809 479 809 478 809 423 810 479 810 459 810 458 811 423 811 459 811 458 812 422 812 423 812 457 813 422 813 458 813 457 814 420 814 421 814 457 815 421 815 422 815 417 816 426 816 427 816 417 817 427 817 461 817 461 818 427 818 428 818 461 819 428 819 462 819 462 820 428 820 429 820 462 821 429 821 463 821 463 822 429 822 430 822 463 823 430 823 464 823 464 824 430 824 431 824 464 825 431 825 465 825 465 826 431 826 432 826 465 827 432 827 466 827 466 828 432 828 433 828 466 829 433 829 467 829 467 830 433 830 434 830 467 831 434 831 435 831 467 832 435 832 468 832 468 833 435 833 436 833 468 834 436 834 469 834 469 835 436 835 470 835 470 836 436 836 437 836 470 837 437 837 471 837 471 838 437 838 438 838 471 839 438 839 472 839 472 840 438 840 439 840 472 841 439 841 440 841 472 842 440 842 473 842 473 843 440 843 441 843 473 844 441 844 474 844 474 845 441 845 475 845 475 846 441 846 442 846 475 847 442 847 451 847 451 848 442 848 443 848 451 849 443 849 452 849 452 850 443 850 444 850 452 851 444 851 453 851 453 852 444 852 445 852 453 853 445 853 454 853 454 854 445 854 446 854 454 855 446 855 455 855 455 856 446 856 447 856 455 857 447 857 456 857 456 858 447 858 448 858 456 859 448 859 480 859 456 860 480 860 420 860</p>
|
78 |
+
</polylist>
|
79 |
+
</mesh>
|
80 |
+
</geometry>
|
81 |
+
</library_geometries>
|
82 |
+
<library_controllers/>
|
83 |
+
<library_visual_scenes>
|
84 |
+
<visual_scene id="Scene" name="Scene">
|
85 |
+
<node id="eSeries_UR5e_058" name="eSeries_UR5e_058" type="NODE">
|
86 |
+
<matrix sid="transform">-9.99987e-4 0 -3.25837e-10 0 -3.25837e-10 4.37108e-11 9.99987e-4 0 0 9.99987e-4 -4.37108e-11 0 0 0 0 1</matrix>
|
87 |
+
<instance_geometry url="#eSeries_UR5e_058-mesh" name="eSeries_UR5e_058">
|
88 |
+
<bind_material>
|
89 |
+
<technique_common>
|
90 |
+
<instance_material symbol="LinkGrey-material" target="#LinkGrey-material"/>
|
91 |
+
</technique_common>
|
92 |
+
</bind_material>
|
93 |
+
</instance_geometry>
|
94 |
+
</node>
|
95 |
+
</visual_scene>
|
96 |
+
</library_visual_scenes>
|
97 |
+
<scene>
|
98 |
+
<instance_visual_scene url="#Scene"/>
|
99 |
+
</scene>
|
100 |
+
</COLLADA>
|