Skip to content

Latest commit

 

History

History
35 lines (18 loc) · 4.39 KB

JOYSTICK_CONTROL.md

File metadata and controls

35 lines (18 loc) · 4.39 KB

连续差速摇杆(PWM v6)

怎么使用

网页默认“四轴操控”(前进、后退、左转、右转按钮),点击“摇杆操控”切换;刷新页面恢复四轴。切换会结束当前按住手势,不会自动继续运动。摇杆模式固定使用持续控制,切回四轴恢复此前的持续/步进选择;切换后键盘控制关闭,需要重新勾选。

连接支持 teleop_vector=1 的 v6 固件,在网页选择“摇杆操控”。PWM 滑块设置最大强度,首次建议 40%。拖动圆盘:向上前进、向下后退、左右原地转向、斜向产生左右轮速度差并画弧线。拖动幅度决定输出,中心保留 8% 死区。低 PWM 不一定能让真实电机起转,程序不会自动提高它。

松开、归中、停止按钮、失焦、窗口隐藏或失联都会停止。一次持续手势最多 30 秒;250ms 未收到有效续租时固件切断驱动。失效的旧手势、旧心跳和旧 session 不能恢复运动。

如何缩短间隔

网页更新周期从 65ms 改为 35ms;移动事件在通道空闲且距离上次发送至少 35ms 时发送最新位置。保持最多一条等待确认的常规消息,停止可以优先发送;不排队回放鼠标轨迹。READY/停稳状态随遥控确认回传,手动按钮不必等待较慢的整体页面状态刷新。

直接手动 PWM 停止后的固定冷却从 350ms 改为 80ms,仍要求连续 50ms 没有新的编码器边沿。实际再启动时间取决于轮子惯性、反馈、串口和网页往返,不能保证每次都是 80ms。闭环定距、定角动作停止后仍保留 350ms/150ms 的原规则;从手动停止切换其他动作时,按刚完成的手动停止规则,并检查对应动作的传感器。

同向调节不停车。某轮要反向或从零输出重新使能时,先切断两轮驱动,等待至少 80ms 及连续 50ms 无边沿,再使用同次有效手势的最新请求。暂停期间停止、BOOT、租约和 30 秒上限仍有效。请求中途变化会替换旧值,不排队执行旧方向。摇杆 PWM 以 500 百分点/秒的上限渐变,停止立即切断。

混合与协议

浏览器只发标准化坐标 x,y ∈ [-1,1] 和 PWM 上限。可信后台拒绝布尔值、NaN、无穷大、越界和非法上限;将 right=-y-x、left=-y+x 同比例缩放到滑块上限。右轮 A、左轮 B 的正值均表示车体前进,物理引脚仍采用各轮既有方向标定。

UART @V{packed}\n:packed=session*100000+(right+100)*201+(left+100),两轮各为 −100..100 整数、session 为 1..9999。原 H/U 协议继续保留。只合并同次 V session 的更新,STOP 优先于任何帧,包括碎片和错误帧。MODE 在同一次按住期间不能更换。会话编号耗尽后需要显式停止和复位。

归中不续租运动,后台发送 T;固件也独立处理收到的零向量。处于零输出的轮子不被误判为“电机无反馈”,重新使能前重建计数基线。需要新固件才能真正执行轮速差,旧版本界面显示“需要 PWM v6”,不会用四方向动作冒充摇杆。

这属于人工控制,没有地面定位、自动避障或闭环轨迹保证。保留原编码器检查及 v5 的手动偏差停止分类,闭环和严重异常仍锁定。

验证状态

2026-10-13 发布前 545 项 Python 离线回归通过(严格警告模式),纯 C 检查覆盖全部 40,401 个左右轮组合、正反转、暂停条件、租约、会话隔离、碎片帧和 STOP 优先;原参数与计数保护 C 回归通过。ESP-IDF 5.1.2 构建通过(应用 0x4fd80)。离线演示浏览器验证斜向拖动后松开恢复停稳,未发现 JavaScript 错误。

v6 已在用户确认断开电机独立 5V 后烧录到 COM5,并更新后台。停止握手确认 pwm-stream-v6 teleop_vector=1、READY、无故障、两轮零转速及有效 BMI/ToF 回传。只发送停止,没有实车摇杆运动验证。最终量化边界和空闲 WebSocket 检查分别有 66/47 项相关回归通过;空闲 ping 可刷新挑战令牌但不续租电机,运动消息仍严格要求新鲜令牌。

旧 6 条任务和非密钥状态已本地归档,固件复位后新上下文清空。后台重启后 API Key 需重新填写;手动摇杆不需要模型密钥。更新固件仍需断开电机独立 5V、保留 USB;使用时先刷新网页确认 PWM v6,首次用 40% 在轮子架空状态由用户短时验证方向与松开停止。