Refactor: separate buffer indexing and swizzling.

This also fixes a sensor data reading bug: previously, _sensorIndex was multiplied by 3 by MjEngineTool.

PiperOrigin-RevId: 451699887
Change-Id: I864bcbf8159857764854b25311a26ec5672125d9
This commit is contained in:
Tom Erez
2022-05-29 00:23:57 -07:00
committed by Copybara-Service
parent 5cc73c30bf
commit 02f300c762
16 changed files with 213 additions and 86 deletions
+8 -23
View File
@@ -47,7 +47,8 @@ namespace Mujoco {
var MjVec = MjEngineTool.MjVector3(vec);
var MjVecAsArray = new double[] { 10, 11, 12, MjVec.x, MjVec.y, MjVec.z };
fixed (double* MjArrPtr = MjVecAsArray) {
var recreatedVec = MjEngineTool.UnityVector3(MjArrPtr, 1);
var recreatedVec = MjEngineTool.UnityVector3(
MjEngineTool.MjVector3AtEntry(MjArrPtr, 1));
Assert.That(recreatedVec, Is.EqualTo(vec));
}
}
@@ -64,23 +65,6 @@ namespace Mujoco {
Assert.That(unityVec, Is.EqualTo(vec));
}
[TestCase(0.1f, 0.2f, 0.3f, 0.4f)]
[TestCase(-0.1f, -0.2f, -0.3f, -0.4f)]
[TestCase(-0.1f, 0.2f, 0.3f, 0.4f)]
[TestCase(0.1f, -0.2f, 0.3f, 0.4f)]
[TestCase(0.1f, 0.2f, -0.3f, 0.4f)]
[TestCase(0.1f, 0.2f, 0.3f, -0.4f)]
public unsafe void RoundrobinConversionOfQuaternion(float x, float y, float z, float w) {
var quat = new Quaternion(x, y, z, w);
var MjQuat = MjEngineTool.MjQuaternion(quat);
var MjQuatAsArray =
new double[] { 10, 20, 30, 40, MjQuat.w, MjQuat.x, MjQuat.y, MjQuat.z };
var recreatedQuat = MjEngineTool.UnityQuaternion(MjQuatAsArray, 1);
var q1 = new Vector4(quat.x, quat.y, quat.z, quat.w);
var q2 = new Vector4(recreatedQuat.x, recreatedQuat.y, recreatedQuat.z, recreatedQuat.w);
Assert.That(q1, Is.EqualTo(q2));
}
[TestCase(0.1f, 0.2f, 0.3f, 0.4f)]
[TestCase(-0.1f, -0.2f, -0.3f, -0.4f)]
[TestCase(-0.1f, 0.2f, 0.3f, 0.4f)]
@@ -94,7 +78,8 @@ namespace Mujoco {
var MjQuatAsArray =
new double[] { 10, 20, 30, 40, MjQuat.w, MjQuat.x, MjQuat.y, MjQuat.z };
fixed (double* MjArrPtr = MjQuatAsArray) {
var recreatedQuat = MjEngineTool.UnityQuaternion(MjArrPtr, 1);
var recreatedQuat = MjEngineTool.UnityQuaternion(
MjEngineTool.MjQuaternionAtEntry(MjArrPtr, 1));
var q1 = new Vector4(quat.x, quat.y, quat.z, quat.w);
var q2 = new Vector4(recreatedQuat.x, recreatedQuat.y, recreatedQuat.z, recreatedQuat.w);
Assert.That(q1, Is.EqualTo(q2));
@@ -138,8 +123,8 @@ namespace Mujoco {
var result = Quaternion.identity;
var buffer = new double[4];
fixed (double* unsafeBuffer = buffer) {
MjEngineTool.SetMjQuaternion(unsafeBuffer, quat, entryIndex: 0);
result = MjEngineTool.UnityQuaternion(unsafeBuffer, entryIndex: 0);
MjEngineTool.SetMjQuaternion(unsafeBuffer, quat);
result = MjEngineTool.UnityQuaternion(unsafeBuffer);
}
Assert.That(quat, Is.EqualTo(result));
}
@@ -154,8 +139,8 @@ namespace Mujoco {
var result = Vector3.zero;
double[] buffer = new double[3];
fixed (double* unsafeBuffer = buffer) {
MjEngineTool.SetMjVector3(unsafeBuffer, vec, entryIndex: 0);
result = MjEngineTool.UnityVector3(unsafeBuffer, entryIndex: 0);
MjEngineTool.SetMjVector3(unsafeBuffer, vec);
result = MjEngineTool.UnityVector3(unsafeBuffer);
}
Assert.That(vec, Is.EqualTo(result));
}