我正在尝试使用连接到Arduino板的IMU控制相机。我遵循了本教程中的步骤,并取得了一些成功:http://www.marcteyssier.com/uduino/projects/connect-a-imu-to-unity
意思是,我让Unity从Arduino读取数据。当我将脚本附加到游戏对象(例如立方体)时,它会随着IMU的移动而旋转。
问题是,IMU没有默认方向。我的意思是,如果让IMU朝上平放在地面上,那么Unity中的x轴将指向一个方向。如果我在不触摸IMU的情况下再次玩游戏,则X轴突然指向另一个方向。这是一张照片:
当x轴指向另一个方向时,我无法获得另一张图片,因为它要求我在Unity中多次击打游戏,但请相信我会发生。
这是我的附加到多维数据集的代码:
using UnityEngine;
using Udiono;
public class IMU: MonoBehaviour
{
public Vector3 rotationOffset;
Quaternion q;
public float smoothfactor = 15.0f;
void Start() {
UdionoManeger = Instance.OnValueRecieved += ReadIMU;
}
}
void Update()
{
string values = data.Split('\n');
if (values.Length >= 2)
{
string[] values = values[values.Length - 2].Split(' ');
if (values[0] == "QC")
{
q = new Quaternion(float.Parse(line[1]), float.Parse(line[2]), float.Parse(line[3]), float.Parse(line[4]));
transform.localRotation = Quaternion.Lerp(transform.localRotation, q, Time.deltaTime * speedfactor);
}
}
this.transform.parent.transform.eulerAngles = rotationOffset;
}
忘记“开始”功能中的内容,而专注于此行:
q = new Quaternion(float.Parse(line[1]),
float.Parse(line[2]),
float.Parse(line[3]),
float.Parse(line[4]));
transform.localRotation = Quaternion.Lerp(transform.localRotation, q, Time.deltaTime * speedfactor);
这是我的Arduino串行监视器的图片 Picture 2
很明显,Unity正在从IMU中读取方向作为四元数。但是问题是没有默认方向。在某些情况下,围绕y轴的旋转会在Unity中转换为一件事,而在其他时候则是另一回事。
如果我可以将Unity中的IMU的方向设置为某个默认值,那就太好了。
如果有人可以解决这个问题,或者至少知道发生了什么,请在这里分享您的见解。
谢谢