// Copyright 2021 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. #ifndef MUJOCO_SRC_ENGINE_ENGINE_IO_H_ #define MUJOCO_SRC_ENGINE_ENGINE_IO_H_ #include #include #include #include #ifdef __cplusplus #include extern "C" { #else #include #endif // internal hash map size factor (2 corresponds to a load factor of 0.5) #define mjLOAD_MULTIPLE 2 //------------------------------- initialization --------------------------------------------------- // Set default options for length range computation. MJAPI void mj_defaultLROpt(mjLROpt* opt); // set default solver paramters MJAPI void mj_defaultSolRefImp(mjtNum* solref, mjtNum* solimp); // set options to default values MJAPI void mj_defaultOption(mjOption* opt); // set visual options to default values MJAPI void mj_defaultVisual(mjVisual* vis); // set statistics to default values; compute later in compiler void mj_defaultStatistic(mjStatistic* stat); //------------------------------- mjModel ---------------------------------------------------------- // allocate mjModel mjModel* mj_makeModel(int nq, int nv, int nu, int na, int nbody, int nbvh, int njnt, int ngeom, int nsite, int ncam, int nlight, int nmesh, int nmeshvert, int nmeshnormal, int nmeshtexcoord, int nmeshface, int nmeshgraph, int nskin, int nskinvert, int nskintexvert, int nskinface, int nskinbone, int nskinbonevert, int nhfield, int nhfielddata, int ntex, int ntexdata, int nmat, int npair, int nexclude, int neq, int ntendon, int nwrap, int nsensor, int nnumeric, int nnumericdata, int ntext, int ntextdata, int ntuple, int ntupledata, int nkey, int nmocap, int nplugin, int npluginattr, int nuser_body, int nuser_jnt, int nuser_geom, int nuser_site, int nuser_cam, int nuser_tendon, int nuser_actuator, int nuser_sensor, int nnames); // copy mjModel; allocate new if dest is NULL MJAPI mjModel* mj_copyModel(mjModel* dest, const mjModel* src); // save model to binary file MJAPI void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buffer_sz); // load model from binary MJB file // if vfs is not NULL, look up file in vfs before reading from disk MJAPI mjModel* mj_loadModel(const char* filename, const mjVFS* vfs); // de-allocate model MJAPI void mj_deleteModel(mjModel* m); // size of buffer needed to hold model MJAPI int mj_sizeModel(const mjModel* m); // validate reference fields in a model; return null if valid, error message otherwise MJAPI const char* mj_validateReferences(const mjModel* m); //------------------------------- mjData ----------------------------------------------------------- // Allocate mjData corresponding to given model. // If the model buffer is unallocated the initial configuration will not be set. MJAPI mjData* mj_makeData(const mjModel* m); // Copy mjData. // m is only required to contain the size fields from MJMODEL_INTS. MJAPI mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src); // set data to defaults MJAPI void mj_resetData(const mjModel* m, mjData* d); // set data to defaults, fill everything else with debug_value MJAPI void mj_resetDataDebug(const mjModel* m, mjData* d, unsigned char debug_value); // reset data, set fields from specified keyframe MJAPI void mj_resetDataKeyframe(const mjModel* m, mjData* d, int key); // mjData arena allocate MJAPI void* mj_arenaAllocByte(mjData* d, size_t bytes, size_t alignment); // mjData mark stack frame MJAPI void mj_markStack(mjData* d); // mjData free stack frame MJAPI void mj_freeStack(mjData* d); // mjData stack allocate MJAPI void* mj_stackAllocByte(mjData* d, size_t bytes, size_t alignment); // mjData stack allocate for array of mjtNums MJAPI mjtNum* mj_stackAllocNum(mjData* d, int size); // mjData stack allocate for array of ints MJAPI int* mj_stackAllocInt(mjData* d, int size); // de-allocate data MJAPI void mj_deleteData(mjData* d); // clear arena pointers in mjData static inline void mj_clearEfc(mjData* d) { #define X(type, name, nr, nc) d->name = NULL; MJDATA_ARENA_POINTERS #undef X d->nefc = 0; d->nisland = 0; d->contact = (mjContact*) d->arena; } #ifdef __cplusplus } #endif #endif // MUJOCO_SRC_ENGINE_ENGINE_IO_H_