Convert user_api header and user_init source files to valid C code.
PiperOrigin-RevId: 629691192 Change-Id: I9be78aca27ae584fff0b733e9015b2bb3b927ca4
This commit is contained in:
committed by
Copybara-Service
parent
8d1f65c01a
commit
1b70907060
@@ -21,7 +21,7 @@ set(MUJOCO_USER_SRCS
|
|||||||
user_composite.h
|
user_composite.h
|
||||||
user_flexcomp.cc
|
user_flexcomp.cc
|
||||||
user_flexcomp.h
|
user_flexcomp.h
|
||||||
user_init.cc
|
user_init.c
|
||||||
user_mesh.cc
|
user_mesh.cc
|
||||||
user_model.cc
|
user_model.cc
|
||||||
user_model.h
|
user_model.h
|
||||||
|
|||||||
+32
-29
@@ -15,6 +15,7 @@
|
|||||||
#ifndef MUJOCO_SRC_USER_USER_API_H_
|
#ifndef MUJOCO_SRC_USER_USER_API_H_
|
||||||
#define MUJOCO_SRC_USER_USER_API_H_
|
#define MUJOCO_SRC_USER_USER_API_H_
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <mujoco/mjexport.h>
|
#include <mujoco/mjexport.h>
|
||||||
#include <mujoco/mjmodel.h>
|
#include <mujoco/mjmodel.h>
|
||||||
@@ -26,6 +27,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define mjNAN NAN // used to mark undefined fields
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------- handles to internal objects -----------------------------------
|
//---------------------------------- handles to internal objects -----------------------------------
|
||||||
|
|
||||||
@@ -144,7 +147,7 @@ typedef struct _mjSpec { // model specification
|
|||||||
mjString modelfiledir; // path to model file
|
mjString modelfiledir; // path to model file
|
||||||
|
|
||||||
// other
|
// other
|
||||||
bool hasImplicitPluginElem; // already encountered an implicit plugin sensor/actuator
|
mjtByte hasImplicitPluginElem; // already encountered an implicit plugin sensor/actuator
|
||||||
} mjSpec;
|
} mjSpec;
|
||||||
|
|
||||||
|
|
||||||
@@ -747,7 +750,7 @@ typedef struct _mjsDefault { // default specification
|
|||||||
//---------------------------------- Top-level spec manipulation -----------------------------------
|
//---------------------------------- Top-level spec manipulation -----------------------------------
|
||||||
|
|
||||||
// Create spec.
|
// Create spec.
|
||||||
MJAPI mjSpec* mjs_createSpec();
|
MJAPI mjSpec* mjs_createSpec(void);
|
||||||
|
|
||||||
// Compile spec to model.
|
// Compile spec to model.
|
||||||
MJAPI mjModel* mjs_compile(mjSpec* s, const mjVFS* vfs);
|
MJAPI mjModel* mjs_compile(mjSpec* s, const mjVFS* vfs);
|
||||||
@@ -977,80 +980,80 @@ MJAPI const char* mjs_fullInertia(double quat[4], double inertia[3], const doubl
|
|||||||
|
|
||||||
//---------------------------------- Initialization -----------------------------------------------
|
//---------------------------------- Initialization -----------------------------------------------
|
||||||
|
|
||||||
// Default model attributes.
|
// Default spec attributes.
|
||||||
MJAPI void mjs_defaultSpec(mjSpec& model);
|
MJAPI void mjs_defaultSpec(mjSpec* spec);
|
||||||
|
|
||||||
// Default orientation attributes.
|
// Default orientation attributes.
|
||||||
MJAPI void mjs_defaultOrientation(mjsOrientation& orient);
|
MJAPI void mjs_defaultOrientation(mjsOrientation* orient);
|
||||||
|
|
||||||
// Default body attributes.
|
// Default body attributes.
|
||||||
MJAPI void mjs_defaultBody(mjsBody& body);
|
MJAPI void mjs_defaultBody(mjsBody* body);
|
||||||
|
|
||||||
// Default frame attributes.
|
// Default frame attributes.
|
||||||
MJAPI void mjs_defaultFrame(mjsFrame& frame);
|
MJAPI void mjs_defaultFrame(mjsFrame* frame);
|
||||||
|
|
||||||
// Default joint attributes.
|
// Default joint attributes.
|
||||||
MJAPI void mjs_defaultJoint(mjsJoint& joint);
|
MJAPI void mjs_defaultJoint(mjsJoint* joint);
|
||||||
|
|
||||||
// Default geom attributes.
|
// Default geom attributes.
|
||||||
MJAPI void mjs_defaultGeom(mjsGeom& geom);
|
MJAPI void mjs_defaultGeom(mjsGeom* geom);
|
||||||
|
|
||||||
// Default site attributes.
|
// Default site attributes.
|
||||||
MJAPI void mjs_defaultSite(mjsSite& site);
|
MJAPI void mjs_defaultSite(mjsSite* site);
|
||||||
|
|
||||||
// Default camera attributes.
|
// Default camera attributes.
|
||||||
MJAPI void mjs_defaultCamera(mjsCamera& camera);
|
MJAPI void mjs_defaultCamera(mjsCamera* camera);
|
||||||
|
|
||||||
// Default light attributes.
|
// Default light attributes.
|
||||||
MJAPI void mjs_defaultLight(mjsLight& light);
|
MJAPI void mjs_defaultLight(mjsLight* light);
|
||||||
|
|
||||||
// Default flex attributes.
|
// Default flex attributes.
|
||||||
MJAPI void mjs_defaultFlex(mjsFlex& flex);
|
MJAPI void mjs_defaultFlex(mjsFlex* flex);
|
||||||
|
|
||||||
// Default mesh attributes.
|
// Default mesh attributes.
|
||||||
MJAPI void mjs_defaultMesh(mjsMesh& mesh);
|
MJAPI void mjs_defaultMesh(mjsMesh* mesh);
|
||||||
|
|
||||||
// Default height field attributes.
|
// Default height field attributes.
|
||||||
MJAPI void mjs_defaultHField(mjsHField& hfield);
|
MJAPI void mjs_defaultHField(mjsHField* hfield);
|
||||||
|
|
||||||
// Default skin attributes.
|
// Default skin attributes.
|
||||||
MJAPI void mjs_defaultSkin(mjsSkin& skin);
|
MJAPI void mjs_defaultSkin(mjsSkin* skin);
|
||||||
|
|
||||||
// Default texture attributes.
|
// Default texture attributes.
|
||||||
MJAPI void mjs_defaultTexture(mjsTexture& texture);
|
MJAPI void mjs_defaultTexture(mjsTexture* texture);
|
||||||
|
|
||||||
// Default material attributes.
|
// Default material attributes.
|
||||||
MJAPI void mjs_defaultMaterial(mjsMaterial& material);
|
MJAPI void mjs_defaultMaterial(mjsMaterial* material);
|
||||||
|
|
||||||
// Default pair attributes.
|
// Default pair attributes.
|
||||||
MJAPI void mjs_defaultPair(mjsPair& pair);
|
MJAPI void mjs_defaultPair(mjsPair* pair);
|
||||||
|
|
||||||
// Default equality attributes.
|
// Default equality attributes.
|
||||||
MJAPI void mjs_defaultEquality(mjsEquality& equality);
|
MJAPI void mjs_defaultEquality(mjsEquality* equality);
|
||||||
|
|
||||||
// Default tendon attributes.
|
// Default tendon attributes.
|
||||||
MJAPI void mjs_defaultTendon(mjsTendon& tendon);
|
MJAPI void mjs_defaultTendon(mjsTendon* tendon);
|
||||||
|
|
||||||
// Default actuator attributes.
|
// Default actuator attributes.
|
||||||
MJAPI void mjs_defaultActuator(mjsActuator& actuator);
|
MJAPI void mjs_defaultActuator(mjsActuator* actuator);
|
||||||
|
|
||||||
// Default sensor attributes.
|
// Default sensor attributes.
|
||||||
MJAPI void mjs_defaultSensor(mjsSensor& sensor);
|
MJAPI void mjs_defaultSensor(mjsSensor* sensor);
|
||||||
|
|
||||||
// Default numeric attributes.
|
// Default numeric attributes.
|
||||||
MJAPI void mjs_defaultNumeric(mjsNumeric& numeric);
|
MJAPI void mjs_defaultNumeric(mjsNumeric* numeric);
|
||||||
|
|
||||||
// Default text attributes.
|
// Default text attributes.
|
||||||
MJAPI void mjs_defaultText(mjsText& text);
|
MJAPI void mjs_defaultText(mjsText* text);
|
||||||
|
|
||||||
// Default tuple attributes.
|
// Default tuple attributes.
|
||||||
MJAPI void mjs_defaultTuple(mjsTuple& tuple);
|
MJAPI void mjs_defaultTuple(mjsTuple* tuple);
|
||||||
|
|
||||||
// Default keyframe attributes.
|
// Default keyframe attributes.
|
||||||
MJAPI void mjs_defaultKey(mjsKey& key);
|
MJAPI void mjs_defaultKey(mjsKey* key);
|
||||||
|
|
||||||
// Default plugin attributes.
|
// Default plugin attributes.
|
||||||
MJAPI void mjs_defaultPlugin(mjsPlugin& plugin);
|
MJAPI void mjs_defaultPlugin(mjsPlugin* plugin);
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------- Compiler cache ------------------------------------------------
|
//---------------------------------- Compiler cache ------------------------------------------------
|
||||||
@@ -1061,7 +1064,7 @@ typedef struct _mjCache* mjCache;
|
|||||||
MJAPI void mj_setCacheSize(mjCache cache, size_t size);
|
MJAPI void mj_setCacheSize(mjCache cache, size_t size);
|
||||||
|
|
||||||
// Get internal global cache context.
|
// Get internal global cache context.
|
||||||
MJAPI mjCache mj_globalCache();
|
MJAPI mjCache mj_globalCache(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ mjCComposite::mjCComposite(void) {
|
|||||||
mj_defaultSolRefImp(solrefsmooth, solimpsmooth);
|
mj_defaultSolRefImp(solrefsmooth, solimpsmooth);
|
||||||
|
|
||||||
// plugin variables
|
// plugin variables
|
||||||
mjs_defaultPlugin(plugin);
|
mjs_defaultPlugin(&plugin);
|
||||||
plugin_name = "";
|
plugin_name = "";
|
||||||
plugin_instance_name = "";
|
plugin_instance_name = "";
|
||||||
plugin.name = (mjString)&plugin_name;
|
plugin.name = (mjString)&plugin_name;
|
||||||
|
|||||||
@@ -87,8 +87,8 @@ mjCFlexcomp::mjCFlexcomp(void) {
|
|||||||
rigid = false;
|
rigid = false;
|
||||||
centered = false;
|
centered = false;
|
||||||
|
|
||||||
mjs_defaultPlugin(plugin);
|
mjs_defaultPlugin(&plugin);
|
||||||
mjs_defaultOrientation(alt);
|
mjs_defaultOrientation(&alt);
|
||||||
plugin_name = "";
|
plugin_name = "";
|
||||||
plugin_instance_name = "";
|
plugin_instance_name = "";
|
||||||
plugin.name = (mjString)&plugin_name;
|
plugin.name = (mjString)&plugin_name;
|
||||||
|
|||||||
@@ -0,0 +1,404 @@
|
|||||||
|
// Copyright 2024 DeepMind Technologies Limited
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <mujoco/mjmodel.h>
|
||||||
|
#include <mujoco/mjvisualize.h>
|
||||||
|
#include "engine/engine_io.h"
|
||||||
|
#include "user/user_api.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default model attributes
|
||||||
|
void mjs_defaultSpec(mjSpec* spec) {
|
||||||
|
memset(spec, 0, sizeof(mjSpec));
|
||||||
|
|
||||||
|
// default statistics
|
||||||
|
spec->stat.meaninertia = mjNAN;
|
||||||
|
spec->stat.meanmass = mjNAN;
|
||||||
|
spec->stat.meansize = mjNAN;
|
||||||
|
spec->stat.extent = mjNAN;
|
||||||
|
spec->stat.center[0] = mjNAN;
|
||||||
|
|
||||||
|
// compiler settings
|
||||||
|
spec->autolimits = 1;
|
||||||
|
spec->settotalmass = -1;
|
||||||
|
spec->degree = 1;
|
||||||
|
spec->euler[0] = 'x';
|
||||||
|
spec->euler[1] = 'y';
|
||||||
|
spec->euler[2] = 'z';
|
||||||
|
spec->convexhull = 1;
|
||||||
|
spec->usethread = 1;
|
||||||
|
spec->inertiafromgeom = mjINERTIAFROMGEOM_AUTO;
|
||||||
|
spec->inertiagrouprange[1] = mjNGROUP-1;
|
||||||
|
mj_defaultLROpt(&spec->LRopt);
|
||||||
|
|
||||||
|
// engine data
|
||||||
|
mj_defaultOption(&spec->option);
|
||||||
|
mj_defaultVisual(&spec->visual);
|
||||||
|
spec->memory = -1;
|
||||||
|
spec->njmax = -1;
|
||||||
|
spec->nconmax = -1;
|
||||||
|
spec->nstack = -1;
|
||||||
|
|
||||||
|
// user fields
|
||||||
|
spec->nuser_body = -1;
|
||||||
|
spec->nuser_jnt = -1;
|
||||||
|
spec->nuser_geom = -1;
|
||||||
|
spec->nuser_site = -1;
|
||||||
|
spec->nuser_cam = -1;
|
||||||
|
spec->nuser_tendon = -1;
|
||||||
|
spec->nuser_actuator = -1;
|
||||||
|
spec->nuser_sensor = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default orientation attributes
|
||||||
|
void mjs_defaultOrientation(mjsOrientation* orient) {
|
||||||
|
memset(orient, 0, sizeof(mjsOrientation));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default body attributes
|
||||||
|
void mjs_defaultBody(mjsBody* body) {
|
||||||
|
memset(body, 0, sizeof(mjsBody));
|
||||||
|
|
||||||
|
// body frame
|
||||||
|
body->pos[0] = mjNAN;
|
||||||
|
body->quat[0] = 1;
|
||||||
|
|
||||||
|
// inertial frame
|
||||||
|
body->ipos[0] = mjNAN;
|
||||||
|
body->iquat[0] = 1;
|
||||||
|
body->fullinertia[0] = mjNAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default frame attributes
|
||||||
|
void mjs_defaultFrame(mjsFrame* frame) {
|
||||||
|
memset(frame, 0, sizeof(mjsFrame));
|
||||||
|
frame->quat[0] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default joint attributes
|
||||||
|
void mjs_defaultJoint(mjsJoint* joint) {
|
||||||
|
memset(joint, 0, sizeof(mjsJoint));
|
||||||
|
joint->type = mjJNT_HINGE;
|
||||||
|
joint->axis[2] = 1;
|
||||||
|
joint->limited = mjLIMITED_AUTO;
|
||||||
|
joint->actfrclimited = mjLIMITED_AUTO;
|
||||||
|
mj_defaultSolRefImp(joint->solref_limit, joint->solimp_limit);
|
||||||
|
mj_defaultSolRefImp(joint->solref_friction, joint->solimp_friction);
|
||||||
|
joint->urdfeffort = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default geom attributes
|
||||||
|
void mjs_defaultGeom(mjsGeom* geom) {
|
||||||
|
memset(geom, 0, sizeof(mjsGeom));
|
||||||
|
|
||||||
|
// type
|
||||||
|
geom->type = mjGEOM_SPHERE;
|
||||||
|
|
||||||
|
// frame
|
||||||
|
geom->quat[0] = 1;
|
||||||
|
geom->fromto[0] = mjNAN;
|
||||||
|
|
||||||
|
// contact-related
|
||||||
|
geom->contype = 1;
|
||||||
|
geom->conaffinity = 1;
|
||||||
|
geom->condim = 3;
|
||||||
|
geom->friction[0] = 1;
|
||||||
|
geom->friction[1] = 0.005;
|
||||||
|
geom->friction[2] = 0.0001;
|
||||||
|
geom->solmix = 1.0;
|
||||||
|
mj_defaultSolRefImp(geom->solref, geom->solimp);
|
||||||
|
|
||||||
|
// inertia-related
|
||||||
|
geom->mass = mjNAN;
|
||||||
|
geom->density = 1000; // water density (1000 Kg / m^3)
|
||||||
|
geom->typeinertia = mjINERTIA_VOLUME;
|
||||||
|
|
||||||
|
// color
|
||||||
|
geom->rgba[0] = geom->rgba[1] = geom->rgba[2] = 0.5f;
|
||||||
|
geom->rgba[3] = 1.0f;
|
||||||
|
|
||||||
|
// fluid forces
|
||||||
|
geom->fluid_coefs[0] = 0.5; // blunt drag
|
||||||
|
geom->fluid_coefs[1] = 0.25; // slender drag
|
||||||
|
geom->fluid_coefs[2] = 1.5; // angular drag
|
||||||
|
geom->fluid_coefs[3] = 1.0; // kutta lift
|
||||||
|
geom->fluid_coefs[4] = 1.0; // magnus lift
|
||||||
|
|
||||||
|
// other
|
||||||
|
geom->fitscale = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default site attributes
|
||||||
|
void mjs_defaultSite(mjsSite* site) {
|
||||||
|
memset(site, 0, sizeof(mjsSite));
|
||||||
|
|
||||||
|
// type
|
||||||
|
site->type = mjGEOM_SPHERE;
|
||||||
|
|
||||||
|
// frame
|
||||||
|
site->quat[0] = 1;
|
||||||
|
site->size[0] = site->size[1] = site->size[2] = 0.005;
|
||||||
|
site->fromto[0] = mjNAN;
|
||||||
|
|
||||||
|
// color
|
||||||
|
site->rgba[0] = site->rgba[1] = site->rgba[2] = 0.5f;
|
||||||
|
site->rgba[3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default cam attributes
|
||||||
|
void mjs_defaultCamera(mjsCamera* cam) {
|
||||||
|
memset(cam, 0, sizeof(mjsCamera));
|
||||||
|
|
||||||
|
// mode
|
||||||
|
cam->mode = mjCAMLIGHT_FIXED;
|
||||||
|
|
||||||
|
// extrinsics
|
||||||
|
cam->quat[0] = 1;
|
||||||
|
|
||||||
|
// intrinsics
|
||||||
|
cam->fovy = 45;
|
||||||
|
cam->ipd = 0.068;
|
||||||
|
cam->resolution[0] = cam->resolution[1] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default light attributes
|
||||||
|
void mjs_defaultLight(mjsLight* light) {
|
||||||
|
memset(light, 0, sizeof(mjsLight));
|
||||||
|
|
||||||
|
// mode
|
||||||
|
light->mode = mjCAMLIGHT_FIXED;
|
||||||
|
|
||||||
|
// extrinsics
|
||||||
|
light->dir[2] = -1;
|
||||||
|
|
||||||
|
// intrinsics
|
||||||
|
light->castshadow = 1;
|
||||||
|
light->bulbradius = 0.02;
|
||||||
|
light->active = 1;
|
||||||
|
light->attenuation[0] = 1;
|
||||||
|
light->cutoff = 45;
|
||||||
|
light->exponent = 10;
|
||||||
|
light->diffuse[0] = light->diffuse[1] = light->diffuse[2] = 0.7;
|
||||||
|
light->specular[0] = light->specular[1] = light->specular[2] = 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default flex attributes
|
||||||
|
void mjs_defaultFlex(mjsFlex* flex) {
|
||||||
|
memset(flex, 0, sizeof(mjsFlex));
|
||||||
|
|
||||||
|
// set contact defaults
|
||||||
|
flex->contype = 1;
|
||||||
|
flex->conaffinity = 1;
|
||||||
|
flex->condim = 3;
|
||||||
|
flex->friction[0] = 1;
|
||||||
|
flex->friction[1] = 0.005;
|
||||||
|
flex->friction[2] = 0.0001;
|
||||||
|
flex->solmix = 1.0;
|
||||||
|
mj_defaultSolRefImp(flex->solref, flex->solimp);
|
||||||
|
|
||||||
|
// set other defaults
|
||||||
|
flex->dim = 2;
|
||||||
|
flex->radius = 0.005;
|
||||||
|
flex->internal = 1;
|
||||||
|
flex->selfcollide = mjFLEXSELF_AUTO;
|
||||||
|
flex->activelayers = 1;
|
||||||
|
flex->rgba[0] = flex->rgba[1] = flex->rgba[2] = 0.5f;
|
||||||
|
flex->rgba[3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default mesh attributes
|
||||||
|
void mjs_defaultMesh(mjsMesh* mesh) {
|
||||||
|
memset(mesh, 0, sizeof(mjsMesh));
|
||||||
|
mesh->refquat[0] = 1;
|
||||||
|
mesh->scale[0] = mesh->scale[1] = mesh->scale[2] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default height field attributes
|
||||||
|
void mjs_defaultHField(mjsHField* hfield) {
|
||||||
|
memset(hfield, 0, sizeof(mjsHField));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default skin attributes
|
||||||
|
void mjs_defaultSkin(mjsSkin* skin) {
|
||||||
|
memset(skin, 0, sizeof(mjsSkin));
|
||||||
|
skin->rgba[0] = skin->rgba[1] = skin->rgba[2] = 0.5f;
|
||||||
|
skin->rgba[3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default texture attributes
|
||||||
|
void mjs_defaultTexture(mjsTexture* texture) {
|
||||||
|
memset(texture, 0, sizeof(mjsTexture));
|
||||||
|
texture->type = mjTEXTURE_CUBE;
|
||||||
|
texture->rgb1[0] = texture->rgb1[1] = texture->rgb1[2] = 0.8;
|
||||||
|
texture->rgb2[0] = texture->rgb2[1] = texture->rgb2[2] = 0.5;
|
||||||
|
texture->random = 0.01;
|
||||||
|
texture->gridsize[0] = texture->gridsize[1] = 1;
|
||||||
|
char defaultlayout[sizeof(texture->gridlayout)] = "............";
|
||||||
|
strncpy(texture->gridlayout, defaultlayout, sizeof(texture->gridlayout));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default material attributes
|
||||||
|
void mjs_defaultMaterial(mjsMaterial* material) {
|
||||||
|
memset(material, 0, sizeof(mjsMaterial));
|
||||||
|
material->texrepeat[0] = material->texrepeat[1] = 1;
|
||||||
|
material->specular = 0.5;
|
||||||
|
material->shininess = 0.5;
|
||||||
|
material->metallic = 1.;
|
||||||
|
material->roughness = 1.0;
|
||||||
|
material->rgba[0] = material->rgba[1] = material->rgba[2] = material->rgba[3] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default pair attributes
|
||||||
|
void mjs_defaultPair(mjsPair* pair) {
|
||||||
|
memset(pair, 0, sizeof(mjsPair));
|
||||||
|
pair->condim = 3;
|
||||||
|
mj_defaultSolRefImp(pair->solref, pair->solimp);
|
||||||
|
pair->friction[0] = 1;
|
||||||
|
pair->friction[1] = 1;
|
||||||
|
pair->friction[2] = 0.005;
|
||||||
|
pair->friction[3] = 0.0001;
|
||||||
|
pair->friction[4] = 0.0001;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default equality attributes
|
||||||
|
void mjs_defaultEquality(mjsEquality* equality) {
|
||||||
|
memset(equality, 0, sizeof(mjsEquality));
|
||||||
|
equality->type = mjEQ_CONNECT;
|
||||||
|
equality->active = 1;
|
||||||
|
mj_defaultSolRefImp(equality->solref, equality->solimp);
|
||||||
|
equality->data[1] = 1;
|
||||||
|
equality->data[10] = 1; // torque:force ratio
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default tendon attributes
|
||||||
|
void mjs_defaultTendon(mjsTendon* tendon) {
|
||||||
|
memset(tendon, 0, sizeof(mjsTendon));
|
||||||
|
tendon->limited = mjLIMITED_AUTO;
|
||||||
|
tendon->springlength[0] = tendon->springlength[1] = -1;
|
||||||
|
mj_defaultSolRefImp(tendon->solref_limit, tendon->solimp_limit);
|
||||||
|
mj_defaultSolRefImp(tendon->solref_friction, tendon->solimp_friction);
|
||||||
|
tendon->width = 0.003;
|
||||||
|
tendon->rgba[0] = tendon->rgba[1] = tendon->rgba[2] = 0.5f;
|
||||||
|
tendon->rgba[3] = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default actuator attributes
|
||||||
|
void mjs_defaultActuator(mjsActuator* actuator) {
|
||||||
|
memset(actuator, 0, sizeof(mjsActuator));
|
||||||
|
|
||||||
|
// gain, bias
|
||||||
|
actuator->gaintype = mjGAIN_FIXED;
|
||||||
|
actuator->gainprm[0] = 1;
|
||||||
|
actuator->biastype = mjBIAS_NONE;
|
||||||
|
|
||||||
|
// activation state
|
||||||
|
actuator->dyntype = mjDYN_NONE;
|
||||||
|
actuator->dynprm[0] = 1;
|
||||||
|
actuator->actdim = -1;
|
||||||
|
|
||||||
|
// transmission
|
||||||
|
actuator->trntype = mjTRN_UNDEFINED;
|
||||||
|
actuator->gear[0] = 1;
|
||||||
|
|
||||||
|
// input/output clamping
|
||||||
|
actuator->ctrllimited = mjLIMITED_AUTO;
|
||||||
|
actuator->forcelimited = mjLIMITED_AUTO;
|
||||||
|
actuator->actlimited = mjLIMITED_AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default sensor attributes
|
||||||
|
void mjs_defaultSensor(mjsSensor* sensor) {
|
||||||
|
memset(sensor, 0, sizeof(mjsSensor));
|
||||||
|
|
||||||
|
sensor->type = mjSENS_TOUCH;
|
||||||
|
sensor->datatype = mjDATATYPE_REAL;
|
||||||
|
sensor->needstage = mjSTAGE_ACC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Default numeric attributes.
|
||||||
|
void mjs_defaultNumeric(mjsNumeric* numeric) {
|
||||||
|
memset(numeric, 0, sizeof(mjsNumeric));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Default text attributes.
|
||||||
|
void mjs_defaultText(mjsText* text) {
|
||||||
|
memset(text, 0, sizeof(mjsText));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Default tuple attributes.
|
||||||
|
void mjs_defaultTuple(mjsTuple* tuple) {
|
||||||
|
memset(tuple, 0, sizeof(mjsTuple));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Default keyframe attributes.
|
||||||
|
void mjs_defaultKey(mjsKey* key) {
|
||||||
|
memset(key, 0, sizeof(mjsKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// default plugin attributes
|
||||||
|
void mjs_defaultPlugin(mjsPlugin* plugin) {
|
||||||
|
memset(plugin, 0, sizeof(mjsPlugin));
|
||||||
|
plugin->plugin_slot = -1;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,425 +0,0 @@
|
|||||||
// Copyright 2024 DeepMind Technologies Limited
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
#include <mujoco/mjmodel.h>
|
|
||||||
#include <mujoco/mujoco.h>
|
|
||||||
#include "cc/array_safety.h"
|
|
||||||
#include "user/user_api.h"
|
|
||||||
#include "user/user_util.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default model attributes
|
|
||||||
void mjs_defaultSpec(mjSpec& model) {
|
|
||||||
memset(&model, 0, sizeof(mjSpec));
|
|
||||||
|
|
||||||
// default statistics
|
|
||||||
model.stat.meaninertia = mjNAN;
|
|
||||||
model.stat.meanmass = mjNAN;
|
|
||||||
model.stat.meansize = mjNAN;
|
|
||||||
model.stat.extent = mjNAN;
|
|
||||||
model.stat.center[0] = mjNAN;
|
|
||||||
|
|
||||||
// compiler settings
|
|
||||||
model.autolimits = true;
|
|
||||||
model.boundmass = 0;
|
|
||||||
model.boundinertia = 0;
|
|
||||||
model.settotalmass = -1;
|
|
||||||
model.balanceinertia = false;
|
|
||||||
model.strippath = false;
|
|
||||||
model.fitaabb = false;
|
|
||||||
model.degree = true;
|
|
||||||
model.euler[0] = 'x';
|
|
||||||
model.euler[1] = 'y';
|
|
||||||
model.euler[2] = 'z';
|
|
||||||
model.discardvisual = false;
|
|
||||||
model.convexhull = true;
|
|
||||||
model.usethread = true;
|
|
||||||
model.fusestatic = false;
|
|
||||||
model.inertiafromgeom = mjINERTIAFROMGEOM_AUTO;
|
|
||||||
model.inertiagrouprange[0] = 0;
|
|
||||||
model.inertiagrouprange[1] = mjNGROUP-1;
|
|
||||||
model.exactmeshinertia = false;
|
|
||||||
mj_defaultLROpt(&model.LRopt);
|
|
||||||
|
|
||||||
// engine data
|
|
||||||
mj_defaultOption(&model.option);
|
|
||||||
mj_defaultVisual(&model.visual);
|
|
||||||
model.memory = -1;
|
|
||||||
model.nemax = 0;
|
|
||||||
model.njmax = -1;
|
|
||||||
model.nconmax = -1;
|
|
||||||
model.nstack = -1;
|
|
||||||
model.nuserdata = 0;
|
|
||||||
model.nuser_body = -1;
|
|
||||||
model.nuser_jnt = -1;
|
|
||||||
model.nuser_geom = -1;
|
|
||||||
model.nuser_site = -1;
|
|
||||||
model.nuser_cam = -1;
|
|
||||||
model.nuser_tendon = -1;
|
|
||||||
model.nuser_actuator = -1;
|
|
||||||
model.nuser_sensor = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default orientation attributes
|
|
||||||
void mjs_defaultOrientation(mjsOrientation& orient) {
|
|
||||||
memset(&orient, 0, sizeof(mjsOrientation));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default body attributes
|
|
||||||
void mjs_defaultBody(mjsBody& body) {
|
|
||||||
memset(&body, 0, sizeof(mjsBody));
|
|
||||||
|
|
||||||
// body frame
|
|
||||||
body.pos[0] = mjNAN;
|
|
||||||
body.quat[0] = 1;
|
|
||||||
mjs_defaultOrientation(body.alt);
|
|
||||||
|
|
||||||
// inertial frame
|
|
||||||
body.ipos[0] = mjNAN;
|
|
||||||
body.iquat[0] = 1;
|
|
||||||
mjs_defaultOrientation(body.ialt);
|
|
||||||
body.fullinertia[0] = mjNAN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default frame attributes
|
|
||||||
void mjs_defaultFrame(mjsFrame& frame) {
|
|
||||||
memset(&frame, 0, sizeof(mjsFrame));
|
|
||||||
mju_zero3(frame.pos);
|
|
||||||
mjuu_setvec(frame.quat, 1, 0, 0, 0);
|
|
||||||
mjs_defaultOrientation(frame.alt);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default joint attributes
|
|
||||||
void mjs_defaultJoint(mjsJoint& joint) {
|
|
||||||
memset(&joint, 0, sizeof(mjsJoint));
|
|
||||||
|
|
||||||
joint.type = mjJNT_HINGE;
|
|
||||||
joint.axis[2] = 1;
|
|
||||||
joint.limited = mjLIMITED_AUTO;
|
|
||||||
joint.actfrclimited = mjLIMITED_AUTO;
|
|
||||||
mj_defaultSolRefImp(joint.solref_limit, joint.solimp_limit);
|
|
||||||
mj_defaultSolRefImp(joint.solref_friction, joint.solimp_friction);
|
|
||||||
joint.urdfeffort = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default geom attributes
|
|
||||||
void mjs_defaultGeom(mjsGeom& geom) {
|
|
||||||
memset(&geom, 0, sizeof(mjsGeom));
|
|
||||||
|
|
||||||
// type
|
|
||||||
geom.type = mjGEOM_SPHERE;
|
|
||||||
|
|
||||||
// frame
|
|
||||||
geom.quat[0] = 1;
|
|
||||||
geom.fromto[0] = mjNAN;
|
|
||||||
mjs_defaultOrientation(geom.alt);
|
|
||||||
|
|
||||||
// contact-related
|
|
||||||
geom.contype = 1;
|
|
||||||
geom.conaffinity = 1;
|
|
||||||
geom.condim = 3;
|
|
||||||
geom.friction[0] = 1;
|
|
||||||
geom.friction[1] = 0.005;
|
|
||||||
geom.friction[2] = 0.0001;
|
|
||||||
geom.solmix = 1.0;
|
|
||||||
mj_defaultSolRefImp(geom.solref, geom.solimp);
|
|
||||||
|
|
||||||
// inertia-related
|
|
||||||
geom.mass = mjNAN;
|
|
||||||
geom.density = 1000; // water density (1000 Kg / m^3)
|
|
||||||
geom.typeinertia = mjINERTIA_VOLUME;
|
|
||||||
|
|
||||||
// color
|
|
||||||
geom.rgba[0] = geom.rgba[1] = geom.rgba[2] = 0.5f;
|
|
||||||
geom.rgba[3] = 1.0f;
|
|
||||||
|
|
||||||
// fluid forces
|
|
||||||
geom.fluid_coefs[0] = 0.5; // blunt drag
|
|
||||||
geom.fluid_coefs[1] = 0.25; // slender drag
|
|
||||||
geom.fluid_coefs[2] = 1.5; // angular drag
|
|
||||||
geom.fluid_coefs[3] = 1.0; // kutta lift
|
|
||||||
geom.fluid_coefs[4] = 1.0; // magnus lift
|
|
||||||
|
|
||||||
// other
|
|
||||||
geom.fitscale = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default site attributes
|
|
||||||
void mjs_defaultSite(mjsSite& site) {
|
|
||||||
// set everything to 0 / false / NULL
|
|
||||||
memset(&site, 0, sizeof(mjsSite));
|
|
||||||
|
|
||||||
// type
|
|
||||||
site.type = mjGEOM_SPHERE;
|
|
||||||
|
|
||||||
// frame
|
|
||||||
site.quat[0] = 1;
|
|
||||||
site.size[0] = site.size[1] = site.size[2] = 0.005;
|
|
||||||
site.fromto[0] = mjNAN;
|
|
||||||
mjs_defaultOrientation(site.alt);
|
|
||||||
|
|
||||||
// color
|
|
||||||
site.rgba[0] = site.rgba[1] = site.rgba[2] = 0.5f;
|
|
||||||
site.rgba[3] = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default cam attributes
|
|
||||||
void mjs_defaultCamera(mjsCamera& cam) {
|
|
||||||
memset(&cam, 0, sizeof(mjsCamera));
|
|
||||||
|
|
||||||
// type
|
|
||||||
cam.mode = mjCAMLIGHT_FIXED;
|
|
||||||
|
|
||||||
// extrinsics
|
|
||||||
cam.quat[0] = 1;
|
|
||||||
mjs_defaultOrientation(cam.alt);
|
|
||||||
|
|
||||||
// intrinsics
|
|
||||||
cam.fovy = 45;
|
|
||||||
cam.ipd = 0.068;
|
|
||||||
cam.resolution[0] = cam.resolution[1] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default light attributes
|
|
||||||
void mjs_defaultLight(mjsLight& light) {
|
|
||||||
memset(&light, 0, sizeof(mjsLight));
|
|
||||||
|
|
||||||
// mode
|
|
||||||
light.mode = mjCAMLIGHT_FIXED;
|
|
||||||
|
|
||||||
// intrinsics
|
|
||||||
light.castshadow = 1;
|
|
||||||
light.bulbradius = 0.02;
|
|
||||||
light.active = 1;
|
|
||||||
light.dir[2] = -1;
|
|
||||||
light.attenuation[0] = 1;
|
|
||||||
light.cutoff = 45;
|
|
||||||
light.exponent = 10;
|
|
||||||
light.diffuse[0] = light.diffuse[1] = light.diffuse[2] = 0.7;
|
|
||||||
light.specular[0] = light.specular[1] = light.specular[2] = 0.3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default flex attributes
|
|
||||||
void mjs_defaultFlex(mjsFlex& flex) {
|
|
||||||
memset(&flex, 0, sizeof(mjsFlex));
|
|
||||||
|
|
||||||
// set contact defaults
|
|
||||||
flex.contype = 1;
|
|
||||||
flex.conaffinity = 1;
|
|
||||||
flex.condim = 3;
|
|
||||||
mjuu_setvec(flex.friction, 1, 0.005, 0.0001);
|
|
||||||
flex.solmix = 1.0;
|
|
||||||
mj_defaultSolRefImp(flex.solref, flex.solimp);
|
|
||||||
|
|
||||||
// set other defaults
|
|
||||||
flex.dim = 2;
|
|
||||||
flex.radius = 0.005;
|
|
||||||
flex.internal = true;
|
|
||||||
flex.selfcollide = mjFLEXSELF_AUTO;
|
|
||||||
flex.activelayers = 1;
|
|
||||||
flex.rgba[0] = flex.rgba[1] = flex.rgba[2] = 0.5f;
|
|
||||||
flex.rgba[3] = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default mesh attributes
|
|
||||||
void mjs_defaultMesh(mjsMesh& mesh) {
|
|
||||||
memset(&mesh, 0, sizeof(mjsMesh));
|
|
||||||
mjuu_setvec(mesh.refpos, 0, 0, 0);
|
|
||||||
mjuu_setvec(mesh.refquat, 1, 0, 0, 0);
|
|
||||||
mjuu_setvec(mesh.scale, 1, 1, 1);
|
|
||||||
mesh.smoothnormal = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default height field attributes
|
|
||||||
void mjs_defaultHField(mjsHField& hfield) {
|
|
||||||
memset(&hfield, 0, sizeof(mjsHField));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default skin attributes
|
|
||||||
void mjs_defaultSkin(mjsSkin& skin) {
|
|
||||||
memset(&skin, 0, sizeof(mjsSkin));
|
|
||||||
skin.rgba[0] = skin.rgba[1] = skin.rgba[2] = 0.5f;
|
|
||||||
skin.rgba[3] = 1.0f;
|
|
||||||
skin.inflate = 0;
|
|
||||||
skin.group = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default texture attributes
|
|
||||||
void mjs_defaultTexture(mjsTexture& texture) {
|
|
||||||
memset(&texture, 0, sizeof(mjsTexture));
|
|
||||||
texture.type = mjTEXTURE_CUBE;
|
|
||||||
mjuu_setvec(texture.rgb1, 0.8, 0.8, 0.8);
|
|
||||||
mjuu_setvec(texture.rgb2, 0.5, 0.5, 0.5);
|
|
||||||
mjuu_setvec(texture.markrgb, 0, 0, 0);
|
|
||||||
texture.random = 0.01;
|
|
||||||
texture.gridsize[0] = texture.gridsize[1] = 1;
|
|
||||||
mujoco::util::strcpy_arr(texture.gridlayout, "............");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default material attributes
|
|
||||||
void mjs_defaultMaterial(mjsMaterial& material) {
|
|
||||||
memset(&material, 0, sizeof(mjsMaterial));
|
|
||||||
material.texuniform = false;
|
|
||||||
material.texrepeat[0] = material.texrepeat[1] = 1;
|
|
||||||
material.emission = 0;
|
|
||||||
material.specular = 0.5;
|
|
||||||
material.shininess = 0.5;
|
|
||||||
material.reflectance = 0;
|
|
||||||
material.metallic = 1.0;
|
|
||||||
material.roughness = 1.0;
|
|
||||||
material.rgba[0] = material.rgba[1] = material.rgba[2] = material.rgba[3] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default pair attributes
|
|
||||||
void mjs_defaultPair(mjsPair& pair) {
|
|
||||||
memset(&pair, 0, sizeof(mjsPair));
|
|
||||||
pair.condim = 3;
|
|
||||||
mj_defaultSolRefImp(pair.solref, pair.solimp);
|
|
||||||
pair.friction[0] = 1;
|
|
||||||
pair.friction[1] = 1;
|
|
||||||
pair.friction[2] = 0.005;
|
|
||||||
pair.friction[3] = 0.0001;
|
|
||||||
pair.friction[4] = 0.0001;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default equality attributes
|
|
||||||
void mjs_defaultEquality(mjsEquality& equality) {
|
|
||||||
memset(&equality, 0, sizeof(mjsEquality));
|
|
||||||
equality.type = mjEQ_CONNECT;
|
|
||||||
equality.active = 1;
|
|
||||||
mj_defaultSolRefImp(equality.solref, equality.solimp);
|
|
||||||
equality.data[1] = 1;
|
|
||||||
equality.data[10] = 1; // torque:force ratio
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default tendon attributes
|
|
||||||
void mjs_defaultTendon(mjsTendon& tendon) {
|
|
||||||
memset(&tendon, 0, sizeof(mjsTendon));
|
|
||||||
tendon.limited = mjLIMITED_AUTO;
|
|
||||||
tendon.springlength[0] = tendon.springlength[1] = -1;
|
|
||||||
mj_defaultSolRefImp(tendon.solref_limit, tendon.solimp_limit);
|
|
||||||
mj_defaultSolRefImp(tendon.solref_friction, tendon.solimp_friction);
|
|
||||||
tendon.width = 0.003;
|
|
||||||
tendon.rgba[0] = tendon.rgba[1] = tendon.rgba[2] = 0.5f;
|
|
||||||
tendon.rgba[3] = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default actuator attributes
|
|
||||||
void mjs_defaultActuator(mjsActuator& actuator) {
|
|
||||||
memset(&actuator, 0, sizeof(mjsActuator));
|
|
||||||
|
|
||||||
// gain, bias
|
|
||||||
actuator.gaintype = mjGAIN_FIXED;
|
|
||||||
actuator.gainprm[0] = 1;
|
|
||||||
actuator.biastype = mjBIAS_NONE;
|
|
||||||
|
|
||||||
// activation state
|
|
||||||
actuator.dyntype = mjDYN_NONE;
|
|
||||||
actuator.dynprm[0] = 1;
|
|
||||||
actuator.actdim = -1;
|
|
||||||
|
|
||||||
// transmission
|
|
||||||
actuator.trntype = mjTRN_UNDEFINED;
|
|
||||||
actuator.gear[0] = 1;
|
|
||||||
|
|
||||||
// input/output clamping
|
|
||||||
actuator.ctrllimited = mjLIMITED_AUTO;
|
|
||||||
actuator.forcelimited = mjLIMITED_AUTO;
|
|
||||||
actuator.actlimited = mjLIMITED_AUTO;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default sensor attributes
|
|
||||||
void mjs_defaultSensor(mjsSensor& sensor) {
|
|
||||||
memset(&sensor, 0, sizeof(mjsSensor));
|
|
||||||
sensor.type = mjSENS_TOUCH;
|
|
||||||
sensor.datatype = mjDATATYPE_REAL;
|
|
||||||
sensor.needstage = mjSTAGE_ACC;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Default numeric attributes.
|
|
||||||
void mjs_defaultNumeric(mjsNumeric& numeric) {
|
|
||||||
memset(&numeric, 0, sizeof(mjsNumeric));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Default text attributes.
|
|
||||||
void mjs_defaultText(mjsText& text) {
|
|
||||||
memset(&text, 0, sizeof(mjsText));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Default tuple attributes.
|
|
||||||
void mjs_defaultTuple(mjsTuple& tuple) {
|
|
||||||
memset(&tuple, 0, sizeof(mjsTuple));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Default keyframe attributes.
|
|
||||||
void mjs_defaultKey(mjsKey& key) {
|
|
||||||
memset(&key, 0, sizeof(mjsKey));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// default plugin attributes
|
|
||||||
void mjs_defaultPlugin(mjsPlugin& plugin) {
|
|
||||||
memset(&plugin, 0, sizeof(mjsPlugin));
|
|
||||||
plugin.plugin_slot = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ static void ReadFromBuffer(T* dst, const char* src) {
|
|||||||
//------------------ class mjCMesh implementation --------------------------------------------------
|
//------------------ class mjCMesh implementation --------------------------------------------------
|
||||||
|
|
||||||
mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) {
|
mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultMesh(spec);
|
mjs_defaultMesh(&spec);
|
||||||
elemtype = mjOBJ_MESH;
|
elemtype = mjOBJ_MESH;
|
||||||
|
|
||||||
// clear internal variables
|
// clear internal variables
|
||||||
@@ -2059,7 +2059,7 @@ void mjCMesh::MakeCenter(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCSkin::mjCSkin(mjCModel* _model) {
|
mjCSkin::mjCSkin(mjCModel* _model) {
|
||||||
mjs_defaultSkin(spec);
|
mjs_defaultSkin(&spec);
|
||||||
elemtype = mjOBJ_SKIN;
|
elemtype = mjOBJ_SKIN;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -2484,7 +2484,7 @@ constexpr int eledge[3][6][2] = {{{ 0, 1}, {-1, -1}, {-1, -1},
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCFlex::mjCFlex(mjCModel* _model) {
|
mjCFlex::mjCFlex(mjCModel* _model) {
|
||||||
mjs_defaultFlex(spec);
|
mjs_defaultFlex(&spec);
|
||||||
elemtype = mjOBJ_FLEX;
|
elemtype = mjOBJ_FLEX;
|
||||||
|
|
||||||
// set model
|
// set model
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ static void copyvec(T1* dest, T2* src, int n) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCModel::mjCModel() {
|
mjCModel::mjCModel() {
|
||||||
mjs_defaultSpec(spec);
|
mjs_defaultSpec(&spec);
|
||||||
elemtype = mjOBJ_UNKNOWN;
|
elemtype = mjOBJ_UNKNOWN;
|
||||||
spec_comment_.clear();
|
spec_comment_.clear();
|
||||||
spec_modelfiledir_.clear();
|
spec_modelfiledir_.clear();
|
||||||
|
|||||||
+32
-32
@@ -474,18 +474,18 @@ mjCDef::mjCDef(void) {
|
|||||||
name.clear();
|
name.clear();
|
||||||
parentid = -1;
|
parentid = -1;
|
||||||
childid.clear();
|
childid.clear();
|
||||||
mjs_defaultJoint(joint.spec);
|
mjs_defaultJoint(&joint.spec);
|
||||||
mjs_defaultGeom(geom.spec);
|
mjs_defaultGeom(&geom.spec);
|
||||||
mjs_defaultSite(site.spec);
|
mjs_defaultSite(&site.spec);
|
||||||
mjs_defaultCamera(camera.spec);
|
mjs_defaultCamera(&camera.spec);
|
||||||
mjs_defaultLight(light.spec);
|
mjs_defaultLight(&light.spec);
|
||||||
mjs_defaultFlex(flex.spec);
|
mjs_defaultFlex(&flex.spec);
|
||||||
mjs_defaultMesh(mesh.spec);
|
mjs_defaultMesh(&mesh.spec);
|
||||||
mjs_defaultMaterial(material.spec);
|
mjs_defaultMaterial(&material.spec);
|
||||||
mjs_defaultPair(pair.spec);
|
mjs_defaultPair(&pair.spec);
|
||||||
mjs_defaultEquality(equality.spec);
|
mjs_defaultEquality(&equality.spec);
|
||||||
mjs_defaultTendon(tendon.spec);
|
mjs_defaultTendon(&tendon.spec);
|
||||||
mjs_defaultActuator(actuator.spec);
|
mjs_defaultActuator(&actuator.spec);
|
||||||
|
|
||||||
// make sure all the pointers are local
|
// make sure all the pointers are local
|
||||||
PointToLocal();
|
PointToLocal();
|
||||||
@@ -675,7 +675,7 @@ mjCBody::mjCBody(mjCModel* _model) {
|
|||||||
// set model pointer
|
// set model pointer
|
||||||
model = _model;
|
model = _model;
|
||||||
|
|
||||||
mjs_defaultBody(spec);
|
mjs_defaultBody(&spec);
|
||||||
elemtype = mjOBJ_BODY;
|
elemtype = mjOBJ_BODY;
|
||||||
parentid = -1;
|
parentid = -1;
|
||||||
weldid = -1;
|
weldid = -1;
|
||||||
@@ -1451,7 +1451,7 @@ void mjCBody::Compile(void) {
|
|||||||
|
|
||||||
// initialize frame
|
// initialize frame
|
||||||
mjCFrame::mjCFrame(mjCModel* _model, mjCFrame* _frame) {
|
mjCFrame::mjCFrame(mjCModel* _model, mjCFrame* _frame) {
|
||||||
mjs_defaultFrame(spec);
|
mjs_defaultFrame(&spec);
|
||||||
elemtype = mjOBJ_FRAME;
|
elemtype = mjOBJ_FRAME;
|
||||||
compiled = false;
|
compiled = false;
|
||||||
model = _model;
|
model = _model;
|
||||||
@@ -1568,7 +1568,7 @@ void mjCFrame::Compile() {
|
|||||||
|
|
||||||
// initialize default joint
|
// initialize default joint
|
||||||
mjCJoint::mjCJoint(mjCModel* _model, mjCDef* _def) {
|
mjCJoint::mjCJoint(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultJoint(spec);
|
mjs_defaultJoint(&spec);
|
||||||
elemtype = mjOBJ_JOINT;
|
elemtype = mjOBJ_JOINT;
|
||||||
|
|
||||||
// clear internal variables
|
// clear internal variables
|
||||||
@@ -1758,7 +1758,7 @@ int mjCJoint::Compile(void) {
|
|||||||
|
|
||||||
// initialize default geom
|
// initialize default geom
|
||||||
mjCGeom::mjCGeom(mjCModel* _model, mjCDef* _def) {
|
mjCGeom::mjCGeom(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultGeom(spec);
|
mjs_defaultGeom(&spec);
|
||||||
elemtype = mjOBJ_GEOM;
|
elemtype = mjOBJ_GEOM;
|
||||||
|
|
||||||
mass_ = 0;
|
mass_ = 0;
|
||||||
@@ -2405,7 +2405,7 @@ void mjCGeom::Compile(void) {
|
|||||||
|
|
||||||
// initialize default site
|
// initialize default site
|
||||||
mjCSite::mjCSite(mjCModel* _model, mjCDef* _def) {
|
mjCSite::mjCSite(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultSite(spec);
|
mjs_defaultSite(&spec);
|
||||||
elemtype = mjOBJ_SITE;
|
elemtype = mjOBJ_SITE;
|
||||||
|
|
||||||
// clear internal variables
|
// clear internal variables
|
||||||
@@ -2558,7 +2558,7 @@ void mjCSite::Compile(void) {
|
|||||||
|
|
||||||
// initialize defaults
|
// initialize defaults
|
||||||
mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) {
|
mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultCamera(spec);
|
mjs_defaultCamera(&spec);
|
||||||
elemtype = mjOBJ_CAMERA;
|
elemtype = mjOBJ_CAMERA;
|
||||||
|
|
||||||
// clear private variables
|
// clear private variables
|
||||||
@@ -2712,7 +2712,7 @@ void mjCCamera::Compile(void) {
|
|||||||
|
|
||||||
// initialize defaults
|
// initialize defaults
|
||||||
mjCLight::mjCLight(mjCModel* _model, mjCDef* _def) {
|
mjCLight::mjCLight(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultLight(spec);
|
mjs_defaultLight(&spec);
|
||||||
elemtype = mjOBJ_LIGHT;
|
elemtype = mjOBJ_LIGHT;
|
||||||
|
|
||||||
// clear private variables
|
// clear private variables
|
||||||
@@ -2815,7 +2815,7 @@ void mjCLight::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCHField::mjCHField(mjCModel* _model) {
|
mjCHField::mjCHField(mjCModel* _model) {
|
||||||
mjs_defaultHField(spec);
|
mjs_defaultHField(&spec);
|
||||||
elemtype = mjOBJ_HFIELD;
|
elemtype = mjOBJ_HFIELD;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -3066,7 +3066,7 @@ void mjCHField::Compile(const mjVFS* vfs) {
|
|||||||
|
|
||||||
// initialize defaults
|
// initialize defaults
|
||||||
mjCTexture::mjCTexture(mjCModel* _model) {
|
mjCTexture::mjCTexture(mjCModel* _model) {
|
||||||
mjs_defaultTexture(spec);
|
mjs_defaultTexture(&spec);
|
||||||
elemtype = mjOBJ_TEXTURE;
|
elemtype = mjOBJ_TEXTURE;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -3797,7 +3797,7 @@ void mjCTexture::Compile(const mjVFS* vfs) {
|
|||||||
|
|
||||||
// initialize defaults
|
// initialize defaults
|
||||||
mjCMaterial::mjCMaterial(mjCModel* _model, mjCDef* _def) {
|
mjCMaterial::mjCMaterial(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultMaterial(spec);
|
mjs_defaultMaterial(&spec);
|
||||||
elemtype = mjOBJ_MATERIAL;
|
elemtype = mjOBJ_MATERIAL;
|
||||||
|
|
||||||
// clear internal
|
// clear internal
|
||||||
@@ -3880,7 +3880,7 @@ void mjCMaterial::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCPair::mjCPair(mjCModel* _model, mjCDef* _def) {
|
mjCPair::mjCPair(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultPair(spec);
|
mjs_defaultPair(&spec);
|
||||||
elemtype = mjOBJ_PAIR;
|
elemtype = mjOBJ_PAIR;
|
||||||
|
|
||||||
// set defaults
|
// set defaults
|
||||||
@@ -4245,7 +4245,7 @@ void mjCBodyPair::Compile(void) {
|
|||||||
|
|
||||||
// initialize default constraint
|
// initialize default constraint
|
||||||
mjCEquality::mjCEquality(mjCModel* _model, mjCDef* _def) {
|
mjCEquality::mjCEquality(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultEquality(spec);
|
mjs_defaultEquality(&spec);
|
||||||
elemtype = mjOBJ_EQUALITY;
|
elemtype = mjOBJ_EQUALITY;
|
||||||
|
|
||||||
// clear internal variables
|
// clear internal variables
|
||||||
@@ -4406,7 +4406,7 @@ void mjCEquality::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCTendon::mjCTendon(mjCModel* _model, mjCDef* _def) {
|
mjCTendon::mjCTendon(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultTendon(spec);
|
mjs_defaultTendon(&spec);
|
||||||
elemtype = mjOBJ_TENDON;
|
elemtype = mjOBJ_TENDON;
|
||||||
|
|
||||||
// clear internal variables
|
// clear internal variables
|
||||||
@@ -4883,7 +4883,7 @@ void mjCWrap::ResolveReferences(const mjCModel* m) {
|
|||||||
|
|
||||||
// initialize defaults
|
// initialize defaults
|
||||||
mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {
|
mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {
|
||||||
mjs_defaultActuator(spec);
|
mjs_defaultActuator(&spec);
|
||||||
elemtype = mjOBJ_ACTUATOR;
|
elemtype = mjOBJ_ACTUATOR;
|
||||||
|
|
||||||
// clear private variables
|
// clear private variables
|
||||||
@@ -5226,7 +5226,7 @@ void mjCActuator::Compile(void) {
|
|||||||
|
|
||||||
// initialize defaults
|
// initialize defaults
|
||||||
mjCSensor::mjCSensor(mjCModel* _model) {
|
mjCSensor::mjCSensor(mjCModel* _model) {
|
||||||
mjs_defaultSensor(spec);
|
mjs_defaultSensor(&spec);
|
||||||
elemtype = mjOBJ_SENSOR;
|
elemtype = mjOBJ_SENSOR;
|
||||||
|
|
||||||
// set model
|
// set model
|
||||||
@@ -5708,7 +5708,7 @@ void mjCSensor::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCNumeric::mjCNumeric(mjCModel* _model) {
|
mjCNumeric::mjCNumeric(mjCModel* _model) {
|
||||||
mjs_defaultNumeric(spec);
|
mjs_defaultNumeric(&spec);
|
||||||
elemtype = mjOBJ_NUMERIC;
|
elemtype = mjOBJ_NUMERIC;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -5797,7 +5797,7 @@ void mjCNumeric::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCText::mjCText(mjCModel* _model) {
|
mjCText::mjCText(mjCModel* _model) {
|
||||||
mjs_defaultText(spec);
|
mjs_defaultText(&spec);
|
||||||
elemtype = mjOBJ_TEXT;
|
elemtype = mjOBJ_TEXT;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -5874,7 +5874,7 @@ void mjCText::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCTuple::mjCTuple(mjCModel* _model) {
|
mjCTuple::mjCTuple(mjCModel* _model) {
|
||||||
mjs_defaultTuple(spec);
|
mjs_defaultTuple(&spec);
|
||||||
elemtype = mjOBJ_TUPLE;
|
elemtype = mjOBJ_TUPLE;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -6007,7 +6007,7 @@ void mjCTuple::Compile(void) {
|
|||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
mjCKey::mjCKey(mjCModel* _model) {
|
mjCKey::mjCKey(mjCModel* _model) {
|
||||||
mjs_defaultKey(spec);
|
mjs_defaultKey(&spec);
|
||||||
elemtype = mjOBJ_KEY;
|
elemtype = mjOBJ_KEY;
|
||||||
|
|
||||||
// set model pointer
|
// set model pointer
|
||||||
@@ -6191,7 +6191,7 @@ mjCPlugin::mjCPlugin(mjCModel* _model) {
|
|||||||
instance_name.clear();
|
instance_name.clear();
|
||||||
|
|
||||||
// public interface
|
// public interface
|
||||||
mjs_defaultPlugin(spec);
|
mjs_defaultPlugin(&spec);
|
||||||
elemtype = mjOBJ_PLUGIN;
|
elemtype = mjOBJ_PLUGIN;
|
||||||
spec.name = (mjString)&name;
|
spec.name = (mjString)&name;
|
||||||
spec.instance_name = (mjString)&instance_name;
|
spec.instance_name = (mjString)&instance_name;
|
||||||
|
|||||||
@@ -33,10 +33,6 @@ using std::string;
|
|||||||
using std::numeric_limits;
|
using std::numeric_limits;
|
||||||
|
|
||||||
|
|
||||||
// set value of NAN here; needs <limits>
|
|
||||||
const double mjNAN = numeric_limits<double>::quiet_NaN();
|
|
||||||
|
|
||||||
|
|
||||||
// check if numeric variable is defined
|
// check if numeric variable is defined
|
||||||
bool mjuu_defined(const double num) {
|
bool mjuu_defined(const double num) {
|
||||||
return !isnan(num);
|
return !isnan(num);
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
|
||||||
|
|
||||||
extern const double mjNAN; // used to mark undefined fields
|
|
||||||
const double mjEPS = 1E-14; // minimum value in various calculations
|
const double mjEPS = 1E-14; // minimum value in various calculations
|
||||||
const double mjMINMASS = 1E-6; // minimum mass allowed
|
const double mjMINMASS = 1E-6; // minimum mass allowed
|
||||||
|
|
||||||
|
|||||||
@@ -3394,7 +3394,7 @@ void mjXReader::Body(XMLElement* section, mjsBody* pbody, mjsFrame* frame) {
|
|||||||
|
|
||||||
// store rotation difference
|
// store rotation difference
|
||||||
mjsOrientation alt;
|
mjsOrientation alt;
|
||||||
mjs_defaultOrientation(alt);
|
mjs_defaultOrientation(&alt);
|
||||||
alt.type = mjORIENTATION_EULER;
|
alt.type = mjORIENTATION_EULER;
|
||||||
mjuu_copyvec(alt.euler, euler, 3);
|
mjuu_copyvec(alt.euler, euler, 3);
|
||||||
double rotation[4] = {1, 0, 0, 0};
|
double rotation[4] = {1, 0, 0, 0};
|
||||||
|
|||||||
+1
-1
@@ -633,7 +633,7 @@ void mjXURDF::Origin(XMLElement* origin_elem, double* pos, double* quat) {
|
|||||||
|
|
||||||
// orientation
|
// orientation
|
||||||
mjsOrientation alt;
|
mjsOrientation alt;
|
||||||
mjs_defaultOrientation(alt);
|
mjs_defaultOrientation(&alt);
|
||||||
if (ReadAttr(temp, "rpy", 3, alt.euler, text)) {
|
if (ReadAttr(temp, "rpy", 3, alt.euler, text)) {
|
||||||
alt.type = mjORIENTATION_EULER;
|
alt.type = mjORIENTATION_EULER;
|
||||||
mjs_resolveOrientation(quat, 0, "XYZ", &alt);
|
mjs_resolveOrientation(quat, 0, "XYZ", &alt);
|
||||||
|
|||||||
Reference in New Issue
Block a user