我在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
在update()
中更新self.cy
之前。这产生了一个非常紧张的动作
我想知道如何使我的旋转更“快速”,所以即使我保持手机静止,立方体也不会在任何方向上漂移太多
目前没有回答
相关问题 更多 >
编程相关推荐