123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675 |
- // Copyright 2022 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.
- // DO NOT EDIT. THIS FILE IS AUTOMATICALLY GENERATED.
- // Error: C reference not found
- // NOLINTBEGIN
- typedef enum mjtState_ { // state elements
- mjSTATE_TIME = 1<<0, // time
- mjSTATE_QPOS = 1<<1, // position
- mjSTATE_QVEL = 1<<2, // velocity
- mjSTATE_ACT = 1<<3, // actuator activation
- mjSTATE_WARMSTART = 1<<4, // acceleration used for warmstart
- mjSTATE_CTRL = 1<<5, // control
- mjSTATE_QFRC_APPLIED = 1<<6, // applied generalized force
- mjSTATE_XFRC_APPLIED = 1<<7, // applied Cartesian force/torque
- mjSTATE_EQ_ACTIVE = 1<<8, // enable/disable constraints
- mjSTATE_MOCAP_POS = 1<<9, // positions of mocap bodies
- mjSTATE_MOCAP_QUAT = 1<<10, // orientations of mocap bodies
- mjSTATE_USERDATA = 1<<11, // user data
- mjSTATE_PLUGIN = 1<<12, // plugin state
- mjNSTATE = 13, // number of state elements
- // convenience values for commonly used state specifications
- mjSTATE_PHYSICS = mjSTATE_QPOS | mjSTATE_QVEL | mjSTATE_ACT,
- mjSTATE_FULLPHYSICS = mjSTATE_TIME | mjSTATE_PHYSICS | mjSTATE_PLUGIN,
- mjSTATE_USER = mjSTATE_CTRL | mjSTATE_QFRC_APPLIED | mjSTATE_XFRC_APPLIED |
- mjSTATE_EQ_ACTIVE | mjSTATE_MOCAP_POS | mjSTATE_MOCAP_QUAT |
- mjSTATE_USERDATA,
- mjSTATE_INTEGRATION = mjSTATE_FULLPHYSICS | mjSTATE_USER | mjSTATE_WARMSTART
- } mjtState;
- typedef enum mjtWarning_ { // warning types
- mjWARN_INERTIA = 0, // (near) singular inertia matrix
- mjWARN_CONTACTFULL, // too many contacts in contact list
- mjWARN_CNSTRFULL, // too many constraints
- mjWARN_VGEOMFULL, // too many visual geoms
- mjWARN_BADQPOS, // bad number in qpos
- mjWARN_BADQVEL, // bad number in qvel
- mjWARN_BADQACC, // bad number in qacc
- mjWARN_BADCTRL, // bad number in ctrl
- mjNWARNING // number of warnings
- } mjtWarning;
- typedef enum mjtTimer_ { // internal timers
- // main api
- mjTIMER_STEP = 0, // step
- mjTIMER_FORWARD, // forward
- mjTIMER_INVERSE, // inverse
- // breakdown of step/forward
- mjTIMER_POSITION, // fwdPosition
- mjTIMER_VELOCITY, // fwdVelocity
- mjTIMER_ACTUATION, // fwdActuation
- mjTIMER_CONSTRAINT, // fwdConstraint
- mjTIMER_ADVANCE, // mj_Euler, mj_implicit
- // breakdown of fwdPosition
- mjTIMER_POS_KINEMATICS, // kinematics, com, tendon, transmission
- mjTIMER_POS_INERTIA, // inertia computations
- mjTIMER_POS_COLLISION, // collision detection
- mjTIMER_POS_MAKE, // make constraints
- mjTIMER_POS_PROJECT, // project constraints
- // breakdown of mj_collision
- mjTIMER_COL_BROAD, // broadphase
- mjTIMER_COL_NARROW, // narrowphase
- mjNTIMER // number of timers
- } mjtTimer;
- struct mjContact_ { // result of collision detection functions
- // contact parameters set by near-phase collision function
- mjtNum dist; // distance between nearest points; neg: penetration
- mjtNum pos[3]; // position of contact point: midpoint between geoms
- mjtNum frame[9]; // normal is in [0-2], points from geom[0] to geom[1]
- // contact parameters set by mj_collideGeoms
- mjtNum includemargin; // include if dist<includemargin=margin-gap
- mjtNum friction[5]; // tangent1, 2, spin, roll1, 2
- mjtNum solref[mjNREF]; // constraint solver reference, normal direction
- mjtNum solreffriction[mjNREF]; // constraint solver reference, friction directions
- mjtNum solimp[mjNIMP]; // constraint solver impedance
- // internal storage used by solver
- mjtNum mu; // friction of regularized cone, set by mj_makeConstraint
- mjtNum H[36]; // cone Hessian, set by mj_constraintUpdate
- // contact descriptors set by mj_collideXXX
- int dim; // contact space dimensionality: 1, 3, 4 or 6
- int geom1; // id of geom 1; deprecated, use geom[0]
- int geom2; // id of geom 2; deprecated, use geom[1]
- int geom[2]; // geom ids; -1 for flex
- int flex[2]; // flex ids; -1 for geom
- int elem[2]; // element ids; -1 for geom or flex vertex
- int vert[2]; // vertex ids; -1 for geom or flex element
- // flag set by mj_setContact or mj_instantiateContact
- int exclude; // 0: include, 1: in gap, 2: fused, 3: no dofs
- // address computed by mj_instantiateContact
- int efc_address; // address in efc; -1: not included
- };
- typedef struct mjContact_ mjContact;
- struct mjWarningStat_ { // warning statistics
- int lastinfo; // info from last warning
- int number; // how many times was warning raised
- };
- typedef struct mjWarningStat_ mjWarningStat;
- struct mjTimerStat_ { // timer statistics
- mjtNum duration; // cumulative duration
- int number; // how many times was timer called
- };
- typedef struct mjTimerStat_ mjTimerStat;
- struct mjSolverStat_ { // per-iteration solver statistics
- mjtNum improvement; // cost reduction, scaled by 1/trace(M(qpos0))
- mjtNum gradient; // gradient norm (primal only, scaled)
- mjtNum lineslope; // slope in linesearch
- int nactive; // number of active constraints
- int nchange; // number of constraint state changes
- int neval; // number of cost evaluations in line search
- int nupdate; // number of Cholesky updates in line search
- };
- typedef struct mjSolverStat_ mjSolverStat;
- struct mjData_ {
- // constant sizes
- size_t narena; // size of the arena in bytes (inclusive of the stack)
- size_t nbuffer; // size of main buffer in bytes
- int nplugin; // number of plugin instances
- // stack pointer
- size_t pstack; // first available byte in stack
- size_t pbase; // value of pstack when mj_markStack was last called
- // arena pointer
- size_t parena; // first available byte in arena
- // memory utilization statistics
- size_t maxuse_stack; // maximum stack allocation in bytes
- size_t maxuse_threadstack[mjMAXTHREAD]; // maximum stack allocation per thread in bytes
- size_t maxuse_arena; // maximum arena allocation in bytes
- int maxuse_con; // maximum number of contacts
- int maxuse_efc; // maximum number of scalar constraints
- // solver statistics
- mjSolverStat solver[mjNISLAND*mjNSOLVER]; // solver statistics per island, per iteration
- int solver_nisland; // number of islands processed by solver
- int solver_niter[mjNISLAND]; // number of solver iterations, per island
- int solver_nnz[mjNISLAND]; // number of nonzeros in Hessian or efc_AR, per island
- mjtNum solver_fwdinv[2]; // forward-inverse comparison: qfrc, efc
- // diagnostics
- mjWarningStat warning[mjNWARNING]; // warning statistics
- mjTimerStat timer[mjNTIMER]; // timer statistics
- // variable sizes
- int ncon; // number of detected contacts
- int ne; // number of equality constraints
- int nf; // number of friction constraints
- int nl; // number of limit constraints
- int nefc; // number of constraints
- int nnzJ; // number of non-zeros in constraint Jacobian
- int nisland; // number of detected constraint islands
- // global properties
- mjtNum time; // simulation time
- mjtNum energy[2]; // potential, kinetic energy
- //-------------------- end of info header
- // buffers
- void* buffer; // main buffer; all pointers point in it (nbuffer bytes)
- void* arena; // arena+stack buffer (narena bytes)
- //-------------------- main inputs and outputs of the computation
- // state
- mjtNum* qpos; // position (nq x 1)
- mjtNum* qvel; // velocity (nv x 1)
- mjtNum* act; // actuator activation (na x 1)
- mjtNum* qacc_warmstart; // acceleration used for warmstart (nv x 1)
- mjtNum* plugin_state; // plugin state (npluginstate x 1)
- // control
- mjtNum* ctrl; // control (nu x 1)
- mjtNum* qfrc_applied; // applied generalized force (nv x 1)
- mjtNum* xfrc_applied; // applied Cartesian force/torque (nbody x 6)
- mjtByte* eq_active; // enable/disable constraints (neq x 1)
- // mocap data
- mjtNum* mocap_pos; // positions of mocap bodies (nmocap x 3)
- mjtNum* mocap_quat; // orientations of mocap bodies (nmocap x 4)
- // dynamics
- mjtNum* qacc; // acceleration (nv x 1)
- mjtNum* act_dot; // time-derivative of actuator activation (na x 1)
- // user data
- mjtNum* userdata; // user data, not touched by engine (nuserdata x 1)
- // sensors
- mjtNum* sensordata; // sensor data array (nsensordata x 1)
- // plugins
- int* plugin; // copy of m->plugin, required for deletion (nplugin x 1)
- uintptr_t* plugin_data; // pointer to plugin-managed data structure (nplugin x 1)
- //-------------------- POSITION dependent
- // computed by mj_fwdPosition/mj_kinematics
- mjtNum* xpos; // Cartesian position of body frame (nbody x 3)
- mjtNum* xquat; // Cartesian orientation of body frame (nbody x 4)
- mjtNum* xmat; // Cartesian orientation of body frame (nbody x 9)
- mjtNum* xipos; // Cartesian position of body com (nbody x 3)
- mjtNum* ximat; // Cartesian orientation of body inertia (nbody x 9)
- mjtNum* xanchor; // Cartesian position of joint anchor (njnt x 3)
- mjtNum* xaxis; // Cartesian joint axis (njnt x 3)
- mjtNum* geom_xpos; // Cartesian geom position (ngeom x 3)
- mjtNum* geom_xmat; // Cartesian geom orientation (ngeom x 9)
- mjtNum* site_xpos; // Cartesian site position (nsite x 3)
- mjtNum* site_xmat; // Cartesian site orientation (nsite x 9)
- mjtNum* cam_xpos; // Cartesian camera position (ncam x 3)
- mjtNum* cam_xmat; // Cartesian camera orientation (ncam x 9)
- mjtNum* light_xpos; // Cartesian light position (nlight x 3)
- mjtNum* light_xdir; // Cartesian light direction (nlight x 3)
- // computed by mj_fwdPosition/mj_comPos
- mjtNum* subtree_com; // center of mass of each subtree (nbody x 3)
- mjtNum* cdof; // com-based motion axis of each dof (rot:lin) (nv x 6)
- mjtNum* cinert; // com-based body inertia and mass (nbody x 10)
- // computed by mj_fwdPosition/mj_flex
- mjtNum* flexvert_xpos; // Cartesian flex vertex positions (nflexvert x 3)
- mjtNum* flexelem_aabb; // flex element bounding boxes (center, size) (nflexelem x 6)
- int* flexedge_J_rownnz; // number of non-zeros in Jacobian row (nflexedge x 1)
- int* flexedge_J_rowadr; // row start address in colind array (nflexedge x 1)
- int* flexedge_J_colind; // column indices in sparse Jacobian (nflexedge x nv)
- mjtNum* flexedge_J; // flex edge Jacobian (nflexedge x nv)
- mjtNum* flexedge_length; // flex edge lengths (nflexedge x 1)
- // computed by mj_fwdPosition/mj_tendon
- int* ten_wrapadr; // start address of tendon's path (ntendon x 1)
- int* ten_wrapnum; // number of wrap points in path (ntendon x 1)
- int* ten_J_rownnz; // number of non-zeros in Jacobian row (ntendon x 1)
- int* ten_J_rowadr; // row start address in colind array (ntendon x 1)
- int* ten_J_colind; // column indices in sparse Jacobian (ntendon x nv)
- mjtNum* ten_J; // tendon Jacobian (ntendon x nv)
- mjtNum* ten_length; // tendon lengths (ntendon x 1)
- int* wrap_obj; // geom id; -1: site; -2: pulley (nwrap x 2)
- mjtNum* wrap_xpos; // Cartesian 3D points in all paths (nwrap x 6)
- // computed by mj_fwdPosition/mj_transmission
- mjtNum* actuator_length; // actuator lengths (nu x 1)
- int* moment_rownnz; // number of non-zeros in actuator_moment row (nu x 1)
- int* moment_rowadr; // row start address in colind array (nu x 1)
- int* moment_colind; // column indices in sparse Jacobian (nu x nv)
- mjtNum* actuator_moment; // actuator moments (nu x nv)
- // computed by mj_fwdPosition/mj_crb
- mjtNum* crb; // com-based composite inertia and mass (nbody x 10)
- mjtNum* qM; // total inertia (sparse) (nM x 1)
- // computed by mj_fwdPosition/mj_factorM
- mjtNum* qLD; // L'*D*L factorization of M (sparse) (nM x 1)
- mjtNum* qLDiagInv; // 1/diag(D) (nv x 1)
- mjtNum* qLDiagSqrtInv; // 1/sqrt(diag(D)) (nv x 1)
- // computed by mj_collisionTree
- mjtNum* bvh_aabb_dyn; // global bounding box (center, size) (nbvhdynamic x 6)
- mjtByte* bvh_active; // was bounding volume checked for collision (nbvh x 1)
- //-------------------- POSITION, VELOCITY dependent
- // computed by mj_fwdVelocity
- mjtNum* flexedge_velocity; // flex edge velocities (nflexedge x 1)
- mjtNum* ten_velocity; // tendon velocities (ntendon x 1)
- mjtNum* actuator_velocity; // actuator velocities (nu x 1)
- // computed by mj_fwdVelocity/mj_comVel
- mjtNum* cvel; // com-based velocity (rot:lin) (nbody x 6)
- mjtNum* cdof_dot; // time-derivative of cdof (rot:lin) (nv x 6)
- // computed by mj_fwdVelocity/mj_rne (without acceleration)
- mjtNum* qfrc_bias; // C(qpos,qvel) (nv x 1)
- // computed by mj_fwdVelocity/mj_passive
- mjtNum* qfrc_spring; // passive spring force (nv x 1)
- mjtNum* qfrc_damper; // passive damper force (nv x 1)
- mjtNum* qfrc_gravcomp; // passive gravity compensation force (nv x 1)
- mjtNum* qfrc_fluid; // passive fluid force (nv x 1)
- mjtNum* qfrc_passive; // total passive force (nv x 1)
- // computed by mj_sensorVel/mj_subtreeVel if needed
- mjtNum* subtree_linvel; // linear velocity of subtree com (nbody x 3)
- mjtNum* subtree_angmom; // angular momentum about subtree com (nbody x 3)
- // computed by mj_Euler or mj_implicit
- mjtNum* qH; // L'*D*L factorization of modified M (nM x 1)
- mjtNum* qHDiagInv; // 1/diag(D) of modified M (nv x 1)
- // computed by mj_resetData
- int* B_rownnz; // body-dof: non-zeros in each row (nbody x 1)
- int* B_rowadr; // body-dof: address of each row in B_colind (nbody x 1)
- int* B_colind; // body-dof: column indices of non-zeros (nB x 1)
- int* C_rownnz; // reduced dof-dof: non-zeros in each row (nv x 1)
- int* C_rowadr; // reduced dof-dof: address of each row in C_colind (nv x 1)
- int* C_colind; // reduced dof-dof: column indices of non-zeros (nC x 1)
- int* mapM2C; // index mapping from M to C (nC x 1)
- int* D_rownnz; // dof-dof: non-zeros in each row (nv x 1)
- int* D_rowadr; // dof-dof: address of each row in D_colind (nv x 1)
- int* D_colind; // dof-dof: column indices of non-zeros (nD x 1)
- int* mapM2D; // index mapping from M to D (nD x 1)
- int* mapD2M; // index mapping from D to M (nM x 1)
- // computed by mj_implicit/mj_derivative
- mjtNum* qDeriv; // d (passive + actuator - bias) / d qvel (nD x 1)
- // computed by mj_implicit/mju_factorLUSparse
- mjtNum* qLU; // sparse LU of (qM - dt*qDeriv) (nD x 1)
- //-------------------- POSITION, VELOCITY, CONTROL/ACCELERATION dependent
- // computed by mj_fwdActuation
- mjtNum* actuator_force; // actuator force in actuation space (nu x 1)
- mjtNum* qfrc_actuator; // actuator force (nv x 1)
- // computed by mj_fwdAcceleration
- mjtNum* qfrc_smooth; // net unconstrained force (nv x 1)
- mjtNum* qacc_smooth; // unconstrained acceleration (nv x 1)
- // computed by mj_fwdConstraint/mj_inverse
- mjtNum* qfrc_constraint; // constraint force (nv x 1)
- // computed by mj_inverse
- mjtNum* qfrc_inverse; // net external force; should equal: (nv x 1)
- // qfrc_applied + J'*xfrc_applied + qfrc_actuator
- // computed by mj_sensorAcc/mj_rnePostConstraint if needed; rotation:translation format
- mjtNum* cacc; // com-based acceleration (nbody x 6)
- mjtNum* cfrc_int; // com-based interaction force with parent (nbody x 6)
- mjtNum* cfrc_ext; // com-based external force on body (nbody x 6)
- //-------------------- arena-allocated: POSITION dependent
- // computed by mj_collision
- mjContact* contact; // array of all detected contacts (ncon x 1)
- // computed by mj_makeConstraint
- int* efc_type; // constraint type (mjtConstraint) (nefc x 1)
- int* efc_id; // id of object of specified type (nefc x 1)
- int* efc_J_rownnz; // number of non-zeros in constraint Jacobian row (nefc x 1)
- int* efc_J_rowadr; // row start address in colind array (nefc x 1)
- int* efc_J_rowsuper; // number of subsequent rows in supernode (nefc x 1)
- int* efc_J_colind; // column indices in constraint Jacobian (nnzJ x 1)
- int* efc_JT_rownnz; // number of non-zeros in constraint Jacobian row T (nv x 1)
- int* efc_JT_rowadr; // row start address in colind array T (nv x 1)
- int* efc_JT_rowsuper; // number of subsequent rows in supernode T (nv x 1)
- int* efc_JT_colind; // column indices in constraint Jacobian T (nnzJ x 1)
- mjtNum* efc_J; // constraint Jacobian (nnzJ x 1)
- mjtNum* efc_JT; // constraint Jacobian transposed (nnzJ x 1)
- mjtNum* efc_pos; // constraint position (equality, contact) (nefc x 1)
- mjtNum* efc_margin; // inclusion margin (contact) (nefc x 1)
- mjtNum* efc_frictionloss; // frictionloss (friction) (nefc x 1)
- mjtNum* efc_diagApprox; // approximation to diagonal of A (nefc x 1)
- mjtNum* efc_KBIP; // stiffness, damping, impedance, imp' (nefc x 4)
- mjtNum* efc_D; // constraint mass (nefc x 1)
- mjtNum* efc_R; // inverse constraint mass (nefc x 1)
- int* tendon_efcadr; // first efc address involving tendon; -1: none (ntendon x 1)
- // computed by mj_island
- int* dof_island; // island id of this dof; -1: none (nv x 1)
- int* island_dofnum; // number of dofs in island (nisland x 1)
- int* island_dofadr; // start address in island_dofind (nisland x 1)
- int* island_dofind; // island dof indices; -1: none (nv x 1)
- int* dof_islandind; // dof island indices; -1: none (nv x 1)
- int* efc_island; // island id of this constraint (nefc x 1)
- int* island_efcnum; // number of constraints in island (nisland x 1)
- int* island_efcadr; // start address in island_efcind (nisland x 1)
- int* island_efcind; // island constraint indices (nefc x 1)
- // computed by mj_projectConstraint (PGS solver)
- int* efc_AR_rownnz; // number of non-zeros in AR (nefc x 1)
- int* efc_AR_rowadr; // row start address in colind array (nefc x 1)
- int* efc_AR_colind; // column indices in sparse AR (nefc x nefc)
- mjtNum* efc_AR; // J*inv(M)*J' + R (nefc x nefc)
- //-------------------- arena-allocated: POSITION, VELOCITY dependent
- // computed by mj_fwdVelocity/mj_referenceConstraint
- mjtNum* efc_vel; // velocity in constraint space: J*qvel (nefc x 1)
- mjtNum* efc_aref; // reference pseudo-acceleration (nefc x 1)
- //-------------------- arena-allocated: POSITION, VELOCITY, CONTROL/ACCELERATION dependent
- // computed by mj_fwdConstraint/mj_inverse
- mjtNum* efc_b; // linear cost term: J*qacc_smooth - aref (nefc x 1)
- mjtNum* efc_force; // constraint force in constraint space (nefc x 1)
- int* efc_state; // constraint state (mjtConstraintState) (nefc x 1)
- // thread pool pointer
- uintptr_t threadpool;
- };
- typedef struct mjData_ mjData;
- typedef enum mjtDisableBit_ { // disable default feature bitflags
- mjDSBL_CONSTRAINT = 1<<0, // entire constraint solver
- mjDSBL_EQUALITY = 1<<1, // equality constraints
- mjDSBL_FRICTIONLOSS = 1<<2, // joint and tendon frictionloss constraints
- mjDSBL_LIMIT = 1<<3, // joint and tendon limit constraints
- mjDSBL_CONTACT = 1<<4, // contact constraints
- mjDSBL_PASSIVE = 1<<5, // passive forces
- mjDSBL_GRAVITY = 1<<6, // gravitational forces
- mjDSBL_CLAMPCTRL = 1<<7, // clamp control to specified range
- mjDSBL_WARMSTART = 1<<8, // warmstart constraint solver
- mjDSBL_FILTERPARENT = 1<<9, // remove collisions with parent body
- mjDSBL_ACTUATION = 1<<10, // apply actuation forces
- mjDSBL_REFSAFE = 1<<11, // integrator safety: make ref[0]>=2*timestep
- mjDSBL_SENSOR = 1<<12, // sensors
- mjDSBL_MIDPHASE = 1<<13, // mid-phase collision filtering
- mjDSBL_EULERDAMP = 1<<14, // implicit integration of joint damping in Euler integrator
- mjDSBL_AUTORESET = 1<<15, // automatic reset when numerical issues are detected
- mjNDISABLE = 16 // number of disable flags
- } mjtDisableBit;
- typedef enum mjtEnableBit_ { // enable optional feature bitflags
- mjENBL_OVERRIDE = 1<<0, // override contact parameters
- mjENBL_ENERGY = 1<<1, // energy computation
- mjENBL_FWDINV = 1<<2, // record solver statistics
- mjENBL_INVDISCRETE = 1<<3, // discrete-time inverse dynamics
- // experimental features:
- mjENBL_MULTICCD = 1<<4, // multi-point convex collision detection
- mjENBL_ISLAND = 1<<5, // constraint island discovery
- mjENBL_NATIVECCD = 1<<6, // native convex collision detection
- mjNENABLE = 7 // number of enable flags
- } mjtEnableBit;
- typedef enum mjtJoint_ { // type of degree of freedom
- mjJNT_FREE = 0, // global position and orientation (quat) (7)
- mjJNT_BALL, // orientation (quat) relative to parent (4)
- mjJNT_SLIDE, // sliding distance along body-fixed axis (1)
- mjJNT_HINGE // rotation angle (rad) around body-fixed axis (1)
- } mjtJoint;
- typedef enum mjtGeom_ { // type of geometric shape
- // regular geom types
- mjGEOM_PLANE = 0, // plane
- mjGEOM_HFIELD, // height field
- mjGEOM_SPHERE, // sphere
- mjGEOM_CAPSULE, // capsule
- mjGEOM_ELLIPSOID, // ellipsoid
- mjGEOM_CYLINDER, // cylinder
- mjGEOM_BOX, // box
- mjGEOM_MESH, // mesh
- mjGEOM_SDF, // signed distance field
- mjNGEOMTYPES, // number of regular geom types
- // rendering-only geom types: not used in mjModel, not counted in mjNGEOMTYPES
- mjGEOM_ARROW = 100, // arrow
- mjGEOM_ARROW1, // arrow without wedges
- mjGEOM_ARROW2, // arrow in both directions
- mjGEOM_LINE, // line
- mjGEOM_LINEBOX, // box with line edges
- mjGEOM_FLEX, // flex
- mjGEOM_SKIN, // skin
- mjGEOM_LABEL, // text label
- mjGEOM_TRIANGLE, // triangle
- mjGEOM_NONE = 1001 // missing geom type
- } mjtGeom;
- typedef enum mjtCamLight_ { // tracking mode for camera and light
- mjCAMLIGHT_FIXED = 0, // pos and rot fixed in body
- mjCAMLIGHT_TRACK, // pos tracks body, rot fixed in global
- mjCAMLIGHT_TRACKCOM, // pos tracks subtree com, rot fixed in body
- mjCAMLIGHT_TARGETBODY, // pos fixed in body, rot tracks target body
- mjCAMLIGHT_TARGETBODYCOM // pos fixed in body, rot tracks target subtree com
- } mjtCamLight;
- typedef enum mjtTexture_ { // type of texture
- mjTEXTURE_2D = 0, // 2d texture, suitable for planes and hfields
- mjTEXTURE_CUBE, // cube texture, suitable for all other geom types
- mjTEXTURE_SKYBOX // cube texture used as skybox
- } mjtTexture;
- typedef enum mjtTextureRole_ { // role of texture map in rendering
- mjTEXROLE_USER = 0, // unspecified
- mjTEXROLE_RGB, // base color (albedo)
- mjTEXROLE_OCCLUSION, // ambient occlusion
- mjTEXROLE_ROUGHNESS, // roughness
- mjTEXROLE_METALLIC, // metallic
- mjTEXROLE_NORMAL, // normal (bump) map
- mjTEXROLE_OPACITY, // transperancy
- mjTEXROLE_EMISSIVE, // light emission
- mjTEXROLE_RGBA, // base color, opacity
- mjTEXROLE_ORM, // occlusion, roughness, metallic
- mjNTEXROLE
- } mjtTextureRole;
- typedef enum mjtIntegrator_ { // integrator mode
- mjINT_EULER = 0, // semi-implicit Euler
- mjINT_RK4, // 4th-order Runge Kutta
- mjINT_IMPLICIT, // implicit in velocity
- mjINT_IMPLICITFAST // implicit in velocity, no rne derivative
- } mjtIntegrator;
- typedef enum mjtCone_ { // type of friction cone
- mjCONE_PYRAMIDAL = 0, // pyramidal
- mjCONE_ELLIPTIC // elliptic
- } mjtCone;
- typedef enum mjtJacobian_ { // type of constraint Jacobian
- mjJAC_DENSE = 0, // dense
- mjJAC_SPARSE, // sparse
- mjJAC_AUTO // dense if nv<60, sparse otherwise
- } mjtJacobian;
- typedef enum mjtSolver_ { // constraint solver algorithm
- mjSOL_PGS = 0, // PGS (dual)
- mjSOL_CG, // CG (primal)
- mjSOL_NEWTON // Newton (primal)
- } mjtSolver;
- typedef enum mjtEq_ { // type of equality constraint
- mjEQ_CONNECT = 0, // connect two bodies at a point (ball joint)
- mjEQ_WELD, // fix relative position and orientation of two bodies
- mjEQ_JOINT, // couple the values of two scalar joints with cubic
- mjEQ_TENDON, // couple the lengths of two tendons with cubic
- mjEQ_FLEX, // fix all edge lengths of a flex
- mjEQ_DISTANCE // unsupported, will cause an error if used
- } mjtEq;
- typedef enum mjtWrap_ { // type of tendon wrap object
- mjWRAP_NONE = 0, // null object
- mjWRAP_JOINT, // constant moment arm
- mjWRAP_PULLEY, // pulley used to split tendon
- mjWRAP_SITE, // pass through site
- mjWRAP_SPHERE, // wrap around sphere
- mjWRAP_CYLINDER // wrap around (infinite) cylinder
- } mjtWrap;
- typedef enum mjtTrn_ { // type of actuator transmission
- mjTRN_JOINT = 0, // force on joint
- mjTRN_JOINTINPARENT, // force on joint, expressed in parent frame
- mjTRN_SLIDERCRANK, // force via slider-crank linkage
- mjTRN_TENDON, // force on tendon
- mjTRN_SITE, // force on site
- mjTRN_BODY, // adhesion force on a body's geoms
- mjTRN_UNDEFINED = 1000 // undefined transmission type
- } mjtTrn;
- typedef enum mjtDyn_ { // type of actuator dynamics
- mjDYN_NONE = 0, // no internal dynamics; ctrl specifies force
- mjDYN_INTEGRATOR, // integrator: da/dt = u
- mjDYN_FILTER, // linear filter: da/dt = (u-a) / tau
- mjDYN_FILTEREXACT, // linear filter: da/dt = (u-a) / tau, with exact integration
- mjDYN_MUSCLE, // piece-wise linear filter with two time constants
- mjDYN_USER // user-defined dynamics type
- } mjtDyn;
- typedef enum mjtGain_ { // type of actuator gain
- mjGAIN_FIXED = 0, // fixed gain
- mjGAIN_AFFINE, // const + kp*length + kv*velocity
- mjGAIN_MUSCLE, // muscle FLV curve computed by mju_muscleGain()
- mjGAIN_USER // user-defined gain type
- } mjtGain;
- typedef enum mjtBias_ { // type of actuator bias
- mjBIAS_NONE = 0, // no bias
- mjBIAS_AFFINE, // const + kp*length + kv*velocity
- mjBIAS_MUSCLE, // muscle passive force computed by mju_muscleBias()
- mjBIAS_USER // user-defined bias type
- } mjtBias;
- typedef enum mjtObj_ { // type of MujoCo object
- mjOBJ_UNKNOWN = 0, // unknown object type
- mjOBJ_BODY, // body
- mjOBJ_XBODY, // body, used to access regular frame instead of i-frame
- mjOBJ_JOINT, // joint
- mjOBJ_DOF, // dof
- mjOBJ_GEOM, // geom
- mjOBJ_SITE, // site
- mjOBJ_CAMERA, // camera
- mjOBJ_LIGHT, // light
- mjOBJ_FLEX, // flex
- mjOBJ_MESH, // mesh
- mjOBJ_SKIN, // skin
- mjOBJ_HFIELD, // heightfield
- mjOBJ_TEXTURE, // texture
- mjOBJ_MATERIAL, // material for rendering
- mjOBJ_PAIR, // geom pair to include
- mjOBJ_EXCLUDE, // body pair to exclude
- mjOBJ_EQUALITY, // equality constraint
- mjOBJ_TENDON, // tendon
- mjOBJ_ACTUATOR, // actuator
- mjOBJ_SENSOR, // sensor
- mjOBJ_NUMERIC, // numeric
- mjOBJ_TEXT, // text
- mjOBJ_TUPLE, // tuple
- mjOBJ_KEY, // keyframe
- mjOBJ_PLUGIN, // plugin instance
- mjNOBJECT, // number of object types
- // meta elements, do not appear in mjModel
- mjOBJ_FRAME = 100 // frame
- } mjtObj;
- typedef enum mjtConstraint_ { // type of constraint
- mjCNSTR_EQUALITY = 0, // equality constraint
- mjCNSTR_FRICTION_DOF, // dof friction
- mjCNSTR_FRICTION_TENDON, // tendon friction
- mjCNSTR_LIMIT_JOINT, // joint limit
- mjCNSTR_LIMIT_TENDON, // tendon limit
- mjCNSTR_CONTACT_FRICTIONLESS, // frictionless contact
- mjCNSTR_CONTACT_PYRAMIDAL, // frictional contact, pyramidal friction cone
- mjCNSTR_CONTACT_ELLIPTIC // frictional contact, elliptic friction cone
- } mjtConstraint;
- typedef enum mjtConstraintState_ { // constraint state
- mjCNSTRSTATE_SATISFIED = 0, // constraint satisfied, zero cost (limit, contact)
- mjCNSTRSTATE_QUADRATIC, // quadratic cost (equality, friction, limit, contact)
- mjCNSTRSTATE_LINEARNEG, // linear cost, negative side (friction)
- mjCNSTRSTATE_LINEARPOS, // linear cost, positive side (friction)
- mjCNSTRSTATE_CONE // squared distance to cone cost (elliptic contact)
- } mjtConstraintState;
- typedef enum mjtSensor_ { // type of sensor
- // common robotic sensors, attached to a site
- mjSENS_TOUCH = 0, // scalar contact normal forces summed over sensor zone
- mjSENS_ACCELEROMETER, // 3D linear acceleration, in local frame
- mjSENS_VELOCIMETER, // 3D linear velocity, in local frame
- mjSENS_GYRO, // 3D angular velocity, in local frame
- mjSENS_FORCE, // 3D force between site's body and its parent body
- mjSENS_TORQUE, // 3D torque between site's body and its parent body
- mjSENS_MAGNETOMETER, // 3D magnetometer
- mjSENS_RANGEFINDER, // scalar distance to nearest geom or site along z-axis
- mjSENS_CAMPROJECTION, // pixel coordinates of a site in the camera image
- // sensors related to scalar joints, tendons, actuators
- mjSENS_JOINTPOS, // scalar joint position (hinge and slide only)
- mjSENS_JOINTVEL, // scalar joint velocity (hinge and slide only)
- mjSENS_TENDONPOS, // scalar tendon position
- mjSENS_TENDONVEL, // scalar tendon velocity
- mjSENS_ACTUATORPOS, // scalar actuator position
- mjSENS_ACTUATORVEL, // scalar actuator velocity
- mjSENS_ACTUATORFRC, // scalar actuator force
- mjSENS_JOINTACTFRC, // scalar actuator force, measured at the joint
- // sensors related to ball joints
- mjSENS_BALLQUAT, // 4D ball joint quaternion
- mjSENS_BALLANGVEL, // 3D ball joint angular velocity
- // joint and tendon limit sensors, in constraint space
- mjSENS_JOINTLIMITPOS, // joint limit distance-margin
- mjSENS_JOINTLIMITVEL, // joint limit velocity
- mjSENS_JOINTLIMITFRC, // joint limit force
- mjSENS_TENDONLIMITPOS, // tendon limit distance-margin
- mjSENS_TENDONLIMITVEL, // tendon limit velocity
- mjSENS_TENDONLIMITFRC, // tendon limit force
- // sensors attached to an object with spatial frame: (x)body, geom, site, camera
- mjSENS_FRAMEPOS, // 3D position
- mjSENS_FRAMEQUAT, // 4D unit quaternion orientation
- mjSENS_FRAMEXAXIS, // 3D unit vector: x-axis of object's frame
- mjSENS_FRAMEYAXIS, // 3D unit vector: y-axis of object's frame
- mjSENS_FRAMEZAXIS, // 3D unit vector: z-axis of object's frame
- mjSENS_FRAMELINVEL, // 3D linear velocity
- mjSENS_FRAMEANGVEL, // 3D angular velocity
- mjSENS_FRAMELINACC, // 3D linear acceleration
- mjSENS_FRAMEANGACC, // 3D angular acceleration
- // sensors related to kinematic subtrees; attached to a body (which is the subtree root)
- mjSENS_SUBTREECOM, // 3D center of mass of subtree
- mjSENS_SUBTREELINVEL, // 3D linear velocity of subtree
- mjSENS_SUBTREEANGMOM, // 3D angular momentum of subtree
- // sensors for geometric distance; attached to geoms or bodies
- mjSENS_GEOMDIST, // signed distance between two geoms
- mjSENS_GEOMNORMAL, // normal direction between two geoms
- mjSENS_GEOMFROMTO, // segment between two geoms
- // global sensors
- mjSENS_CLOCK, // simulation time
- // plugin-controlled sensors
- mjSENS_PLUGIN, // plugin-controlled
- // user-defined sensor
- mjSENS_USER // sensor data provided by mjcb_sensor callback
- } mjtSensor;
- typedef enum mjtStage_ { // computation stage
- mjSTAGE_NONE = 0, // no computations
- mjSTAGE_POS, // position-dependent computations
- mjSTAGE_VEL, // velocity-dependent computations
- mjSTAGE_ACC // acceleration/force-dependent computations
- } mjtStage;
- typedef enum mjtDataType_ { // data type for sensors
- mjDATATYPE_REAL = 0, // real values, no constraints
- mjDATATYPE_POSITIVE, // positive values; 0 or negative: inactive
- mjDATATYPE_AXIS, // 3D unit vector
- mjDATATYPE_QUATERNION // unit quaternion
- } mjtDataType;
- typedef enum mjtSameFrame_ { // frame alignment of bodies with their children
- mjSAMEFRAME_NONE = 0, // no alignment
- mjSAMEFRAME_BODY, // frame is same as body frame
- mjSAMEFRAME_INERTIA, // frame is same as inertial frame
- mjSAMEFRAME_BODYROT, // frame orientation is same as body orientation
- mjSAMEFRAME_INERTIAROT // frame orientation is same as inertia orientation
- } mjtSameFrame;
- typedef enum mjtLRMode_ { // mode for actuator length range computation
- mjLRMODE_NONE = 0, // do not process any actuators
- mjLRMODE_MUSCLE, // process muscle actuators
- mjLRMODE_MUSCLEUSER, // process muscle and user actuators
- mjLRMODE_ALL // process all actuators
- } mjtLRMode;
- typedef enum mjtFlexSelf_ { // mode for flex selfcollide
- mjFLEXSELF_NONE = 0, // no self-collisions
- mjFLEXSELF_NARROW, // skip midphase, go directly to narrowphase
- mjFLEXSELF_BVH, // use BVH in midphase (if midphase enabled)
- mjFLEXSELF_SAP, // use SAP in midphase
- mjFLEXSELF_AUTO // choose between BVH and SAP automatically
- } mjtFlexSelf;
- struct mjLROpt_ { // options for mj_setLengthRange()
- // flags
- int mode; // which actuators to process (mjtLRMode)
- int useexisting; // use existing length range if available
- int uselimit; // use joint and tendon limits if available
- // algorithm parameters
- mjtNum accel; // target acceleration used to compute force
- mjtNum maxforce; // maximum force; 0: no limit
- mjtNum timeconst; // time constant for velocity reduction; min 0.01
- mjtNum timestep; // simulation timestep; 0: use mjOption.timestep
- mjtNum inttotal; // total simulation time interval
- mjtNum interval; // evaluation time interval (at the end)
- mjtNum tolrange; // convergence tolerance (relative to range)
- };
- typedef struct mjLROpt_ mjLROpt;
- struct mjVFS_ { // virtual file system for loading from memory
- void* impl_; // internal pointer to VFS memory
- };
- typedef struct mjVFS_ mjVFS;
- struct mjOption_ { // physics options
- // timing parameters
- mjtNum timestep; // timestep
- mjtNum apirate; // update rate for remote API (Hz)
- // solver parameters
- mjtNum impratio; // ratio of friction-to-normal contact impedance
- mjtNum tolerance; // main solver tolerance
- mjtNum ls_tolerance; // CG/Newton linesearch tolerance
- mjtNum noslip_tolerance; // noslip solver tolerance
- mjtNum ccd_tolerance; // convex collision solver tolerance
- // physical constants
- mjtNum gravity[3]; // gravitational acceleration
- mjtNum wind[3]; // wind (for lift, drag and viscosity)
- mjtNum magnetic[3]; // global magnetic flux
- mjtNum density; // density of medium
- mjtNum viscosity; // viscosity of medium
- // override contact solver parameters (if enabled)
- mjtNum o_margin; // margin
- mjtNum o_solref[mjNREF]; // solref
- mjtNum o_solimp[mjNIMP]; // solimp
- mjtNum o_friction[5]; // friction
- // discrete settings
- int integrator; // integration mode (mjtIntegrator)
- int cone; // type of friction cone (mjtCone)
- int jacobian; // type of Jacobian (mjtJacobian)
- int solver; // solver algorithm (mjtSolver)
- int iterations; // maximum number of main solver iterations
- int ls_iterations; // maximum number of CG/Newton linesearch iterations
- int noslip_iterations; // maximum number of noslip solver iterations
- int ccd_iterations; // maximum number of convex collision solver iterations
- int disableflags; // bit flags for disabling standard features
- int enableflags; // bit flags for enabling optional features
- int disableactuator; // bit flags for disabling actuators by group id
- // sdf collision settings
- int sdf_initpoints; // number of starting points for gradient descent
- int sdf_iterations; // max number of iterations for gradient descent
- };
- typedef struct mjOption_ mjOption;
- struct mjVisual_ { // visualization options
- struct { // global parameters
- int orthographic; // is the free camera orthographic (0: no, 1: yes)
- float fovy; // y field-of-view of free camera (orthographic ? length : degree)
- float ipd; // inter-pupilary distance for free camera
- float azimuth; // initial azimuth of free camera (degrees)
- float elevation; // initial elevation of free camera (degrees)
- float linewidth; // line width for wireframe and ray rendering
- float glow; // glow coefficient for selected body
- float realtime; // initial real-time factor (1: real time)
- int offwidth; // width of offscreen buffer
- int offheight; // height of offscreen buffer
- int ellipsoidinertia; // geom for inertia visualization (0: box, 1: ellipsoid)
- int bvactive; // visualize active bounding volumes (0: no, 1: yes)
- } global;
- struct { // rendering quality
- int shadowsize; // size of shadowmap texture
- int offsamples; // number of multisamples for offscreen rendering
- int numslices; // number of slices for builtin geom drawing
- int numstacks; // number of stacks for builtin geom drawing
- int numquads; // number of quads for box rendering
- } quality;
- struct { // head light
- float ambient[3]; // ambient rgb (alpha=1)
- float diffuse[3]; // diffuse rgb (alpha=1)
- float specular[3]; // specular rgb (alpha=1)
- int active; // is headlight active
- } headlight;
- struct { // mapping
- float stiffness; // mouse perturbation stiffness (space->force)
- float stiffnessrot; // mouse perturbation stiffness (space->torque)
- float force; // from force units to space units
- float torque; // from torque units to space units
- float alpha; // scale geom alphas when transparency is enabled
- float fogstart; // OpenGL fog starts at fogstart * mjModel.stat.extent
- float fogend; // OpenGL fog ends at fogend * mjModel.stat.extent
- float znear; // near clipping plane = znear * mjModel.stat.extent
- float zfar; // far clipping plane = zfar * mjModel.stat.extent
- float haze; // haze ratio
- float shadowclip; // directional light: shadowclip * mjModel.stat.extent
- float shadowscale; // spot light: shadowscale * light.cutoff
- float actuatortendon; // scale tendon width
- } map;
- struct { // scale of decor elements relative to mean body size
- float forcewidth; // width of force arrow
- float contactwidth; // contact width
- float contactheight; // contact height
- float connect; // autoconnect capsule width
- float com; // com radius
- float camera; // camera object
- float light; // light object
- float selectpoint; // selection point
- float jointlength; // joint length
- float jointwidth; // joint width
- float actuatorlength; // actuator length
- float actuatorwidth; // actuator width
- float framelength; // bodyframe axis length
- float framewidth; // bodyframe axis width
- float constraint; // constraint width
- float slidercrank; // slidercrank width
- float frustum; // frustum zfar plane
- } scale;
- struct { // color of decor elements
- float fog[4]; // fog
- float haze[4]; // haze
- float force[4]; // external force
- float inertia[4]; // inertia box
- float joint[4]; // joint
- float actuator[4]; // actuator, neutral
- float actuatornegative[4]; // actuator, negative limit
- float actuatorpositive[4]; // actuator, positive limit
- float com[4]; // center of mass
- float camera[4]; // camera object
- float light[4]; // light object
- float selectpoint[4]; // selection point
- float connect[4]; // auto connect
- float contactpoint[4]; // contact point
- float contactforce[4]; // contact force
- float contactfriction[4]; // contact friction force
- float contacttorque[4]; // contact torque
- float contactgap[4]; // contact point in gap
- float rangefinder[4]; // rangefinder ray
- float constraint[4]; // constraint
- float slidercrank[4]; // slidercrank
- float crankbroken[4]; // used when crank must be stretched/broken
- float frustum[4]; // camera frustum
- float bv[4]; // bounding volume
- float bvactive[4]; // active bounding volume
- } rgba;
- };
- typedef struct mjVisual_ mjVisual;
- struct mjStatistic_ { // model statistics (in qpos0)
- mjtNum meaninertia; // mean diagonal inertia
- mjtNum meanmass; // mean body mass
- mjtNum meansize; // mean body size
- mjtNum extent; // spatial extent
- mjtNum center[3]; // center of model
- };
- typedef struct mjStatistic_ mjStatistic;
- struct mjModel_ {
- // ------------------------------- sizes
- // sizes needed at mjModel construction
- int nq; // number of generalized coordinates = dim(qpos)
- int nv; // number of degrees of freedom = dim(qvel)
- int nu; // number of actuators/controls = dim(ctrl)
- int na; // number of activation states = dim(act)
- int nbody; // number of bodies
- int nbvh; // number of total bounding volumes in all bodies
- int nbvhstatic; // number of static bounding volumes (aabb stored in mjModel)
- int nbvhdynamic; // number of dynamic bounding volumes (aabb stored in mjData)
- int njnt; // number of joints
- int ngeom; // number of geoms
- int nsite; // number of sites
- int ncam; // number of cameras
- int nlight; // number of lights
- int nflex; // number of flexes
- int nflexvert; // number of vertices in all flexes
- int nflexedge; // number of edges in all flexes
- int nflexelem; // number of elements in all flexes
- int nflexelemdata; // number of element vertex ids in all flexes
- int nflexelemedge; // number of element edge ids in all flexes
- int nflexshelldata; // number of shell fragment vertex ids in all flexes
- int nflexevpair; // number of element-vertex pairs in all flexes
- int nflextexcoord; // number of vertices with texture coordinates
- int nmesh; // number of meshes
- int nmeshvert; // number of vertices in all meshes
- int nmeshnormal; // number of normals in all meshes
- int nmeshtexcoord; // number of texcoords in all meshes
- int nmeshface; // number of triangular faces in all meshes
- int nmeshgraph; // number of ints in mesh auxiliary data
- int nskin; // number of skins
- int nskinvert; // number of vertices in all skins
- int nskintexvert; // number of vertiex with texcoords in all skins
- int nskinface; // number of triangular faces in all skins
- int nskinbone; // number of bones in all skins
- int nskinbonevert; // number of vertices in all skin bones
- int nhfield; // number of heightfields
- int nhfielddata; // number of data points in all heightfields
- int ntex; // number of textures
- int ntexdata; // number of bytes in texture rgb data
- int nmat; // number of materials
- int npair; // number of predefined geom pairs
- int nexclude; // number of excluded geom pairs
- int neq; // number of equality constraints
- int ntendon; // number of tendons
- int nwrap; // number of wrap objects in all tendon paths
- int nsensor; // number of sensors
- int nnumeric; // number of numeric custom fields
- int nnumericdata; // number of mjtNums in all numeric fields
- int ntext; // number of text custom fields
- int ntextdata; // number of mjtBytes in all text fields
- int ntuple; // number of tuple custom fields
- int ntupledata; // number of objects in all tuple fields
- int nkey; // number of keyframes
- int nmocap; // number of mocap bodies
- int nplugin; // number of plugin instances
- int npluginattr; // number of chars in all plugin config attributes
- int nuser_body; // number of mjtNums in body_user
- int nuser_jnt; // number of mjtNums in jnt_user
- int nuser_geom; // number of mjtNums in geom_user
- int nuser_site; // number of mjtNums in site_user
- int nuser_cam; // number of mjtNums in cam_user
- int nuser_tendon; // number of mjtNums in tendon_user
- int nuser_actuator; // number of mjtNums in actuator_user
- int nuser_sensor; // number of mjtNums in sensor_user
- int nnames; // number of chars in all names
- int nnames_map; // number of slots in the names hash map
- int npaths; // number of chars in all paths
- // sizes set after mjModel construction (only affect mjData)
- int nM; // number of non-zeros in sparse inertia matrix
- int nB; // number of non-zeros in sparse body-dof matrix
- int nC; // number of non-zeros in sparse reduced dof-dof matrix
- int nD; // number of non-zeros in sparse dof-dof matrix
- int ntree; // number of kinematic trees under world body
- int ngravcomp; // number of bodies with nonzero gravcomp
- int nemax; // number of potential equality-constraint rows
- int njmax; // number of available rows in constraint Jacobian
- int nconmax; // number of potential contacts in contact list
- int nuserdata; // number of mjtNums reserved for the user
- int nsensordata; // number of mjtNums in sensor data vector
- int npluginstate; // number of mjtNums in plugin state vector
- size_t narena; // number of bytes in the mjData arena (inclusive of stack)
- size_t nbuffer; // number of bytes in buffer
- // ------------------------------- options and statistics
- mjOption opt; // physics options
- mjVisual vis; // visualization options
- mjStatistic stat; // model statistics
- // ------------------------------- buffers
- // main buffer
- void* buffer; // main buffer; all pointers point in it (nbuffer)
- // default generalized coordinates
- mjtNum* qpos0; // qpos values at default pose (nq x 1)
- mjtNum* qpos_spring; // reference pose for springs (nq x 1)
- // bodies
- int* body_parentid; // id of body's parent (nbody x 1)
- int* body_rootid; // id of root above body (nbody x 1)
- int* body_weldid; // id of body that this body is welded to (nbody x 1)
- int* body_mocapid; // id of mocap data; -1: none (nbody x 1)
- int* body_jntnum; // number of joints for this body (nbody x 1)
- int* body_jntadr; // start addr of joints; -1: no joints (nbody x 1)
- int* body_dofnum; // number of motion degrees of freedom (nbody x 1)
- int* body_dofadr; // start addr of dofs; -1: no dofs (nbody x 1)
- int* body_treeid; // id of body's kinematic tree; -1: static (nbody x 1)
- int* body_geomnum; // number of geoms (nbody x 1)
- int* body_geomadr; // start addr of geoms; -1: no geoms (nbody x 1)
- mjtByte* body_simple; // 1: diag M; 2: diag M, sliders only (nbody x 1)
- mjtByte* body_sameframe; // same frame as inertia (mjtSameframe) (nbody x 1)
- mjtNum* body_pos; // position offset rel. to parent body (nbody x 3)
- mjtNum* body_quat; // orientation offset rel. to parent body (nbody x 4)
- mjtNum* body_ipos; // local position of center of mass (nbody x 3)
- mjtNum* body_iquat; // local orientation of inertia ellipsoid (nbody x 4)
- mjtNum* body_mass; // mass (nbody x 1)
- mjtNum* body_subtreemass; // mass of subtree starting at this body (nbody x 1)
- mjtNum* body_inertia; // diagonal inertia in ipos/iquat frame (nbody x 3)
- mjtNum* body_invweight0; // mean inv inert in qpos0 (trn, rot) (nbody x 2)
- mjtNum* body_gravcomp; // antigravity force, units of body weight (nbody x 1)
- mjtNum* body_margin; // MAX over all geom margins (nbody x 1)
- mjtNum* body_user; // user data (nbody x nuser_body)
- int* body_plugin; // plugin instance id; -1: not in use (nbody x 1)
- int* body_contype; // OR over all geom contypes (nbody x 1)
- int* body_conaffinity; // OR over all geom conaffinities (nbody x 1)
- int* body_bvhadr; // address of bvh root (nbody x 1)
- int* body_bvhnum; // number of bounding volumes (nbody x 1)
- // bounding volume hierarchy
- int* bvh_depth; // depth in the bounding volume hierarchy (nbvh x 1)
- int* bvh_child; // left and right children in tree (nbvh x 2)
- int* bvh_nodeid; // geom or elem id of node; -1: non-leaf (nbvh x 1)
- mjtNum* bvh_aabb; // local bounding box (center, size) (nbvhstatic x 6)
- // joints
- int* jnt_type; // type of joint (mjtJoint) (njnt x 1)
- int* jnt_qposadr; // start addr in 'qpos' for joint's data (njnt x 1)
- int* jnt_dofadr; // start addr in 'qvel' for joint's data (njnt x 1)
- int* jnt_bodyid; // id of joint's body (njnt x 1)
- int* jnt_group; // group for visibility (njnt x 1)
- mjtByte* jnt_limited; // does joint have limits (njnt x 1)
- mjtByte* jnt_actfrclimited; // does joint have actuator force limits (njnt x 1)
- mjtByte* jnt_actgravcomp; // is gravcomp force applied via actuators (njnt x 1)
- mjtNum* jnt_solref; // constraint solver reference: limit (njnt x mjNREF)
- mjtNum* jnt_solimp; // constraint solver impedance: limit (njnt x mjNIMP)
- mjtNum* jnt_pos; // local anchor position (njnt x 3)
- mjtNum* jnt_axis; // local joint axis (njnt x 3)
- mjtNum* jnt_stiffness; // stiffness coefficient (njnt x 1)
- mjtNum* jnt_range; // joint limits (njnt x 2)
- mjtNum* jnt_actfrcrange; // range of total actuator force (njnt x 2)
- mjtNum* jnt_margin; // min distance for limit detection (njnt x 1)
- mjtNum* jnt_user; // user data (njnt x nuser_jnt)
- // dofs
- int* dof_bodyid; // id of dof's body (nv x 1)
- int* dof_jntid; // id of dof's joint (nv x 1)
- int* dof_parentid; // id of dof's parent; -1: none (nv x 1)
- int* dof_treeid; // id of dof's kinematic tree (nv x 1)
- int* dof_Madr; // dof address in M-diagonal (nv x 1)
- int* dof_simplenum; // number of consecutive simple dofs (nv x 1)
- mjtNum* dof_solref; // constraint solver reference:frictionloss (nv x mjNREF)
- mjtNum* dof_solimp; // constraint solver impedance:frictionloss (nv x mjNIMP)
- mjtNum* dof_frictionloss; // dof friction loss (nv x 1)
- mjtNum* dof_armature; // dof armature inertia/mass (nv x 1)
- mjtNum* dof_damping; // damping coefficient (nv x 1)
- mjtNum* dof_invweight0; // diag. inverse inertia in qpos0 (nv x 1)
- mjtNum* dof_M0; // diag. inertia in qpos0 (nv x 1)
- // geoms
- int* geom_type; // geometric type (mjtGeom) (ngeom x 1)
- int* geom_contype; // geom contact type (ngeom x 1)
- int* geom_conaffinity; // geom contact affinity (ngeom x 1)
- int* geom_condim; // contact dimensionality (1, 3, 4, 6) (ngeom x 1)
- int* geom_bodyid; // id of geom's body (ngeom x 1)
- int* geom_dataid; // id of geom's mesh/hfield; -1: none (ngeom x 1)
- int* geom_matid; // material id for rendering; -1: none (ngeom x 1)
- int* geom_group; // group for visibility (ngeom x 1)
- int* geom_priority; // geom contact priority (ngeom x 1)
- int* geom_plugin; // plugin instance id; -1: not in use (ngeom x 1)
- mjtByte* geom_sameframe; // same frame as body (mjtSameframe) (ngeom x 1)
- mjtNum* geom_solmix; // mixing coef for solref/imp in geom pair (ngeom x 1)
- mjtNum* geom_solref; // constraint solver reference: contact (ngeom x mjNREF)
- mjtNum* geom_solimp; // constraint solver impedance: contact (ngeom x mjNIMP)
- mjtNum* geom_size; // geom-specific size parameters (ngeom x 3)
- mjtNum* geom_aabb; // bounding box, (center, size) (ngeom x 6)
- mjtNum* geom_rbound; // radius of bounding sphere (ngeom x 1)
- mjtNum* geom_pos; // local position offset rel. to body (ngeom x 3)
- mjtNum* geom_quat; // local orientation offset rel. to body (ngeom x 4)
- mjtNum* geom_friction; // friction for (slide, spin, roll) (ngeom x 3)
- mjtNum* geom_margin; // detect contact if dist<margin (ngeom x 1)
- mjtNum* geom_gap; // include in solver if dist<margin-gap (ngeom x 1)
- mjtNum* geom_fluid; // fluid interaction parameters (ngeom x mjNFLUID)
- mjtNum* geom_user; // user data (ngeom x nuser_geom)
- float* geom_rgba; // rgba when material is omitted (ngeom x 4)
- // sites
- int* site_type; // geom type for rendering (mjtGeom) (nsite x 1)
- int* site_bodyid; // id of site's body (nsite x 1)
- int* site_matid; // material id for rendering; -1: none (nsite x 1)
- int* site_group; // group for visibility (nsite x 1)
- mjtByte* site_sameframe; // same frame as body (mjtSameframe) (nsite x 1)
- mjtNum* site_size; // geom size for rendering (nsite x 3)
- mjtNum* site_pos; // local position offset rel. to body (nsite x 3)
- mjtNum* site_quat; // local orientation offset rel. to body (nsite x 4)
- mjtNum* site_user; // user data (nsite x nuser_site)
- float* site_rgba; // rgba when material is omitted (nsite x 4)
- // cameras
- int* cam_mode; // camera tracking mode (mjtCamLight) (ncam x 1)
- int* cam_bodyid; // id of camera's body (ncam x 1)
- int* cam_targetbodyid; // id of targeted body; -1: none (ncam x 1)
- mjtNum* cam_pos; // position rel. to body frame (ncam x 3)
- mjtNum* cam_quat; // orientation rel. to body frame (ncam x 4)
- mjtNum* cam_poscom0; // global position rel. to sub-com in qpos0 (ncam x 3)
- mjtNum* cam_pos0; // global position rel. to body in qpos0 (ncam x 3)
- mjtNum* cam_mat0; // global orientation in qpos0 (ncam x 9)
- int* cam_orthographic; // orthographic camera; 0: no, 1: yes (ncam x 1)
- mjtNum* cam_fovy; // y field-of-view (ortho ? len : deg) (ncam x 1)
- mjtNum* cam_ipd; // inter-pupilary distance (ncam x 1)
- int* cam_resolution; // resolution: pixels [width, height] (ncam x 2)
- float* cam_sensorsize; // sensor size: length [width, height] (ncam x 2)
- float* cam_intrinsic; // [focal length; principal point] (ncam x 4)
- mjtNum* cam_user; // user data (ncam x nuser_cam)
- // lights
- int* light_mode; // light tracking mode (mjtCamLight) (nlight x 1)
- int* light_bodyid; // id of light's body (nlight x 1)
- int* light_targetbodyid; // id of targeted body; -1: none (nlight x 1)
- mjtByte* light_directional; // directional light (nlight x 1)
- mjtByte* light_castshadow; // does light cast shadows (nlight x 1)
- float* light_bulbradius; // light radius for soft shadows (nlight x 1)
- mjtByte* light_active; // is light on (nlight x 1)
- mjtNum* light_pos; // position rel. to body frame (nlight x 3)
- mjtNum* light_dir; // direction rel. to body frame (nlight x 3)
- mjtNum* light_poscom0; // global position rel. to sub-com in qpos0 (nlight x 3)
- mjtNum* light_pos0; // global position rel. to body in qpos0 (nlight x 3)
- mjtNum* light_dir0; // global direction in qpos0 (nlight x 3)
- float* light_attenuation; // OpenGL attenuation (quadratic model) (nlight x 3)
- float* light_cutoff; // OpenGL cutoff (nlight x 1)
- float* light_exponent; // OpenGL exponent (nlight x 1)
- float* light_ambient; // ambient rgb (alpha=1) (nlight x 3)
- float* light_diffuse; // diffuse rgb (alpha=1) (nlight x 3)
- float* light_specular; // specular rgb (alpha=1) (nlight x 3)
- // flexes: contact properties
- int* flex_contype; // flex contact type (nflex x 1)
- int* flex_conaffinity; // flex contact affinity (nflex x 1)
- int* flex_condim; // contact dimensionality (1, 3, 4, 6) (nflex x 1)
- int* flex_priority; // flex contact priority (nflex x 1)
- mjtNum* flex_solmix; // mix coef for solref/imp in contact pair (nflex x 1)
- mjtNum* flex_solref; // constraint solver reference: contact (nflex x mjNREF)
- mjtNum* flex_solimp; // constraint solver impedance: contact (nflex x mjNIMP)
- mjtNum* flex_friction; // friction for (slide, spin, roll) (nflex x 3)
- mjtNum* flex_margin; // detect contact if dist<margin (nflex x 1)
- mjtNum* flex_gap; // include in solver if dist<margin-gap (nflex x 1)
- mjtByte* flex_internal; // internal flex collision enabled (nflex x 1)
- int* flex_selfcollide; // self collision mode (mjtFlexSelf) (nflex x 1)
- int* flex_activelayers; // number of active element layers, 3D only (nflex x 1)
- // flexes: other properties
- int* flex_dim; // 1: lines, 2: triangles, 3: tetrahedra (nflex x 1)
- int* flex_matid; // material id for rendering (nflex x 1)
- int* flex_group; // group for visibility (nflex x 1)
- int* flex_vertadr; // first vertex address (nflex x 1)
- int* flex_vertnum; // number of vertices (nflex x 1)
- int* flex_edgeadr; // first edge address (nflex x 1)
- int* flex_edgenum; // number of edges (nflex x 1)
- int* flex_elemadr; // first element address (nflex x 1)
- int* flex_elemnum; // number of elements (nflex x 1)
- int* flex_elemdataadr; // first element vertex id address (nflex x 1)
- int* flex_elemedgeadr; // first element edge id address (nflex x 1)
- int* flex_shellnum; // number of shells (nflex x 1)
- int* flex_shelldataadr; // first shell data address (nflex x 1)
- int* flex_evpairadr; // first evpair address (nflex x 1)
- int* flex_evpairnum; // number of evpairs (nflex x 1)
- int* flex_texcoordadr; // address in flex_texcoord; -1: none (nflex x 1)
- int* flex_vertbodyid; // vertex body ids (nflexvert x 1)
- int* flex_edge; // edge vertex ids (2 per edge) (nflexedge x 2)
- int* flex_elem; // element vertex ids (dim+1 per elem) (nflexelemdata x 1)
- int* flex_elemedge; // element edge ids (nflexelemedge x 1)
- int* flex_elemlayer; // element distance from surface, 3D only (nflexelem x 1)
- int* flex_shell; // shell fragment vertex ids (dim per frag) (nflexshelldata x 1)
- int* flex_evpair; // (element, vertex) collision pairs (nflexevpair x 2)
- mjtNum* flex_vert; // vertex positions in local body frames (nflexvert x 3)
- mjtNum* flex_xvert0; // Cartesian vertex positions in qpos0 (nflexvert x 3)
- mjtNum* flexedge_length0; // edge lengths in qpos0 (nflexedge x 1)
- mjtNum* flexedge_invweight0; // edge inv. weight in qpos0 (nflexedge x 1)
- mjtNum* flex_radius; // radius around primitive element (nflex x 1)
- mjtNum* flex_stiffness; // finite element stiffness matrix (nflexelem x 21)
- mjtNum* flex_damping; // Rayleigh's damping coefficient (nflex x 1)
- mjtNum* flex_edgestiffness; // edge stiffness (nflex x 1)
- mjtNum* flex_edgedamping; // edge damping (nflex x 1)
- mjtByte* flex_edgeequality; // is edge equality constraint defined (nflex x 1)
- mjtByte* flex_rigid; // are all verices in the same body (nflex x 1)
- mjtByte* flexedge_rigid; // are both edge vertices in same body (nflexedge x 1)
- mjtByte* flex_centered; // are all vertex coordinates (0,0,0) (nflex x 1)
- mjtByte* flex_flatskin; // render flex skin with flat shading (nflex x 1)
- int* flex_bvhadr; // address of bvh root; -1: no bvh (nflex x 1)
- int* flex_bvhnum; // number of bounding volumes (nflex x 1)
- float* flex_rgba; // rgba when material is omitted (nflex x 4)
- float* flex_texcoord; // vertex texture coordinates (nflextexcoord x 2)
- // meshes
- int* mesh_vertadr; // first vertex address (nmesh x 1)
- int* mesh_vertnum; // number of vertices (nmesh x 1)
- int* mesh_faceadr; // first face address (nmesh x 1)
- int* mesh_facenum; // number of faces (nmesh x 1)
- int* mesh_bvhadr; // address of bvh root (nmesh x 1)
- int* mesh_bvhnum; // number of bvh (nmesh x 1)
- int* mesh_normaladr; // first normal address (nmesh x 1)
- int* mesh_normalnum; // number of normals (nmesh x 1)
- int* mesh_texcoordadr; // texcoord data address; -1: no texcoord (nmesh x 1)
- int* mesh_texcoordnum; // number of texcoord (nmesh x 1)
- int* mesh_graphadr; // graph data address; -1: no graph (nmesh x 1)
- float* mesh_vert; // vertex positions for all meshes (nmeshvert x 3)
- float* mesh_normal; // normals for all meshes (nmeshnormal x 3)
- float* mesh_texcoord; // vertex texcoords for all meshes (nmeshtexcoord x 2)
- int* mesh_face; // vertex face data (nmeshface x 3)
- int* mesh_facenormal; // normal face data (nmeshface x 3)
- int* mesh_facetexcoord; // texture face data (nmeshface x 3)
- int* mesh_graph; // convex graph data (nmeshgraph x 1)
- mjtNum* mesh_scale; // scaling applied to asset vertices (nmesh x 3)
- mjtNum* mesh_pos; // translation applied to asset vertices (nmesh x 3)
- mjtNum* mesh_quat; // rotation applied to asset vertices (nmesh x 4)
- int* mesh_pathadr; // address of asset path for mesh; -1: none (nmesh x 1)
- // skins
- int* skin_matid; // skin material id; -1: none (nskin x 1)
- int* skin_group; // group for visibility (nskin x 1)
- float* skin_rgba; // skin rgba (nskin x 4)
- float* skin_inflate; // inflate skin in normal direction (nskin x 1)
- int* skin_vertadr; // first vertex address (nskin x 1)
- int* skin_vertnum; // number of vertices (nskin x 1)
- int* skin_texcoordadr; // texcoord data address; -1: no texcoord (nskin x 1)
- int* skin_faceadr; // first face address (nskin x 1)
- int* skin_facenum; // number of faces (nskin x 1)
- int* skin_boneadr; // first bone in skin (nskin x 1)
- int* skin_bonenum; // number of bones in skin (nskin x 1)
- float* skin_vert; // vertex positions for all skin meshes (nskinvert x 3)
- float* skin_texcoord; // vertex texcoords for all skin meshes (nskintexvert x 2)
- int* skin_face; // triangle faces for all skin meshes (nskinface x 3)
- int* skin_bonevertadr; // first vertex in each bone (nskinbone x 1)
- int* skin_bonevertnum; // number of vertices in each bone (nskinbone x 1)
- float* skin_bonebindpos; // bind pos of each bone (nskinbone x 3)
- float* skin_bonebindquat; // bind quat of each bone (nskinbone x 4)
- int* skin_bonebodyid; // body id of each bone (nskinbone x 1)
- int* skin_bonevertid; // mesh ids of vertices in each bone (nskinbonevert x 1)
- float* skin_bonevertweight; // weights of vertices in each bone (nskinbonevert x 1)
- int* skin_pathadr; // address of asset path for skin; -1: none (nskin x 1)
- // height fields
- mjtNum* hfield_size; // (x, y, z_top, z_bottom) (nhfield x 4)
- int* hfield_nrow; // number of rows in grid (nhfield x 1)
- int* hfield_ncol; // number of columns in grid (nhfield x 1)
- int* hfield_adr; // address in hfield_data (nhfield x 1)
- float* hfield_data; // elevation data (nhfielddata x 1)
- int* hfield_pathadr; // address of hfield asset path; -1: none (nhfield x 1)
- // textures
- int* tex_type; // texture type (mjtTexture) (ntex x 1)
- int* tex_height; // number of rows in texture image (ntex x 1)
- int* tex_width; // number of columns in texture image (ntex x 1)
- int* tex_nchannel; // number of channels in texture image (ntex x 1)
- int* tex_adr; // start address in tex_data (ntex x 1)
- mjtByte* tex_data; // pixel values (ntexdata x 1)
- int* tex_pathadr; // address of texture asset path; -1: none (ntex x 1)
- // materials
- int* mat_texid; // indices of textures; -1: none (nmat x mjNTEXROLE)
- mjtByte* mat_texuniform; // make texture cube uniform (nmat x 1)
- float* mat_texrepeat; // texture repetition for 2d mapping (nmat x 2)
- float* mat_emission; // emission (x rgb) (nmat x 1)
- float* mat_specular; // specular (x white) (nmat x 1)
- float* mat_shininess; // shininess coef (nmat x 1)
- float* mat_reflectance; // reflectance (0: disable) (nmat x 1)
- float* mat_metallic; // metallic coef (nmat x 1)
- float* mat_roughness; // roughness coef (nmat x 1)
- float* mat_rgba; // rgba (nmat x 4)
- // predefined geom pairs for collision detection; has precedence over exclude
- int* pair_dim; // contact dimensionality (npair x 1)
- int* pair_geom1; // id of geom1 (npair x 1)
- int* pair_geom2; // id of geom2 (npair x 1)
- int* pair_signature; // body1 << 16 + body2 (npair x 1)
- mjtNum* pair_solref; // solver reference: contact normal (npair x mjNREF)
- mjtNum* pair_solreffriction; // solver reference: contact friction (npair x mjNREF)
- mjtNum* pair_solimp; // solver impedance: contact (npair x mjNIMP)
- mjtNum* pair_margin; // detect contact if dist<margin (npair x 1)
- mjtNum* pair_gap; // include in solver if dist<margin-gap (npair x 1)
- mjtNum* pair_friction; // tangent1, 2, spin, roll1, 2 (npair x 5)
- // excluded body pairs for collision detection
- int* exclude_signature; // body1 << 16 + body2 (nexclude x 1)
- // equality constraints
- int* eq_type; // constraint type (mjtEq) (neq x 1)
- int* eq_obj1id; // id of object 1 (neq x 1)
- int* eq_obj2id; // id of object 2 (neq x 1)
- int* eq_objtype; // type of both objects (mjtObj) (neq x 1)
- mjtByte* eq_active0; // initial enable/disable constraint state (neq x 1)
- mjtNum* eq_solref; // constraint solver reference (neq x mjNREF)
- mjtNum* eq_solimp; // constraint solver impedance (neq x mjNIMP)
- mjtNum* eq_data; // numeric data for constraint (neq x mjNEQDATA)
- // tendons
- int* tendon_adr; // address of first object in tendon's path (ntendon x 1)
- int* tendon_num; // number of objects in tendon's path (ntendon x 1)
- int* tendon_matid; // material id for rendering (ntendon x 1)
- int* tendon_group; // group for visibility (ntendon x 1)
- mjtByte* tendon_limited; // does tendon have length limits (ntendon x 1)
- mjtNum* tendon_width; // width for rendering (ntendon x 1)
- mjtNum* tendon_solref_lim; // constraint solver reference: limit (ntendon x mjNREF)
- mjtNum* tendon_solimp_lim; // constraint solver impedance: limit (ntendon x mjNIMP)
- mjtNum* tendon_solref_fri; // constraint solver reference: friction (ntendon x mjNREF)
- mjtNum* tendon_solimp_fri; // constraint solver impedance: friction (ntendon x mjNIMP)
- mjtNum* tendon_range; // tendon length limits (ntendon x 2)
- mjtNum* tendon_margin; // min distance for limit detection (ntendon x 1)
- mjtNum* tendon_stiffness; // stiffness coefficient (ntendon x 1)
- mjtNum* tendon_damping; // damping coefficient (ntendon x 1)
- mjtNum* tendon_frictionloss; // loss due to friction (ntendon x 1)
- mjtNum* tendon_lengthspring; // spring resting length range (ntendon x 2)
- mjtNum* tendon_length0; // tendon length in qpos0 (ntendon x 1)
- mjtNum* tendon_invweight0; // inv. weight in qpos0 (ntendon x 1)
- mjtNum* tendon_user; // user data (ntendon x nuser_tendon)
- float* tendon_rgba; // rgba when material is omitted (ntendon x 4)
- // list of all wrap objects in tendon paths
- int* wrap_type; // wrap object type (mjtWrap) (nwrap x 1)
- int* wrap_objid; // object id: geom, site, joint (nwrap x 1)
- mjtNum* wrap_prm; // divisor, joint coef, or site id (nwrap x 1)
- // actuators
- int* actuator_trntype; // transmission type (mjtTrn) (nu x 1)
- int* actuator_dyntype; // dynamics type (mjtDyn) (nu x 1)
- int* actuator_gaintype; // gain type (mjtGain) (nu x 1)
- int* actuator_biastype; // bias type (mjtBias) (nu x 1)
- int* actuator_trnid; // transmission id: joint, tendon, site (nu x 2)
- int* actuator_actadr; // first activation address; -1: stateless (nu x 1)
- int* actuator_actnum; // number of activation variables (nu x 1)
- int* actuator_group; // group for visibility (nu x 1)
- mjtByte* actuator_ctrllimited; // is control limited (nu x 1)
- mjtByte* actuator_forcelimited;// is force limited (nu x 1)
- mjtByte* actuator_actlimited; // is activation limited (nu x 1)
- mjtNum* actuator_dynprm; // dynamics parameters (nu x mjNDYN)
- mjtNum* actuator_gainprm; // gain parameters (nu x mjNGAIN)
- mjtNum* actuator_biasprm; // bias parameters (nu x mjNBIAS)
- mjtByte* actuator_actearly; // step activation before force (nu x 1)
- mjtNum* actuator_ctrlrange; // range of controls (nu x 2)
- mjtNum* actuator_forcerange; // range of forces (nu x 2)
- mjtNum* actuator_actrange; // range of activations (nu x 2)
- mjtNum* actuator_gear; // scale length and transmitted force (nu x 6)
- mjtNum* actuator_cranklength; // crank length for slider-crank (nu x 1)
- mjtNum* actuator_acc0; // acceleration from unit force in qpos0 (nu x 1)
- mjtNum* actuator_length0; // actuator length in qpos0 (nu x 1)
- mjtNum* actuator_lengthrange; // feasible actuator length range (nu x 2)
- mjtNum* actuator_user; // user data (nu x nuser_actuator)
- int* actuator_plugin; // plugin instance id; -1: not a plugin (nu x 1)
- // sensors
- int* sensor_type; // sensor type (mjtSensor) (nsensor x 1)
- int* sensor_datatype; // numeric data type (mjtDataType) (nsensor x 1)
- int* sensor_needstage; // required compute stage (mjtStage) (nsensor x 1)
- int* sensor_objtype; // type of sensorized object (mjtObj) (nsensor x 1)
- int* sensor_objid; // id of sensorized object (nsensor x 1)
- int* sensor_reftype; // type of reference frame (mjtObj) (nsensor x 1)
- int* sensor_refid; // id of reference frame; -1: global frame (nsensor x 1)
- int* sensor_dim; // number of scalar outputs (nsensor x 1)
- int* sensor_adr; // address in sensor array (nsensor x 1)
- mjtNum* sensor_cutoff; // cutoff for real and positive; 0: ignore (nsensor x 1)
- mjtNum* sensor_noise; // noise standard deviation (nsensor x 1)
- mjtNum* sensor_user; // user data (nsensor x nuser_sensor)
- int* sensor_plugin; // plugin instance id; -1: not a plugin (nsensor x 1)
- // plugin instances
- int* plugin; // globally registered plugin slot number (nplugin x 1)
- int* plugin_stateadr; // address in the plugin state array (nplugin x 1)
- int* plugin_statenum; // number of states in the plugin instance (nplugin x 1)
- char* plugin_attr; // config attributes of plugin instances (npluginattr x 1)
- int* plugin_attradr; // address to each instance's config attrib (nplugin x 1)
- // custom numeric fields
- int* numeric_adr; // address of field in numeric_data (nnumeric x 1)
- int* numeric_size; // size of numeric field (nnumeric x 1)
- mjtNum* numeric_data; // array of all numeric fields (nnumericdata x 1)
- // custom text fields
- int* text_adr; // address of text in text_data (ntext x 1)
- int* text_size; // size of text field (strlen+1) (ntext x 1)
- char* text_data; // array of all text fields (0-terminated) (ntextdata x 1)
- // custom tuple fields
- int* tuple_adr; // address of text in text_data (ntuple x 1)
- int* tuple_size; // number of objects in tuple (ntuple x 1)
- int* tuple_objtype; // array of object types in all tuples (ntupledata x 1)
- int* tuple_objid; // array of object ids in all tuples (ntupledata x 1)
- mjtNum* tuple_objprm; // array of object params in all tuples (ntupledata x 1)
- // keyframes
- mjtNum* key_time; // key time (nkey x 1)
- mjtNum* key_qpos; // key position (nkey x nq)
- mjtNum* key_qvel; // key velocity (nkey x nv)
- mjtNum* key_act; // key activation (nkey x na)
- mjtNum* key_mpos; // key mocap position (nkey x nmocap*3)
- mjtNum* key_mquat; // key mocap quaternion (nkey x nmocap*4)
- mjtNum* key_ctrl; // key control (nkey x nu)
- // names
- int* name_bodyadr; // body name pointers (nbody x 1)
- int* name_jntadr; // joint name pointers (njnt x 1)
- int* name_geomadr; // geom name pointers (ngeom x 1)
- int* name_siteadr; // site name pointers (nsite x 1)
- int* name_camadr; // camera name pointers (ncam x 1)
- int* name_lightadr; // light name pointers (nlight x 1)
- int* name_flexadr; // flex name pointers (nflex x 1)
- int* name_meshadr; // mesh name pointers (nmesh x 1)
- int* name_skinadr; // skin name pointers (nskin x 1)
- int* name_hfieldadr; // hfield name pointers (nhfield x 1)
- int* name_texadr; // texture name pointers (ntex x 1)
- int* name_matadr; // material name pointers (nmat x 1)
- int* name_pairadr; // geom pair name pointers (npair x 1)
- int* name_excludeadr; // exclude name pointers (nexclude x 1)
- int* name_eqadr; // equality constraint name pointers (neq x 1)
- int* name_tendonadr; // tendon name pointers (ntendon x 1)
- int* name_actuatoradr; // actuator name pointers (nu x 1)
- int* name_sensoradr; // sensor name pointers (nsensor x 1)
- int* name_numericadr; // numeric name pointers (nnumeric x 1)
- int* name_textadr; // text name pointers (ntext x 1)
- int* name_tupleadr; // tuple name pointers (ntuple x 1)
- int* name_keyadr; // keyframe name pointers (nkey x 1)
- int* name_pluginadr; // plugin instance name pointers (nplugin x 1)
- char* names; // names of all objects, 0-terminated (nnames x 1)
- int* names_map; // internal hash map of names (nnames_map x 1)
- // paths
- char* paths; // paths to assets, 0-terminated (npaths x 1)
- };
- typedef struct mjModel_ mjModel;
- struct mjResource_ {
- char* name; // name of resource (filename, etc)
- void* data; // opaque data pointer
- char timestamp[512]; // timestamp of the resource
- const struct mjpResourceProvider* provider; // pointer to the provider
- };
- typedef struct mjResource_ mjResource;
- struct mjpResourceProvider {
- const char* prefix; // prefix for match against a resource name
- mjfOpenResource open; // opening callback
- mjfReadResource read; // reading callback
- mjfCloseResource close; // closing callback
- mjfGetResourceDir getdir; // get directory callback (optional)
- mjfResourceModified modified; // resource modified callback (optional)
- void* data; // opaque data pointer (resource invariant)
- };
- typedef struct mjpResourceProvider mjpResourceProvider;
- typedef enum mjtPluginCapabilityBit_ {
- mjPLUGIN_ACTUATOR = 1<<0, // actuator forces
- mjPLUGIN_SENSOR = 1<<1, // sensor measurements
- mjPLUGIN_PASSIVE = 1<<2, // passive forces
- mjPLUGIN_SDF = 1<<3, // signed distance fields
- } mjtPluginCapabilityBit;
- struct mjpPlugin_ {
- const char* name; // globally unique name identifying the plugin
- int nattribute; // number of configuration attributes
- const char* const* attributes; // name of configuration attributes
- int capabilityflags; // plugin capabilities: bitfield of mjtPluginCapabilityBit
- int needstage; // sensor computation stage (mjtStage)
- // number of mjtNums needed to store the state of a plugin instance (required)
- int (*nstate)(const mjModel* m, int instance);
- // dimension of the specified sensor's output (required only for sensor plugins)
- int (*nsensordata)(const mjModel* m, int instance, int sensor_id);
- // called when a new mjData is being created (required), returns 0 on success or -1 on failure
- int (*init)(const mjModel* m, mjData* d, int instance);
- // called when an mjData is being freed (optional)
- void (*destroy)(mjData* d, int instance);
- // called when an mjData is being copied (optional)
- void (*copy)(mjData* dest, const mjModel* m, const mjData* src, int instance);
- // called when an mjData is being reset (required)
- void (*reset)(const mjModel* m, mjtNum* plugin_state, void* plugin_data, int instance);
- // called when the plugin needs to update its outputs (required)
- void (*compute)(const mjModel* m, mjData* d, int instance, int capability_bit);
- // called when time integration occurs (optional)
- void (*advance)(const mjModel* m, mjData* d, int instance);
- // called by mjv_updateScene (optional)
- void (*visualize)(const mjModel*m, mjData* d, const mjvOption* opt, mjvScene* scn, int instance);
- // methods specific to actuators (optional)
- // updates the actuator plugin's entries in act_dot
- // called after native act_dot is computed and before the compute callback
- void (*actuator_act_dot)(const mjModel* m, mjData* d, int instance);
- // methods specific to signed distance fields (optional)
- // signed distance from the surface
- mjtNum (*sdf_distance)(const mjtNum point[3], const mjData* d, int instance);
- // gradient of distance with respect to local coordinates
- void (*sdf_gradient)(mjtNum gradient[3], const mjtNum point[3], const mjData* d, int instance);
- // called during compilation for marching cubes
- mjtNum (*sdf_staticdistance)(const mjtNum point[3], const mjtNum* attributes);
- // convert attributes and provide defaults if not present
- void (*sdf_attribute)(mjtNum attribute[], const char* name[], const char* value[]);
- // bounding box of implicit surface
- void (*sdf_aabb)(mjtNum aabb[6], const mjtNum* attributes);
- };
- typedef struct mjpPlugin_ mjpPlugin;
- typedef enum mjtGridPos_ { // grid position for overlay
- mjGRID_TOPLEFT = 0, // top left
- mjGRID_TOPRIGHT, // top right
- mjGRID_BOTTOMLEFT, // bottom left
- mjGRID_BOTTOMRIGHT, // bottom right
- mjGRID_TOP, // top center
- mjGRID_BOTTOM, // bottom center
- mjGRID_LEFT, // left center
- mjGRID_RIGHT // right center
- } mjtGridPos;
- typedef enum mjtFramebuffer_ { // OpenGL framebuffer option
- mjFB_WINDOW = 0, // default/window buffer
- mjFB_OFFSCREEN // offscreen buffer
- } mjtFramebuffer;
- typedef enum mjtDepthMap_ { // depth mapping for `mjr_readPixels`
- mjDEPTH_ZERONEAR = 0, // standard depth map; 0: znear, 1: zfar
- mjDEPTH_ZEROFAR = 1 // reversed depth map; 1: znear, 0: zfar
- } mjtDepthMap;
- typedef enum mjtFontScale_ { // font scale, used at context creation
- mjFONTSCALE_50 = 50, // 50% scale, suitable for low-res rendering
- mjFONTSCALE_100 = 100, // normal scale, suitable in the absence of DPI scaling
- mjFONTSCALE_150 = 150, // 150% scale
- mjFONTSCALE_200 = 200, // 200% scale
- mjFONTSCALE_250 = 250, // 250% scale
- mjFONTSCALE_300 = 300 // 300% scale
- } mjtFontScale;
- typedef enum mjtFont_ { // font type, used at each text operation
- mjFONT_NORMAL = 0, // normal font
- mjFONT_SHADOW, // normal font with shadow (for higher contrast)
- mjFONT_BIG // big font (for user alerts)
- } mjtFont;
- struct mjrRect_ { // OpenGL rectangle
- int left; // left (usually 0)
- int bottom; // bottom (usually 0)
- int width; // width (usually buffer width)
- int height; // height (usually buffer height)
- };
- typedef struct mjrRect_ mjrRect;
- struct mjrContext_ { // custom OpenGL context
- // parameters copied from mjVisual
- float lineWidth; // line width for wireframe rendering
- float shadowClip; // clipping radius for directional lights
- float shadowScale; // fraction of light cutoff for spot lights
- float fogStart; // fog start = stat.extent * vis.map.fogstart
- float fogEnd; // fog end = stat.extent * vis.map.fogend
- float fogRGBA[4]; // fog rgba
- int shadowSize; // size of shadow map texture
- int offWidth; // width of offscreen buffer
- int offHeight; // height of offscreen buffer
- int offSamples; // number of offscreen buffer multisamples
- // parameters specified at creation
- int fontScale; // font scale
- int auxWidth[mjNAUX]; // auxiliary buffer width
- int auxHeight[mjNAUX]; // auxiliary buffer height
- int auxSamples[mjNAUX]; // auxiliary buffer multisamples
- // offscreen rendering objects
- unsigned int offFBO; // offscreen framebuffer object
- unsigned int offFBO_r; // offscreen framebuffer for resolving multisamples
- unsigned int offColor; // offscreen color buffer
- unsigned int offColor_r; // offscreen color buffer for resolving multisamples
- unsigned int offDepthStencil; // offscreen depth and stencil buffer
- unsigned int offDepthStencil_r; // offscreen depth and stencil buffer for multisamples
- // shadow rendering objects
- unsigned int shadowFBO; // shadow map framebuffer object
- unsigned int shadowTex; // shadow map texture
- // auxiliary buffers
- unsigned int auxFBO[mjNAUX]; // auxiliary framebuffer object
- unsigned int auxFBO_r[mjNAUX]; // auxiliary framebuffer object for resolving
- unsigned int auxColor[mjNAUX]; // auxiliary color buffer
- unsigned int auxColor_r[mjNAUX]; // auxiliary color buffer for resolving
- // materials with textures
- int mat_texid[mjMAXMATERIAL*mjNTEXROLE]; // material texture ids (-1: no texture)
- int mat_texuniform[mjMAXMATERIAL]; // texture repetition for 2d mapping
- int mat_texrepeat[mjMAXMATERIAL*2]; // texture repetition for 2d mapping
- // texture objects and info
- int ntexture; // number of allocated textures
- int textureType[mjMAXTEXTURE]; // type of texture (mjtTexture) (ntexture)
- unsigned int texture[mjMAXTEXTURE]; // texture names
- // displaylist starting positions
- unsigned int basePlane; // all planes from model
- unsigned int baseMesh; // all meshes from model
- unsigned int baseHField; // all height fields from model
- unsigned int baseBuiltin; // all builtin geoms, with quality from model
- unsigned int baseFontNormal; // normal font
- unsigned int baseFontShadow; // shadow font
- unsigned int baseFontBig; // big font
- // displaylist ranges
- int rangePlane; // all planes from model
- int rangeMesh; // all meshes from model
- int rangeHField; // all hfields from model
- int rangeBuiltin; // all builtin geoms, with quality from model
- int rangeFont; // all characters in font
- // skin VBOs
- int nskin; // number of skins
- unsigned int* skinvertVBO; // skin vertex position VBOs (nskin)
- unsigned int* skinnormalVBO; // skin vertex normal VBOs (nskin)
- unsigned int* skintexcoordVBO; // skin vertex texture coordinate VBOs (nskin)
- unsigned int* skinfaceVBO; // skin face index VBOs (nskin)
- // character info
- int charWidth[127]; // character widths: normal and shadow
- int charWidthBig[127]; // chacarter widths: big
- int charHeight; // character heights: normal and shadow
- int charHeightBig; // character heights: big
- // capabilities
- int glInitialized; // is OpenGL initialized
- int windowAvailable; // is default/window framebuffer available
- int windowSamples; // number of samples for default/window framebuffer
- int windowStereo; // is stereo available for default/window framebuffer
- int windowDoublebuffer; // is default/window framebuffer double buffered
- // framebuffer
- int currentBuffer; // currently active framebuffer: mjFB_WINDOW or mjFB_OFFSCREEN
- // pixel output format
- int readPixelFormat; // default color pixel format for mjr_readPixels
- // depth output format
- int readDepthMap; // depth mapping: mjDEPTH_ZERONEAR or mjDEPTH_ZEROFAR
- };
- typedef struct mjrContext_ mjrContext;
- typedef enum mjtGeomInertia_ { // type of inertia inference
- mjINERTIA_VOLUME, // mass distributed in the volume
- mjINERTIA_SHELL, // mass distributed on the surface
- } mjtGeomInertia;
- typedef enum mjtBuiltin_ { // type of built-in procedural texture
- mjBUILTIN_NONE = 0, // no built-in texture
- mjBUILTIN_GRADIENT, // gradient: rgb1->rgb2
- mjBUILTIN_CHECKER, // checker pattern: rgb1, rgb2
- mjBUILTIN_FLAT // 2d: rgb1; cube: rgb1-up, rgb2-side, rgb3-down
- } mjtBuiltin;
- typedef enum mjtMark_ { // mark type for procedural textures
- mjMARK_NONE = 0, // no mark
- mjMARK_EDGE, // edges
- mjMARK_CROSS, // cross
- mjMARK_RANDOM // random dots
- } mjtMark;
- typedef enum mjtLimited_ { // type of limit specification
- mjLIMITED_FALSE = 0, // not limited
- mjLIMITED_TRUE, // limited
- mjLIMITED_AUTO, // limited inferred from presence of range
- } mjtLimited;
- typedef enum mjtAlignFree_ { // whether to align free joints with the inertial frame
- mjALIGNFREE_FALSE = 0, // don't align
- mjALIGNFREE_TRUE, // align
- mjALIGNFREE_AUTO, // respect the global compiler flag
- } mjtAlignFree;
- typedef enum mjtInertiaFromGeom_ { // whether to infer body inertias from child geoms
- mjINERTIAFROMGEOM_FALSE = 0, // do not use; inertial element required
- mjINERTIAFROMGEOM_TRUE, // always use; overwrite inertial element
- mjINERTIAFROMGEOM_AUTO // use only if inertial element is missing
- } mjtInertiaFromGeom;
- typedef enum mjtOrientation_ { // type of orientation specifier
- mjORIENTATION_QUAT = 0, // quaternion
- mjORIENTATION_AXISANGLE, // axis and angle
- mjORIENTATION_XYAXES, // x and y axes
- mjORIENTATION_ZAXIS, // z axis (minimal rotation)
- mjORIENTATION_EULER, // Euler angles
- } mjtOrientation;
- typedef struct mjsElement_ { // element type, do not modify
- mjtObj elemtype; // element type
- } mjsElement;
- typedef struct mjSpec_ { // model specification
- mjsElement* element; // element type
- mjString* modelname; // model name
- // compiler settings
- mjtByte autolimits; // infer "limited" attribute based on range
- double boundmass; // enforce minimum body mass
- double boundinertia; // enforce minimum body diagonal inertia
- double settotalmass; // rescale masses and inertias; <=0: ignore
- mjtByte balanceinertia; // automatically impose A + B >= C rule
- mjtByte strippath; // automatically strip paths from mesh files
- mjtByte fitaabb; // meshfit to aabb instead of inertia box
- mjtByte degree; // angles in radians or degrees
- char eulerseq[3]; // sequence for euler rotations
- mjString* meshdir; // mesh and hfield directory
- mjString* texturedir; // texture directory
- mjtByte discardvisual; // discard visual geoms in parser
- mjtByte convexhull; // compute mesh convex hulls
- mjtByte usethread; // use multiple threads to speed up compiler
- mjtByte fusestatic; // fuse static bodies with parent
- int inertiafromgeom; // use geom inertias (mjtInertiaFromGeom)
- int inertiagrouprange[2]; // range of geom groups used to compute inertia
- mjtByte exactmeshinertia; // if false, use old formula
- int alignfree; // align free joints with inertial frame
- mjLROpt LRopt; // options for lengthrange computation
- // engine data
- mjOption option; // physics options
- mjVisual visual; // visual options
- mjStatistic stat; // statistics override (if defined)
- // sizes
- size_t memory; // number of bytes in arena+stack memory
- int nemax; // max number of equality constraints
- int nuserdata; // number of mjtNums in userdata
- int nuser_body; // number of mjtNums in body_user
- int nuser_jnt; // number of mjtNums in jnt_user
- int nuser_geom; // number of mjtNums in geom_user
- int nuser_site; // number of mjtNums in site_user
- int nuser_cam; // number of mjtNums in cam_user
- int nuser_tendon; // number of mjtNums in tendon_user
- int nuser_actuator; // number of mjtNums in actuator_user
- int nuser_sensor; // number of mjtNums in sensor_user
- int nkey; // number of keyframes
- int njmax; // (deprecated) max number of constraints
- int nconmax; // (deprecated) max number of detected contacts
- size_t nstack; // (deprecated) number of mjtNums in mjData stack
- // global data
- mjString* comment; // comment at top of XML
- mjString* modelfiledir; // path to model file
- // other
- mjtByte hasImplicitPluginElem; // already encountered an implicit plugin sensor/actuator
- } mjSpec;
- typedef struct mjsOrientation_ { // alternative orientation specifiers
- mjtOrientation type; // active orientation specifier
- double axisangle[4]; // axis and angle
- double xyaxes[6]; // x and y axes
- double zaxis[3]; // z axis (minimal rotation)
- double euler[3]; // Euler angles
- } mjsOrientation;
- typedef struct mjsPlugin_ { // plugin specification
- mjsElement* element; // element type
- mjString* name; // instance name
- mjString* plugin_name; // plugin name
- mjtByte active; // is the plugin active
- mjString* info; // message appended to compiler errors
- } mjsPlugin;
- typedef struct mjsBody_ { // body specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* childclass; // childclass name
- // body frame
- double pos[3]; // frame position
- double quat[4]; // frame orientation
- mjsOrientation alt; // frame alternative orientation
- // inertial frame
- double mass; // mass
- double ipos[3]; // inertial frame position
- double iquat[4]; // inertial frame orientation
- double inertia[3]; // diagonal inertia (in i-frame)
- mjsOrientation ialt; // inertial frame alternative orientation
- double fullinertia[6]; // non-axis-aligned inertia matrix
- // other
- mjtByte mocap; // is this a mocap body
- double gravcomp; // gravity compensation
- mjDoubleVec* userdata; // user data
- mjtByte explicitinertial; // whether to save the body with explicit inertial clause
- mjsPlugin plugin; // passive force plugin
- mjString* info; // message appended to compiler errors
- } mjsBody;
- typedef struct mjsFrame_ { // frame specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* childclass; // childclass name
- double pos[3]; // position
- double quat[4]; // orientation
- mjsOrientation alt; // alternative orientation
- mjString* info; // message appended to compiler errors
- } mjsFrame;
- typedef struct mjsJoint_ { // joint specification
- mjsElement* element; // element type
- mjString* name; // name
- mjtJoint type; // joint type
- // kinematics
- double pos[3]; // anchor position
- double axis[3]; // joint axis
- double ref; // value at reference configuration: qpos0
- int align; // align free joint with body com (mjtAlignFree)
- // stiffness
- double stiffness; // stiffness coefficient
- double springref; // spring reference value: qpos_spring
- double springdamper[2]; // timeconst, dampratio
- // limits
- int limited; // does joint have limits (mjtLimited)
- double range[2]; // joint limits
- double margin; // margin value for joint limit detection
- mjtNum solref_limit[mjNREF]; // solver reference: joint limits
- mjtNum solimp_limit[mjNIMP]; // solver impedance: joint limits
- int actfrclimited; // are actuator forces on joint limited (mjtLimited)
- double actfrcrange[2]; // actuator force limits
- // dof properties
- double armature; // armature inertia (mass for slider)
- double damping; // damping coefficient
- double frictionloss; // friction loss
- mjtNum solref_friction[mjNREF]; // solver reference: dof friction
- mjtNum solimp_friction[mjNIMP]; // solver impedance: dof friction
- // other
- int group; // group
- mjtByte actgravcomp; // is gravcomp force applied via actuators
- mjDoubleVec* userdata; // user data
- mjString* info; // message appended to compiler errors
- } mjsJoint;
- typedef struct mjsGeom_ { // geom specification
- mjsElement* element; // element type
- mjString* name; // name
- mjtGeom type; // geom type
- // frame, size
- double pos[3]; // position
- double quat[4]; // orientation
- mjsOrientation alt; // alternative orientation
- double fromto[6]; // alternative for capsule, cylinder, box, ellipsoid
- double size[3]; // type-specific size
- // contact related
- int contype; // contact type
- int conaffinity; // contact affinity
- int condim; // contact dimensionality
- int priority; // contact priority
- double friction[3]; // one-sided friction coefficients: slide, roll, spin
- double solmix; // solver mixing for contact pairs
- mjtNum solref[mjNREF]; // solver reference
- mjtNum solimp[mjNIMP]; // solver impedance
- double margin; // margin for contact detection
- double gap; // include in solver if dist < margin-gap
- // inertia inference
- double mass; // used to compute density
- double density; // used to compute mass and inertia from volume or surface
- mjtGeomInertia typeinertia; // selects between surface and volume inertia
- // fluid forces
- mjtNum fluid_ellipsoid; // whether ellipsoid-fluid model is active
- mjtNum fluid_coefs[5]; // ellipsoid-fluid interaction coefs
- // visual
- mjString* material; // name of material
- float rgba[4]; // rgba when material is omitted
- int group; // group
- // other
- mjString* hfieldname; // heightfield attached to geom
- mjString* meshname; // mesh attached to geom
- double fitscale; // scale mesh uniformly
- mjDoubleVec* userdata; // user data
- mjsPlugin plugin; // sdf plugin
- mjString* info; // message appended to compiler errors
- } mjsGeom;
- typedef struct mjsSite_ { // site specification
- mjsElement* element; // element type
- mjString* name; // name
- // frame, size
- double pos[3]; // position
- double quat[4]; // orientation
- mjsOrientation alt; // alternative orientation
- double fromto[6]; // alternative for capsule, cylinder, box, ellipsoid
- double size[3]; // geom size
- // visual
- mjtGeom type; // geom type
- mjString* material; // name of material
- int group; // group
- float rgba[4]; // rgba when material is omitted
- // other
- mjDoubleVec* userdata; // user data
- mjString* info; // message appended to compiler errors
- } mjsSite;
- typedef struct mjsCamera_ { // camera specification
- mjsElement* element; // element type
- mjString* name; // name
- // extrinsics
- double pos[3]; // position
- double quat[4]; // orientation
- mjsOrientation alt; // alternative orientation
- mjtCamLight mode; // tracking mode
- mjString* targetbody; // target body for tracking/targeting
- // intrinsics
- int orthographic; // is camera orthographic
- double fovy; // y-field of view
- double ipd; // inter-pupilary distance
- float intrinsic[4]; // camera intrinsics (length)
- float sensor_size[2]; // sensor size (length)
- float resolution[2]; // resolution (pixel)
- float focal_length[2]; // focal length (length)
- float focal_pixel[2]; // focal length (pixel)
- float principal_length[2]; // principal point (length)
- float principal_pixel[2]; // principal point (pixel)
- // other
- mjDoubleVec* userdata; // user data
- mjString* info; // message appended to compiler errors
- } mjsCamera;
- typedef struct mjsLight_ { // light specification
- mjsElement* element; // element type
- mjString* name; // name
- // frame
- double pos[3]; // position
- double dir[3]; // direction
- mjtCamLight mode; // tracking mode
- mjString* targetbody; // target body for targeting
- // intrinsics
- mjtByte active; // is light active
- mjtByte directional; // is light directional or spot
- mjtByte castshadow; // does light cast shadows
- double bulbradius; // bulb radius, for soft shadows
- float attenuation[3]; // OpenGL attenuation (quadratic model)
- float cutoff; // OpenGL cutoff
- float exponent; // OpenGL exponent
- float ambient[3]; // ambient color
- float diffuse[3]; // diffuse color
- float specular[3]; // specular color
- // other
- mjString* info; // message appended to compiler errorsx
- } mjsLight;
- typedef struct mjsFlex_ { // flex specification
- mjsElement* element; // element type
- mjString* name; // name
- // contact properties
- int contype; // contact type
- int conaffinity; // contact affinity
- int condim; // contact dimensionality
- int priority; // contact priority
- double friction[3]; // one-sided friction coefficients: slide, roll, spin
- double solmix; // solver mixing for contact pairs
- mjtNum solref[mjNREF]; // solver reference
- mjtNum solimp[mjNIMP]; // solver impedance
- double margin; // margin for contact detection
- double gap; // include in solver if dist<margin-gap
- // other properties
- int dim; // element dimensionality
- double radius; // radius around primitive element
- mjtByte internal; // enable internal collisions
- mjtByte flatskin; // render flex skin with flat shading
- int selfcollide; // mode for flex self colllision
- int activelayers; // number of active element layers in 3D
- int group; // group for visualizatioh
- double edgestiffness; // edge stiffness
- double edgedamping; // edge damping
- float rgba[4]; // rgba when material is omitted
- mjString* material; // name of material used for rendering
- double young; // Young's modulus
- double poisson; // Poisson's ratio
- double damping; // Rayleigh's damping
- double thickness; // thickness (2D only)
- // mesh properties
- mjStringVec* vertbody; // vertex body names
- mjDoubleVec* vert; // vertex positions
- mjIntVec* elem; // element vertex ids
- mjFloatVec* texcoord; // vertex texture coordinates
- // other
- mjString* info; // message appended to compiler errors
- } mjsFlex;
- typedef struct mjsMesh_ { // mesh specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* content_type; // content type of file
- mjString* file; // mesh file
- double refpos[3]; // reference position
- double refquat[4]; // reference orientation
- double scale[3]; // rescale mesh
- mjtByte smoothnormal; // do not exclude large-angle faces from normals
- int maxhullvert; // maximum vertex count for the convex hull
- mjFloatVec* uservert; // user vertex data
- mjFloatVec* usernormal; // user normal data
- mjFloatVec* usertexcoord; // user texcoord data
- mjIntVec* userface; // user vertex indices
- mjIntVec* userfacenormal; // user normal indices
- mjIntVec* userfacetexcoord; // user texcoord indices
- mjsPlugin plugin; // sdf plugin
- mjString* info; // message appended to compiler errors
- } mjsMesh;
- typedef struct mjsHField_ { // height field specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* content_type; // content type of file
- mjString* file; // file: (nrow, ncol, [elevation data])
- double size[4]; // hfield size (ignore referencing geom size)
- int nrow; // number of rows
- int ncol; // number of columns
- mjFloatVec* userdata; // user-provided elevation data
- mjString* info; // message appended to compiler errors
- } mjsHField;
- typedef struct mjsSkin_ { // skin specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* file; // skin file
- mjString* material; // name of material used for rendering
- float rgba[4]; // rgba when material is omitted
- float inflate; // inflate in normal direction
- int group; // group for visualization
- // mesh
- mjFloatVec* vert; // vertex positions
- mjFloatVec* texcoord; // texture coordinates
- mjIntVec* face; // faces
- // skin
- mjStringVec* bodyname; // body names
- mjFloatVec* bindpos; // bind pos
- mjFloatVec* bindquat; // bind quat
- mjIntVecVec* vertid; // vertex ids
- mjFloatVecVec* vertweight; // vertex weights
- // other
- mjString* info; // message appended to compiler errors
- } mjsSkin;
- typedef struct mjsTexture_ { // texture specification
- mjsElement* element; // element type
- mjString* name; // name
- mjtTexture type; // texture type
- // method 1: builtin
- int builtin; // builtin type (mjtBuiltin)
- int mark; // mark type (mjtMark)
- double rgb1[3]; // first color for builtin
- double rgb2[3]; // second color for builtin
- double markrgb[3]; // mark color
- double random; // probability of random dots
- int height; // height in pixels (square for cube and skybox)
- int width; // width in pixels
- int nchannel; // number of channels
- // method 2: single file
- mjString* content_type; // content type of file
- mjString* file; // png file to load; use for all sides of cube
- int gridsize[2]; // size of grid for composite file; (1,1)-repeat
- char gridlayout[13]; // row-major: L,R,F,B,U,D for faces; . for unused
- // method 3: separate files
- mjStringVec* cubefiles; // different file for each side of the cube
- // method 4: from buffer read by user
- mjByteVec* data; // texture data
- // flip options
- mjtByte hflip; // horizontal flip
- mjtByte vflip; // vertical flip
- // other
- mjString* info; // message appended to compiler errors
- } mjsTexture;
- typedef struct mjsMaterial_ { // material specification
- mjsElement* element; // element type
- mjString* name; // name
- mjStringVec* textures; // names of textures (empty: none)
- mjtByte texuniform; // make texture cube uniform
- float texrepeat[2]; // texture repetition for 2D mapping
- float emission; // emission
- float specular; // specular
- float shininess; // shininess
- float reflectance; // reflectance
- float metallic; // metallic
- float roughness; // roughness
- float rgba[4]; // rgba
- mjString* info; // message appended to compiler errors
- } mjsMaterial;
- typedef struct mjsPair_ { // pair specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* geomname1; // name of geom 1
- mjString* geomname2; // name of geom 2
- // optional parameters: computed from geoms if not set by user
- int condim; // contact dimensionality
- mjtNum solref[mjNREF]; // solver reference, normal direction
- mjtNum solreffriction[mjNREF]; // solver reference, frictional directions
- mjtNum solimp[mjNIMP]; // solver impedance
- double margin; // margin for contact detection
- double gap; // include in solver if dist<margin-gap
- double friction[5]; // full contact friction
- mjString* info; // message appended to errors
- } mjsPair;
- typedef struct mjsExclude_ { // exclude specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* bodyname1; // name of geom 1
- mjString* bodyname2; // name of geom 2
- mjString* info; // message appended to errors
- } mjsExclude;
- typedef struct mjsEquality_ { // equality specification
- mjsElement* element; // element type
- mjString* name; // name
- mjtEq type; // constraint type
- double data[mjNEQDATA]; // type-dependent data
- mjtByte active; // is equality initially active
- mjString* name1; // name of object 1
- mjString* name2; // name of object 2
- mjtObj objtype; // type of both objects
- mjtNum solref[mjNREF]; // solver reference
- mjtNum solimp[mjNIMP]; // solver impedance
- mjString* info; // message appended to errors
- } mjsEquality;
- typedef struct mjsTendon_ { // tendon specification
- mjsElement* element; // element type
- mjString* name; // name
- // stiffness, damping, friction
- double stiffness; // stiffness coefficient
- double springlength[2]; // spring resting length; {-1, -1}: use qpos_spring
- double damping; // damping coefficient
- double frictionloss; // friction loss
- mjtNum solref_friction[mjNREF]; // solver reference: tendon friction
- mjtNum solimp_friction[mjNIMP]; // solver impedance: tendon friction
- // length range
- int limited; // does tendon have limits (mjtLimited)
- double range[2]; // length limits
- double margin; // margin value for tendon limit detection
- mjtNum solref_limit[mjNREF]; // solver reference: tendon limits
- mjtNum solimp_limit[mjNIMP]; // solver impedance: tendon limits
- // visual
- mjString* material; // name of material for rendering
- double width; // width for rendering
- float rgba[4]; // rgba when material is omitted
- int group; // group
- // other
- mjDoubleVec* userdata; // user data
- mjString* info; // message appended to errors
- } mjsTendon;
- typedef struct mjsWrap_ { // wrapping object specification
- mjsElement* element; // element type
- mjString* info; // message appended to errors
- } mjsWrap;
- typedef struct mjsActuator_ { // actuator specification
- mjsElement* element; // element type
- mjString* name; // name
- // gain, bias
- mjtGain gaintype; // gain type
- double gainprm[mjNGAIN]; // gain parameters
- mjtBias biastype; // bias type
- double biasprm[mjNGAIN]; // bias parameters
- // activation state
- mjtDyn dyntype; // dynamics type
- double dynprm[mjNDYN]; // dynamics parameters
- int actdim; // number of activation variables
- mjtByte actearly; // apply next activations to qfrc
- // transmission
- mjtTrn trntype; // transmission type
- double gear[6]; // length and transmitted force scaling
- mjString* target; // name of transmission target
- mjString* refsite; // reference site, for site transmission
- mjString* slidersite; // site defining cylinder, for slider-crank
- double cranklength; // crank length, for slider-crank
- double lengthrange[2]; // transmission length range
- double inheritrange; // automatic range setting for position and intvelocity
- // input/output clamping
- int ctrllimited; // are control limits defined (mjtLimited)
- double ctrlrange[2]; // control range
- int forcelimited; // are force limits defined (mjtLimited)
- double forcerange[2]; // force range
- int actlimited; // are activation limits defined (mjtLimited)
- double actrange[2]; // activation range
- // other
- int group; // group
- mjDoubleVec* userdata; // user data
- mjsPlugin plugin; // actuator plugin
- mjString* info; // message appended to compiler errors
- } mjsActuator;
- typedef struct mjsSensor_ { // sensor specification
- mjsElement* element; // element type
- mjString* name; // name
- // sensor definition
- mjtSensor type; // type of sensor
- mjtObj objtype; // type of sensorized object
- mjString* objname; // name of sensorized object
- mjtObj reftype; // type of referenced object
- mjString* refname; // name of referenced object
- // user-defined sensors
- mjtDataType datatype; // data type for sensor measurement
- mjtStage needstage; // compute stage needed to simulate sensor
- int dim; // number of scalar outputs
- // output post-processing
- double cutoff; // cutoff for real and positive datatypes
- double noise; // noise stdev
- // other
- mjDoubleVec* userdata; // user data
- mjsPlugin plugin; // sensor plugin
- mjString* info; // message appended to compiler errors
- } mjsSensor;
- typedef struct mjsNumeric_ { // custom numeric field specification
- mjsElement* element; // element type
- mjString* name; // name
- mjDoubleVec* data; // initialization data
- int size; // array size, can be bigger than data size
- mjString* info; // message appended to compiler errors
- } mjsNumeric;
- typedef struct mjsText_ { // custom text specification
- mjsElement* element; // element type
- mjString* name; // name
- mjString* data; // text string
- mjString* info; // message appended to compiler errors
- } mjsText;
- typedef struct mjsTuple_ { // tuple specification
- mjsElement* element; // element type
- mjString* name; // name
- mjIntVec* objtype; // object types
- mjStringVec* objname; // object names
- mjDoubleVec* objprm; // object parameters
- mjString* info; // message appended to compiler errors
- } mjsTuple;
- typedef struct mjsKey_ { // keyframe specification
- mjsElement* element; // element type
- mjString* name; // name
- double time; // time
- mjDoubleVec* qpos; // qpos
- mjDoubleVec* qvel; // qvel
- mjDoubleVec* act; // act
- mjDoubleVec* mpos; // mocap pos
- mjDoubleVec* mquat; // mocap quat
- mjDoubleVec* ctrl; // ctrl
- mjString* info; // message appended to compiler errors
- } mjsKey;
- typedef struct mjsDefault_ { // default specification
- mjsElement* element; // element type
- mjString* name; // class name
- mjsJoint* joint; // joint defaults
- mjsGeom* geom; // geom defaults
- mjsSite* site; // site defaults
- mjsCamera* camera; // camera defaults
- mjsLight* light; // light defaults
- mjsFlex* flex; // flex defaults
- mjsMesh* mesh; // mesh defaults
- mjsMaterial* material; // material defaults
- mjsPair* pair; // pair defaults
- mjsEquality* equality; // equality defaults
- mjsTendon* tendon; // tendon defaults
- mjsActuator* actuator; // actuator defaults
- } mjsDefault;
- typedef enum mjtTaskStatus_ { // status values for mjTask
- mjTASK_NEW = 0, // newly created
- mjTASK_QUEUED, // enqueued in a thread pool
- mjTASK_COMPLETED // completed execution
- } mjtTaskStatus;
- struct mjThreadPool_ {
- int nworker; // number of workers in the pool
- };
- typedef struct mjThreadPool_ mjThreadPool;
- struct mjTask_ { // a task that can be executed by a thread pool.
- mjfTask func; // pointer to the function that implements the task
- void* args; // arguments to func
- volatile int status; // status of the task
- };
- typedef struct mjTask_ mjTask;
- typedef enum mjtButton_ { // mouse button
- mjBUTTON_NONE = 0, // no button
- mjBUTTON_LEFT, // left button
- mjBUTTON_RIGHT, // right button
- mjBUTTON_MIDDLE // middle button
- } mjtButton;
- typedef enum mjtEvent_ { // mouse and keyboard event type
- mjEVENT_NONE = 0, // no event
- mjEVENT_MOVE, // mouse move
- mjEVENT_PRESS, // mouse button press
- mjEVENT_RELEASE, // mouse button release
- mjEVENT_SCROLL, // scroll
- mjEVENT_KEY, // key press
- mjEVENT_RESIZE, // resize
- mjEVENT_REDRAW, // redraw
- mjEVENT_FILESDROP // files drop
- } mjtEvent;
- typedef enum mjtItem_ { // UI item type
- mjITEM_END = -2, // end of definition list (not an item)
- mjITEM_SECTION = -1, // section (not an item)
- mjITEM_SEPARATOR = 0, // separator
- mjITEM_STATIC, // static text
- mjITEM_BUTTON, // button
- // the rest have data pointer
- mjITEM_CHECKINT, // check box, int value
- mjITEM_CHECKBYTE, // check box, mjtByte value
- mjITEM_RADIO, // radio group
- mjITEM_RADIOLINE, // radio group, single line
- mjITEM_SELECT, // selection box
- mjITEM_SLIDERINT, // slider, int value
- mjITEM_SLIDERNUM, // slider, mjtNum value
- mjITEM_EDITINT, // editable array, int values
- mjITEM_EDITNUM, // editable array, mjtNum values
- mjITEM_EDITFLOAT, // editable array, float values
- mjITEM_EDITTXT, // editable text
- mjNITEM // number of item types
- } mjtItem;
- typedef enum mjtSection_ { // UI section state
- mjSECT_CLOSED = 0, // closed state (regular section)
- mjSECT_OPEN, // open state (regular section)
- mjSECT_FIXED // fixed section: always open, no title
- } mjtSection;
- struct mjuiState_ { // mouse and keyboard state
- // constants set by user
- int nrect; // number of rectangles used
- mjrRect rect[mjMAXUIRECT]; // rectangles (index 0: entire window)
- void* userdata; // pointer to user data (for callbacks)
- // event type
- int type; // (type mjtEvent)
- // mouse buttons
- int left; // is left button down
- int right; // is right button down
- int middle; // is middle button down
- int doubleclick; // is last press a double click
- int button; // which button was pressed (mjtButton)
- double buttontime; // time of last button press
- // mouse position
- double x; // x position
- double y; // y position
- double dx; // x displacement
- double dy; // y displacement
- double sx; // x scroll
- double sy; // y scroll
- // keyboard
- int control; // is control down
- int shift; // is shift down
- int alt; // is alt down
- int key; // which key was pressed
- double keytime; // time of last key press
- // rectangle ownership and dragging
- int mouserect; // which rectangle contains mouse
- int dragrect; // which rectangle is dragged with mouse
- int dragbutton; // which button started drag (mjtButton)
- // files dropping (only valid when type == mjEVENT_FILESDROP)
- int dropcount; // number of files dropped
- const char** droppaths; // paths to files dropped
- };
- typedef struct mjuiState_ mjuiState;
- struct mjuiThemeSpacing_ { // UI visualization theme spacing
- int total; // total width
- int scroll; // scrollbar width
- int label; // label width
- int section; // section gap
- int cornersect; // corner radius for section
- int cornersep; // corner radius for separator
- int itemside; // item side gap
- int itemmid; // item middle gap
- int itemver; // item vertical gap
- int texthor; // text horizontal gap
- int textver; // text vertical gap
- int linescroll; // number of pixels to scroll
- int samples; // number of multisamples
- };
- typedef struct mjuiThemeSpacing_ mjuiThemeSpacing;
- struct mjuiThemeColor_ { // UI visualization theme color
- float master[3]; // master background
- float thumb[3]; // scrollbar thumb
- float secttitle[3]; // section title
- float secttitle2[3]; // section title: bottom color
- float secttitleuncheck[3]; // section title with unchecked box
- float secttitleuncheck2[3]; // section title with unchecked box: bottom color
- float secttitlecheck[3]; // section title with checked box
- float secttitlecheck2[3]; // section title with checked box: bottom color
- float sectfont[3]; // section font
- float sectsymbol[3]; // section symbol
- float sectpane[3]; // section pane
- float separator[3]; // separator title
- float separator2[3]; // separator title: bottom color
- float shortcut[3]; // shortcut background
- float fontactive[3]; // font active
- float fontinactive[3]; // font inactive
- float decorinactive[3]; // decor inactive
- float decorinactive2[3]; // inactive slider color 2
- float button[3]; // button
- float check[3]; // check
- float radio[3]; // radio
- float select[3]; // select
- float select2[3]; // select pane
- float slider[3]; // slider
- float slider2[3]; // slider color 2
- float edit[3]; // edit
- float edit2[3]; // edit invalid
- float cursor[3]; // edit cursor
- };
- typedef struct mjuiThemeColor_ mjuiThemeColor;
- struct mjuiItemSingle_ { // check and button-related
- int modifier; // 0: none, 1: control, 2: shift; 4: alt
- int shortcut; // shortcut key; 0: undefined
- };
- struct mjuiItemMulti_ { // static, radio and select-related
- int nelem; // number of elements in group
- char name[mjMAXUIMULTI][mjMAXUINAME]; // element names
- };
- struct mjuiItemSlider_ { // slider-related
- double range[2]; // slider range
- double divisions; // number of range divisions
- };
- struct mjuiItemEdit_ { // edit-related
- int nelem; // number of elements in list
- double range[mjMAXUIEDIT][2]; // element range (min>=max: ignore)
- };
- struct mjuiItem_ { // UI item
- // common properties
- int type; // type (mjtItem)
- char name[mjMAXUINAME]; // name
- int state; // 0: disable, 1: enable, 2+: use predicate
- void *pdata; // data pointer (type-specific)
- int sectionid; // id of section containing item
- int itemid; // id of item within section
- int userid; // user-supplied id (for event handling)
- // type-specific properties
- union {
- struct mjuiItemSingle_ single; // check and button
- struct mjuiItemMulti_ multi; // static, radio and select
- struct mjuiItemSlider_ slider; // slider
- struct mjuiItemEdit_ edit; // edit
- };
- // internal
- mjrRect rect; // rectangle occupied by item
- int skip; // item skipped due to closed separator
- };
- typedef struct mjuiItem_ mjuiItem;
- struct mjuiSection_ { // UI section
- // properties
- char name[mjMAXUINAME]; // name
- int state; // section state (mjtSection)
- int modifier; // 0: none, 1: control, 2: shift; 4: alt
- int shortcut; // shortcut key; 0: undefined
- int checkbox; // 0: none, 1: unchecked, 2: checked
- int nitem; // number of items in use
- mjuiItem item[mjMAXUIITEM]; // preallocated array of items
- // internal
- mjrRect rtitle; // rectangle occupied by title
- mjrRect rcontent; // rectangle occupied by content
- int lastclick; // last mouse click over this section
- };
- typedef struct mjuiSection_ mjuiSection;
- struct mjUI_ { // entire UI
- // constants set by user
- mjuiThemeSpacing spacing; // UI theme spacing
- mjuiThemeColor color; // UI theme color
- mjfItemEnable predicate; // callback to set item state programmatically
- void* userdata; // pointer to user data (passed to predicate)
- int rectid; // index of this ui rectangle in mjuiState
- int auxid; // aux buffer index of this ui
- int radiocol; // number of radio columns (0 defaults to 2)
- // UI sizes (framebuffer units)
- int width; // width
- int height; // current heigth
- int maxheight; // height when all sections open
- int scroll; // scroll from top of UI
- // mouse focus and count
- int mousesect; // 0: none, -1: scroll, otherwise 1+section
- int mouseitem; // item within section
- int mousehelp; // help button down: print shortcuts
- int mouseclicks; // number of mouse clicks over UI
- int mousesectcheck; // 0: none, otherwise 1+section
- // keyboard focus and edit
- int editsect; // 0: none, otherwise 1+section
- int edititem; // item within section
- int editcursor; // cursor position
- int editscroll; // horizontal scroll
- char edittext[mjMAXUITEXT]; // current text
- mjuiItem* editchanged; // pointer to changed edit in last mjui_event
- // sections
- int nsect; // number of sections in use
- mjuiSection sect[mjMAXUISECT]; // preallocated array of sections
- };
- typedef struct mjUI_ mjUI;
- struct mjuiDef_ { // table passed to mjui_add()
- int type; // type (mjtItem); -1: section
- char name[mjMAXUINAME]; // name
- int state; // state
- void* pdata; // pointer to data
- char other[mjMAXUITEXT]; // string with type-specific properties
- int otherint; // int with type-specific properties
- };
- typedef struct mjuiDef_ mjuiDef;
- typedef enum mjtCatBit_ { // bitflags for mjvGeom category
- mjCAT_STATIC = 1, // model elements in body 0
- mjCAT_DYNAMIC = 2, // model elements in all other bodies
- mjCAT_DECOR = 4, // decorative geoms
- mjCAT_ALL = 7 // select all categories
- } mjtCatBit;
- typedef enum mjtMouse_ { // mouse interaction mode
- mjMOUSE_NONE = 0, // no action
- mjMOUSE_ROTATE_V, // rotate, vertical plane
- mjMOUSE_ROTATE_H, // rotate, horizontal plane
- mjMOUSE_MOVE_V, // move, vertical plane
- mjMOUSE_MOVE_H, // move, horizontal plane
- mjMOUSE_ZOOM, // zoom
- mjMOUSE_SELECT // selection
- } mjtMouse;
- typedef enum mjtPertBit_ { // mouse perturbations
- mjPERT_TRANSLATE = 1, // translation
- mjPERT_ROTATE = 2 // rotation
- } mjtPertBit;
- typedef enum mjtCamera_ { // abstract camera type
- mjCAMERA_FREE = 0, // free camera
- mjCAMERA_TRACKING, // tracking camera; uses trackbodyid
- mjCAMERA_FIXED, // fixed camera; uses fixedcamid
- mjCAMERA_USER // user is responsible for setting OpenGL camera
- } mjtCamera;
- typedef enum mjtLabel_ { // object labeling
- mjLABEL_NONE = 0, // nothing
- mjLABEL_BODY, // body labels
- mjLABEL_JOINT, // joint labels
- mjLABEL_GEOM, // geom labels
- mjLABEL_SITE, // site labels
- mjLABEL_CAMERA, // camera labels
- mjLABEL_LIGHT, // light labels
- mjLABEL_TENDON, // tendon labels
- mjLABEL_ACTUATOR, // actuator labels
- mjLABEL_CONSTRAINT, // constraint labels
- mjLABEL_FLEX, // flex labels
- mjLABEL_SKIN, // skin labels
- mjLABEL_SELECTION, // selected object
- mjLABEL_SELPNT, // coordinates of selection point
- mjLABEL_CONTACTPOINT, // contact information
- mjLABEL_CONTACTFORCE, // magnitude of contact force
- mjLABEL_ISLAND, // id of island
- mjNLABEL // number of label types
- } mjtLabel;
- typedef enum mjtFrame_ { // frame visualization
- mjFRAME_NONE = 0, // no frames
- mjFRAME_BODY, // body frames
- mjFRAME_GEOM, // geom frames
- mjFRAME_SITE, // site frames
- mjFRAME_CAMERA, // camera frames
- mjFRAME_LIGHT, // light frames
- mjFRAME_CONTACT, // contact frames
- mjFRAME_WORLD, // world frame
- mjNFRAME // number of visualization frames
- } mjtFrame;
- typedef enum mjtVisFlag_ { // flags enabling model element visualization
- mjVIS_CONVEXHULL = 0, // mesh convex hull
- mjVIS_TEXTURE, // textures
- mjVIS_JOINT, // joints
- mjVIS_CAMERA, // cameras
- mjVIS_ACTUATOR, // actuators
- mjVIS_ACTIVATION, // activations
- mjVIS_LIGHT, // lights
- mjVIS_TENDON, // tendons
- mjVIS_RANGEFINDER, // rangefinder sensors
- mjVIS_CONSTRAINT, // point constraints
- mjVIS_INERTIA, // equivalent inertia boxes
- mjVIS_SCLINERTIA, // scale equivalent inertia boxes with mass
- mjVIS_PERTFORCE, // perturbation force
- mjVIS_PERTOBJ, // perturbation object
- mjVIS_CONTACTPOINT, // contact points
- mjVIS_ISLAND, // constraint islands
- mjVIS_CONTACTFORCE, // contact force
- mjVIS_CONTACTSPLIT, // split contact force into normal and tangent
- mjVIS_TRANSPARENT, // make dynamic geoms more transparent
- mjVIS_AUTOCONNECT, // auto connect joints and body coms
- mjVIS_COM, // center of mass
- mjVIS_SELECT, // selection point
- mjVIS_STATIC, // static bodies
- mjVIS_SKIN, // skin
- mjVIS_FLEXVERT, // flex vertices
- mjVIS_FLEXEDGE, // flex edges
- mjVIS_FLEXFACE, // flex element faces
- mjVIS_FLEXSKIN, // flex smooth skin (disables the rest)
- mjVIS_BODYBVH, // body bounding volume hierarchy
- mjVIS_FLEXBVH, // flex bounding volume hierarchy
- mjVIS_MESHBVH, // mesh bounding volume hierarchy
- mjVIS_SDFITER, // iterations of SDF gradient descent
- mjNVISFLAG // number of visualization flags
- } mjtVisFlag;
- typedef enum mjtRndFlag_ { // flags enabling rendering effects
- mjRND_SHADOW = 0, // shadows
- mjRND_WIREFRAME, // wireframe
- mjRND_REFLECTION, // reflections
- mjRND_ADDITIVE, // additive transparency
- mjRND_SKYBOX, // skybox
- mjRND_FOG, // fog
- mjRND_HAZE, // haze
- mjRND_SEGMENT, // segmentation with random color
- mjRND_IDCOLOR, // segmentation with segid+1 color
- mjRND_CULL_FACE, // cull backward faces
- mjNRNDFLAG // number of rendering flags
- } mjtRndFlag;
- typedef enum mjtStereo_ { // type of stereo rendering
- mjSTEREO_NONE = 0, // no stereo; use left eye only
- mjSTEREO_QUADBUFFERED, // quad buffered; revert to side-by-side if no hardware support
- mjSTEREO_SIDEBYSIDE // side-by-side
- } mjtStereo;
- struct mjvPerturb_ { // object selection and perturbation
- int select; // selected body id; non-positive: none
- int flexselect; // selected flex id; negative: none
- int skinselect; // selected skin id; negative: none
- int active; // perturbation bitmask (mjtPertBit)
- int active2; // secondary perturbation bitmask (mjtPertBit)
- mjtNum refpos[3]; // reference position for selected object
- mjtNum refquat[4]; // reference orientation for selected object
- mjtNum refselpos[3]; // reference position for selection point
- mjtNum localpos[3]; // selection point in object coordinates
- mjtNum localmass; // spatial inertia at selection point
- mjtNum scale; // relative mouse motion-to-space scaling (set by initPerturb)
- };
- typedef struct mjvPerturb_ mjvPerturb;
- struct mjvCamera_ { // abstract camera
- // type and ids
- int type; // camera type (mjtCamera)
- int fixedcamid; // fixed camera id
- int trackbodyid; // body id to track
- // abstract camera pose specification
- mjtNum lookat[3]; // lookat point
- mjtNum distance; // distance to lookat point or tracked body
- mjtNum azimuth; // camera azimuth (deg)
- mjtNum elevation; // camera elevation (deg)
- // orthographic / perspective
- int orthographic; // 0: perspective; 1: orthographic
- };
- typedef struct mjvCamera_ mjvCamera;
- struct mjvGLCamera_ { // OpenGL camera
- // camera frame
- float pos[3]; // position
- float forward[3]; // forward direction
- float up[3]; // up direction
- // camera projection
- float frustum_center; // hor. center (left,right set to match aspect)
- float frustum_width; // width (not used for rendering)
- float frustum_bottom; // bottom
- float frustum_top; // top
- float frustum_near; // near
- float frustum_far; // far
- // orthographic / perspective
- int orthographic; // 0: perspective; 1: orthographic
- };
- typedef struct mjvGLCamera_ mjvGLCamera;
- struct mjvGeom_ { // abstract geom
- // type info
- int type; // geom type (mjtGeom)
- int dataid; // mesh, hfield or plane id; -1: none
- int objtype; // mujoco object type; mjOBJ_UNKNOWN for decor
- int objid; // mujoco object id; -1 for decor
- int category; // visual category
- int matid; // material id; -1: no textured material
- int texcoord; // mesh or flex geom has texture coordinates
- int segid; // segmentation id; -1: not shown
- // spatial transform
- float size[3]; // size parameters
- float pos[3]; // Cartesian position
- float mat[9]; // Cartesian orientation
- // material properties
- float rgba[4]; // color and transparency
- float emission; // emission coef
- float specular; // specular coef
- float shininess; // shininess coef
- float reflectance; // reflectance coef
- char label[100]; // text label
- // transparency rendering (set internally)
- float camdist; // distance to camera (used by sorter)
- float modelrbound; // geom rbound from model, 0 if not model geom
- mjtByte transparent; // treat geom as transparent
- };
- typedef struct mjvGeom_ mjvGeom;
- struct mjvLight_ { // OpenGL light
- float pos[3]; // position rel. to body frame
- float dir[3]; // direction rel. to body frame
- float attenuation[3]; // OpenGL attenuation (quadratic model)
- float cutoff; // OpenGL cutoff
- float exponent; // OpenGL exponent
- float ambient[3]; // ambient rgb (alpha=1)
- float diffuse[3]; // diffuse rgb (alpha=1)
- float specular[3]; // specular rgb (alpha=1)
- mjtByte headlight; // headlight
- mjtByte directional; // directional light
- mjtByte castshadow; // does light cast shadows
- float bulbradius; // bulb radius for soft shadows
- };
- typedef struct mjvLight_ mjvLight;
- struct mjvOption_ { // abstract visualization options
- int label; // what objects to label (mjtLabel)
- int frame; // which frame to show (mjtFrame)
- mjtByte geomgroup[mjNGROUP]; // geom visualization by group
- mjtByte sitegroup[mjNGROUP]; // site visualization by group
- mjtByte jointgroup[mjNGROUP]; // joint visualization by group
- mjtByte tendongroup[mjNGROUP]; // tendon visualization by group
- mjtByte actuatorgroup[mjNGROUP]; // actuator visualization by group
- mjtByte flexgroup[mjNGROUP]; // flex visualization by group
- mjtByte skingroup[mjNGROUP]; // skin visualization by group
- mjtByte flags[mjNVISFLAG]; // visualization flags (indexed by mjtVisFlag)
- int bvh_depth; // depth of the bounding volume hierarchy to be visualized
- int flex_layer; // element layer to be visualized for 3D flex
- };
- typedef struct mjvOption_ mjvOption;
- struct mjvScene_ { // abstract scene passed to OpenGL renderer
- // abstract geoms
- int maxgeom; // size of allocated geom buffer
- int ngeom; // number of geoms currently in buffer
- mjvGeom* geoms; // buffer for geoms (ngeom)
- int* geomorder; // buffer for ordering geoms by distance to camera (ngeom)
- // flex data
- int nflex; // number of flexes
- int* flexedgeadr; // address of flex edges (nflex)
- int* flexedgenum; // number of edges in flex (nflex)
- int* flexvertadr; // address of flex vertices (nflex)
- int* flexvertnum; // number of vertices in flex (nflex)
- int* flexfaceadr; // address of flex faces (nflex)
- int* flexfacenum; // number of flex faces allocated (nflex)
- int* flexfaceused; // number of flex faces currently in use (nflex)
- int* flexedge; // flex edge data (2*nflexedge)
- float* flexvert; // flex vertices (3*nflexvert)
- float* flexface; // flex faces vertices (9*sum(flexfacenum))
- float* flexnormal; // flex face normals (9*sum(flexfacenum))
- float* flextexcoord; // flex face texture coordinates (6*sum(flexfacenum))
- mjtByte flexvertopt; // copy of mjVIS_FLEXVERT mjvOption flag
- mjtByte flexedgeopt; // copy of mjVIS_FLEXEDGE mjvOption flag
- mjtByte flexfaceopt; // copy of mjVIS_FLEXFACE mjvOption flag
- mjtByte flexskinopt; // copy of mjVIS_FLEXSKIN mjvOption flag
- // skin data
- int nskin; // number of skins
- int* skinfacenum; // number of faces in skin (nskin)
- int* skinvertadr; // address of skin vertices (nskin)
- int* skinvertnum; // number of vertices in skin (nskin)
- float* skinvert; // skin vertex data (3*nskinvert)
- float* skinnormal; // skin normal data (3*nskinvert)
- // OpenGL lights
- int nlight; // number of lights currently in buffer
- mjvLight lights[mjMAXLIGHT]; // buffer for lights (nlight)
- // OpenGL cameras
- mjvGLCamera camera[2]; // left and right camera
- // OpenGL model transformation
- mjtByte enabletransform; // enable model transformation
- float translate[3]; // model translation
- float rotate[4]; // model quaternion rotation
- float scale; // model scaling
- // OpenGL rendering effects
- int stereo; // stereoscopic rendering (mjtStereo)
- mjtByte flags[mjNRNDFLAG]; // rendering flags (indexed by mjtRndFlag)
- // framing
- int framewidth; // frame pixel width; 0: disable framing
- float framergb[3]; // frame color
- };
- typedef struct mjvScene_ mjvScene;
- struct mjvFigure_ { // abstract 2D figure passed to OpenGL renderer
- // enable flags
- int flg_legend; // show legend
- int flg_ticklabel[2]; // show grid tick labels (x,y)
- int flg_extend; // automatically extend axis ranges to fit data
- int flg_barplot; // isolated line segments (i.e. GL_LINES)
- int flg_selection; // vertical selection line
- int flg_symmetric; // symmetric y-axis
- // style settings
- float linewidth; // line width
- float gridwidth; // grid line width
- int gridsize[2]; // number of grid points in (x,y)
- float gridrgb[3]; // grid line rgb
- float figurergba[4]; // figure color and alpha
- float panergba[4]; // pane color and alpha
- float legendrgba[4]; // legend color and alpha
- float textrgb[3]; // text color
- float linergb[mjMAXLINE][3]; // line colors
- float range[2][2]; // axis ranges; (min>=max) automatic
- char xformat[20]; // x-tick label format for sprintf
- char yformat[20]; // y-tick label format for sprintf
- char minwidth[20]; // string used to determine min y-tick width
- // text labels
- char title[1000]; // figure title; subplots separated with 2+ spaces
- char xlabel[100]; // x-axis label
- char linename[mjMAXLINE][100]; // line names for legend
- // dynamic settings
- int legendoffset; // number of lines to offset legend
- int subplot; // selected subplot (for title rendering)
- int highlight[2]; // if point is in legend rect, highlight line
- int highlightid; // if id>=0 and no point, highlight id
- float selection; // selection line x-value
- // line data
- int linepnt[mjMAXLINE]; // number of points in line; (0) disable
- float linedata[mjMAXLINE][2*mjMAXLINEPNT]; // line data (x,y)
- // output from renderer
- int xaxispixel[2]; // range of x-axis in pixels
- int yaxispixel[2]; // range of y-axis in pixels
- float xaxisdata[2]; // range of x-axis in data units
- float yaxisdata[2]; // range of y-axis in data units
- };
- typedef struct mjvFigure_ mjvFigure;
- struct mjvSceneState_ {
- int nbuffer; // size of the buffer in bytes
- void* buffer; // heap-allocated memory for all arrays in this struct
- int maxgeom; // maximum number of mjvGeom supported by this state object
- mjvScene scratch; // scratch space for vis geoms inserted by the user and plugins
- // fields in mjModel that are necessary to re-render a scene
- struct {
- int nv;
- int nu;
- int na;
- int nbody;
- int nbvh;
- int nbvhstatic;
- int njnt;
- int ngeom;
- int nsite;
- int ncam;
- int nlight;
- int nmesh;
- int nskin;
- int nflex;
- int nflexvert;
- int nflextexcoord;
- int nskinvert;
- int nskinface;
- int nskinbone;
- int nskinbonevert;
- int nmat;
- int neq;
- int ntendon;
- int ntree;
- int nwrap;
- int nsensor;
- int nnames;
- int npaths;
- int nsensordata;
- int narena;
- mjOption opt;
- mjVisual vis;
- mjStatistic stat;
- int* body_parentid;
- int* body_rootid;
- int* body_weldid;
- int* body_mocapid;
- int* body_jntnum;
- int* body_jntadr;
- int* body_dofnum;
- int* body_dofadr;
- int* body_geomnum;
- int* body_geomadr;
- mjtNum* body_iquat;
- mjtNum* body_mass;
- mjtNum* body_inertia;
- int* body_bvhadr;
- int* body_bvhnum;
- int* bvh_depth;
- int* bvh_child;
- int* bvh_nodeid;
- mjtNum* bvh_aabb;
- int* jnt_type;
- int* jnt_bodyid;
- int* jnt_group;
- int* geom_type;
- int* geom_bodyid;
- int* geom_contype;
- int* geom_conaffinity;
- int* geom_dataid;
- int* geom_matid;
- int* geom_group;
- mjtNum* geom_size;
- mjtNum* geom_aabb;
- mjtNum* geom_rbound;
- float* geom_rgba;
- int* site_type;
- int* site_bodyid;
- int* site_matid;
- int* site_group;
- mjtNum* site_size;
- float* site_rgba;
- int* cam_orthographic;
- mjtNum* cam_fovy;
- mjtNum* cam_ipd;
- int* cam_resolution;
- float* cam_sensorsize;
- float* cam_intrinsic;
- mjtByte* light_directional;
- mjtByte* light_castshadow;
- float* light_bulbradius;
- mjtByte* light_active;
- float* light_attenuation;
- float* light_cutoff;
- float* light_exponent;
- float* light_ambient;
- float* light_diffuse;
- float* light_specular;
- mjtByte* flex_flatskin;
- int* flex_dim;
- int* flex_matid;
- int* flex_group;
- int* flex_vertadr;
- int* flex_vertnum;
- int* flex_elem;
- int* flex_elemlayer;
- int* flex_elemadr;
- int* flex_elemnum;
- int* flex_elemdataadr;
- int* flex_shell;
- int* flex_shellnum;
- int* flex_shelldataadr;
- int* flex_texcoordadr;
- int* flex_bvhadr;
- int* flex_bvhnum;
- mjtNum* flex_radius;
- float* flex_rgba;
- int* hfield_pathadr;
- int* mesh_bvhadr;
- int* mesh_bvhnum;
- int* mesh_texcoordadr;
- int* mesh_graphadr;
- int* mesh_pathadr;
- int* skin_matid;
- int* skin_group;
- float* skin_rgba;
- float* skin_inflate;
- int* skin_vertadr;
- int* skin_vertnum;
- int* skin_texcoordadr;
- int* skin_faceadr;
- int* skin_facenum;
- int* skin_boneadr;
- int* skin_bonenum;
- float* skin_vert;
- int* skin_face;
- int* skin_bonevertadr;
- int* skin_bonevertnum;
- float* skin_bonebindpos;
- float* skin_bonebindquat;
- int* skin_bonebodyid;
- int* skin_bonevertid;
- float* skin_bonevertweight;
- int* skin_pathadr;
- int* tex_pathadr;
- int* mat_texid;
- mjtByte* mat_texuniform;
- float* mat_texrepeat;
- float* mat_emission;
- float* mat_specular;
- float* mat_shininess;
- float* mat_reflectance;
- float* mat_metallic;
- float* mat_roughness;
- float* mat_rgba;
- int* eq_type;
- int* eq_obj1id;
- int* eq_obj2id;
- int* eq_objtype;
- mjtNum* eq_data;
- int* tendon_num;
- int* tendon_matid;
- int* tendon_group;
- mjtByte* tendon_limited;
- mjtNum* tendon_width;
- mjtNum* tendon_range;
- mjtNum* tendon_stiffness;
- mjtNum* tendon_damping;
- mjtNum* tendon_frictionloss;
- mjtNum* tendon_lengthspring;
- float* tendon_rgba;
- int* actuator_trntype;
- int* actuator_dyntype;
- int* actuator_trnid;
- int* actuator_actadr;
- int* actuator_actnum;
- int* actuator_group;
- mjtByte* actuator_ctrllimited;
- mjtByte* actuator_actlimited;
- mjtNum* actuator_ctrlrange;
- mjtNum* actuator_actrange;
- mjtNum* actuator_cranklength;
- int* sensor_type;
- int* sensor_objid;
- int* sensor_adr;
- int* name_bodyadr;
- int* name_jntadr;
- int* name_geomadr;
- int* name_siteadr;
- int* name_camadr;
- int* name_lightadr;
- int* name_eqadr;
- int* name_tendonadr;
- int* name_actuatoradr;
- char* names;
- char* paths;
- } model;
- // fields in mjData that are necessary to re-render a scene
- struct {
- mjWarningStat warning[mjNWARNING];
- int nefc;
- int ncon;
- int nisland;
- mjtNum time;
- mjtNum* act;
- mjtNum* ctrl;
- mjtNum* xfrc_applied;
- mjtByte* eq_active;
- mjtNum* sensordata;
- mjtNum* xpos;
- mjtNum* xquat;
- mjtNum* xmat;
- mjtNum* xipos;
- mjtNum* ximat;
- mjtNum* xanchor;
- mjtNum* xaxis;
- mjtNum* geom_xpos;
- mjtNum* geom_xmat;
- mjtNum* site_xpos;
- mjtNum* site_xmat;
- mjtNum* cam_xpos;
- mjtNum* cam_xmat;
- mjtNum* light_xpos;
- mjtNum* light_xdir;
- mjtNum* subtree_com;
- int* ten_wrapadr;
- int* ten_wrapnum;
- int* wrap_obj;
- mjtNum* ten_length;
- mjtNum* wrap_xpos;
- mjtNum* bvh_aabb_dyn;
- mjtByte* bvh_active;
- int* island_dofadr;
- int* island_dofind;
- int* dof_island;
- int* efc_island;
- int* tendon_efcadr;
- mjtNum* flexvert_xpos;
- mjContact* contact;
- mjtNum* efc_force;
- void* arena;
- } data;
- };
- typedef struct mjvSceneState_ mjvSceneState;
- //----------------------------- MJAPI FUNCTIONS --------------------------------
- void mj_defaultVFS(mjVFS* vfs);
- int mj_addFileVFS(mjVFS* vfs, const char* directory, const char* filename);
- int mj_addBufferVFS(mjVFS* vfs, const char* name, const void* buffer, int nbuffer);
- int mj_deleteFileVFS(mjVFS* vfs, const char* filename);
- void mj_deleteVFS(mjVFS* vfs);
- mjModel* mj_loadXML(const char* filename, const mjVFS* vfs, char* error, int error_sz);
- mjSpec* mj_parseXML(const char* filename, const mjVFS* vfs, char* error, int error_sz);
- mjSpec* mj_parseXMLString(const char* xml, const mjVFS* vfs, char* error, int error_sz);
- mjModel* mj_compile(mjSpec* s, const mjVFS* vfs);
- int mj_recompile(mjSpec* s, const mjVFS* vfs, mjModel* m, mjData* d);
- int mj_saveLastXML(const char* filename, const mjModel* m, char* error, int error_sz);
- void mj_freeLastXML(void);
- int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int error_sz);
- int mj_saveXML(const mjSpec* s, const char* filename, char* error, int error_sz);
- void mj_step(const mjModel* m, mjData* d);
- void mj_step1(const mjModel* m, mjData* d);
- void mj_step2(const mjModel* m, mjData* d);
- void mj_forward(const mjModel* m, mjData* d);
- void mj_inverse(const mjModel* m, mjData* d);
- void mj_forwardSkip(const mjModel* m, mjData* d, int skipstage, int skipsensor);
- void mj_inverseSkip(const mjModel* m, mjData* d, int skipstage, int skipsensor);
- void mj_defaultLROpt(mjLROpt* opt);
- void mj_defaultSolRefImp(mjtNum* solref, mjtNum* solimp);
- void mj_defaultOption(mjOption* opt);
- void mj_defaultVisual(mjVisual* vis);
- mjModel* mj_copyModel(mjModel* dest, const mjModel* src);
- void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buffer_sz);
- mjModel* mj_loadModel(const char* filename, const mjVFS* vfs);
- void mj_deleteModel(mjModel* m);
- int mj_sizeModel(const mjModel* m);
- mjData* mj_makeData(const mjModel* m);
- mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src);
- void mj_resetData(const mjModel* m, mjData* d);
- void mj_resetDataDebug(const mjModel* m, mjData* d, unsigned char debug_value);
- void mj_resetDataKeyframe(const mjModel* m, mjData* d, int key);
- void mj_markStack(mjData* d);
- void mj_freeStack(mjData* d);
- void* mj_stackAllocByte(mjData* d, size_t bytes, size_t alignment);
- mjtNum* mj_stackAllocNum(mjData* d, size_t size);
- int* mj_stackAllocInt(mjData* d, size_t size);
- void mj_deleteData(mjData* d);
- void mj_resetCallbacks(void);
- void mj_setConst(mjModel* m, mjData* d);
- int mj_setLengthRange(mjModel* m, mjData* d, int index,
- const mjLROpt* opt, char* error, int error_sz);
- mjSpec* mj_makeSpec(void);
- mjSpec* mj_copySpec(const mjSpec* s);
- void mj_deleteSpec(mjSpec* s);
- int mjs_activatePlugin(mjSpec* s, const char* name);
- void mj_printFormattedModel(const mjModel* m, const char* filename, const char* float_format);
- void mj_printModel(const mjModel* m, const char* filename);
- void mj_printFormattedData(const mjModel* m, mjData* d, const char* filename,
- const char* float_format);
- void mj_printData(const mjModel* m, mjData* d, const char* filename);
- void mju_printMat(const mjtNum* mat, int nr, int nc);
- void mju_printMatSparse(const mjtNum* mat, int nr,
- const int* rownnz, const int* rowadr, const int* colind);
- int mj_printSchema(const char* filename, char* buffer, int buffer_sz,
- int flg_html, int flg_pad);
- void mj_fwdPosition(const mjModel* m, mjData* d);
- void mj_fwdVelocity(const mjModel* m, mjData* d);
- void mj_fwdActuation(const mjModel* m, mjData* d);
- void mj_fwdAcceleration(const mjModel* m, mjData* d);
- void mj_fwdConstraint(const mjModel* m, mjData* d);
- void mj_Euler(const mjModel* m, mjData* d);
- void mj_RungeKutta(const mjModel* m, mjData* d, int N);
- void mj_implicit(const mjModel* m, mjData* d);
- void mj_invPosition(const mjModel* m, mjData* d);
- void mj_invVelocity(const mjModel* m, mjData* d);
- void mj_invConstraint(const mjModel* m, mjData* d);
- void mj_compareFwdInv(const mjModel* m, mjData* d);
- void mj_sensorPos(const mjModel* m, mjData* d);
- void mj_sensorVel(const mjModel* m, mjData* d);
- void mj_sensorAcc(const mjModel* m, mjData* d);
- void mj_energyPos(const mjModel* m, mjData* d);
- void mj_energyVel(const mjModel* m, mjData* d);
- void mj_checkPos(const mjModel* m, mjData* d);
- void mj_checkVel(const mjModel* m, mjData* d);
- void mj_checkAcc(const mjModel* m, mjData* d);
- void mj_kinematics(const mjModel* m, mjData* d);
- void mj_comPos(const mjModel* m, mjData* d);
- void mj_camlight(const mjModel* m, mjData* d);
- void mj_flex(const mjModel* m, mjData* d);
- void mj_tendon(const mjModel* m, mjData* d);
- void mj_transmission(const mjModel* m, mjData* d);
- void mj_crb(const mjModel* m, mjData* d);
- void mj_factorM(const mjModel* m, mjData* d);
- void mj_solveM(const mjModel* m, mjData* d, mjtNum* x, const mjtNum* y, int n);
- void mj_solveM2(const mjModel* m, mjData* d, mjtNum* x, const mjtNum* y, int n);
- void mj_comVel(const mjModel* m, mjData* d);
- void mj_passive(const mjModel* m, mjData* d);
- void mj_subtreeVel(const mjModel* m, mjData* d);
- void mj_rne(const mjModel* m, mjData* d, int flg_acc, mjtNum* result);
- void mj_rnePostConstraint(const mjModel* m, mjData* d);
- void mj_collision(const mjModel* m, mjData* d);
- void mj_makeConstraint(const mjModel* m, mjData* d);
- void mj_island(const mjModel* m, mjData* d);
- void mj_projectConstraint(const mjModel* m, mjData* d);
- void mj_referenceConstraint(const mjModel* m, mjData* d);
- void mj_constraintUpdate(const mjModel* m, mjData* d, const mjtNum* jar,
- mjtNum cost[1], int flg_coneHessian);
- int mj_stateSize(const mjModel* m, unsigned int spec);
- void mj_getState(const mjModel* m, const mjData* d, mjtNum* state, unsigned int spec);
- void mj_setState(const mjModel* m, mjData* d, const mjtNum* state, unsigned int spec);
- void mj_setKeyframe(mjModel* m, const mjData* d, int k);
- int mj_addContact(const mjModel* m, mjData* d, const mjContact* con);
- int mj_isPyramidal(const mjModel* m);
- int mj_isSparse(const mjModel* m);
- int mj_isDual(const mjModel* m);
- void mj_mulJacVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec);
- void mj_mulJacTVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec);
- void mj_jac(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr,
- const mjtNum point[3], int body);
- void mj_jacBody(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int body);
- void mj_jacBodyCom(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int body);
- void mj_jacSubtreeCom(const mjModel* m, mjData* d, mjtNum* jacp, int body);
- void mj_jacGeom(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int geom);
- void mj_jacSite(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr, int site);
- void mj_jacPointAxis(const mjModel* m, mjData* d, mjtNum* jacPoint, mjtNum* jacAxis,
- const mjtNum point[3], const mjtNum axis[3], int body);
- void mj_jacDot(const mjModel* m, const mjData* d, mjtNum* jacp, mjtNum* jacr,
- const mjtNum point[3], int body);
- void mj_angmomMat(const mjModel* m, mjData* d, mjtNum* mat, int body);
- int mj_name2id(const mjModel* m, int type, const char* name);
- const char* mj_id2name(const mjModel* m, int type, int id);
- void mj_fullM(const mjModel* m, mjtNum* dst, const mjtNum* M);
- void mj_mulM(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec);
- void mj_mulM2(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec);
- void mj_addM(const mjModel* m, mjData* d, mjtNum* dst, int* rownnz, int* rowadr, int* colind);
- void mj_applyFT(const mjModel* m, mjData* d, const mjtNum force[3], const mjtNum torque[3],
- const mjtNum point[3], int body, mjtNum* qfrc_target);
- void mj_objectVelocity(const mjModel* m, const mjData* d,
- int objtype, int objid, mjtNum res[6], int flg_local);
- void mj_objectAcceleration(const mjModel* m, const mjData* d,
- int objtype, int objid, mjtNum res[6], int flg_local);
- mjtNum mj_geomDistance(const mjModel* m, const mjData* d, int geom1, int geom2,
- mjtNum distmax, mjtNum fromto[6]);
- void mj_contactForce(const mjModel* m, const mjData* d, int id, mjtNum result[6]);
- void mj_differentiatePos(const mjModel* m, mjtNum* qvel, mjtNum dt,
- const mjtNum* qpos1, const mjtNum* qpos2);
- void mj_integratePos(const mjModel* m, mjtNum* qpos, const mjtNum* qvel, mjtNum dt);
- void mj_normalizeQuat(const mjModel* m, mjtNum* qpos);
- void mj_local2Global(mjData* d, mjtNum xpos[3], mjtNum xmat[9], const mjtNum pos[3],
- const mjtNum quat[4], int body, mjtByte sameframe);
- mjtNum mj_getTotalmass(const mjModel* m);
- void mj_setTotalmass(mjModel* m, mjtNum newmass);
- const char* mj_getPluginConfig(const mjModel* m, int plugin_id, const char* attrib);
- void mj_loadPluginLibrary(const char* path);
- void mj_loadAllPluginLibraries(const char* directory, mjfPluginLibraryLoadCallback callback);
- int mj_version(void);
- const char* mj_versionString(void);
- void mj_multiRay(const mjModel* m, mjData* d, const mjtNum pnt[3], const mjtNum* vec,
- const mjtByte* geomgroup, mjtByte flg_static, int bodyexclude,
- int* geomid, mjtNum* dist, int nray, mjtNum cutoff);
- mjtNum mj_ray(const mjModel* m, const mjData* d, const mjtNum pnt[3], const mjtNum vec[3],
- const mjtByte* geomgroup, mjtByte flg_static, int bodyexclude,
- int geomid[1]);
- mjtNum mj_rayHfield(const mjModel* m, const mjData* d, int geomid,
- const mjtNum pnt[3], const mjtNum vec[3]);
- mjtNum mj_rayMesh(const mjModel* m, const mjData* d, int geomid,
- const mjtNum pnt[3], const mjtNum vec[3]);
- mjtNum mju_rayGeom(const mjtNum pos[3], const mjtNum mat[9], const mjtNum size[3],
- const mjtNum pnt[3], const mjtNum vec[3], int geomtype);
- mjtNum mju_rayFlex(const mjModel* m, const mjData* d, int flex_layer, mjtByte flg_vert,
- mjtByte flg_edge, mjtByte flg_face, mjtByte flg_skin, int flexid,
- const mjtNum* pnt, const mjtNum* vec, int vertid[1]);
- mjtNum mju_raySkin(int nface, int nvert, const int* face, const float* vert,
- const mjtNum pnt[3], const mjtNum vec[3], int vertid[1]);
- void mjv_defaultCamera(mjvCamera* cam);
- void mjv_defaultFreeCamera(const mjModel* m, mjvCamera* cam);
- void mjv_defaultPerturb(mjvPerturb* pert);
- void mjv_room2model(mjtNum modelpos[3], mjtNum modelquat[4], const mjtNum roompos[3],
- const mjtNum roomquat[4], const mjvScene* scn);
- void mjv_model2room(mjtNum roompos[3], mjtNum roomquat[4], const mjtNum modelpos[3],
- const mjtNum modelquat[4], const mjvScene* scn);
- void mjv_cameraInModel(mjtNum headpos[3], mjtNum forward[3], mjtNum up[3],
- const mjvScene* scn);
- void mjv_cameraInRoom(mjtNum headpos[3], mjtNum forward[3], mjtNum up[3],
- const mjvScene* scn);
- mjtNum mjv_frustumHeight(const mjvScene* scn);
- void mjv_alignToCamera(mjtNum res[3], const mjtNum vec[3], const mjtNum forward[3]);
- void mjv_moveCamera(const mjModel* m, int action, mjtNum reldx, mjtNum reldy,
- const mjvScene* scn, mjvCamera* cam);
- void mjv_moveCameraFromState(const mjvSceneState* scnstate, int action,
- mjtNum reldx, mjtNum reldy,
- const mjvScene* scn, mjvCamera* cam);
- void mjv_movePerturb(const mjModel* m, const mjData* d, int action, mjtNum reldx,
- mjtNum reldy, const mjvScene* scn, mjvPerturb* pert);
- void mjv_movePerturbFromState(const mjvSceneState* scnstate, int action,
- mjtNum reldx, mjtNum reldy,
- const mjvScene* scn, mjvPerturb* pert);
- void mjv_moveModel(const mjModel* m, int action, mjtNum reldx, mjtNum reldy,
- const mjtNum roomup[3], mjvScene* scn);
- void mjv_initPerturb(const mjModel* m, mjData* d, const mjvScene* scn, mjvPerturb* pert);
- void mjv_applyPerturbPose(const mjModel* m, mjData* d, const mjvPerturb* pert,
- int flg_paused);
- void mjv_applyPerturbForce(const mjModel* m, mjData* d, const mjvPerturb* pert);
- mjvGLCamera mjv_averageCamera(const mjvGLCamera* cam1, const mjvGLCamera* cam2);
- int mjv_select(const mjModel* m, const mjData* d, const mjvOption* vopt,
- mjtNum aspectratio, mjtNum relx, mjtNum rely,
- const mjvScene* scn, mjtNum selpnt[3],
- int geomid[1], int flexid[1], int skinid[1]);
- void mjv_defaultOption(mjvOption* opt);
- void mjv_defaultFigure(mjvFigure* fig);
- void mjv_initGeom(mjvGeom* geom, int type, const mjtNum size[3],
- const mjtNum pos[3], const mjtNum mat[9], const float rgba[4]);
- void mjv_makeConnector(mjvGeom* geom, int type, mjtNum width,
- mjtNum a0, mjtNum a1, mjtNum a2,
- mjtNum b0, mjtNum b1, mjtNum b2);
- void mjv_connector(mjvGeom* geom, int type, mjtNum width,
- const mjtNum from[3], const mjtNum to[3]);
- void mjv_defaultScene(mjvScene* scn);
- void mjv_makeScene(const mjModel* m, mjvScene* scn, int maxgeom);
- void mjv_freeScene(mjvScene* scn);
- void mjv_updateScene(const mjModel* m, mjData* d, const mjvOption* opt,
- const mjvPerturb* pert, mjvCamera* cam, int catmask, mjvScene* scn);
- int mjv_updateSceneFromState(const mjvSceneState* scnstate, const mjvOption* opt,
- const mjvPerturb* pert, mjvCamera* cam, int catmask,
- mjvScene* scn);
- void mjv_defaultSceneState(mjvSceneState* scnstate);
- void mjv_makeSceneState(const mjModel* m, const mjData* d,
- mjvSceneState* scnstate, int maxgeom);
- void mjv_freeSceneState(mjvSceneState* scnstate);
- void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt,
- mjvSceneState* scnstate);
- void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt,
- const mjvPerturb* pert, int catmask, mjvScene* scn);
- void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn);
- void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, mjvScene* scn);
- void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn);
- void mjr_defaultContext(mjrContext* con);
- void mjr_makeContext(const mjModel* m, mjrContext* con, int fontscale);
- void mjr_changeFont(int fontscale, mjrContext* con);
- void mjr_addAux(int index, int width, int height, int samples, mjrContext* con);
- void mjr_freeContext(mjrContext* con);
- void mjr_resizeOffscreen(int width, int height, mjrContext* con);
- void mjr_uploadTexture(const mjModel* m, const mjrContext* con, int texid);
- void mjr_uploadMesh(const mjModel* m, const mjrContext* con, int meshid);
- void mjr_uploadHField(const mjModel* m, const mjrContext* con, int hfieldid);
- void mjr_restoreBuffer(const mjrContext* con);
- void mjr_setBuffer(int framebuffer, mjrContext* con);
- void mjr_readPixels(unsigned char* rgb, float* depth,
- mjrRect viewport, const mjrContext* con);
- void mjr_drawPixels(const unsigned char* rgb, const float* depth,
- mjrRect viewport, const mjrContext* con);
- void mjr_blitBuffer(mjrRect src, mjrRect dst,
- int flg_color, int flg_depth, const mjrContext* con);
- void mjr_setAux(int index, const mjrContext* con);
- void mjr_blitAux(int index, mjrRect src, int left, int bottom, const mjrContext* con);
- void mjr_text(int font, const char* txt, const mjrContext* con,
- float x, float y, float r, float g, float b);
- void mjr_overlay(int font, int gridpos, mjrRect viewport,
- const char* overlay, const char* overlay2, const mjrContext* con);
- mjrRect mjr_maxViewport(const mjrContext* con);
- void mjr_rectangle(mjrRect viewport, float r, float g, float b, float a);
- void mjr_label(mjrRect viewport, int font, const char* txt,
- float r, float g, float b, float a, float rt, float gt, float bt,
- const mjrContext* con);
- void mjr_figure(mjrRect viewport, mjvFigure* fig, const mjrContext* con);
- void mjr_render(mjrRect viewport, mjvScene* scn, const mjrContext* con);
- void mjr_finish(void);
- int mjr_getError(void);
- int mjr_findRect(int x, int y, int nrect, const mjrRect* rect);
- mjuiThemeSpacing mjui_themeSpacing(int ind);
- mjuiThemeColor mjui_themeColor(int ind);
- void mjui_add(mjUI* ui, const mjuiDef* def);
- void mjui_addToSection(mjUI* ui, int sect, const mjuiDef* def);
- void mjui_resize(mjUI* ui, const mjrContext* con);
- void mjui_update(int section, int item, const mjUI* ui,
- const mjuiState* state, const mjrContext* con);
- mjuiItem* mjui_event(mjUI* ui, mjuiState* state, const mjrContext* con);
- void mjui_render(mjUI* ui, const mjuiState* state, const mjrContext* con);
- void mju_error(const char* msg, ...) mjPRINTFLIKE(1, 2);
- void mju_error_i(const char* msg, int i);
- void mju_error_s(const char* msg, const char* text);
- void mju_warning(const char* msg, ...) mjPRINTFLIKE(1, 2);
- void mju_warning_i(const char* msg, int i);
- void mju_warning_s(const char* msg, const char* text);
- void mju_clearHandlers(void);
- void* mju_malloc(size_t size);
- void mju_free(void* ptr);
- void mj_warning(mjData* d, int warning, int info);
- void mju_writeLog(const char* type, const char* msg);
- const char* mjs_getError(mjSpec* s);
- int mjs_isWarning(mjSpec* s);
- void mju_zero3(mjtNum res[3]);
- void mju_copy3(mjtNum res[3], const mjtNum data[3]);
- void mju_scl3(mjtNum res[3], const mjtNum vec[3], mjtNum scl);
- void mju_add3(mjtNum res[3], const mjtNum vec1[3], const mjtNum vec2[3]);
- void mju_sub3(mjtNum res[3], const mjtNum vec1[3], const mjtNum vec2[3]);
- void mju_addTo3(mjtNum res[3], const mjtNum vec[3]);
- void mju_subFrom3(mjtNum res[3], const mjtNum vec[3]);
- void mju_addToScl3(mjtNum res[3], const mjtNum vec[3], mjtNum scl);
- void mju_addScl3(mjtNum res[3], const mjtNum vec1[3], const mjtNum vec2[3], mjtNum scl);
- mjtNum mju_normalize3(mjtNum vec[3]);
- mjtNum mju_norm3(const mjtNum vec[3]);
- mjtNum mju_dot3(const mjtNum vec1[3], const mjtNum vec2[3]);
- mjtNum mju_dist3(const mjtNum pos1[3], const mjtNum pos2[3]);
- void mju_mulMatVec3(mjtNum res[3], const mjtNum mat[9], const mjtNum vec[3]);
- void mju_mulMatTVec3(mjtNum res[3], const mjtNum mat[9], const mjtNum vec[3]);
- void mju_rotVecMat(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
- void mju_rotVecMatT(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
- void mju_cross(mjtNum res[3], const mjtNum a[3], const mjtNum b[3]);
- void mju_zero4(mjtNum res[4]);
- void mju_unit4(mjtNum res[4]);
- void mju_copy4(mjtNum res[4], const mjtNum data[4]);
- mjtNum mju_normalize4(mjtNum vec[4]);
- void mju_zero(mjtNum* res, int n);
- void mju_fill(mjtNum* res, mjtNum val, int n);
- void mju_copy(mjtNum* res, const mjtNum* vec, int n);
- mjtNum mju_sum(const mjtNum* vec, int n);
- mjtNum mju_L1(const mjtNum* vec, int n);
- void mju_scl(mjtNum* res, const mjtNum* vec, mjtNum scl, int n);
- void mju_add(mjtNum* res, const mjtNum* vec1, const mjtNum* vec2, int n);
- void mju_sub(mjtNum* res, const mjtNum* vec1, const mjtNum* vec2, int n);
- void mju_addTo(mjtNum* res, const mjtNum* vec, int n);
- void mju_subFrom(mjtNum* res, const mjtNum* vec, int n);
- void mju_addToScl(mjtNum* res, const mjtNum* vec, mjtNum scl, int n);
- void mju_addScl(mjtNum* res, const mjtNum* vec1, const mjtNum* vec2, mjtNum scl, int n);
- mjtNum mju_normalize(mjtNum* res, int n);
- mjtNum mju_norm(const mjtNum* res, int n);
- mjtNum mju_dot(const mjtNum* vec1, const mjtNum* vec2, int n);
- void mju_mulMatVec(mjtNum* res, const mjtNum* mat, const mjtNum* vec, int nr, int nc);
- void mju_mulMatTVec(mjtNum* res, const mjtNum* mat, const mjtNum* vec, int nr, int nc);
- mjtNum mju_mulVecMatVec(const mjtNum* vec1, const mjtNum* mat, const mjtNum* vec2, int n);
- void mju_transpose(mjtNum* res, const mjtNum* mat, int nr, int nc);
- void mju_symmetrize(mjtNum* res, const mjtNum* mat, int n);
- void mju_eye(mjtNum* mat, int n);
- void mju_mulMatMat(mjtNum* res, const mjtNum* mat1, const mjtNum* mat2,
- int r1, int c1, int c2);
- void mju_mulMatMatT(mjtNum* res, const mjtNum* mat1, const mjtNum* mat2,
- int r1, int c1, int r2);
- void mju_mulMatTMat(mjtNum* res, const mjtNum* mat1, const mjtNum* mat2,
- int r1, int c1, int c2);
- void mju_sqrMatTD(mjtNum* res, const mjtNum* mat, const mjtNum* diag, int nr, int nc);
- void mju_transformSpatial(mjtNum res[6], const mjtNum vec[6], int flg_force,
- const mjtNum newpos[3], const mjtNum oldpos[3],
- const mjtNum rotnew2old[9]);
- void mju_rotVecQuat(mjtNum res[3], const mjtNum vec[3], const mjtNum quat[4]);
- void mju_negQuat(mjtNum res[4], const mjtNum quat[4]);
- void mju_mulQuat(mjtNum res[4], const mjtNum quat1[4], const mjtNum quat2[4]);
- void mju_mulQuatAxis(mjtNum res[4], const mjtNum quat[4], const mjtNum axis[3]);
- void mju_axisAngle2Quat(mjtNum res[4], const mjtNum axis[3], mjtNum angle);
- void mju_quat2Vel(mjtNum res[3], const mjtNum quat[4], mjtNum dt);
- void mju_subQuat(mjtNum res[3], const mjtNum qa[4], const mjtNum qb[4]);
- void mju_quat2Mat(mjtNum res[9], const mjtNum quat[4]);
- void mju_mat2Quat(mjtNum quat[4], const mjtNum mat[9]);
- void mju_derivQuat(mjtNum res[4], const mjtNum quat[4], const mjtNum vel[3]);
- void mju_quatIntegrate(mjtNum quat[4], const mjtNum vel[3], mjtNum scale);
- void mju_quatZ2Vec(mjtNum quat[4], const mjtNum vec[3]);
- void mju_euler2Quat(mjtNum quat[4], const mjtNum euler[3], const char* seq);
- void mju_mulPose(mjtNum posres[3], mjtNum quatres[4],
- const mjtNum pos1[3], const mjtNum quat1[4],
- const mjtNum pos2[3], const mjtNum quat2[4]);
- void mju_negPose(mjtNum posres[3], mjtNum quatres[4],
- const mjtNum pos[3], const mjtNum quat[4]);
- void mju_trnVecPose(mjtNum res[3], const mjtNum pos[3], const mjtNum quat[4],
- const mjtNum vec[3]);
- int mju_cholFactor(mjtNum* mat, int n, mjtNum mindiag);
- void mju_cholSolve(mjtNum* res, const mjtNum* mat, const mjtNum* vec, int n);
- int mju_cholUpdate(mjtNum* mat, mjtNum* x, int n, int flg_plus);
- mjtNum mju_cholFactorBand(mjtNum* mat, int ntotal, int nband, int ndense,
- mjtNum diagadd, mjtNum diagmul);
- void mju_cholSolveBand(mjtNum* res, const mjtNum* mat, const mjtNum* vec,
- int ntotal, int nband, int ndense);
- void mju_band2Dense(mjtNum* res, const mjtNum* mat, int ntotal, int nband, int ndense,
- mjtByte flg_sym);
- void mju_dense2Band(mjtNum* res, const mjtNum* mat, int ntotal, int nband, int ndense);
- void mju_bandMulMatVec(mjtNum* res, const mjtNum* mat, const mjtNum* vec,
- int ntotal, int nband, int ndense, int nvec, mjtByte flg_sym);
- int mju_bandDiag(int i, int ntotal, int nband, int ndense);
- int mju_eig3(mjtNum eigval[3], mjtNum eigvec[9], mjtNum quat[4], const mjtNum mat[9]);
- int mju_boxQP(mjtNum* res, mjtNum* R, int* index, const mjtNum* H, const mjtNum* g, int n,
- const mjtNum* lower, const mjtNum* upper);
- void mju_boxQPmalloc(mjtNum** res, mjtNum** R, int** index, mjtNum** H, mjtNum** g, int n,
- mjtNum** lower, mjtNum** upper);
- mjtNum mju_muscleGain(mjtNum len, mjtNum vel, const mjtNum lengthrange[2],
- mjtNum acc0, const mjtNum prm[9]);
- mjtNum mju_muscleBias(mjtNum len, const mjtNum lengthrange[2],
- mjtNum acc0, const mjtNum prm[9]);
- mjtNum mju_muscleDynamics(mjtNum ctrl, mjtNum act, const mjtNum prm[3]);
- void mju_encodePyramid(mjtNum* pyramid, const mjtNum* force, const mjtNum* mu, int dim);
- void mju_decodePyramid(mjtNum* force, const mjtNum* pyramid, const mjtNum* mu, int dim);
- mjtNum mju_springDamper(mjtNum pos0, mjtNum vel0, mjtNum Kp, mjtNum Kv, mjtNum dt);
- mjtNum mju_min(mjtNum a, mjtNum b);
- mjtNum mju_max(mjtNum a, mjtNum b);
- mjtNum mju_clip(mjtNum x, mjtNum min, mjtNum max);
- mjtNum mju_sign(mjtNum x);
- int mju_round(mjtNum x);
- const char* mju_type2Str(int type);
- int mju_str2Type(const char* str);
- const char* mju_writeNumBytes(size_t nbytes);
- const char* mju_warningText(int warning, size_t info);
- int mju_isBad(mjtNum x);
- int mju_isZero(mjtNum* vec, int n);
- mjtNum mju_standardNormal(mjtNum* num2);
- void mju_f2n(mjtNum* res, const float* vec, int n);
- void mju_n2f(float* res, const mjtNum* vec, int n);
- void mju_d2n(mjtNum* res, const double* vec, int n);
- void mju_n2d(double* res, const mjtNum* vec, int n);
- void mju_insertionSort(mjtNum* list, int n);
- void mju_insertionSortInt(int* list, int n);
- mjtNum mju_Halton(int index, int base);
- char* mju_strncpy(char *dst, const char *src, int n);
- mjtNum mju_sigmoid(mjtNum x);
- void mjd_transitionFD(const mjModel* m, mjData* d, mjtNum eps, mjtByte flg_centered,
- mjtNum* A, mjtNum* B, mjtNum* C, mjtNum* D);
- void mjd_inverseFD(const mjModel* m, mjData* d, mjtNum eps, mjtByte flg_actuation,
- mjtNum *DfDq, mjtNum *DfDv, mjtNum *DfDa,
- mjtNum *DsDq, mjtNum *DsDv, mjtNum *DsDa,
- mjtNum *DmDq);
- void mjd_subQuat(const mjtNum qa[4], const mjtNum qb[4], mjtNum Da[9], mjtNum Db[9]);
- void mjd_quatIntegrate(const mjtNum vel[3], mjtNum scale,
- mjtNum Dquat[9], mjtNum Dvel[9], mjtNum Dscale[3]);
- void mjp_defaultPlugin(mjpPlugin* plugin);
- int mjp_registerPlugin(const mjpPlugin* plugin);
- int mjp_pluginCount(void);
- const mjpPlugin* mjp_getPlugin(const char* name, int* slot);
- const mjpPlugin* mjp_getPluginAtSlot(int slot);
- void mjp_defaultResourceProvider(mjpResourceProvider* provider);
- int mjp_registerResourceProvider(const mjpResourceProvider* provider);
- int mjp_resourceProviderCount(void);
- const mjpResourceProvider* mjp_getResourceProvider(const char* resource_name);
- const mjpResourceProvider* mjp_getResourceProviderAtSlot(int slot);
- mjThreadPool* mju_threadPoolCreate(size_t number_of_threads);
- void mju_bindThreadPool(mjData* d, void* thread_pool);
- void mju_threadPoolEnqueue(mjThreadPool* thread_pool, mjTask* task);
- void mju_threadPoolDestroy(mjThreadPool* thread_pool);
- void mju_defaultTask(mjTask* task);
- void mju_taskJoin(mjTask* task);
- mjsBody* mjs_attachBody(mjsFrame* parent, const mjsBody* child,
- const char* prefix, const char* suffix);
- mjsFrame* mjs_attachFrame(mjsBody* parent, const mjsFrame* child,
- const char* prefix, const char* suffix);
- mjsBody* mjs_attachToSite(mjsSite* parent, const mjsBody* child,
- const char* prefix, const char* suffix);
- int mjs_detachBody(mjSpec* s, mjsBody* b);
- mjsBody* mjs_addBody(mjsBody* body, mjsDefault* def);
- mjsSite* mjs_addSite(mjsBody* body, mjsDefault* def);
- mjsJoint* mjs_addJoint(mjsBody* body, mjsDefault* def);
- mjsJoint* mjs_addFreeJoint(mjsBody* body);
- mjsGeom* mjs_addGeom(mjsBody* body, mjsDefault* def);
- mjsCamera* mjs_addCamera(mjsBody* body, mjsDefault* def);
- mjsLight* mjs_addLight(mjsBody* body, mjsDefault* def);
- mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe);
- void mjs_delete(mjsElement* element);
- mjsActuator* mjs_addActuator(mjSpec* s, mjsDefault* def);
- mjsSensor* mjs_addSensor(mjSpec* s);
- mjsFlex* mjs_addFlex(mjSpec* s);
- mjsPair* mjs_addPair(mjSpec* s, mjsDefault* def);
- mjsExclude* mjs_addExclude(mjSpec* s);
- mjsEquality* mjs_addEquality(mjSpec* s, mjsDefault* def);
- mjsTendon* mjs_addTendon(mjSpec* s, mjsDefault* def);
- mjsWrap* mjs_wrapSite(mjsTendon* tendon, const char* name);
- mjsWrap* mjs_wrapGeom(mjsTendon* tendon, const char* name, const char* sidesite);
- mjsWrap* mjs_wrapJoint(mjsTendon* tendon, const char* name, double coef);
- mjsWrap* mjs_wrapPulley(mjsTendon* tendon, double divisor);
- mjsNumeric* mjs_addNumeric(mjSpec* s);
- mjsText* mjs_addText(mjSpec* s);
- mjsTuple* mjs_addTuple(mjSpec* s);
- mjsKey* mjs_addKey(mjSpec* s);
- mjsPlugin* mjs_addPlugin(mjSpec* s);
- mjsDefault* mjs_addDefault(mjSpec* s, const char* classname, const mjsDefault* parent);
- mjsMesh* mjs_addMesh(mjSpec* s, mjsDefault* def);
- mjsHField* mjs_addHField(mjSpec* s);
- mjsSkin* mjs_addSkin(mjSpec* s);
- mjsTexture* mjs_addTexture(mjSpec* s);
- mjsMaterial* mjs_addMaterial(mjSpec* s, mjsDefault* def);
- mjSpec* mjs_getSpec(mjsElement* element);
- mjsBody* mjs_findBody(mjSpec* s, const char* name);
- mjsElement* mjs_findElement(mjSpec* s, mjtObj type, const char* name);
- mjsBody* mjs_findChild(mjsBody* body, const char* name);
- mjsFrame* mjs_findFrame(mjSpec* s, const char* name);
- mjsDefault* mjs_getDefault(mjsElement* element);
- mjsDefault* mjs_findDefault(mjSpec* s, const char* classname);
- mjsDefault* mjs_getSpecDefault(mjSpec* s);
- int mjs_getId(mjsElement* element);
- mjsElement* mjs_firstChild(mjsBody* body, mjtObj type, int recurse);
- mjsElement* mjs_nextChild(mjsBody* body, mjsElement* child, int recurse);
- mjsElement* mjs_firstElement(mjSpec* s, mjtObj type);
- mjsElement* mjs_nextElement(mjSpec* s, mjsElement* element);
- void mjs_setBuffer(mjByteVec* dest, const void* array, int size);
- void mjs_setString(mjString* dest, const char* text);
- void mjs_setStringVec(mjStringVec* dest, const char* text);
- mjtByte mjs_setInStringVec(mjStringVec* dest, int i, const char* text);
- void mjs_appendString(mjStringVec* dest, const char* text);
- void mjs_setInt(mjIntVec* dest, const int* array, int size);
- void mjs_appendIntVec(mjIntVecVec* dest, const int* array, int size);
- void mjs_setFloat(mjFloatVec* dest, const float* array, int size);
- void mjs_appendFloatVec(mjFloatVecVec* dest, const float* array, int size);
- void mjs_setDouble(mjDoubleVec* dest, const double* array, int size);
- void mjs_setPluginAttributes(mjsPlugin* plugin, void* attributes);
- const char* mjs_getString(const mjString* source);
- const double* mjs_getDouble(const mjDoubleVec* source, int* size);
- void mjs_setDefault(mjsElement* element, mjsDefault* def);
- void mjs_setFrame(mjsElement* dest, mjsFrame* frame);
- const char* mjs_resolveOrientation(double quat[4], mjtByte degree, const char* sequence,
- const mjsOrientation* orientation);
- mjsFrame* mjs_bodyToFrame(mjsBody** body);
- void mjs_defaultSpec(mjSpec* spec);
- void mjs_defaultOrientation(mjsOrientation* orient);
- void mjs_defaultBody(mjsBody* body);
- void mjs_defaultFrame(mjsFrame* frame);
- void mjs_defaultJoint(mjsJoint* joint);
- void mjs_defaultGeom(mjsGeom* geom);
- void mjs_defaultSite(mjsSite* site);
- void mjs_defaultCamera(mjsCamera* camera);
- void mjs_defaultLight(mjsLight* light);
- void mjs_defaultFlex(mjsFlex* flex);
- void mjs_defaultMesh(mjsMesh* mesh);
- void mjs_defaultHField(mjsHField* hfield);
- void mjs_defaultSkin(mjsSkin* skin);
- void mjs_defaultTexture(mjsTexture* texture);
- void mjs_defaultMaterial(mjsMaterial* material);
- void mjs_defaultPair(mjsPair* pair);
- void mjs_defaultEquality(mjsEquality* equality);
- void mjs_defaultTendon(mjsTendon* tendon);
- void mjs_defaultActuator(mjsActuator* actuator);
- void mjs_defaultSensor(mjsSensor* sensor);
- void mjs_defaultNumeric(mjsNumeric* numeric);
- void mjs_defaultText(mjsText* text);
- void mjs_defaultTuple(mjsTuple* tuple);
- void mjs_defaultKey(mjsKey* key);
- void mjs_defaultPlugin(mjsPlugin* plugin);
- mjsBody* mjs_asBody(mjsElement* element);
- mjsGeom* mjs_asGeom(mjsElement* element);
- mjsJoint* mjs_asJoint(mjsElement* element);
- mjsSite* mjs_asSite(mjsElement* element);
- mjsCamera* mjs_asCamera(mjsElement* element);
- mjsLight* mjs_asLight(mjsElement* element);
- mjsFrame* mjs_asFrame(mjsElement* element);
- mjsActuator* mjs_asActuator(mjsElement* element);
- mjsSensor* mjs_asSensor(mjsElement* element);
- mjsFlex* mjs_asFlex(mjsElement* element);
- mjsPair* mjs_asPair(mjsElement* element);
- mjsEquality* mjs_asEquality(mjsElement* element);
- mjsExclude* mjs_asExclude(mjsElement* element);
- mjsTendon* mjs_asTendon(mjsElement* element);
- mjsNumeric* mjs_asNumeric(mjsElement* element);
- mjsText* mjs_asText(mjsElement* element);
- mjsTuple* mjs_asTuple(mjsElement* element);
- mjsKey* mjs_asKey(mjsElement* element);
- mjsMesh* mjs_asMesh(mjsElement* element);
- mjsHField* mjs_asHField(mjsElement* element);
- mjsSkin* mjs_asSkin(mjsElement* element);
- mjsTexture* mjs_asTexture(mjsElement* element);
- mjsMaterial* mjs_asMaterial(mjsElement* element);
- mjsPlugin* mjs_asPlugin(mjsElement* element);
- // NOLINTEND
|