Saya membuat dua objek di Unity3D, mewakili lengan atas (induk) dan lengan bawah (anak), digabungkan dengan gabungan karakter. Perputaran benda-benda ini didorong oleh 2 quaternion yang saya kumpulkan dari sebuah IMU yang terletak di lengan atas dan lengan bawah. Saya mengkalibrasi kedua angka empat. Tujuan saya adalah memvisualisasikan fleksi/ekstensi siku.
Q dalam namanya menunjukkan itu adalah Quaternion. QImu menunjukkan itu adalah Quaternion dari IMU. Qstart menunjukkan ini adalah orientasi awal awal IMU.
// upperarm script attached to upperarm object
if (Input.GetKeyDown(KeyCode.Space))
{
QstartUpperArm = QimuUpperArm;
}
transform.localRotation = QstartUpperArm * Quaternion.Inverse(QimuUpperArm);
// lowerarm script attached to lowerarm object
if (Input.GetKeyDown(KeyCode.Space))
{
QstartLowerArm = QimuLowerArm;
}
QimuLowerArm = QstartLowerArm * Quaternion.Inverse(QimuLowerArm);
transform.localrotation = Quaternion.Inverse(Qstart2 * Quaternion.Inverse(Qimu2)) * Qimu1new;
Objek Lengan Atas berputar persis seperti yang diharapkan. Namun objek lengan bawah memiliki salah satu sumbu y yang terbalik. Semua sumbu lainnya baik-baik saja. Bagaimana cara mengubah tanda sumbu yang satu ini menggunakan Quaternion?
Quaternion reversedY = Quaternion.Inverse(Qstart2 * Quaternion.Inverse(Qimu2)) * Qimu1new;
transform.localrotation = Quaternion.Euler(Vector3.Scale(reversedY, new Vector3(1f, -1f, 1f) ) );
- person Ruzihm   schedule 15.07.2019Vector3 myEulerAngles = QimuLowerArm.eulerAngles; Quaternion invertedRotation = Quaternion.Euler(myEulerAngles.x, -myEulerAngles.y, myEulerAngles.z); transform.localRotation = invertedRotation;
Jadi menurut saya solusi Anda serupa. - person pvand   schedule 16.07.2019