You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

四旋翼导航代码出现ValueError:解包值数量不匹配求助

四旋翼代码报错修复:ValueError: not enough values to unpack (expected 5, got 4)

问题说明

报错信息:

ValueError: not enough values to unpack (expected 5, got 4)

触发报错的代码行:

States[0:6], Thrust_calc, z_accel, x_accel, y_accel= quadrotor(States,S_desired[6:11],Thrust)

问题根源

你在左侧尝试解包5个变量,但quadrotor函数仅返回4个值:

  1. results(包含theta、phi、psi等6个状态量的列表)
  2. Torque[0](推力计算值)
  3. z_accel(Z轴加速度)
  4. x_accel(X轴加速度)

赋值行中多写了y_accel,而quadrotor函数既没有计算该值,也没有将其作为返回结果。同时你的代码后续还存在使用y_accel的逻辑,说明这是一个遗漏的实现。

修复方案

完整修复(推荐)

在quadrotor函数中补充y_accel的计算,并修改返回语句包含该值:

def quadrotor(States, desired_states, Thrust):
    # (保留原函数所有代码)
    
    # 在x_accel计算后添加y_accel的推导
    x_accel=(math.sin(psi)*math.sin(phi)+math.cos(psi)*math.sin(theta)*math.cos(phi))*Torque[0]/m
    # 补充y方向加速度计算(参考四旋翼动力学公式)
    y_accel=(math.cos(psi)*math.sin(phi)-math.sin(psi)*math.sin(theta)*math.cos(phi))*Torque[0]/m

    results= [theta, phi, psi, theta_vel, phi_vel, psi_vel]

    # 修改返回语句,加入y_accel
    return results, Torque[0], z_accel, x_accel, y_accel

此时原赋值行无需修改,后续使用y_accel的逻辑也能正常运行。

临时修复(仅移除多余变量)

如果暂时不需要y_accel,可以直接修改赋值行,删除多余的变量:

States[0:6], Thrust_calc, z_accel, x_accel = quadrotor(States,S_desired[6:11],Thrust)

注意:此方案会导致后续EulerIntegration(y_accel,...)代码因y_accel未定义报错,仅适用于临时调试场景。


内容的提问来源于stack exchange,提问作者galtor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:33:29