diabolo op• 数据种类:table × matrix × matrix × scalar × table → table
• 调用: import fullseye as fs; fs.ledger.diabolo_dynamics_step(state: 'dict', sticks_prev, sticks_now, dt: 'float', params: 'dict', *, plane_rule: 'str' = 'paper', rotation: 'str' = 'paper', flying_rule: 'str' = 'paper') -> 'dict'(要直接调用实现,import diabolo; diabolo.diabolo_dynamics_step(state: 'dict', sticks_prev, sticks_now, dt: 'float', params: 'dict', *, plane_rule: 'str' = 'paper', rotation: 'str' = 'paper', flying_rule: 'str' = 'paper') -> 'dict';从台账取用则 opsdrive.get("diabolo_dynamics_step"))
将论文的解析模型推进 1 步(空竹 = 质点 + 辅助旋转椭球 + 重力)。
state = {"x", "v", "omega", "mode"}(mode 为 DIABOLO_STATES)。棒的组 = matrix (2, 3)。步骤(正文的 1–4):
前向 Euler 计算 x += v dt、v += g dt → 新的椭球 → 状态转移 → 若在绳上且出界则拉回最近点,v_pull(位移/dt 的内向法向分量)以 v_origin + v_edge 封顶(式 3),在接近绷紧时(间距 > l − 5 cm)采用平面规则(式 4),消去向外的法向速度(正文未明说,按公开实现处理)→ 旋转(式 2: ω_t = ω_{t−1} + μ Δ_string,Δ_string = d_R 的增量,μ = μ_acc / μ_dec)。衰减系数全部为 1(公开实现的默认值)。
可选形式(用于与公开实现比较): plane_rule = "paper"(式 4: 只保留 n_plane = x̂ × (x_L − x_R) 方向)/ "code"(只消去前后分量);rotation = "paper"(式 2,与步长无关的伸缩求和)/ "code"(Δω = k (Δd_R/dt − ω r),k = 0.01。步长减半则 ω 变为 2 倍);flying_rule = "paper"(图: s > c_F)/ "code"(高于连接两棒的平面)。
返回 {"x", "v", "omega", "mode", "s", "pulled", "v_pull_raw"}。Raises ValueError: 选项拼写错误、未知的 mode、dt ≤ 0、state 缺少键、棒的组形状不对。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
• poc_diabolo_model_and_vision — py -3.11 examples/poc_diabolo_model_and_vision.py
table 作为输入)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
diabolo)diabolo_params · diabolo_spheroid · spheroid_closest · diabolo_simulate · diabolo_state_sequence · diabolo_throw_catch_truth · string_tension_static · string_tension_from_sag
*Provenance: diabolo.py — DRIVE 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.