[具身智能-807]:ROSMASTER-M1:代码解析:Jupyter interact 四个滑块控制 PWM 舵机

发布时间:2026/8/9 0:16:41
[具身智能-807]:ROSMASTER-M1:代码解析:Jupyter interact 四个滑块控制 PWM 舵机 代码解析Jupyter interact 四个滑块控制 PWM 舵机python运行from ipywidgets import interact, widgets interact(pwm_servo, S1widgets.IntSlider(min0,max180,step1,value90), S2widgets.IntSlider(min0,max180,step1,value90), S3widgets.IntSlider(min0,max180,step1,value90), S4widgets.IntSlider(min0,max180,step1,value90));整体功能在 Jupyter Notebook / JupyterLab 页面生成4 个拖动滑块分别对应 4 路 PWM 舵机 S1、S2、S3、S4。 拖动任意一个滑块就会自动调用函数pwm_servo()把 4 个滑块的实时角度传入函数完成舵机角度控制。逐部分拆解1.interact()interact是 ipywidgets 的交互式装饰 / 调用函数。第一个参数回调函数名称pwm_servo⚠️重点你的代码必须提前定义函数python运行def pwm_servo(S1, S2, S3, S4): # S1~S4就是滑块传过来的角度 0~180 print(fS1:{S1}, S2:{S2}, S3:{S3}, S4:{S4}) # 在这里写底层把角度转为PWM占空比输出到舵机硬件interact会自动生成 UI 控件滑块发生变化时立刻调用pwm_servo(S1xx,S2xx,S3xx,S4xx)。2.S1widgets.IntSlider(...)每一行定义一个整数滑块参数含义表格参数含义min0舵机最小角度 0°max180舵机最大角度 180°SG90 类 PWM 舵机标准范围step1拖动步长每次变化 1 度value90滑块初始默认位置舵机上电居中 90°S1,S2,S3,S4参数名必须和回调函数pwm_servo的形参名字一一对应。名字写错会直接报错interact 无法传参。3. 末尾分号;Jupyter 语法抑制组件对象的多余打印输出只渲染 UI 滑块不输出控件对象文本。完整执行链路plaintext网页拖动滑块S1~S4 → interact捕获滑块数值变化 → 自动调用 pwm_servo(S1val1,S2val2,S3val3,S4val4) → 在pwm_servo函数内部角度 → PWM脉冲换算 → 硬件输出给舵机关键工程坑点ROSMASTER‑M1 Jupyter 环境pwm_servo函数必须提前定义4 个形参 S1,S2,S3,S4 不能少顺序名字必须匹配python运行#错误示例参数名字对不上 def pwm_servo(a,b,c,d): # 名字S1/S2/S3/S4不匹配interact直接报错 pass滑块输出是角度 0‑180 整数不是 PWM 占空比转化成占空比是运动控制板的职责。SG90 舵机需要把角度换算成 PWM 高电平时间 0°→500us90°→1500us180°→2500us。pwm_servo函数内部要做换算不能直接把角度当做 PWM 输出。示例换算片段python运行def angle_to_pulse(angle): # 0~180度映射500~2500us return int(500 (angle / 180) * 2000)ipywidgets 环境问题ROSMASTER‑M1 的 jupyter 如果不显示滑块界面 需要确认 jupyterlab ipywidgets 插件完整安装。最简完整可运行示例直接复制到 jupyterpython运行from ipywidgets import interact, widgets def pwm_servo(S1, S2, S3, S4): print(fS1{S1}°, S2{S2}°, S3{S3}°, S4{S4}°) # 此处增加硬件PWM输出代码 interact(pwm_servo, S1widgets.IntSlider(min0,max180,step1,value90,description舵机1), S2widgets.IntSlider(min0,max180,step1,value90,description舵机2), S3widgets.IntSlider(min0,max180,step1,value90,description舵机3), S4widgets.IntSlider(min0,max180,step1,value90,description舵机4));增加description参数滑块前面显示中文标签方便调试。补充对比理解interact本质UI 界面与业务函数解耦。滑块只负责产生角度数值不操作硬件硬件操作全部交给回调函数 pwm_servo。UI 层滑块 ↔ 业务逻辑层pwm_servo和机器人整套架构思想完全一致上层只输出诉求下层执行硬件操作。