swing_up_plan — DRIVE kendama op

• Data kinds: table → any

• Call: import fullseye as fs; fs.ledger.swing_up_plan(kp: 'dict', *, lift: 'float' = 0.265, T_lift: 'float' = 0.15, kind: 'str' = 'bang', origin=(0.0, 0.0, 0.0), dodge=(0.0, 0.0, 0.0)) (to call the implementation directly, import kendama; kendama.swing_up_plan(kp: 'dict', *, lift: 'float' = 0.265, T_lift: 'float' = 0.15, kind: 'str' = 'bang', origin=(0.0, 0.0, 0.0), dodge=(0.0, 0.0, 0.0)); from the registry, opsdrive.get("swing_up_plan"))

Usage

Open-loop trajectory of the hand (center of the cross-piece; the string's pivot and the big cup are offset from it by kp's offsets and move with it): lifts straight up from origin by lift in T_lift seconds, then stays still. Returns a function t → (3,) (origin for t ≤ 0, at rest at origin + lift·ẑ for t ≥ T_lift).

kind="bang": accelerate a = 4·lift/T² for T/2, decelerate −a for T/2 (velocity triangle). kind="trap": acceleration, constant speed and deceleration for T/3 each (velocity trapezoid, a = 9·lift/(2T²)). For the ball to rise, the deceleration must exceed g (swing_up_apex answers in closed form). With the defaults lift = 0.265 m, T = 0.15 s (a = 47 m/s² ≈ 4.8 g, peak hand speed 3.5 m/s), the ball's apex is 4.9 cm above the rim of the big cup (effective string length 0.42 m, rim of the big cup 35 mm above the hand: swing_up_apex).

dodge (3,) (horizontal): after deceleration begins and the ball leaves (bang: T/2 → T, trap: 2T/3 → T), the hand is moved sideways by dodge (S-shaped bang-bang). The ball rises straight up from directly below the string hole in the cup body, so without dodging it would pass through the cup body and small cup (the physics does not resolve the collision between ball and kendama —— it is counted by kendamaworld.kendama_clearance). The dodged amount is returned by the clearance of catch_plan_ballistic after the ball has risen above the rim of the big cup.

Empty input (kp is an empty dict) raises ValueError.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_kendama — py -3.11 examples/poc_kendama.py

Ops the type connects to (they accept any as input)

course_crank · course_s_curve · course_turnaround · course_slope · course_intersection · course_parallel_parking · course_crossing · course_road

Same category (kendama)

kendama_params · elliptic_k_agm · pendulum_period_exact · pendulum_launch_speed · pendulum_rod_simulate · tether_tension_fixed · tether_slack_angle · swing_up_apex


*Provenance: kendama.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.