Blender未响应我的加速度传感器运动

1 投票
2 回答
1677 浏览
提问于 2025-04-16 05:09

我正在用Arduino和加速度传感器MMA7361L一起工作,想把它和Blender 2.49连接起来,使用的是Python 2.62。

我的Arduino代码是:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.print(analogRead(0)/4, BYTE);    //x-axis
  Serial.print(analogRead(1)/4, BYTE);    //y-axis
  Serial.print(analogRead(2)/4, BYTE);    //z-axis
  delay(40);
}

我的Python代码是:

import Blender
import GameLogic
import serial

serialport = serial.Serial('COM4', 9600)
ob = Blender.Object.Get ('Cube')
cont=GameLogic.getCurrentController()
own = cont.owner
rotxx = move.dRot[0]
rotyy = move.dRot[1]
rotzz = move.dRot[2]
move = cont.actuators["move"]
Blender.Window.WaitCursor(1)
x=[0,0,0]
for i in range(1, 100):
    x1[0] = serialport.read(size=1)
    x1[1] = serialport.read(size=1)
    x1[2] = serialport.read(size=1)

    x2=[(((m - n)*1.65)/180) for m,n in zip(x,x1)]
    rotxx = rotxx + x2[0]
    rotyy = rotyy + x2[1]
    rotzz = rotzz + x2[2]
    move.dRot=(rotxx,rotyy,rotzz)
    cont.activate(move)
    x1=x

else:
    serialport.close()
    Blender.Window.WaitCursor(0)

我已经把传感器和执行器连接好了,实施过程中没有出现错误,但Blender里的立方体没有任何移动。

2 个回答

1

我不确定你是否遇到了我在做Python和Arduino应用时遇到的同样问题,不过...

默认情况下,当你在USB端口打开串口连接时,Arduino会自动重启。因为重启不是瞬间完成的,所以你的Python程序很可能在Arduino开始写数据之前就已经完成了100次读取。

如果这是你遇到的问题,你可以选择:

  1. 在打开串口连接后插入 time.sleep(3)(或者其他适合你的时间)来等待。
  2. 在你的板子上将一个120欧姆的电阻连接在RESET和5V引脚之间,具体方法可以参考这里(这样可以关闭自动重启功能)。

希望这些对你有帮助!

1

在你的Python代码中,你只读取了通过串口传来的传感器值100次,这大约是4秒钟的数据(每次更新需要40毫秒,按照你的处理代码来说)。但你需要不断读取传感器的值,并更新场景的方向,所以可以使用一个像这样的循环:

read_sensors = True
while(read_sensors):
    # call serialport.read() to read current sensor values
    # update scene

确保这个循环至少每40毫秒能运行一次,因为你的Arduino板子就是这么频繁地把加速度计的值写入串口。如果你读取串口数据的频率不够高,数据会被缓存,这样在serialport.read()中看到的值就会滞后于Arduino板子当前读取的加速度计值。这样看起来就不够流畅了。

撰写回答