diff --git a/unity/Editor/Components/MjActuatorEditor.cs b/unity/Editor/Components/MjActuatorEditor.cs index 9ac963cc..10fc7de8 100644 --- a/unity/Editor/Components/MjActuatorEditor.cs +++ b/unity/Editor/Components/MjActuatorEditor.cs @@ -35,6 +35,7 @@ namespace Mujoco { private SerializedProperty _biasPrm; // Position actuator properties. private SerializedProperty _kp; + private SerializedProperty _kvp; // Velocity actuator properties. private SerializedProperty _kv; // Cylinder actuator properties. @@ -70,6 +71,7 @@ namespace Mujoco { _biasPrm = customParams.FindPropertyRelative("BiasPrm"); // Position actuator properties. _kp = customParams.FindPropertyRelative("Kp"); + _kvp = customParams.FindPropertyRelative("Kvp"); // Velocity actuator properties. _kv = customParams.FindPropertyRelative("Kv"); // Cylinder actuator properties. @@ -166,6 +168,7 @@ namespace Mujoco { private void EditPositionParams(MjActuator.CustomParameters parameters) { EditorGUILayout.PropertyField(_kp); + EditorGUILayout.PropertyField(_kvp, new GUIContent("Kv")); } private void EditVelocityParams(MjActuator.CustomParameters parameters) { diff --git a/unity/Runtime/Components/MjActuator.cs b/unity/Runtime/Components/MjActuator.cs index e44b8579..1c5ff755 100644 --- a/unity/Runtime/Components/MjActuator.cs +++ b/unity/Runtime/Components/MjActuator.cs @@ -164,11 +164,16 @@ public class MjActuator : MjComponent { [AbsoluteValue] public float Kp = 1.0f; + [AbsoluteValue] + public float Kvp; + public void PositionToMjcf(XmlElement mjcf) { mjcf.SetAttribute("kp", MjEngineTool.MakeLocaleInvariant($"{Math.Abs(Kp)}")); + mjcf.SetAttribute("kv", MjEngineTool.MakeLocaleInvariant($"{Math.Abs(Kvp)}")); } public void PositionFromMjcf(XmlElement mjcf) { Kp = mjcf.GetFloatAttribute("kp", defaultValue: 1.0f); + Kvp = mjcf.GetFloatAttribute("kv", defaultValue: 0f); } //// Velocity actuator parameters. diff --git a/unity/Tests/Editor/Components/MjActuatorTests.cs b/unity/Tests/Editor/Components/MjActuatorTests.cs index 175a59f4..437674b1 100644 --- a/unity/Tests/Editor/Components/MjActuatorTests.cs +++ b/unity/Tests/Editor/Components/MjActuatorTests.cs @@ -279,19 +279,22 @@ public class MjPositionActuatorTests { Assert.That(_doc.OuterXml, Does.Contain($""); + _doc.LoadXml(""); _actuator.ParseMjcf(_doc.GetElementsByTagName("position")[0] as XmlElement); Assert.That(_actuator.CustomParams.Kp, Is.EqualTo(2)); + Assert.That(_actuator.CustomParams.Kvp, Is.EqualTo(1)); } [Test] @@ -299,6 +302,7 @@ public class MjPositionActuatorTests { _doc.LoadXml(""); _actuator.ParseMjcf(_doc.GetElementsByTagName("position")[0] as XmlElement); Assert.That(_actuator.CustomParams.Kp, Is.EqualTo(1)); + Assert.That(_actuator.CustomParams.Kvp, Is.EqualTo(0)); } }