IBCBiomech / insolesibc

Prototipo de aplicación para plantillas
0 stars 1 forks source link

Prueba de Unity y Wisewalk #19

Closed ivanjimenez closed 1 year ago

ivanjimenez commented 1 year ago

Realizar una simpe interface para escanear, conectar y hacer stream con un imu de Wisewalk.

Es algo muy simple:

Image

Que permita escanear, conectar y hacer streaming sacando los quaterniones en la caja de texto.

No es algo prioritario. Puedes hacerlo cuando quieras cambiar de tarea o acabes lo del GRF.

bernatDiaz commented 1 year ago

En Unity o WPF?

ivanjimenez commented 1 year ago

Para Unity. Algo sencillo para ver si funciona con estos sensores.

bernatDiaz commented 1 year ago

Rama unity. Llamar a la funcion private void ChangeOutput(string text) para cambiar el texto

ivanjimenez commented 1 year ago

`using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Text.RegularExpressions; using System.Threading; using TMPro; using UnityEditor.PackageManager; using UnityEngine; using UnityEngine.UI; using WisewalkSDK;

public class ActiSense : MonoBehaviour { public Wisewalk api;

string error;

public string portName = "";

public List<Wisewalk.ComPort> ports;
public string port_selected = "";

public List<Wisewalk.Dev> scanDevices = new List<Wisewalk.Dev>();

[SerializeField] public TMP_Text stateText;
[SerializeField] public Transform cube;

public Quaternion inverseQt;
public Quaternion rawQt;

public Button ConnectButton;

void setStateText(string text)
{
    if (stateText == null) return;
    stateText.text = text;
}

void StartProcess()
{

    api.Open("COM6", out error);

    if (!api.ScanDevices(out error))
    {
        // Error
        Trace.WriteLine("", "Error to scan devices - " + error);

    }
    else
    {
        Thread.Sleep(2000);

    }

}

public void ShowPorts()
{

    foreach (Wisewalk.ComPort port in ports)
    {
        Match match1 = Regex.Match(port.description, "nRF52 USB CDC BLE*", RegexOptions.IgnoreCase);
        if (match1.Success)
        {
            port_selected = port.name;
            Trace.WriteLine(port.description);

        }
    }
}

public void Api_scanFinished(List<Wisewalk.Dev> devices)
{
    scanDevices = devices;
    ShowScanList(scanDevices);

}

public void ShowScanList(List<Wisewalk.Dev> devices)
{

    for (int idx = 0; idx < devices.Count; idx++)
    {
        string macAddress = devices[idx].mac[5].ToString("X2") + ":" + devices[idx].mac[4].ToString("X2") + ":" + devices[idx].mac[3].ToString("X2") + ":" +
                            devices[idx].mac[2].ToString("X2") + ":" + devices[idx].mac[1].ToString("X2") + ":" + devices[idx].mac[0].ToString("X2");

        setStateText("MacAddress: " + macAddress);
    }

}

// Use this for initialization
void Start()
{

    api = new Wisewalk();
    api.scanFinished += Api_scanFinished;
    //ConnectButton.onClick.AddListener(onClick);

    inverseQt = Quaternion.identity;
    StartProcess();
    api.ScanDevices(out error);

}

// Update is called once per frame
void Update()
{

    float qx = 1.0f;
    float qy = 0.75f; ;
    float qz = 0.5f;
    float qw = 0.25f;

    //setStateText("qx: " + qx.ToString("0.00000") +
    //                ", qy: " + qy.ToString("0.00000") + ", qz: " + qz.ToString("0.00000") +
    //                ", qw: " + qw.ToString("0.00000") + " port selected: " + ports);

    //rawQt = new Quaternion(0, qx, 0, qw);
    //rawQt = new Quaternion(-qz, 0, 0, qw);
    //rawQt = new Quaternion(0, 0, qy, qw);

    rawQt = new Quaternion(-qz, qx, qy, qw);
    //cube.rotation = rawQt * inverseQt;  

}

public void resetRotation()
{
    inverseQt = Quaternion.Inverse(rawQt);
}

}`