Add control plugin API.

PiperOrigin-RevId: 493311715
Change-Id: Iccd99fb26004f39832818e378f01f9149a0e3e3b
This commit is contained in:
Saran Tunyasuvunakool
2022-12-06 08:23:07 -08:00
committed by Copybara-Service
parent 60fbb77b2a
commit e4f1d584ad
14 changed files with 70 additions and 41 deletions
+6 -5
View File
@@ -277,7 +277,7 @@ void Cable::RegisterPlugin() {
mjp_defaultPlugin(&plugin);
plugin.name = "mujoco.elasticity.cable";
plugin.type |= mjPLUGIN_PASSIVE;
plugin.capabilities |= mjPLUGIN_PASSIVE;
const char* attributes[] = {"twist", "bend", "flat", "vmax"};
plugin.nattribute = sizeof(attributes) / sizeof(attributes[0]);
@@ -297,10 +297,11 @@ return 0;
delete reinterpret_cast<Cable*>(d->plugin_data[instance]);
d->plugin_data[instance] = 0;
};
plugin.compute = +[](const mjModel* m, mjData* d, int instance, int type) {
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
elasticity->Compute(m, d, instance);
};
plugin.compute =
+[](const mjModel* m, mjData* d, int instance, int capability_bit) {
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
elasticity->Compute(m, d, instance);
};
plugin.visualize =
+[](const mjModel* m, mjData* d, mjvScene* scn, int instance) {
auto* elasticity = reinterpret_cast<Cable*>(d->plugin_data[instance]);
+1 -2
View File
@@ -30,8 +30,7 @@ class Cable {
public:
// Creates a new Cable instance (allocated with `new`) or
// returns null on failure.
static std::optional<Cable> Create(const mjModel* m, mjData* d,
int instance);
static std::optional<Cable> Create(const mjModel* m, mjData* d, int instance);
Cable(Cable&&) = default;
~Cable() = default;
+6 -5
View File
@@ -347,7 +347,7 @@ void Solid::RegisterPlugin() {
mjp_defaultPlugin(&plugin);
plugin.name = "mujoco.elasticity.solid";
plugin.type |= mjPLUGIN_PASSIVE;
plugin.capabilities |= mjPLUGIN_PASSIVE;
const char* attributes[] = {"nx", "ny", "nz", "young", "poisson", "damping"};
plugin.nattribute = sizeof(attributes) / sizeof(attributes[0]);
@@ -367,10 +367,11 @@ void Solid::RegisterPlugin() {
delete reinterpret_cast<Solid*>(d->plugin_data[instance]);
d->plugin_data[instance] = 0;
};
plugin.compute = +[](const mjModel* m, mjData* d, int instance, int type) {
auto* elasticity = reinterpret_cast<Solid*>(d->plugin_data[instance]);
elasticity->Compute(m, d, instance);
};
plugin.compute =
+[](const mjModel* m, mjData* d, int instance, int capability_bit) {
auto* elasticity = reinterpret_cast<Solid*>(d->plugin_data[instance]);
elasticity->Compute(m, d, instance);
};
mjp_registerPlugin(&plugin);
}
+1 -2
View File
@@ -33,8 +33,7 @@ struct Stencil {
class Solid {
public:
// Returns a new Solid instance or nullopt on failure.
static std::optional<Solid> Create(const mjModel* m, mjData* d,
int instance);
static std::optional<Solid> Create(const mjModel* m, mjData* d, int instance);
Solid(Solid&&) = default;
Solid& operator=(Solid&& other) = default;