Skip to content

Commit ae4391b

Browse files
authored
Add compact IMU frame (rot+acc) (#1001)
1 parent be76cd1 commit ae4391b

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,9 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker
321321
tracker = connection?.getTracker(packet.sensorId)
322322
if (tracker == null) return
323323
tracker.setRotation(rot)
324+
if (packet is UDPPacket23RotationAndAcceleration) {
325+
tracker.setAcceleration(packet.acceleration)
326+
}
324327
tracker.dataTick()
325328
}
326329

server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,27 @@ class UDPPacket22FeatureFlags(
329329
}
330330
}
331331

332+
data class UDPPacket23RotationAndAcceleration(
333+
override var rotation: Quaternion = Quaternion.IDENTITY,
334+
var acceleration: Vector3 = Vector3.NULL,
335+
) : UDPPacket(23),
336+
RotationPacket {
337+
override var sensorId: Int = 0
338+
override fun readData(buf: ByteBuffer) {
339+
// s16 s16 s16 s16 s16 s16 s16
340+
// qX qY qZ qW aX aY aZ
341+
sensorId = buf.get().toInt() and 0xFF
342+
val scaleR = 1 / (1 shl 15).toFloat() // Q15: 1 is represented as 0x7FFF and -1 as 0x8000
343+
val x = buf.short * scaleR
344+
val y = buf.short * scaleR
345+
val z = buf.short * scaleR
346+
val w = buf.short * scaleR
347+
rotation = Quaternion(w, x, y, z).unit()
348+
val scaleA = 1 / (1 shl 7).toFloat() // The same as the HID scale
349+
acceleration = Vector3(buf.short * scaleA, buf.short * scaleA, buf.short * scaleA)
350+
}
351+
}
352+
332353
data class UDPPacket200ProtocolChange(
333354
var targetProtocol: Int = 0,
334355
var targetProtocolVersion: Int = 0,

server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class UDPProtocolParser {
127127
const val PACKET_TEMPERATURE = 20
128128
const val PACKET_USER_ACTION = 21
129129
const val PACKET_FEATURE_FLAGS = 22
130+
const val PACKET_ROTATION_AND_ACCELERATION = 23
130131
const val PACKET_BUNDLE = 100
131132
const val PACKET_PROTOCOL_CHANGE = 200
132133
private val HANDSHAKE_BUFFER = ByteArray(64)

0 commit comments

Comments
 (0)