Merge pull request #1508 from Balint-H:fix/limit-auto-parsing

PiperOrigin-RevId: 616680348
Change-Id: I55edeec1d522ab6f04514747b3c4ad5dfb2cd45f
This commit is contained in:
Copybara-Service
2024-03-17 18:39:26 -07:00
3 changed files with 27 additions and 15 deletions
@@ -165,14 +165,7 @@ namespace Mujoco {
ImpFriction.FromMjcf(mjcf, "solimpfriction");
FrictionLoss = mjcf.GetFloatAttribute("frictionloss", 0.0f);
bool defaultLimited = false;
if ((mjcf.OwnerDocument.GetElementsByTagName("compiler")[0]?["compiler"])
?.GetBoolAttribute("autolimits", true) ??
true) {
defaultLimited = mjcf.HasAttribute("range");
}
Limited = mjcf.GetBoolAttribute("limited", defaultLimited);
Limited = mjcf.GetLimitedAttribute("limited", mjcf.HasAttribute("range"));
Margin = mjcf.GetFloatAttribute("margin", defaultValue: 0.0f);
}
}
+4 -7
View File
@@ -82,13 +82,10 @@ public class MjActuator : MjComponent {
LengthRange = mjcf.GetVector2Attribute("lengthrange", defaultValue: Vector2.zero);
Gear = mjcf.GetFloatArrayAttribute("gear", defaultValue: new float[] { 1.0f }).ToList();
bool autolimits = (mjcf.OwnerDocument.GetElementsByTagName("compiler")[0]?["compiler"])
?.GetBoolAttribute("autolimits", true) ??
false;
CtrlLimited = mjcf.GetBoolAttribute("ctrllimited",
defaultValue: autolimits ? CtrlRange != Vector2.zero : false);
ForceLimited = mjcf.GetBoolAttribute("forcelimited",
defaultValue: autolimits ? ForceRange != Vector2.zero : false);
CtrlLimited = mjcf.GetLimitedAttribute("ctrllimited",
rangeDefined: mjcf.HasAttribute("ctrlrange"));
ForceLimited = mjcf.GetLimitedAttribute("forcelimited",
rangeDefined: mjcf.HasAttribute("forcerange"));
}
}
@@ -37,6 +37,28 @@ public static class XmlElementExtensions {
}
}
public static bool GetLimitedAttribute(
this XmlElement element, string name, bool rangeDefined) {
var strValue = element.GetStringAttribute(name, "auto");
if (strValue == "auto" && rangeDefined && element.GetAutolimitsEnabled()) return true;
if (strValue == "auto") return false;
bool parsedValue;
if (bool.TryParse(strValue, out parsedValue)) {
return parsedValue;
} else {
throw new ArgumentException($"'{strValue}' is not a bool.");
}
}
public static bool GetAutolimitsEnabled(
this XmlElement element) {
bool autolimits = (element.OwnerDocument?.GetElementsByTagName("compiler")[0]?["compiler"])
?.GetBoolAttribute("autolimits", true) ??
true;
return autolimits;
}
public static float GetFloatAttribute(
this XmlElement element, string name, float defaultValue = 0.0f) {
if (!element.HasAttribute(name)) {