四旋翼导航代码出现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个值:
results(包含theta、phi、psi等6个状态量的列表)Torque[0](推力计算值)z_accel(Z轴加速度)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
相关产品推荐
相关产品推荐

