loadpath 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. loadpath/README.md +294 -0
  2. loadpath/SKILL.md +584 -0
  3. loadpath/__init__.py +17 -0
  4. loadpath/__main__.py +1202 -0
  5. loadpath/am.py +316 -0
  6. loadpath/amgfast.py +326 -0
  7. loadpath/assembly.py +985 -0
  8. loadpath/benchmarks/__init__.py +0 -0
  9. loadpath/benchmarks/beams.py +266 -0
  10. loadpath/benchmarks/cases/ge-bracket.json +380 -0
  11. loadpath/benchmarks/evaluate.py +172 -0
  12. loadpath/benchmarks/mechanisms.py +416 -0
  13. loadpath/benchmarks/problems.py +140 -0
  14. loadpath/benchmarks/reference/bridge-3d.top3d.npz +0 -0
  15. loadpath/benchmarks/reference/cantilever-3d.top3d.npz +0 -0
  16. loadpath/benchmarks/reference/lbracket-2d.top88-ft2.npz +0 -0
  17. loadpath/benchmarks/reference/mbb-2d.top88-ft1.npz +0 -0
  18. loadpath/benchmarks/reference/mbb-2d.top88-ft2.npz +0 -0
  19. loadpath/benchmarks/reference.py +138 -0
  20. loadpath/benchmarks/run.py +301 -0
  21. loadpath/brep.py +1470 -0
  22. loadpath/bucklingopt.py +300 -0
  23. loadpath/buildsim.py +1490 -0
  24. loadpath/cadimport.py +904 -0
  25. loadpath/calibration.py +885 -0
  26. loadpath/cavities.py +211 -0
  27. loadpath/checks/__init__.py +0 -0
  28. loadpath/checks/dfm.py +354 -0
  29. loadpath/checks/exchanger.py +7 -0
  30. loadpath/checks/fea.py +212 -0
  31. loadpath/checks/fit.py +475 -0
  32. loadpath/checks/networks.py +260 -0
  33. loadpath/checks/opening.py +67 -0
  34. loadpath/checks/sdf_kit.py +7 -0
  35. loadpath/conjugate.py +267 -0
  36. loadpath/constrained.py +329 -0
  37. loadpath/contact.py +691 -0
  38. loadpath/coopt.py +342 -0
  39. loadpath/cores.py +163 -0
  40. loadpath/crease.py +1138 -0
  41. loadpath/critic.py +212 -0
  42. loadpath/crosscheck.py +1107 -0
  43. loadpath/cutcell.py +510 -0
  44. loadpath/data/lattice_buckling.json +439 -0
  45. loadpath/data/lattice_tensors.json +27449 -0
  46. loadpath/data/published_experiments.json +71 -0
  47. loadpath/decimate.py +177 -0
  48. loadpath/delivery.py +190 -0
  49. loadpath/directions.py +262 -0
  50. loadpath/domain.py +630 -0
  51. loadpath/drains.py +615 -0
  52. loadpath/durability.py +413 -0
  53. loadpath/editor.html +3135 -0
  54. loadpath/editor.py +610 -0
  55. loadpath/escape.py +354 -0
  56. loadpath/evals/__init__.py +0 -0
  57. loadpath/evals/baselines/coarse.json +1543 -0
  58. loadpath/evals/baselines/full.json +1497 -0
  59. loadpath/evals/brief_kinds/__init__.py +1 -0
  60. loadpath/evals/brief_kinds/heatx.py +387 -0
  61. loadpath/evals/brief_kinds/lattice.py +571 -0
  62. loadpath/evals/brief_kinds/multimat.py +593 -0
  63. loadpath/evals/briefs/assets/bracket.step +1201 -0
  64. loadpath/evals/briefs/assets/desk_arm.urdf +22 -0
  65. loadpath/evals/briefs/assets/elbow-gearbox.stl +0 -0
  66. loadpath/evals/briefs/assets/motor-body.stl +0 -0
  67. loadpath/evals/briefs/assets/sketch.png +0 -0
  68. loadpath/evals/briefs/base-adapter-fdm.json +492 -0
  69. loadpath/evals/briefs/bell-crank-lpbf.json +180 -0
  70. loadpath/evals/briefs/belt-tensioner-fdm.json +151 -0
  71. loadpath/evals/briefs/camera-boom-mjf.json +339 -0
  72. loadpath/evals/briefs/camera-mount-pla.json +203 -0
  73. loadpath/evals/briefs/coolant-isolator-petg.json +100 -0
  74. loadpath/evals/briefs/elbow-bearing-bracket-sls.json +300 -0
  75. loadpath/evals/briefs/elbow-gearbox-forearm-mjf.json +558 -0
  76. loadpath/evals/briefs/elbow-link-fatigue-fdm.json +251 -0
  77. loadpath/evals/briefs/elbow-stop-pad-tpu.json +39 -0
  78. loadpath/evals/briefs/forearm-fdm.json +146 -0
  79. loadpath/evals/briefs/forearm-servo-link-fdm.json +327 -0
  80. loadpath/evals/briefs/grip-pad-finger-mm.json +354 -0
  81. loadpath/evals/briefs/gripper-bracket-creep-fdm.json +340 -0
  82. loadpath/evals/briefs/gripper-finger-fdm.json +155 -0
  83. loadpath/evals/briefs/gripper-jaw-fatigue-mjf.json +328 -0
  84. loadpath/evals/briefs/gripper-palm-fdm.json +715 -0
  85. loadpath/evals/briefs/hot-stepper-mount-asa-fdm.json +471 -0
  86. loadpath/evals/briefs/hpu-oil-cooler-lpbf.json +121 -0
  87. loadpath/evals/briefs/isolated-camera-mount-mm.json +675 -0
  88. loadpath/evals/briefs/kart-charge-cooler-lpbf.json +93 -0
  89. loadpath/evals/briefs/lighten-step-bracket.json +220 -0
  90. loadpath/evals/briefs/nema17-mount-stl.json +429 -0
  91. loadpath/evals/briefs/pillow-block-sls.json +220 -0
  92. loadpath/evals/briefs/polyjet-fingertip-mm.json +305 -0
  93. loadpath/evals/briefs/rod-hook-pla.json +154 -0
  94. loadpath/evals/briefs/sensor-arm-resin.json +150 -0
  95. loadpath/evals/briefs/shelf-bracket-pla.json +158 -0
  96. loadpath/evals/briefs/shoulder-riser-mjf.json +487 -0
  97. loadpath/evals/briefs/sketch-clevis.json +229 -0
  98. loadpath/evals/briefs/spring-bracket-pacf.json +294 -0
  99. loadpath/evals/briefs/tool-flange-ti64.json +280 -0
  100. loadpath/evals/briefs/tray-arm-lattice-fdm.json +260 -0
  101. loadpath/evals/briefs/turret-fdm.json +281 -0
  102. loadpath/evals/briefs/upper-arm-sls.json +179 -0
  103. loadpath/evals/briefs/urdf-forearm.json +233 -0
  104. loadpath/evals/briefs/wrist-link-mjf.json +278 -0
  105. loadpath/evals/briefs/wrist-yoke-mjf.json +245 -0
  106. loadpath/evals/briefs.py +393 -0
  107. loadpath/evals/cases/arm-link-cast.json +157 -0
  108. loadpath/evals/cases/arm-link-driven.json +171 -0
  109. loadpath/evals/cases/arm-link-sandwich.json +315 -0
  110. loadpath/evals/cases/arm-link.json +111 -0
  111. loadpath/evals/cases/bell-crank.json +116 -0
  112. loadpath/evals/cases/grip-turret.json +479 -0
  113. loadpath/evals/cases/grip-upper-arm.json +253 -0
  114. loadpath/evals/cases/grip-wrist-link-mjf.json +929 -0
  115. loadpath/evals/cases/grip-wrist-yoke.json +831 -0
  116. loadpath/evals/cases/lpbf-intercooler-core.json +59 -0
  117. loadpath/evals/cases/mbb-beam.json +61 -0
  118. loadpath/evals/cases/motor-body.stl +0 -0
  119. loadpath/evals/cases/motor-mount.json +265 -0
  120. loadpath/evals/cases/printed-hook.json +77 -0
  121. loadpath/evals/cases/wall-bracket-fasteners.json +125 -0
  122. loadpath/evals/cases/wall-bracket.json +126 -0
  123. loadpath/evals/corpus.py +179 -0
  124. loadpath/evals/pareto.py +90 -0
  125. loadpath/evals/run.py +860 -0
  126. loadpath/examples/arm-link.json +25 -0
  127. loadpath/examples/bumpered-bracket-compression.json +225 -0
  128. loadpath/examples/bumpered-bracket-lattice.json +204 -0
  129. loadpath/examples/bumpered-bracket.json +34 -0
  130. loadpath/examples/gripper-finger-mm.json +185 -0
  131. loadpath/examples/heat-exchanger-counterflow.json +21 -0
  132. loadpath/examples/heat-exchanger-crossflow-tuned.json +48 -0
  133. loadpath/examples/heat-exchanger-crossflow.json +20 -0
  134. loadpath/examples/pedal-lattice.json +23 -0
  135. loadpath/examples/pressure-plenum.json +12 -0
  136. loadpath/examples/shelf-bracket.json +27 -0
  137. loadpath/exchanger.py +831 -0
  138. loadpath/fasteners.py +199 -0
  139. loadpath/fem.py +668 -0
  140. loadpath/femops.py +70 -0
  141. loadpath/fieldjit.py +981 -0
  142. loadpath/fieldops.py +119 -0
  143. loadpath/fields.py +3697 -0
  144. loadpath/fieldtorch.py +464 -0
  145. loadpath/flow.py +984 -0
  146. loadpath/flowtopo.py +300 -0
  147. loadpath/gpu.py +521 -0
  148. loadpath/heatx.py +1067 -0
  149. loadpath/heatx_thermal.py +432 -0
  150. loadpath/homogenized.py +886 -0
  151. loadpath/ibrep.py +552 -0
  152. loadpath/impact.py +693 -0
  153. loadpath/infill.py +376 -0
  154. loadpath/interface_library.py +340 -0
  155. loadpath/interlock.py +186 -0
  156. loadpath/isolator.py +149 -0
  157. loadpath/knn.py +204 -0
  158. loadpath/lattice.py +1065 -0
  159. loadpath/lattice3mf.py +760 -0
  160. loadpath/lattice_buckling.py +245 -0
  161. loadpath/lattice_grade.py +325 -0
  162. loadpath/lattice_orient.py +595 -0
  163. loadpath/lattice_print.py +159 -0
  164. loadpath/lattice_tensors.py +558 -0
  165. loadpath/latticestep.py +1210 -0
  166. loadpath/manufacture.py +446 -0
  167. loadpath/material_library.py +489 -0
  168. loadpath/materials.py +144 -0
  169. loadpath/mcp_server.py +786 -0
  170. loadpath/mechanism.py +218 -0
  171. loadpath/mechanism_nl.py +811 -0
  172. loadpath/meshops.py +452 -0
  173. loadpath/mg.py +853 -0
  174. loadpath/mma.py +214 -0
  175. loadpath/modal.py +210 -0
  176. loadpath/multimat.py +1788 -0
  177. loadpath/narrowband.py +418 -0
  178. loadpath/nlkernel.py +241 -0
  179. loadpath/nonlinear.py +1095 -0
  180. loadpath/orient.py +334 -0
  181. loadpath/porous.py +994 -0
  182. loadpath/pressure.py +171 -0
  183. loadpath/preview.py +335 -0
  184. loadpath/printcheck.py +263 -0
  185. loadpath/printsetup.py +207 -0
  186. loadpath/processcheck.py +376 -0
  187. loadpath/quick.py +113 -0
  188. loadpath/recall.py +406 -0
  189. loadpath/reconstruct.py +797 -0
  190. loadpath/render.py +436 -0
  191. loadpath/resolved.py +189 -0
  192. loadpath/schema.py +1701 -0
  193. loadpath/sdf_kit.py +843 -0
  194. loadpath/selfx.py +292 -0
  195. loadpath/shapes.py +584 -0
  196. loadpath/sharp.py +717 -0
  197. loadpath/simp.py +1170 -0
  198. loadpath/sizing.py +312 -0
  199. loadpath/slicer.py +321 -0
  200. loadpath/spec.py +1072 -0
  201. loadpath/step.py +806 -0
  202. loadpath/struts.py +639 -0
  203. loadpath/study.py +1937 -0
  204. loadpath/tasks.py +822 -0
  205. loadpath/thermal.py +1691 -0
  206. loadpath/threemf.py +487 -0
  207. loadpath/tune.py +437 -0
  208. loadpath/validation.py +145 -0
  209. loadpath/verify.py +1215 -0
  210. loadpath/viewer.html +694 -0
  211. loadpath/viewer.py +446 -0
  212. loadpath/viscoelastic.py +106 -0
  213. loadpath/voxelprint.py +582 -0
  214. loadpath/voxels.py +402 -0
  215. loadpath-0.1.1.dist-info/METADATA +319 -0
  216. loadpath-0.1.1.dist-info/RECORD +220 -0
  217. loadpath-0.1.1.dist-info/WHEEL +5 -0
  218. loadpath-0.1.1.dist-info/entry_points.txt +2 -0
  219. loadpath-0.1.1.dist-info/licenses/LICENSE +21 -0
  220. loadpath-0.1.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,260 @@
1
+ {
2
+ "id": "tray-arm-lattice-fdm",
3
+ "kind": "lattice",
4
+ "brief": "A cantilever arm that holds a small cable tray off the side of my GRIP robot's base, in PETG on an\nFDM printer. The arm runs along +X from the base's side wall at x = 0 to x = 80; it is 30 mm wide\n(y = -15 to 15) and 40 mm tall (z = 0 to 40), and it prints standing just like that, z up, with its\nbottom face on the bed. At x = 0 a 4 mm plate (x = 0 to 4, the full 30 x 40) bolts to the base with\ntwo M4 screws along X at (y, z) = (0, 10) and (0, 30); their heads are on the arm side, so leave\n8 mm diameter clear for each from x = 4 to x = 12. At the far end a 6 mm plate (x = 74 to 80) takes\ntwo M3 heat-set inserts along X at (y, z) = (-8, 30) and (8, 30), in 4 mm holes from x = 73.5\noutward. The tray pushes 60 N straight down on the inserts, and if someone bumps it, 20 N sideways\n(along Y) with 30 N down. Safety factor 2. Between the plates I want an open strut lattice, not a\nsolid web, under 55 g, and it has to print without any support: my printer bridges about 8 mm\ncleanly and nothing longer.",
5
+ "attachments": [],
6
+ "tags": [
7
+ "fdm",
8
+ "lattice",
9
+ "struts",
10
+ "support-free",
11
+ "arm"
12
+ ],
13
+ "gold": {
14
+ "designSpace": [
15
+ {
16
+ "type": "box",
17
+ "min": [
18
+ 0,
19
+ -15,
20
+ 0
21
+ ],
22
+ "max": [
23
+ 80,
24
+ 15,
25
+ 40
26
+ ]
27
+ }
28
+ ],
29
+ "preserve": [
30
+ {
31
+ "id": "wall-plate",
32
+ "shape": {
33
+ "type": "box",
34
+ "min": [
35
+ 0,
36
+ -15,
37
+ 0
38
+ ],
39
+ "max": [
40
+ 4,
41
+ 15,
42
+ 40
43
+ ]
44
+ }
45
+ },
46
+ {
47
+ "id": "tip-plate",
48
+ "shape": {
49
+ "type": "box",
50
+ "min": [
51
+ 74,
52
+ -15,
53
+ 0
54
+ ],
55
+ "max": [
56
+ 80,
57
+ 15,
58
+ 40
59
+ ]
60
+ }
61
+ }
62
+ ],
63
+ "keepOut": [
64
+ {
65
+ "id": "m4",
66
+ "shape": {
67
+ "type": "union",
68
+ "shapes": [
69
+ {
70
+ "type": "cylinder",
71
+ "p0": [
72
+ -1,
73
+ 0,
74
+ 10
75
+ ],
76
+ "p1": [
77
+ 5,
78
+ 0,
79
+ 10
80
+ ],
81
+ "r": 2.2
82
+ },
83
+ {
84
+ "type": "cylinder",
85
+ "p0": [
86
+ -1,
87
+ 0,
88
+ 30
89
+ ],
90
+ "p1": [
91
+ 5,
92
+ 0,
93
+ 30
94
+ ],
95
+ "r": 2.2
96
+ }
97
+ ]
98
+ }
99
+ },
100
+ {
101
+ "id": "m4-heads",
102
+ "shape": {
103
+ "type": "union",
104
+ "shapes": [
105
+ {
106
+ "type": "cylinder",
107
+ "p0": [
108
+ 4,
109
+ 0,
110
+ 10
111
+ ],
112
+ "p1": [
113
+ 12,
114
+ 0,
115
+ 10
116
+ ],
117
+ "r": 4.0
118
+ },
119
+ {
120
+ "type": "cylinder",
121
+ "p0": [
122
+ 4,
123
+ 0,
124
+ 30
125
+ ],
126
+ "p1": [
127
+ 12,
128
+ 0,
129
+ 30
130
+ ],
131
+ "r": 4.0
132
+ }
133
+ ]
134
+ },
135
+ "bore": false
136
+ },
137
+ {
138
+ "id": "inserts",
139
+ "shape": {
140
+ "type": "union",
141
+ "shapes": [
142
+ {
143
+ "type": "cylinder",
144
+ "p0": [
145
+ 73.5,
146
+ -8,
147
+ 30
148
+ ],
149
+ "p1": [
150
+ 81,
151
+ -8,
152
+ 30
153
+ ],
154
+ "r": 2.0
155
+ },
156
+ {
157
+ "type": "cylinder",
158
+ "p0": [
159
+ 73.5,
160
+ 8,
161
+ 30
162
+ ],
163
+ "p1": [
164
+ 81,
165
+ 8,
166
+ 30
167
+ ],
168
+ "r": 2.0
169
+ }
170
+ ]
171
+ }
172
+ }
173
+ ],
174
+ "supports": [
175
+ {
176
+ "region": "m4"
177
+ },
178
+ {
179
+ "shape": {
180
+ "type": "box",
181
+ "min": [
182
+ -0.5,
183
+ -15,
184
+ 0
185
+ ],
186
+ "max": [
187
+ 0.3,
188
+ 15,
189
+ 40
190
+ ]
191
+ },
192
+ "fix": "x"
193
+ }
194
+ ],
195
+ "loadCases": [
196
+ {
197
+ "name": "tray",
198
+ "loads": [
199
+ {
200
+ "region": "inserts",
201
+ "force": [
202
+ 0,
203
+ 0,
204
+ -60
205
+ ]
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "name": "bumped",
211
+ "loads": [
212
+ {
213
+ "region": "inserts",
214
+ "force": [
215
+ 0,
216
+ 20,
217
+ -30
218
+ ]
219
+ }
220
+ ]
221
+ }
222
+ ],
223
+ "material": "petg",
224
+ "process": "fdm",
225
+ "printDirection": "+z",
226
+ "goal": {
227
+ "safetyFactor": 2
228
+ },
229
+ "name": "lattice-arm-fdm",
230
+ "resolution": {
231
+ "maxElements": 60000
232
+ }
233
+ },
234
+ "pass": {
235
+ "safetyFactor": 2,
236
+ "maxMass": 55,
237
+ "print": {
238
+ "direction": "+z",
239
+ "bridgeSpan": 8,
240
+ "maxSupportArea": 25
241
+ },
242
+ "cellular": {
243
+ "probe": {
244
+ "min": [
245
+ 14,
246
+ -13,
247
+ 4
248
+ ],
249
+ "max": [
250
+ 70,
251
+ 13,
252
+ 26
253
+ ]
254
+ },
255
+ "maxFill": 0.4,
256
+ "minWallsPer10mm": 0.4,
257
+ "minSeeThrough": 0.15
258
+ }
259
+ }
260
+ }
@@ -0,0 +1,281 @@
1
+ {
2
+ "id": "turret-fdm",
3
+ "brief": "The turret for my robot arm's base, PETG, printed with its base on the bed (layers along +Z).\nIt bolts down onto a slewing ring: the bottom of the part is a flat ring 70 mm OD / 50 mm ID,\n4 mm thick (z = 0 to 4), with six M3 clearance holes on a 60 mm bolt circle (the first one on\n+X, every 60 degrees). Above it, two uprights carry the shoulder shaft: a 10 mm shaft along Y at\nz = 50, passing through 10.2 mm holes at y = +25 and y = -25 (each upright has a boss at least\n4 mm of wall round its hole, 8 mm long along Y, from |y| = 21 to 29). The shoulder servo sits\nbetween the uprights: x = -20 to 20, y = -18 to 18, z = 8 to 62 stays clear. The part has to\nstay within a 40 mm radius of the Z axis and below z = 62. The arm it carries weighs 1.5 kg with\nits centre of mass 150 mm out along +X from the shaft; it also slews, with up to 1 N\u00b7m about Z.\nSafety factor 2.",
4
+ "attachments": [],
5
+ "tags": [
6
+ "arm",
7
+ "fdm",
8
+ "moment"
9
+ ],
10
+ "gold": {
11
+ "designSpace": [
12
+ {
13
+ "type": "cylinder",
14
+ "center": [
15
+ 0.0,
16
+ 0.0,
17
+ 31.0
18
+ ],
19
+ "axis": "z",
20
+ "length": 62.0,
21
+ "r": 40.0
22
+ }
23
+ ],
24
+ "preserve": [
25
+ {
26
+ "id": "base-ring",
27
+ "shape": {
28
+ "type": "cylinder",
29
+ "p0": [
30
+ 0.0,
31
+ 0.0,
32
+ 0.0
33
+ ],
34
+ "p1": [
35
+ 0.0,
36
+ 0.0,
37
+ 4.0
38
+ ],
39
+ "r": 35.0,
40
+ "rInner": 25.0
41
+ }
42
+ },
43
+ {
44
+ "id": "bosses",
45
+ "shape": {
46
+ "type": "union",
47
+ "shapes": [
48
+ {
49
+ "type": "cylinder",
50
+ "p0": [
51
+ 0.0,
52
+ 21.0,
53
+ 50.0
54
+ ],
55
+ "p1": [
56
+ 0.0,
57
+ 29.0,
58
+ 50.0
59
+ ],
60
+ "r": 9.1
61
+ },
62
+ {
63
+ "type": "cylinder",
64
+ "p0": [
65
+ 0.0,
66
+ -29.0,
67
+ 50.0
68
+ ],
69
+ "p1": [
70
+ 0.0,
71
+ -21.0,
72
+ 50.0
73
+ ],
74
+ "r": 9.1
75
+ }
76
+ ]
77
+ }
78
+ }
79
+ ],
80
+ "keepOut": [
81
+ {
82
+ "id": "ring-screws",
83
+ "shape": {
84
+ "type": "union",
85
+ "shapes": [
86
+ {
87
+ "type": "cylinder",
88
+ "p0": [
89
+ 30.0,
90
+ 0.0,
91
+ -1.0
92
+ ],
93
+ "p1": [
94
+ 30.0,
95
+ 0.0,
96
+ 8.0
97
+ ],
98
+ "r": 1.7
99
+ },
100
+ {
101
+ "type": "cylinder",
102
+ "p0": [
103
+ 15.000000000000004,
104
+ 25.980762113533157,
105
+ -1.0
106
+ ],
107
+ "p1": [
108
+ 15.000000000000004,
109
+ 25.980762113533157,
110
+ 8.0
111
+ ],
112
+ "r": 1.7
113
+ },
114
+ {
115
+ "type": "cylinder",
116
+ "p0": [
117
+ -14.999999999999993,
118
+ 25.98076211353316,
119
+ -1.0
120
+ ],
121
+ "p1": [
122
+ -14.999999999999993,
123
+ 25.98076211353316,
124
+ 8.0
125
+ ],
126
+ "r": 1.7
127
+ },
128
+ {
129
+ "type": "cylinder",
130
+ "p0": [
131
+ -30.0,
132
+ 3.67394039744206e-15,
133
+ -1.0
134
+ ],
135
+ "p1": [
136
+ -30.0,
137
+ 3.67394039744206e-15,
138
+ 8.0
139
+ ],
140
+ "r": 1.7
141
+ },
142
+ {
143
+ "type": "cylinder",
144
+ "p0": [
145
+ -15.000000000000014,
146
+ -25.980762113533153,
147
+ -1.0
148
+ ],
149
+ "p1": [
150
+ -15.000000000000014,
151
+ -25.980762113533153,
152
+ 8.0
153
+ ],
154
+ "r": 1.7
155
+ },
156
+ {
157
+ "type": "cylinder",
158
+ "p0": [
159
+ 15.000000000000004,
160
+ -25.980762113533157,
161
+ -1.0
162
+ ],
163
+ "p1": [
164
+ 15.000000000000004,
165
+ -25.980762113533157,
166
+ 8.0
167
+ ],
168
+ "r": 1.7
169
+ }
170
+ ]
171
+ },
172
+ "bore": false
173
+ },
174
+ {
175
+ "id": "shaft",
176
+ "shape": {
177
+ "type": "cylinder",
178
+ "p0": [
179
+ 0.0,
180
+ -45.0,
181
+ 50.0
182
+ ],
183
+ "p1": [
184
+ 0.0,
185
+ 45.0,
186
+ 50.0
187
+ ],
188
+ "r": 5.1
189
+ }
190
+ },
191
+ {
192
+ "id": "servo",
193
+ "shape": {
194
+ "type": "box",
195
+ "min": [
196
+ -20.0,
197
+ -18.0,
198
+ 8.0
199
+ ],
200
+ "max": [
201
+ 20.0,
202
+ 18.0,
203
+ 62.0
204
+ ]
205
+ },
206
+ "bore": false
207
+ }
208
+ ],
209
+ "supports": [
210
+ {
211
+ "region": "ring-screws"
212
+ },
213
+ {
214
+ "shape": {
215
+ "type": "cylinder",
216
+ "p0": [
217
+ 0.0,
218
+ 0.0,
219
+ -0.5
220
+ ],
221
+ "p1": [
222
+ 0.0,
223
+ 0.0,
224
+ 0.3
225
+ ],
226
+ "r": 35.0,
227
+ "rInner": 25.0
228
+ },
229
+ "fix": "z"
230
+ }
231
+ ],
232
+ "loadCases": [
233
+ {
234
+ "name": "arm",
235
+ "loads": [
236
+ {
237
+ "region": "shaft",
238
+ "force": [
239
+ 0,
240
+ 0,
241
+ -22.072499999999998
242
+ ],
243
+ "moment": [
244
+ 0,
245
+ -3310.8749999999995,
246
+ 0
247
+ ]
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ "name": "slew",
253
+ "loads": [
254
+ {
255
+ "region": "shaft",
256
+ "moment": [
257
+ 0,
258
+ 0,
259
+ 1000
260
+ ]
261
+ }
262
+ ]
263
+ }
264
+ ],
265
+ "material": "petg",
266
+ "process": {
267
+ "type": "fdm",
268
+ "buildDirection": "+z"
269
+ },
270
+ "goal": {
271
+ "safetyFactor": 2
272
+ },
273
+ "name": "turret-fdm",
274
+ "resolution": {
275
+ "maxElements": 60000
276
+ }
277
+ },
278
+ "pass": {
279
+ "safetyFactor": 2
280
+ }
281
+ }
@@ -0,0 +1,179 @@
1
+ {
2
+ "id": "upper-arm-sls",
3
+ "brief": "I need the upper arm for my desktop robot arm, printed in SLS PA12. It has a 608 bearing\n(22 mm OD, 7 mm wide) pressed in at each end, 140 mm apart, both bearing axes along Z. Put the\nshoulder bearing's center at the origin and the elbow bearing at x = 140. The arm can be up to\n36 mm tall (Y, centred) and 24 mm thick (Z, centred), and may extend 16 mm past each bearing\ncenter. Leave at least 3.5 mm of wall around each bearing seat, and keep a 10 mm diameter cable\nchannel clear along the arm's centreline from x = 30 to x = 110. The shoulder bearing is the\nfixed end. The elbow carries about 1 kg of forearm and payload and the arm moves quickly; it\nalso gets knocked sideways now and then (call it 8 N along Z at the elbow). Safety factor 3.",
4
+ "attachments": [],
5
+ "tags": [
6
+ "arm",
7
+ "sls"
8
+ ],
9
+ "gold": {
10
+ "designSpace": [
11
+ {
12
+ "type": "box",
13
+ "min": [
14
+ -16.0,
15
+ -18.0,
16
+ -12.0
17
+ ],
18
+ "max": [
19
+ 156.0,
20
+ 18.0,
21
+ 12.0
22
+ ]
23
+ }
24
+ ],
25
+ "preserve": [
26
+ {
27
+ "id": "shoulder-boss",
28
+ "shape": {
29
+ "type": "cylinder",
30
+ "center": [
31
+ 0.0,
32
+ 0.0,
33
+ 0.0
34
+ ],
35
+ "axis": "z",
36
+ "length": 7.0,
37
+ "r": 14.5
38
+ }
39
+ },
40
+ {
41
+ "id": "elbow-boss",
42
+ "shape": {
43
+ "type": "cylinder",
44
+ "center": [
45
+ 140.0,
46
+ 0.0,
47
+ 0.0
48
+ ],
49
+ "axis": "z",
50
+ "length": 7.0,
51
+ "r": 14.5
52
+ }
53
+ }
54
+ ],
55
+ "keepOut": [
56
+ {
57
+ "id": "shoulder-bearing",
58
+ "shape": {
59
+ "type": "cylinder",
60
+ "center": [
61
+ 0.0,
62
+ 0.0,
63
+ 0.0
64
+ ],
65
+ "axis": "z",
66
+ "length": 7.0,
67
+ "r": 11.0
68
+ }
69
+ },
70
+ {
71
+ "id": "elbow-bearing",
72
+ "shape": {
73
+ "type": "cylinder",
74
+ "center": [
75
+ 140.0,
76
+ 0.0,
77
+ 0.0
78
+ ],
79
+ "axis": "z",
80
+ "length": 7.0,
81
+ "r": 11.0
82
+ }
83
+ },
84
+ {
85
+ "id": "shafts",
86
+ "shape": {
87
+ "type": "union",
88
+ "shapes": [
89
+ {
90
+ "type": "cylinder",
91
+ "center": [
92
+ 0.0,
93
+ 0.0,
94
+ 0.0
95
+ ],
96
+ "axis": "z",
97
+ "length": 30.0,
98
+ "r": 6.0
99
+ },
100
+ {
101
+ "type": "cylinder",
102
+ "center": [
103
+ 140.0,
104
+ 0.0,
105
+ 0.0
106
+ ],
107
+ "axis": "z",
108
+ "length": 30.0,
109
+ "r": 6.0
110
+ }
111
+ ]
112
+ },
113
+ "bore": false
114
+ },
115
+ {
116
+ "id": "cable",
117
+ "shape": {
118
+ "type": "cylinder",
119
+ "p0": [
120
+ 30.0,
121
+ 0.0,
122
+ 0.0
123
+ ],
124
+ "p1": [
125
+ 110.0,
126
+ 0.0,
127
+ 0.0
128
+ ],
129
+ "r": 5.0
130
+ }
131
+ }
132
+ ],
133
+ "supports": [
134
+ {
135
+ "region": "shoulder-bearing"
136
+ }
137
+ ],
138
+ "loadCases": [
139
+ {
140
+ "name": "payload",
141
+ "loads": [
142
+ {
143
+ "region": "elbow-bearing",
144
+ "force": [
145
+ 0,
146
+ -14.715,
147
+ 0
148
+ ]
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ "name": "side",
154
+ "loads": [
155
+ {
156
+ "region": "elbow-bearing",
157
+ "force": [
158
+ 0,
159
+ 0,
160
+ 8
161
+ ]
162
+ }
163
+ ]
164
+ }
165
+ ],
166
+ "material": "pa12",
167
+ "process": "sls",
168
+ "goal": {
169
+ "safetyFactor": 3
170
+ },
171
+ "name": "upper-arm-sls",
172
+ "resolution": {
173
+ "maxElements": 60000
174
+ }
175
+ },
176
+ "pass": {
177
+ "safetyFactor": 3
178
+ }
179
+ }