kendama_params — DRIVE kendama op

• Data kinds: none → table (an op determined by its arguments alone — it takes no image or data input)

• Call: import fullseye as fs; fs.ledger.kendama_params(preset: 'str' = 'jka_16_2', *, trick: 'str' = 'ozara', ball_radius: 'float' = None, mass: 'float' = 0.075, string: 'float' = 0.39, cup_radius_big: 'float' = None, cup_depth: 'float' = None, ken_length: 'float' = None, width: 'float' = None, rho: 'float' = 1.2, cd=0.4, cup_offset=None, tie_offset=None, cup_axis=None, g: 'float' = 9.81) -> 'dict' (to call the implementation directly, import kendama; kendama.kendama_params(preset: 'str' = 'jka_16_2', *, trick: 'str' = 'ozara', ball_radius: 'float' = None, mass: 'float' = 0.075, string: 'float' = 0.39, cup_radius_big: 'float' = None, cup_depth: 'float' = None, ken_length: 'float' = None, width: 'float' = None, rho: 'float' = 1.2, cd=0.4, cup_offset=None, tie_offset=None, cup_axis=None, g: 'float' = 9.81) -> 'dict'; from the registry, opsdrive.get("kendama_params"))

Usage

Kendama table. Default = preset="jka_16_2" (ball 60 mm, width 70 mm and overall length 180 mm are published values of the Japan Kendama Association (JKA); ken height 160 mm and cups 42 / 38 / 35 mm come from a user-provided description of the JKA 16-2 model (primary source not verified)). "recommended_large_cup" = big cup 49 mm, hole 24 mm.

Keys: ball_radius 0.030, string 0.39 (string = recommended 38–40 cm), pendulum_length = string + ball radius (knot → ball centre; the ball's string hole is placed opposite the large hole), cup_radius_big / cup_radius_base / cup_radius_small (rim radii), cup_depth (depth of the big cup. Default = the sink of the bottom of a ball resting on the rim r_b − √(r_b² − r_c²) + 1.5 mm = a depth at which the ball does not touch the bottom, an assumption), ken_length (height of the ken = ken tip → base cup rim, 160 mm), width (big cup rim to small cup rim, 70 mm), hole_radius / hole_depth (the ball's large hole. Depth = ken + ball − total length = 40 mm), total_length (assembled total length = ken + ball − hole depth), cross_radius / ken_radius / spike_length / cross_from_tip (assumed), mass (ball, assumed 75 g), ken_mass (assumed 70 g). The trick trick (KENDAMA_TRICKS: "ozara" big cup / "kozara" small cup / "chuzara" base cup / candle = "rousoku") determines the pose:

R_ken (ken local coordinates → world: locally ken tip +x, big cup +z, origin = sarado centre), grip (where it is held, local), and the catching cup catch_cup ("big" / "small" / "base"). From that it derives, relative to the hand (= the held point), cup_offset (centre of the catching cup's rim), cup_axis (axis of the catching cup, world), tie_offset (string hole of the sarado: local (0, −cross_radius, 0)), top_offset (highest point of the kendama), cup_radius (rim radius of the catching cup). The ken and the sarado are one rigid body (pose fixed per trick, the hand translates). Passing cup_offset / tie_offset / cup_axis overrides with those values (passing 0 gives a point ken = pivot = cup = hand: the theorem gate). catch_window = 0.003 m: kendama_simulate treats as a catch the moment the ball's centre comes down to "within 3 mm of the rim-resting height h_c" (ball touches the rim = landing. Merely entering a window 1.5 r_b above the rim does not count: if the apex lies inside the window it would be "caught" at the apex —— measured and rejected). rho/cd = air density and drag coefficient (rho = 0 is vacuum: the theorem gate runs with this).

fail-closed: unknown preset, dimension ≤ 0, cup rim ≥ ball (cannot be caught on the rim = not a kendama), width < diameter of the big cup, string ≤ ball radius, hole depth outside (0, ball diameter), ken tip too thick to fit the hole → ValueError. The return value includes the derived quantities "cup_rest_height" = √(r_b² − r_c²) (height of the centre of a ball resting on the catching cup's rim) and "bp" (ballistics.ball_params, solid sphere).

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)

• gallery_drive_kendama_racket — py -3.11 examples/gallery_drive_kendama_racket.py

• gallery_drive_world_objects — py -3.11 examples/gallery_drive_world_objects.py

• poc_kendama — py -3.11 examples/poc_kendama.py

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

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Same category (kendama)

elliptic_k_agm · pendulum_period_exact · pendulum_launch_speed · pendulum_rod_simulate · tether_tension_fixed · tether_slack_angle · swing_up_plan · 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.