jdibenes / hl2ss

HoloLens 2 Sensor Streaming. Real-time streaming of HoloLens 2 sensor data over WiFi. Research Mode and External USB-C A/V supported.
Other
203 stars 51 forks source link

Questions about the imu data #114

Open JadeGreened opened 3 months ago

JadeGreened commented 3 months ago

I finally get the imu data from my hololens! Thanks a lot~. But I notice that the imu data is a 4x4 matrix like this

[[ 0.05868477 -0.9801954 0.18913764 0. ] [-0.96467817 -0.00694191 0.26333955 0. ] [-0.25681123 -0.19791096 -0.94598055 0. ] [-0.12868184 0.15060404 -0.22494759 1. ]]

Since I am new to imu-activity-recognition, I have no idea of what the rows and the columns mean. And the microsoft documentation did not explain the shape of the matrix. Could you please provide me with more detailed explanation or show me the relavant documentation, plz~. if the data is present like this:
Research Mode IMU Accelerometer (m/s^2) Gyroscope (deg/s) Magnetometer
Then why the matrix is four-dimensional?

anjelomerte commented 3 months ago

How exactly are you getting this matrix, could you share your implementation? Looking at https://github.com/jdibenes/hl2ss/blob/main/viewer/client_stream_rm_imu.py, 6 values (sensor_ticks, soc_ticks, x, y, z and temperature) are returned.

JadeGreened commented 3 months ago
while (enable):
    data = client.get_next_packet()

    print(f'Pose at time {data.timestamp}')
    print(data.pose)

    imu_data = hl2ss.unpack_rm_imu(data.payload)
    count = imu_data.get_count()
    sample = imu_data.get_frame(0)

    print(f'Got {count} samples at time {data.timestamp}')
    print(f'First sample: sensor_ticks={sample.vinyl_hup_ticks} soc_ticks={sample.soc_ticks} x={sample.x} y={sample.y} z={sample.z} temperature={sample.temperature}')

client.close()
listener.join()

Actually It is the script that you showed to me. "data.pose" is the 4x4 matrix.

How exactly are you getting this matrix, could you share your implementation? Looking at https://github.com/jdibenes/hl2ss/blob/main/viewer/client_stream_rm_imu.py, 6 values (sensor_ticks, soc_ticks, x, y, z and temperature) are returned.

JadeGreened commented 3 months ago

sry~ I forget the comment on the top of the script

JadeGreened commented 3 months ago

problem solve :)

JadeGreened commented 3 months ago

But if I want to have three types of data together

Port

Options:

hl2ss.StreamPort.RM_IMU_ACCELEROMETER

hl2ss.StreamPort.RM_IMU_GYROSCOPE

hl2ss.StreamPort.RM_IMU_MAGNETOMETER

Should I open 3 client for each ports?

jdibenes commented 3 months ago

Hello, Yes. The data volume for these channels is low so multithreading should work or you can use the multiprocessing utilities like in the samples.