Member 12899579 Ответов: 0

Отслеживание 3D-объекта в единстве с sensortag


Привет, я публикую несколько вопросов по проекту, который начал разрабатывать несколько недель назад. Может быть, кто-то, кто читает, может сделать некоторые предложения
Прогнозы о вращающийся 3D объекты в виртуальной реальности, сделанные с помощью Unity. То, что я хочу сделать, это использовать SensorTag CC2650 (датчик IMU с гироскопом, акселерометром и магнитометром) для вращения 3d-объектов в VR с помощью Oculus Gear. Я хотел бы иметь такие результаты: Иду и курсового.

Я разработал Android-плагин для Unity для подключения BLE SensorTag и получения необработанных данных. И все в порядке. Плагин производит массив из 9 компонентов для гироскопа, акселерометра и магнитометра. Теперь мне приходится интегрировать фильтр, потому что данные гироскопа или акселерометра непригодны сами по себе из-за дрейфов.

Поэтому я попытался использовать алгоритм MadgwickAHRS, найденный на Страница проекта X-IMU в Единстве, но мои результаты противоречивы.

Может быть, кто-нибудь поможет мне двигаться и скажет, осуществимо ли то, что я хочу сделать.

Что я уже пробовал:

Частота дискретизации SensorTag установлена на 100 мс. Я использую Класс MadgwickAHRS и я вставляю пример кода unity просто для того, чтобы посмотреть, не является ли то, что я пытаюсь сделать, неправильным.

public class Rotation : MonoBehaviour {
public AHRS.MadgwickAHRS AHRS;
float rotationSpeed = 2.5f;


void Start () {
    AHRS = new AHRS.MadgwickAHRS(0.1f);
}

// Update is called once per frame
void Update()
{
   AHRS.Update(deg2rad(STController.gyr[0]), deg2rad(STController.gyr[1]), deg2rad(STController.gyr[2]), STController.acc[0], STController.acc[1], STController.acc[2], STController.mag[0], STController.mag[1], STController.mag[2]);
        Quaternion targetRotation = new Quaternion(AHRS.Quaternion[0], AHRS.Quaternion[1], AHRS.Quaternion[2], HRS.Quaternion[3]);
     transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation,rotationSpeed*Time.deltaTime);
}


static float deg2rad(float degrees)
{
    return (float)(Math.PI / 180) * degrees;
}

Любые предложения будут оценены по достоинству.

Спасибо, Федерико.

0 Ответов