问题描述
我在 Panda3d 中创建了一个简单的演示,目的是使用手机的陀螺仪和加速度计控制基本立方体围绕 Y 轴(或垂直于屏幕的轴)的旋转。
以下是我的主循环
def update(self,task):
global AA
readSerialData()
ga = getAccGyro()
if(ga != None):
g = (ga[0],ga[1],ga[2])
a = (ga[3],ga[4],ga[5])
cur_t = time.time()
dt = cur_t - self.prev_t
self.prev_t = cur_t
gy_rate = g[1] * 0.07
accYangle = -math.degrees(math.atan2(a[0],math.sqrt(a[1]**2 + a[2]**2) ))
self.cy = AA * (self.cy + gy_rate * dt) + (1 - AA) * accYangle
self.Box.setR(self.Box,self.cy)
return task.cont
此处为 AA = 0.98
和用于融合陀螺仪和加速度计数据的互补滤波器。
我遇到的问题是立方体在稳定之前开始向任何一个方向(顺时针或逆时针)漂移一段时间,即使我尽可能保持手机静止。
我尝试在 getAccGyro()
函数中对来自传感器的原始输入值设置阈值:
if(abs(gx - baseAccGyrovalues.gx) < 1):
gx = 0
if(abs(gy - baseAccGyrovalues.gy) < 1):
gy = 0
if(abs(gz - baseAccGyrovalues.gz) < 1):
gz = 0
if(abs(ax - baseAccGyrovalues.ax) < 4):
ax = 0
if(abs(ay - baseAccGyrovalues.ay) < 4):
ay = 0
if(abs(az - baseAccGyrovalues.az) < 4):
az = 0
但问题仍然存在,这是有道理的,因为如果所有值都为零,则方程 self.cy = AA * (self.cy + gy_rate * dt) + (1 - AA) * accYangle
简化为 self.cy = AA * (self.cy)
。作为创可贴,我补充了
if(gx_rate == 0 and gy_rate == 0 and accXangle == 0 and accYangle == 0):
return task.cont
在 self.cy
中更新 update()
之前。这产生了非常紧张的运动。
我想知道如何让我的旋转更加“快速”,这样即使我让手机保持静止,立方体也不会向两个方向漂移太多。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)