Files
cadSet/text-to-cad/models/robots/juno/README.md
T
2026-07-22 19:38:36 +08:00

74 lines
4.0 KiB
Markdown

# juno — compact humanoid robotics platform concept
A sleek research-humanoid CAD concept with Unitree-G1-like proportions:
~1.40 m tall, athletic ready stance, exposed cylindrical actuator modules at
every joint, warm-porcelain composite shells over graphite structure with
machined-aluminum joint rims, coral-orange accents on repeated functional
details (actuator hubs, toe/heel bumpers, head vents, fingertip pads), a
gloss midnight-blue sensor visor displaying cyan pixel-grid eyes (Anki
Cozmo style), and dexterous five-digit hands. Clean industrial design,
no logos.
## Degrees of freedom (27 body DOF)
| Group | Joints | DOF |
| --- | --- | --- |
| Each leg (x2) | hip yaw, hip roll, hip pitch, knee, ankle pitch, ankle roll | 12 |
| Each arm (x2) | shoulder pitch, shoulder roll, shoulder yaw, elbow, wrist roll, wrist pitch | 12 |
| Waist | yaw | 1 |
| Neck | yaw, pitch | 2 |
Hands add posed (cosmetic) finger articulation on top of the 27 counted DOF.
## Files
- `juno.py` — build123d generator (`gen_step()`); authoritative source.
Pose angles are module-level parameters; joints are authored as
`cadpy.assembly.AssemblyHelper` revolute frames driven by those angles.
Also exposes `gen_urdf()` / `gen_srdf()` for the robot description.
- `juno_parts/` — part-builder package (sculpted segments, joint hardware,
shared style library). Each builder returns an identity-location labeled
compound in its part-local frame. `chain.py` is the shared kinematic
chain/pose/limit spec used by both the CAD assembly and the URDF/SRDF
generators; `description.py` emits the URDF/SRDF XML; `mass_props.py`
holds baked CAD volume/COM/inertia/bbox data.
- `juno.step` — generated STEP assembly (derived artifact).
- `.juno.step.js` — CAD Viewer animation sidecar with four in-place gaits
built on per-frame chain FK plus two-link leg IK around the baked
athletic stance: `walkLoop` (march, planted stance feet), `strideLoop`
(treadmill-style strides, stance foot slides flat on the ground),
`runLoop` (flight phases, body bounce, toe-pivot push-off, pumping bent
arms, forward lean), and `jumpLoop` (countermovement hop with hands
overhead and an underdamped springy landing). All gaits share antiphase
arm swing, torso counter-sway, and head stabilization. Three showpiece
loops: `danceLoop` (Elvis: right finger pointing up to the right, left
leg kicked out to the left on a shaking planted toe via closed-form
lateral+sagittal leg IK), `handstandLoop` (toe-pivot fold to a
palms-flat inverted hold, whole-body root rotation with per-frame
toe/palm contact anchoring), and `kickLoop` (chambered karate front
kick behind a fists-up guard). Controls: `phase`, `gait`,
`strideLength`, `legLift`, `armSwing`, `torsoSway`. Occurrence refs
`#o1.1..#o1.28` follow the `asm.add` order in `juno.py`.
- `juno.urdf` — generated URDF (derived artifact): a frame-only
`base_footprint` ground root plus 28 physical links and 27 revolute
joints (zero pose stands with soles on z = 0), per-link 3MF mesh
visuals, bbox collisions, CAD-derived inertials at an assumed 35 kg
total mass.
- `juno.srdf` — generated MoveIt2 SRDF (derived artifact): limb/torso/head
planning groups, hand end effectors, disabled collisions, and whole-body
group states (`zero`, `athletic_ready`, `t_pose`, `wave_right`, `squat`).
- `STEP/` — per-link wrapper sources (`gen_step()` per link) and their
generated STEP parts; `3MF/` — per-link mm mesh sidecars referenced by
the URDF.
## Conventions
Units mm. Pelvis waist-yaw joint center is the world origin; +X forward,
+Y robot-left, +Z up. Soles rest near z = -774 in the default stance.
Regenerate with the CAD skill: `python scripts/step models/robots/juno/juno.py`.
Regenerate link meshes per link with the CAD skill, e.g.
`python scripts/step models/robots/juno/STEP/<link>.py --3mf ../3MF/<link>.3mf`.
Regenerate the robot description with the URDF/SRDF skills:
`python scripts/urdf models/robots/juno/juno.py=models/robots/juno/juno.urdf`
and `python scripts/srdf models/robots/juno/juno.py=models/robots/juno/juno.srdf`.