Add defaults to SDF plugin attributes.

Expose diameter and number of teeth for the gear SDF.

PiperOrigin-RevId: 577779297
Change-Id: Iec5890ab7f39080b395cf06a76f9c2216f4f39ed
This commit is contained in:
Alessio Quaglino
2023-10-30 03:08:41 -07:00
committed by Copybara-Service
parent c921c3956e
commit 50843cad30
18 changed files with 341 additions and 97 deletions
+40
View File
@@ -15,6 +15,9 @@
#ifndef MUJOCO_PLUGIN_SDF_SDF_H_
#define MUJOCO_PLUGIN_SDF_SDF_H_
#include <map>
#include <stdexcept>
#include <string>
#include <vector>
#include <mujoco/mujoco.h>
@@ -40,6 +43,43 @@ inline mjtNum Fract(mjtNum x) {
// reads numeric attributes
bool CheckAttr(const char* name, const mjModel* m, int instance);
// converts attributes to numeric or returns default if not present
template <typename T>
class SdfDefault {
public:
SdfDefault() {
for (int i = 0; i < T::nattribute; i++) {
default_[T::names[i]] = T::defaults[i];
}
}
// get a single default value
mjtNum GetDefault(const char* name, const char* value) {
if (std::string(value).empty()) {
return default_[name];
}
try {
mjtNum num = std::stod(value);
return num;
} catch (const std::invalid_argument& e) {
mju_error("invalid attribute value for '%s'", name);
return 0;
}
}
// populate attribute array
void GetDefaults(mjtNum* attribute, const char* names[],
const char* values[]) {
for (int i = 0; i < default_.size(); i++) {
attribute[i] = GetDefault(names[i], values[i]);
}
}
private:
std::map<std::string, mjtNum> default_;
};
// stores the history of gradient descent iterations
class SdfVisualizer {
public:
SdfVisualizer();