Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG .gcode.3mf slice + re-importable project .3mf (H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo... - #35
Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG .gcode.3mf slice + re-importable project .3mf (H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo...#35sgbaird-alt with Copilot wants to merge 53 commits into
.gcode.3mf slice + re-importable project .3mf (H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo...#35Conversation
Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/007b0795-e819-4fd3-ad35-3f33a1d54826 Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
|
@copilot we want a bambu lab 3mf file, similar to what's described in vertical-cloud-lab/powder-doser#23 |
We've started this print. It's printing without supports.
|
We've taken the file produced and began to print it without supports. The 3mf file is uploaded in this branch. A picture of the finished print will be posted later. |
There was a problem hiding this comment.
Pull request overview
Adds a new cad/t3-prism/ subtree that provides a parametric OpenSCAD model of a canonical T3 tensegrity prism and a headless pipeline to render/check/slice it into Bambu-targeted PETG G-code, along with committed manufacturing artifacts (STL/PNG/G-code/3MF).
Changes:
- Added parametric T3-prism OpenSCAD source (
t3-prism.scad) with strut/cable connectivity and printable single-piece geometry. - Added a one-shot render/slice script (
render_print.sh) to produce STL, an isometric preview PNG, and two bed-size-specific G-code outputs. - Documented the CAD deliverable and wired it into the repo structure (
README.md,cad/t3-prism/README.md) and ignore rules (.gitignore), plus committed the generated artifacts.
Reviewed changes
Copilot reviewed 4 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Adds cad/t3-prism/ to the repository structure overview. |
| cad/t3-prism/t3-prism.scad | Parametric OpenSCAD definition of the single-piece T3-prism geometry. |
| cad/t3-prism/render_print.sh | Headless pipeline: SCAD→STL, admesh check, PNG preview, PrusaSlicer CLI G-code export for two Bambu bed sizes. |
| cad/t3-prism/README.md | Build/slice instructions, geometry/parameter documentation, and artifact links. |
| cad/t3-prism/t3-prism.stl | Committed printable mesh artifact. |
| cad/t3-prism/t3-prism-iso.png | Committed isometric preview image artifact. |
| cad/t3-prism/slices/t3-prism.X1C-PETG.gcode | Committed G-code targeting 256×256 Bambu-class beds. |
| cad/t3-prism/slices/t3-prism.A1mini-PETG.gcode | Committed G-code targeting 180×180 Bambu A1 mini bed. |
| cad/t3-prism/t3-prism.3mf | Committed 3MF artifact present in the directory (currently not documented in the CAD README). |
| .gitignore | Adds an ignore rule intended for scratch outputs. |
| @@ -0,0 +1,107 @@ | |||
| # T3-prism (3-strut tensegrity) — Bambu PETG print | |||
|
|
|||
| Resolves the issue [_"Get a bambu sliced print for a T3-prism"_](../../README.md): | |||
| | File | What | | ||
| | ---- | ---- | | ||
| | [`t3-prism.scad`](t3-prism.scad) | parametric source | | ||
| | [`t3-prism.stl`](t3-prism.stl) | watertight binary STL (manifold, single part) | |
| ## References & related work | ||
|
|
||
| - Issue: ["Get a bambu sliced print for a T3-prism"](../../README.md) | ||
| - Programmatic-CAD pattern reused from | ||
| [`vertical-cloud-lab/powder-doser` PR #16](https://github.com/vertical-cloud-lab/powder-doser/pull/16) |
| echo "==> OpenSCAD render -> ${STL##*/}" | ||
| xvfb-run -a openscad -o "${STL}" --export-format=binstl "${SCAD}" | ||
|
|
||
| echo "==> admesh manifold check" | ||
| admesh -fundecvb "${SCRATCH}/t3-prism-clean.stl" "${STL}" \ |
…reserve Marcus's project 3mf Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/bfc1f8fe-27b9-40fe-8c9d-f46712cc281e Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Switched the pipeline to produce real Bambu
|
.gcode.3mf slices (H2D / X1C / A1 mini)
|
@copilot also, make a second version of this print such that it is a multi-material print. One material as PETG and one material as PLA. One material type for the struts and one for the "strings" (up to you which you make PETG vs. PLA, I'm not sure which would mimic more the tensegrity structure, but we'll be swapping one of these out with TPU eventually anyway) |
…n copilot-instructions.md Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/2b0380fe-5fe2-417a-bcb8-ead0b3206e74 Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Done in 08a139d: H2D-only: added a new "Hardware / target printer" section to Import error: confirmed the failing file is a sliced print job, not a project — Bambu Studio's drag/import deliberately rejects
Both regenerated by Edison ANALYSIS: submitted task |
.gcode.3mf slices (H2D / X1C / A1 mini).gcode.3mf slice + re-importable project .3mf (H2D-only)
|
@achris0520 integrated an idea similar to #35 (comment) by adding a somewhat surrounding support that constricted movement. Added additional edge supports along cables to minimize wobble. Left gaps between bottom and edge supports to maintain easy removal. Realized partially through print the 'Support/object xy distance' needed to be smaller to make contact in order to minimize wobble. Only slight improvement from previous print. Will fix on next print. It should be noted that removing these supports was slightly more difficult than removing prior supports, however they were still relatively easy to remove. Below is picture and video documentation on the supports applied, the stabilized printing in action, the printed model, and a comparison video of the last few prints. There is almost no visible wobble on the tendons: 20260728_104541.mp4The printed model, id "Cruela": Video showing each of the last 4 prints: https://byu.box.com/s/d8kga3d5djcrvkiys7non9thdhvg413z |
|
@achris0520 changed the default 'Support/object xy distance' from .35 to .2 to minimize wobble. Much improved. The most recent print, bpX68c, using the same specimen here #35 (comment) turned out even better and more consistent. It seems likely that humidity does not play as large a role in tendon quality as tendon stabilization during printing. Though there were still some imperfections likely attributable to moisture, the tendons printed significantly more uniform with very few print errors compared to the last three prints of the exact same digital model. Though consistency is yet to be shown, it appears that stabilizing the tendons so they cannot wobble/wiggle significantly improves the print quality. It should be noted that these supports were more difficult to remove, and at certain points it seemed a risk of breaking the tendon removing the supports as the supports had bonded to the tendons more significantly with this print. I estimate it would consistently take 10 to 20 minutes to remove supports for models printed this way.
|
|
@claude we need the T3 prism structures associated with the first Sobol batch (#35 (comment), note you'll likely need to use github api to be able to see the comments, since there are several hundred hidden items/comments in this thread); however, these structures need to be re-generated with the latest housing design for the sensors. Also make sure that the constant mass constraint and the max volume constraint (if I'm not mistaken, those being the two constraints we imposed) are met and that we're using the same fixed mass as we have been in our most recent prints. |
First Sobol batch regenerated with the latest sensor housings + both constraints enforced (
|
| spec | Sobol R/H/twist/strut/cable | scale | as-print R/H/strut/cable (mm) | mass (PLA+TPU) | envelope | flags |
|---|---|---|---|---|---|---|
| 0 | 32.1 / 89.6 / 59.8° / 7.88 / 5.39 | 0.850 | 27.3 / 76.2 / 6.70 / 4.58 | 30.93 g (20.0+10.9) | 178 cm³ | ok |
| 1 | 33.8 / 80.1 / 77.4° / 10.87 / 3.00 | 0.850 | 28.7 / 68.1 / 9.24 / 2.55 | 30.97 g (27.3+3.6) | 177 cm³ | cable < 3 mm¹ |
| 2 | 39.0 / 100.0 / 47.7° / 7.07 / 3.92 | 0.935 | 36.4 / 93.5 / 6.61 / 3.67 | 30.93 g (21.7+9.2) | 390 cm³ | envelope violation |
| 3 | 25.1 / 72.1 / 65.1° / 10.18 / 4.66 | 0.864 | 21.7 / 62.3 / 8.79 / 4.03 | 30.90 g (24.0+6.9) | 92 cm³ | ok |
| 4 | 27.6 / 104.1 / 70.4° / 9.28 / 4.49 | 0.823 | 22.7 / 85.7 / 7.64 / 3.70 | 30.93 g (24.0+6.9) | 139 cm³ | ok |
| 5 | 36.3 / 63.2 / 53.0° / 6.46 / 4.06 | 1.044 | 37.9 / 66.0 / 6.74 / 4.23 | 30.95 g (19.8+11.1) | 298 cm³ | envelope violation |
| 6 | 36.0 / 96.4 / 62.1° / 11.66 / 3.49 | 0.775 | 27.9 / 74.7 / 9.04 / 2.71 | 30.93 g (26.9+4.0) | 182 cm³ | cable < 3 mm¹ |
| 7 | 30.1 / 74.8 / 44.5° / 8.58 / 4.94 | 0.889 | 26.8 / 66.5 / 7.63 / 4.39 | 30.91 g (21.3+9.6) | 150 cm³ | ok |
| 8 | 29.0 / 100.9 / 63.8° / 6.20 / 3.20 | 1.040 | 30.2 / 104.9 / 6.45 / 3.32 | 30.95 g (23.5+7.5) | 300 cm³ | envelope violation |
¹ As-printed cable Ø falls below the 3.0 mm TPU self-bridging floor after mass projection — fine under the manual-painted-supports workflow (the floor only matters for unsupported bridging), just flagged cable_bridge_ok=False in the CSV.
Masses are solid-volume estimates (PLA 1.24 / TPU 1.21 g/cm³) — weighing a couple of prints would calibrate this (the still-open batch01.csv metadata ask); --mass-g accepts a measured target. If the 250 cm³ cap isn't the V* you had in mind, it's --envelope-max-cm3 on the CLI.
Previews (variable-width 3×3 grid; +X strip reserved for the prime tower)
Every specimen carries the three igloo top mounts + three beside-mounted bottom key-seats, seats on the bed at z=0, keeps sub-mm struts/cables z-parity, and stays inside the 290×310 mm usable area.
Files (at cf39fe0)
- Production MM project:
bo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mf— 9 objects, each with PLA-struts (ext 1) + TPU-cables (ext 2) part groups;filament_type=['PLA','TPU'],filament_map=['1','2'],filament_map_mode=Manual; supports OFF for manual painting - Design table:
bo/t3-prism-bo-batch.csv(Sobol coords + as-print dims + mass/envelope audit columns) ·bo/t3-prism-bo-batch.json - Combined STLs:
struts·cables· per-specimen pairs inbo/per-specimen-stls/ - Docs:
bo/README.md(new Constraints section + canonical-SCAD rendering notes)
(Job note: the run's GitHub token expired mid-render — ~45 min of OpenSCAD solves — so the push/comment used a refreshed app token; everything above is committed and verified on the branch.)
|
Noting that we can instruct claude to upload to onshape and provide the links back to us so we can easily analyze and spot check the structures. |
…ass / max-envelope constraints Per PR #35 comment 5132975378: the 9 pinned first-batch Sobol designs are re-rendered directly from the canonical cad/t3-prism/t3-prism.scad via -D overrides (captive-core joints + A3 igloo top mounts + beside-mounted flat bottom key-seats always in sync), each projected onto the constant-mass manifold (m* = 30.95 g, the solid-volume mass of the committed S0 reference STLs = most recent instrumented prints) via a rendered-volume cube-root solve, and checked against the Route-B envelope cap pi*R^2*H <= 250 cm^3 (sim_bo_hybrid_campaign.py). Specs 02/05/08 exceed the cap at m* and are flagged envelope_ok=False. Variable-width 3x3 plate grid keeps the pack inside the prime-tower-reduced usable area. MM .3mf re-assembled: 9 objects x (PLA struts ext1 + TPU cables ext2), filament_map_mode=Manual. Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@claude if you got stuck here (#35 (comment)), please finish where you left off. If you are not finished after 20min, please state so. |
|
Claude finished @achris0520's task in 8m 40s —— View job Finished — nothing was actually left undone in
|
| Check | Result |
|---|---|
| Per-specimen STLs | 18/18 regenerated in that commit |
MM project .3mf |
9 objects × 2 parts = 18 parts, 9 plate instances ✔ |
| Filament routing | filament_type=['PLA','TPU'], filament_map=['1','2'], filament_map_mode=Manual ✔ |
| Supports | enable_support=0 (manual painting, as intended) ✔ |
| Constant mass | all 9 at 30.90–30.97 g vs m* = 30.95 g, mass_ok=True ×9 ✔ |
| Envelope cap | specs 02 / 05 / 08 envelope_ok=False, as reported ✔ |
2. Onshape — 9 specimens, PLA + TPU part studios each
Document: https://cad.onshape.com/documents/8439090bebf9d3c9f54f2185/w/bb7f2cf3dbf5dc3f824916a6 (public, "T3-prism Sobol batch 01 - constant mass (PR #35)")
| spec | R/H/twist (as-print) | mass | envelope | PLA struts | TPU cables | struts bbox (mm) | flags |
|---|---|---|---|---|---|---|---|
| 0 | 27.3 / 76.2 / 60° | 30.93 g | 178.3 cm³ | struts | cables | 77.24 × 74.09 × 97.74 | — |
| 1 | 28.7 / 68.1 / 77° | 30.97 g | 176.5 cm³ | struts | cables | 78.29 × 75.10 × 88.33 | cable < 3 mm |
| 2 | 36.4 / 93.5 / 48° | 30.93 g | 390.0 cm³ | struts | cables | 92.51 × 91.16 × 114.44 | envelope > 250 cm³ |
| 3 | 21.7 / 62.3 / 65° | 30.90 g | 92.1 cm³ | struts | cables | 67.11 × 62.30 × 83.33 | — |
| 4 | 22.7 / 85.7 / 70° | 30.93 g | 138.9 cm³ | struts | cables | 68.46 × 63.88 × 106.28 | — |
| 5 | 37.9 / 66.0 / 53° | 30.95 g | 297.5 cm³ | struts | cables | 95.87 × 95.32 × 87.92 | envelope > 250 cm³ |
| 6 | 27.9 / 74.7 / 62° | 30.93 g | 182.4 cm³ | struts | cables | 76.41 × 73.54 × 94.62 | cable < 3 mm |
| 7 | 26.8 / 66.5 / 44° | 30.91 g | 149.8 cm³ | struts | cables | 76.27 × 72.20 × 88.05 | — |
| 8 | 30.2 / 104.9 / 64° | 30.95 g | 299.9 cm³ | struts | cables | 82.48 × 80.07 × 126.75 | envelope > 250 cm³ |
Each specimen's struts and cables studios agree in Z to within ~0.3 mm (e.g. spec 05: 87.92 vs 87.94), confirming the world-Z parity that keeps Bambu Studio from dropping the TPU relative to the PLA on import.
3. Bug found while verifying scale (32addaf)
The uploader's bounding-box readback multiplied by 1000 on the assumption that Onshape reports metres. /partstudios/.../boundingboxes actually returns millimetres, so every past scale check printed a 1000×-oversized number. Cross-checked spec 05 struts against the local STL extents — Onshape 95.87 × 95.32 × 87.92 vs local 95.87 × 95.32 × 87.92, exact match. Also added --stl NAME=PATH / --doc-name / --jobs to cad/t3-prism/onshape_upload_t3prism.py so any STL set can be pushed without editing the file, and documented the recipe in bo/README.md.
Print files (unchanged, from cf39fe0)
- Production MM project:
bo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mf - Per-specimen STL pairs:
bo/per-specimen-stls/· design tablebo/t3-prism-bo-batch.csv
Two minor leftovers, both harmless: a throwaway unittest-millimeter part studio in the Onshape doc that the API key lacks delete permission for (someone with edit rights can remove it in the browser), and the batch is still a full 9-up plate — per 4938386087 you may want batch size 1 for now, in which case just delete the other eight objects after import.
· branch copilot/get-bambu-sliced-print-t3-prism
… readback Adds --stl NAME=PATH / --doc-name / --jobs so any STL set (e.g. the nine per-specimen Sobol batch pairs) can be pushed to its own public Onshape document without editing the script, and drops the bogus *1000 in the bounding-box readback: /partstudios/.../boundingboxes already reports millimetres, so every import previously looked 1000x oversized (verified against local STL extents: spec05 struts 95.87 x 95.32 x 87.92 mm). Per PR #35 comment 5133453991 (upload the regenerated first Sobol batch to Onshape for spot-checking). Co-authored-by: Audrey Christiansen <280533809+achris0520@users.noreply.github.com> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
@claude, this is not direction for what you should do in the future, this is a hypothetical question for you to simply answer: if we ever were to need to manually edit the files you generate, then, to my knowledge, it would be significantly easier to do this if the files you provided were .step files instead of .stl or .3mf files (again, this isn't direction for you to change the file type that you give us, just a hypothetical). Would it be possible for you to provide .step files of the same geometries that you've been generating, and to upload those to onshape if needed? Do not provide these files now, just answer the inquiry. |
|
Claude finished @me-madsen's task in 1m 52s —— View job Hypothetical: could you ship
|
|
@claude Feedback on: #35 (comment). This was excellent. The .3mf file worked great. |
|
Claude finished @achris0520's task in 46s —— View job Thanks for the confirmation, @achris0520 🎉Good to hear the batch The
Two leftovers from that run, both cosmetic:
What would be most useful next, whenever you're ready:
Also still open from @sgbaird's 07-01 comment: flat (non-igloo) key-seats below the lower vertices landed in No code changes made in this run — this was acknowledgement only. |
|
@claude we need a new 3mf (or is it multiple? not sure, just whatever Audrey needs) for the newly suggested batch shown in #102 (comment) Also do whatever onshape uploading you were doing before |
|
Claude finished @sgbaird's task in 42m 20s —— View job Round-1 BO batch: one H2D multi-material
|
| plate | trial | R (mm) | H (mm) | twist | strut Ø | cable Ø | scale | as-printed cable Ø | mass (g) | PLA / TPU (g) | envelope (cm³) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 | 10 | 25.0 | 60.0 | 80° | 12.0 | 3.0 | 0.878 | 2.63 | 30.99 | 27.9 / 3.1 | 79.7 |
| 01 | 11 | 40.0 | 60.0 | 80° | 12.0 | 5.5 | 0.753 | 4.14 | 30.91 | 23.0 / 7.9 | 128.8 |
| 02 | 12 | 25.0 | 60.0 | 40° | 12.0 | 3.0 | 0.899 | 2.70 | 31.01 | 27.6 / 3.4 | 85.5 |
| 03 | 13 | 25.0 | 60.0 | 80° | 7.40 | 3.0 | 1.092 | 3.28 | 30.95 | 25.0 / 6.0 | 153.4 |
| 04 | 14 | 25.0 | 60.0 | 40° | 12.0 | 5.5 | 0.816 | 4.49 | 30.88 | 23.2 / 7.6 | 64.0 |
| 05 | 15 | 40.0 | 60.0 | 40° | 12.0 | 3.0 | 0.872 | 2.62 | 31.00 | 26.8 / 4.2 | 200.1 |
| 06 | 16 | 25.0 | 60.0 | 80° | 12.0 | 5.5 | 0.803 | 4.42 | 30.88 | 23.8 / 7.1 | 61.0 |
| 07 | 17 | 40.0 | 110.0 | 80° | 12.0 | 5.5 | 0.673 | 3.70 | 30.94 | 23.9 / 7.0 | 168.7 |
| 08 | 18 | 25.0 | 60.0 | 80° | 6.00 | 5.5 | 1.002 | 5.51 | 30.85 | 17.6 / 13.3 | 118.6 |
All nine hold the mass target within tolerance and clear the envelope cap. Three need extra care when painting supports: specimens 00, 02 and 05 (trials 10, 12, 15) land at 2.6 to 2.7 mm as-printed cable diameter, below the 3.0 mm TPU self-bridging floor, so they are flagged cable_bridge_ok=False in the design table. That is the direct consequence of holding mass constant on a 12 mm-strut / 3 mm-cable design: the constant-mass scale factor shrinks the cables along with everything else. Those three have the thinnest top-triangle cables on the plate.
Top-down plate (the empty strip on +X is the 50 mm prime/flush-tower reserve):
Verified inside the .3mf: 9 <object> entries, 18 <part> entries (struts to extruder 1, cables to extruder 2), 9 plate instances, filament_settings_id=['Bambu PLA Basic @BBL H2D','Bambu TPU 85A @BBL H2D 0.4 nozzle'], filament_type=['PLA','TPU'], filament_map=['1','2'], filament_nozzle_map=['1','2'], filament_map_mode=Manual, enable_support=0. Grid is 3x3 with variable column widths (97.1 / 81.1 / 71.2 mm) and row heights (97.1 / 88.2 / 84.1 mm), total 261 x 281 mm inside the tower-reduced usable area.
Other files
| File | What |
|---|---|
bo/t3-prism-bo-round1.csv |
design table with source_trial, as-printed dims, mass audit, constraint flags |
bo/t3-prism-bo-round1-struts.stl |
all 9 PLA parts, plate-positioned (extruder 1) |
bo/t3-prism-bo-round1-cables.stl |
all 9 TPU parts, plate-positioned (extruder 2) |
bo/per-specimen-stls/ |
t3-prism-bo-round1-specNN-{struts,cables}.stl, one pair per specimen |
bo/t3-prism-bo-suggestions-round1.csv |
the source suggestion table, copied verbatim from PR #102 |
If you want the specimens as separate files instead of one project, use the per-specimen pairs and import them two at a time (the combined t3-prism-bo-round1.stl fuses PLA and TPU into one mesh and cannot be split by material after import).
Onshape
All 18 per-specimen STLs are imported into a public document for browser-side measurement, each bounding box read back through the API in mm as a scale check (no unit mix-up: every part landed at the expected tens-of-mm size, not metres or 1000x):
Document: https://cad.onshape.com/documents/09b2b586cfe785215ff2b1fa/w/4ad66babf9d15db6bdde321c
Struts and cables agree in Z to under a millimetre on every specimen, which is the check that the two parts will not be dropped to different bed heights by Bambu's per-part auto-placement.
One thing I did not do
I did not slice the project headless. The BambuStudio v02.06.00.51 CLI still refuses to honour per-part extruder assignment when re-loading an assembled multi-object project (filament TPU can not be printed on extruder <garbage id>), the limitation documented in render_print.sh slice_bambu_mm. The GUI handles it correctly, so the .3mf is built and verified at the project level but the actual slice still happens on Audrey's machine.
--- • • Branch copilot/get-bambu-sliced-print-t3-prism
…ions Generate the first model-based batch (PR #102 comment 5365706779, Ax trials 10-18) as a printable H2D IDEX project. bo/t3_prism_sobol_batch.py grows --designs-csv (read the five swept columns from any design table, e.g. a t3-prism-bo-suggestions-roundN.csv emitted by the campaign script) and --out-prefix (so a round lands beside the pinned Sobol batch instead of overwriting it). Each row's Ax trial_index is carried into the batch table as source_trial. Artifacts: bo/t3-prism-bo-round1.{csv,json,scad,stl}, -struts/-cables STLs, plate/iso previews, 9 per-specimen STL pairs, and bo/slices/t3-prism-bo-round1.H2D-MM-PLAstruts-TPUcables.3mf (9 objects, each with a PLA struts part on extruder 1 and a TPU cables part on extruder 2, filament_map_mode=Manual, supports off for manual painting). All 9 hold m* = 30.95 g within tolerance and clear the 250 cm^3 envelope cap; specimens 00/02/05 (trials 10/12/15) drop to 2.6-2.7 mm as-printed cable diameter and are flagged cable_bridge_ok=False. Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
|
Here is the file for the next round of prints with manual supports and printing presets input: |
|
@claude grab file from #35 (comment) and commit it. Show a visualization of the sliced version of it for provenance |
|
Claude finished @sgbaird's task in 6m 9s —— View job Committed @achris0520's manual-support round-1 project + sliced provenance renders
What's in the fileIt is the generated round-1 project with supports painted by hand on all nine specimens and print presets applied (Bambu Studio 02.04.00.70), not a regenerated artifact:
Painted coverage is stored as Sliced provenanceBambuStudio CLI v02.06.00.51, headless, on the committed file: 13 h 58 m, 255.45 g PLA + 66.94 g TPU, 0.30 mm layers. Feature-tagged extrusion moves from Iso view (gray = model, red = support, orange = support interface). The nine specimens and the prime tower at back-left are all visible, with the painted scaffolding running under the members: Top-down, showing the 3x3 plate layout and the prime tower clear of the grid on -X: Bambu Studio's own plate thumbnail carried inside the project file, for cross-reference: Caveat on the headless sliceThe CLI run ends with Also touched |
Uploaded by @achris0520 in PR #35 comment 5374553137: the round-1 BO batch prepared in Bambu Studio v02.04.00.70 with supports painted by hand on all nine specimens (tree(manual), support_filament=1 / PLA, build-plate-only), H2D 0.6 nozzle, 0.30mm Standard process, PLA struts (ext 1) + TPU 85A cables (ext 2), filament_map_mode=Manual. Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Slice the committed project headlessly (BambuStudio CLI v02.06.00.51) and render the resulting plate_1.gcode with render_supports.py: 13 h 58 m, 255.45 g PLA + 66.94 g TPU, 198567 support + 63545 support-interface extrusion moves of 883256 total. render_supports.py gains two optional env knobs, RS_MODEL_MAX (model segment cap, default unchanged at 40000) and RS_VIEW (elev,azim), and now scales the Z box aspect to the part height instead of forcing a cube, which on a full 350 mm plate spent most of the frame on empty air. Co-authored-by: Sterling G. Baird <45469701+sgbaird@users.noreply.github.com>
Noting I thought we had resolved this somewhere already, perhaps even on the actual bambu lab github (or at least a fork of it). |














T3-prism slicing fixes (PR #35 comment 4464399849)
Metadata/project_settings.confighadfilament_colour=['#00AE42']andfilament_map=['1'](length 1) butfilament_settings_id/filament_typehad length 2 — Bambu Studio uses the shorter array length to determine filament count, so it imported as single-material PLA.z=0but the lowest model point is the joint-sphere bottom at SCADz=-joint_d/2 = -5.25 mm(scale 1.5). When Bambu lifted the assembly so the lowest point sat on the bed, the pillars floated ~5.25 mm above it.patch_mm_extruder.pynow also patchesMetadata/project_settings.config— padsfilament_colourfrom a default extruder palette andfilament_mapwith ascending extruder IDs to matchfilament_settings_idlength, and switchesfilament_map_modetoManualso Bambu Studio honours the per-extruder routing.t3-prism.scadpillar_to(), drop pillar bases to SCADz=-joint_d/2so they reach the bed when the assembled model sits on it (matches the lowest point of the struts/joints).render_print.shend-to-end → all 3 MM project.3mfs now showfilament_colour=['#00AE42','#76D9F4'],filament_map=['1','2'],filament_map_mode=Manual; scaffold STL z-range now[-1.75, 113.74]matching the struts STL exactly.t3-prism.H2D-PETG-supports.pngverification render.T3-prism Sobol BO single-batch generator (PR #35 comment 4503109338)
bo/t3_prism_sobol_batch.py, a Honegumi/Ax-style adaptation of PR Scaffold Bayesian-optimization script with honegumi + customized tensegrity campaign #30bo/tensegrity_campaign.pythat generates a single batch of T3-prism-only Sobol specimens (no model fit, nocomplete_trial— human-in-the-loop, one iteration only).R_mm,H_mm,twist_deg,strut_d_mm,cable_d_mm.topology=t3_prism,tiling=1x1x1,build_orientation=vertical,tpu_shore=85A, PLA struts / TPU cables, supports = manual-painted (@achris0520 paints),joint_d=7 mm.bo/t3-prism-bo-batch.{csv,json,scad,stl}andbo/t3-prism-bo-batch-{plate,iso}.pngpreviews for spot-checking before importing to Bambu Studio.bo/README.mddocuments the swept vs. frozen variables and run instructions.BO batch multi-material project
.3mf(PR #35 comment 4503267471)bo/t3-prism-bo-batch.scadto expose per-specimenspecimen_NN_struts()/specimen_NN_cables()modules and a top-levelpart = "all" | "struts" | "cables"switch, mirroring thecad/t3-prism/t3-prism.scadpattern used by the workingt3-prism-separate-assembly.zipreference.bo/t3_prism_sobol_batch.pynow rendersbo/t3-prism-bo-batch-struts.stlandbo/t3-prism-bo-batch-cables.stlas separate STLs (one per material), in addition to the combined preview STL.--assemblepath into the BO script to producebo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mfwith PLA struts on extruder 1 (Bambu PLA Basic @BBL H2D), TPU 85A cables on extruder 2 (Bambu TPU 85A @BBL H2D 0.4 nozzle), and no auto-supports (manual-painting workflow). A--skip-mm-3mfflag is available for SCAD/STL-only runs.filament_settings_id=['Bambu PLA Basic @BBL H2D','Bambu TPU 85A @BBL H2D 0.4 nozzle'],filament_type=['PLA','TPU'],filament_colour=['#00AE42','#76D9F4'],filament_map=['1','2'],filament_map_mode=Manual;Metadata/model_settings.configroutes the struts STL to extruder 1 and the cables STL to extruder 2 — Split to parts now exposes both as independently-assignable parts.bo/README.mdto document the new struts/cables STLs, the MM project.3mf, and the--skip-mm-3mfflag.BO batch tighter plate spacing (PR #35 comment 4503427854)
bo/t3_prism_sobol_batch.pyby dropping thestrut_dterm from the per-specimen footprint estimate and reducing the inter-cell air gap from 5 mm → 2 mm.bo/t3-prism-bo-batch.{scad,stl,json,csv},bo/t3-prism-bo-batch-{struts,cables}.stl,bo/t3-prism-bo-batch-{plate,iso}.png, andbo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mfend-to-end.Captive TPU core inside PLA outer shell joints (PR #35 comment 4511036510)
joint_shell()incad/t3-prism/t3-prism.scad): hollow sphere with a teardrop hull blend toward the strut and one cylindrical exit bore per outgoing TPU cable (3 per joint).joint_core()incad/t3-prism/t3-prism.scad): solid sphere inside the cavity, continuous with the cable end-caps emerging through the bores.bore = cable_d + 0.8 mm,core_od ≥ bore + 3 mm(TPU mass cannot back out any single bore),shell_id = core_od + 1 mm,shell_od = shell_id + 3.2 mmPLA wall.use_captive_coretoggle int3-prism.scad(defaulttrue) preserves the legacy solid-joint path for direct comparison.bo/t3_prism_sobol_batch.pySPECIMEN_TEMPLATE) so every per-specimen joint is also captive-core, with per-specimencable_d-derived shell/core/bore sizing.render_print.shoffset_z(3.5 → 8.15 mm),pillar_to(), andbo/specimen_footprint()/z_liftso the now-lower PLA shell underside lands on the bed and the per-specimen plate-grid cell accommodates the (larger) shell OD.cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, andbo/t3-prism-bo-batch{.scad, .csv, .json, .stl, -struts.stl, -cables.stl, -plate.png, -iso.png}.use_captive_coretoggle incad/t3-prism/README.mdandbo/README.md.TPU misalignment with joints
cables.stllowest world-Z was-cable_d/2whilestruts.stllowest was-max(strut_d, joint_d)/2; Bambu Studio's per-part auto-bed-placement therefore dropped the cables vs. the struts by ~3 mm — exactly the reported "horizontal cables going to the wrong z-height on the top and bottom".cables.stlthe same world-Z bounding box asstruts.stl:±core_od/2.cables_z_anchor()int3-prism.scad, equivalent inline cube in the BOSPECIMEN_TEMPLATE) that pins the cables STL bbox to exactly the struts STL extents.t3-prism-struts.stlz=[0.017, 121.283] vst3-prism-cables.stlz=[0.000, 121.300] — sub-mm match. Verified for BO batch:struts.stlz=[0.068, 116.925] vscables.stlz=[-0.000, 117.072] — sub-mm match across all 9 specimens.BO batch plate spacing + prime tower reserve (PR #35 comments 4513164299 / 4513445377)
PRIME_TOWER_RESERVE_X), drawn as a thin slab marker in the preview SCAD only (not into the struts/cables STLs).N_SPECIMENSback to 9 in a 3×3 grid with a 6 mm inter-cell air gap and a 50 mm prime-tower reserve strip on +X, keeping the layout inside the 300×320 mm usable plate area while leaving room for the wipe tower.bo/t3-prism-bo-batch.{scad,stl,json,csv},bo/t3-prism-bo-batch-{struts,cables}.stl,bo/t3-prism-bo-batch-{plate,iso}.png, andbo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mfend-to-end.bo/__pycache__/to.gitignore.Bonded captive-core joints + per-specimen object grouping (PR #35 comment 4513722886)
Addressing three asks from @sgbaird:
captive_core_clear = 0so the TPU core touches the PLA inner wall (was a 0.5 mm radial print-in-place gap → now bonded).captive_bore_clear = 0so the PLA bore is exactlycable_dand the TPU cable fills it without an annular gap (was 0.4 mm/side).bo/t3_prism_sobol_batch.pySPECIMEN_TEMPLATE.bo/t3_prism_sobol_batch.pynow:spec=-1filter to the generated batch SCAD so individual specimens can be rendered (-D spec=N).bo/per-specimen-stls/t3-prism-bo-specNN-{struts,cables}.stl(one pair per specimen).--assembleand post-processes the resulting.3mfwith a new_split_assembled_into_objects()helper that splits the single composite into N composite objects, each containing one struts part (extruder 1 / PLA) and one cables part (extruder 2 / TPU). Objects are not grouped; each can be moved independently while its PLA + TPU parts move together.bo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mf: 9<object>entries, each with two<part>s (struts→ext1, cables→ext2); 9<model_instance>entries on the plate;filament_type=['PLA','TPU'],filament_map_mode=Manual,filament_map=['1','2'].cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+ iso PNG, re-assembledcad/t3-prism/slices/t3-prism.H2D{,-PETG,-PETG.gcode,-MM,-MM-PLAcables,-MM-PLAstruts-TPUcables}.3mf, re-renderedbo/t3-prism-bo-batch-{plate,iso}.png+bo/t3-prism-bo-batch{,-struts,-cables}.stl+ the 18 per-specimen STLs.cad/t3-prism/README.mdandbo/README.mdto document the bonded captive-core geometry and the per-specimen object grouping.Accelerometer "igloo" mount on top vertices (PR #35 comment 4794790065)
Addressing @sgbaird's request to extrude a block on top of the top vertices with a pocket to secure the 3-axis accelerometer:
cad/t3-prism/t3-prism.scad(accel_mount()/accel_mount_local(), plusaccel_*parameters and helper functions) fused onto each of the three top vertices:accel_clear= 0.4 mm/side clearance for the adhesive bead and slide-in fit. Because the accelerometer is a physical part, its dimensions are absolute mm and are not multiplied byscale_factor.accel_dome) over the pocket to reduce friction against the acrylic drop-test plate.t3_prism_struts(), so it routes to extruder 1 in the MM variant. Toggleable viaadd_accel_mount(defaulttrue).cables_z_anchor()byaccel_rise()so the cables STL bounding box still matches the now-taller struts STL (verified sub-mm parity).cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, and regenerated allcad/t3-prism/slices/*.3mfend-to-end viarender_print.sh(BambuStudio CLI v02.06.00.51).cad/t3-prism/README.md.Accelerometer mount: flat seat above joint apex + 0.2 mm tolerances (PR #35 comment 4805516634)
Addressing @sgbaird's feedback that the joint underneath was poking through the pocket so the accelerometer could not sit flat, and the request to change the tolerances to 0.2 mm top / 0.2 mm bottom:
apex − 0.5 mm), so the rounded captive-core joint shell poked up into the pocket.accel_mount()now places the pocket floor a fullaccel_floor(1.5 mm) above the joint apexV[2] + joint_outer_r(), whileaccel_mount_local()extends the body underside to-(accel_floor + accel_sink)so the walls still sinkaccel_sink(2 mm) past the apex and stay fused to the joint. Because the seat height is derived fromjoint_outer_r()(which trackscable_d/scale_factor), the floor clears the joint apex for every design and scale by default (verified at scale 1.5×: top-vertex apex z=112.65 < pocket floor z=114.15; struts STL z=[0.52, 131.63] vs cables STL z=[0.50, 131.64] — sub-mm parity preserved).accel_clear_topandaccel_clear_bot(0.2 mm each) for the pocket depth (accel_pocket_z() = accel_h + accel_clear_top + accel_clear_bot); the 0.4 mm lateral (XY) slide-in fitaccel_clearis unchanged. Updatedaccel_rise()to drop theaccel_sinkterm accordingly.cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, regenerated allcad/t3-prism/slices/*.3mfend-to-end viarender_print.sh(BambuStudio CLI; single-material sliced jobreturn_code=0, 2.90 h / 34.87 g; MM projectfilament_type=['PLA','TPU'],filament_map_mode=Manual,filament_map=['1','2']), and re-renderedt3-prism.H2D-PETG-supports.png.cad/t3-prism/README.md.Accelerometer mount: fill the outer void / remove the overhanging lip (PR #35 comment 4813200802)
Addressing @sgbaird's feedback that there was an outer void under the igloo that should be filled by extruding from the surface below up to the underside of the igloo, removing the lip around the edge that could be a stress point:
accel_mount()that convex-hulls the body's underside footprint down onto the joint sphere, so PLA runs continuously from the joint surface up to the underside of the igloo (void filled, overhanging lip removed). Because it is derived fromjoint_outer_r(), this is correct for every design/scale by default.captive_shell_id) and cable-bore cuts — the bores are lengthened so they always punch through the thicker fillet wall — so the captive TPU core and the three cable exits stay open. Struts STL volume topology is unchanged (manifold) and struts/cables world-Z parity is preserved (struts z=[0.516, 131.631] vs cables z=[0.500, 131.640]).accel_mount()now takes the per-vertexcable_dirsso the call site passesvertex_cable_dirs_t(i).cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, regenerated allcad/t3-prism/slices/*.3mfend-to-end viarender_print.sh(MM projectfilament_type=['PLA','TPU'],filament_map=['1','2'],filament_map_mode=Manual), and re-renderedt3-prism.H2D-PETG-supports.png.cad/t3-prism/README.md.