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:
committed by
Copybara-Service
parent
5cc73c30bf
commit
02f300c762
@@ -35,8 +35,10 @@ namespace Mujoco {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
transform.position = MjEngineTool.UnityVector3(data->xpos, MujocoId);
|
||||
transform.rotation = MjEngineTool.UnityQuaternion(data->xquat, MujocoId);
|
||||
transform.position = MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->xpos, MujocoId));
|
||||
transform.rotation = MjEngineTool.UnityQuaternion(
|
||||
MjEngineTool.MjQuaternionAtEntry(data->xquat, MujocoId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,8 +35,10 @@ namespace Mujoco {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
MjEngineTool.SetMjVector3(data->mocap_pos, transform.position, MujocoId);
|
||||
MjEngineTool.SetMjQuaternion(data->mocap_quat, transform.rotation, MujocoId);
|
||||
MjEngineTool.SetMjVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->mocap_pos, MujocoId), transform.position);
|
||||
MjEngineTool.SetMjQuaternion(
|
||||
MjEngineTool.MjQuaternionAtEntry(data->mocap_quat, MujocoId), transform.rotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public class MjBodyQuaternionSensor : MjBaseSensor {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
SensorReading = MjEngineTool.UnityQuaternion(data->sensordata, _sensorAddress);
|
||||
SensorReading = MjEngineTool.UnityQuaternion(data->sensordata + _sensorAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class MjBodyVectorSensor : MjBaseSensor {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
SensorReading = MjEngineTool.UnityVector3(data->sensordata, _sensorAddress);
|
||||
SensorReading = MjEngineTool.UnityVector3(data->sensordata + _sensorAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ public class MjGeomQuaternionSensor : MjBaseSensor {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
SensorReading = MjEngineTool.UnityQuaternion(data->sensordata, _sensorAddress);
|
||||
SensorReading = MjEngineTool.UnityQuaternion(data->sensordata + _sensorAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class MjGeomVectorSensor : MjBaseSensor {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
SensorReading = MjEngineTool.UnityVector3(data->sensordata, _sensorAddress);
|
||||
SensorReading = MjEngineTool.UnityVector3(data->sensordata + _sensorAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class MjSiteQuaternionSensor : MjBaseSensor {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
SensorReading = MjEngineTool.UnityQuaternion(data->sensordata, _sensorAddress);
|
||||
SensorReading = MjEngineTool.UnityQuaternion(data->sensordata + _sensorAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,8 +69,7 @@ public class MjSiteVectorSensor : MjBaseSensor {
|
||||
}
|
||||
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
Vector3 mjReading = new Vector3((float)data->sensordata[_sensorAddress], (float)data->sensordata[_sensorAddress + 1], (float)data->sensordata[_sensorAddress + 2]);
|
||||
SensorReading = MjEngineTool.UnityVector3(mjReading);
|
||||
SensorReading = MjEngineTool.UnityVector3(data->sensordata + _sensorAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,8 +48,10 @@ public class MjGeom : MjShapeComponent {
|
||||
var MjParent = MjHierarchyTool.FindParentComponent<MjBaseBody>(this);
|
||||
if (MjParent != null) {
|
||||
var comInParentFrame = new MjTransformation(
|
||||
translation: MjEngineTool.UnityVector3(model->geom_pos, MujocoId),
|
||||
rotation: MjEngineTool.UnityQuaternion(model->geom_quat, MujocoId));
|
||||
translation: MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(model->geom_pos, MujocoId)),
|
||||
rotation: MjEngineTool.UnityQuaternion(
|
||||
MjEngineTool.MjQuaternionAtEntry(model->geom_quat, MujocoId)));
|
||||
|
||||
// We don't want to bother calculating global transform in mujoco from mjModel,
|
||||
// so we'll assume it's the same as the Unity transfor (it's the beginning of simulation after
|
||||
@@ -78,13 +80,17 @@ public class MjGeom : MjShapeComponent {
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
if (ShapeType == ShapeTypes.Mesh) {
|
||||
_geomInGlobalFrame.Set(
|
||||
translation: MjEngineTool.UnityVector3(data->geom_xpos, MujocoId),
|
||||
rotation: MjEngineTool.UnityQuaternionFromMatrix(data->geom_xmat, MujocoId));
|
||||
translation: MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->geom_xpos, MujocoId)),
|
||||
rotation: MjEngineTool.UnityQuaternionFromMatrix(
|
||||
MjEngineTool.MjMatrixAtEntry(data->geom_xmat, MujocoId)));
|
||||
var comInGlobalFrame = _geomInGlobalFrame * _comTransform;
|
||||
comInGlobalFrame.StoreGlobal(transform);
|
||||
} else {
|
||||
transform.position = MjEngineTool.UnityVector3(data->geom_xpos, MujocoId);
|
||||
transform.rotation = MjEngineTool.UnityQuaternionFromMatrix(data->geom_xmat, MujocoId);
|
||||
transform.position = MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->geom_xpos, MujocoId));
|
||||
transform.rotation = MjEngineTool.UnityQuaternionFromMatrix(
|
||||
MjEngineTool.MjMatrixAtEntry(data->geom_xmat, MujocoId));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,8 +40,10 @@ public class MjSite : MjShapeComponent {
|
||||
|
||||
// Synchronize the state of the component.
|
||||
public override unsafe void OnSyncState(MujocoLib.mjData_* data) {
|
||||
transform.position = MjEngineTool.UnityVector3(data->site_xpos, MujocoId);
|
||||
transform.rotation = MjEngineTool.UnityQuaternionFromMatrix(data->site_xmat, MujocoId);
|
||||
transform.position = MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->site_xpos, MujocoId));
|
||||
transform.rotation = MjEngineTool.UnityQuaternionFromMatrix(
|
||||
MjEngineTool.MjMatrixAtEntry(data->site_xmat, MujocoId));
|
||||
}
|
||||
|
||||
public void OnDrawGizmosSelected() {
|
||||
|
||||
@@ -115,8 +115,10 @@ public class MjSpatialTendon : MjBaseTendon {
|
||||
if (data->wrap_obj[readHead] == -2 || data->wrap_obj[readHead + 1] == -2) {
|
||||
readHead += 1;
|
||||
} else {
|
||||
Vector3 start = MjEngineTool.UnityVector3(data->wrap_xpos, readHead);
|
||||
Vector3 end = MjEngineTool.UnityVector3(data->wrap_xpos, readHead + 1);
|
||||
Vector3 start = MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->wrap_xpos, readHead));
|
||||
Vector3 end = MjEngineTool.UnityVector3(
|
||||
MjEngineTool.MjVector3AtEntry(data->wrap_xpos, readHead + 1));
|
||||
Gizmos.DrawLine(start, end);
|
||||
if (data->wrap_obj[readHead + 1] >= 0) { // a wrap geom
|
||||
readHead += 2;
|
||||
|
||||
Reference in New Issue
Block a user