Make model editing API public, fixes #364

Still missing:

- Detailed documentation.
- Python bindings.

PiperOrigin-RevId: 641445626
Change-Id: I20e67b707cf1bebae7e0cc94d17f7b76a89171f0
This commit is contained in:
Alessio Quaglino
2024-06-07 22:27:10 -07:00
committed by Copybara-Service
parent 4c3d9461ae
commit 7a06bcfdaf
46 changed files with 8508 additions and 980 deletions
+3 -3
View File
@@ -35,7 +35,7 @@
#include "cc/array_safety.h"
#include "engine/engine_crossplatform.h"
#include "engine/engine_resource.h"
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "user/user_util.h"
#include "user/user_vfs.h"
#include "xml/xml_native_reader.h"
@@ -345,7 +345,7 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs,
}
// create model, set filedir
spec = mjs_createSpec();
spec = mj_makeSpec();
const char* dir;
int ndir = 0;
mju_getResourceDir(resource, &dir, &ndir);
@@ -394,7 +394,7 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs,
// catch known errors
catch (mjXError err) {
mjCopyError(error, err.message, error_sz);
mjs_deleteSpec(spec);
mj_deleteSpec(spec);
return nullptr;
}
+1 -1
View File
@@ -19,7 +19,7 @@
#include <mujoco/mjexport.h>
#include <mujoco/mjmodel.h>
#include "user/user_api.h"
#include <mujoco/mjspec.h>
// Top level API
+7 -7
View File
@@ -28,7 +28,7 @@
#include <mujoco/mjmodel.h>
#include "engine/engine_io.h"
#include "engine/engine_resource.h"
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "user/user_vfs.h"
#include "xml/xml.h"
#include "xml/xml_native_reader.h"
@@ -59,7 +59,7 @@ std::optional<std::string> GlobalModel::ToXML(const mjModel* m, char* error,
mjCopyError(error, "No XML model loaded", error_sz);
return std::nullopt;
}
mjs_copyBack(spec_, m);
mj_copyBack(spec_, m);
std::string result = mjWriteXML(spec_, error, error_sz);
if (result.empty()) {
return std::nullopt;
@@ -70,7 +70,7 @@ std::optional<std::string> GlobalModel::ToXML(const mjModel* m, char* error,
void GlobalModel::Set(mjSpec* spec) {
std::lock_guard<std::mutex> lock(*mutex_);
if (spec_ != nullptr) {
mjs_deleteSpec(spec_);
mj_deleteSpec(spec_);
}
spec_ = spec;
}
@@ -96,13 +96,13 @@ mjModel* mj_loadXML(const char* filename, const mjVFS* vfs,
// parse new model
std::unique_ptr<mjSpec, std::function<void(mjSpec*)>> spec(
mjParseXML(filename, vfs, error, error_sz),
[](mjSpec* s) { mjs_deleteSpec(s); });
[](mjSpec* s) { mj_deleteSpec(s); });
if (!spec) {
return nullptr;
}
// compile new model
mjModel* m = mjs_compile(spec.get(), vfs);
mjModel* m = mj_compile(spec.get(), vfs);
if (!m) {
mjCopyError(error, mjs_getError(spec.get()), error_sz);
return nullptr;
@@ -248,7 +248,7 @@ int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int er
std::string error_msg = "Output string too short, should be at least " +
std::to_string(result.size()+1);
mjCopyError(error, error_msg.c_str(), error_sz);
return 0;
return result.size();
}
if (result.empty()) {
return 0;
@@ -256,6 +256,6 @@ int mj_saveXMLString(const mjSpec* s, char* xml, int xml_sz, char* error, int er
result.copy(xml, xml_sz);
xml[result.size()] = 0;
return 1;
return 0;
}
+1 -1
View File
@@ -17,7 +17,7 @@
#include <mujoco/mjexport.h>
#include <mujoco/mjmodel.h>
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#ifdef __cplusplus
extern "C" {
+1 -3
View File
@@ -21,9 +21,7 @@
#include <string>
#include <vector>
#include "user/user_api.h"
#include "user/user_model.h"
#include "user/user_objects.h"
#include <mujoco/mjspec.h>
#include "xml/xml_util.h"
#include "tinyxml2.h"
+1 -1
View File
@@ -19,7 +19,7 @@
#include <string>
#include "tinyxml2.h"
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "xml/xml_util.h"
+1 -1
View File
@@ -36,7 +36,7 @@
#include "engine/engine_plugin.h"
#include "engine/engine_util_errmem.h"
#include "engine/engine_util_misc.h"
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "user/user_composite.h"
#include "user/user_flexcomp.h"
#include "user/user_util.h"
+1 -1
View File
@@ -21,7 +21,7 @@
#include "tinyxml2.h"
#include <mujoco/mujoco.h>
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "xml/xml_base.h"
#include "xml/xml_util.h"
+2 -1
View File
@@ -22,11 +22,12 @@
#include <mujoco/mjmodel.h>
#include <mujoco/mjplugin.h>
#include <mujoco/mjspec.h>
#include <mujoco/mujoco.h>
#include "engine/engine_io.h"
#include "engine/engine_plugin.h"
#include "engine/engine_util_errmem.h"
#include "engine/engine_util_misc.h"
#include "user/user_api.h"
#include "user/user_model.h"
#include "user/user_objects.h"
#include "user/user_util.h"
+1 -1
View File
@@ -18,7 +18,7 @@
#include <cstdlib>
#include <string>
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "user/user_objects.h"
#include "xml/xml_base.h"
#include "tinyxml2.h"
+1
View File
@@ -20,6 +20,7 @@
#include <vector>
#include <mujoco/mjmodel.h>
#include <mujoco/mjspec.h>
#include "user/user_api.h"
#include "user/user_util.h"
#include "xml/xml_native_reader.h"
+1 -1
View File
@@ -19,7 +19,7 @@
#include <unordered_set>
#include <vector>
#include "user/user_api.h"
#include <mujoco/mjspec.h>
#include "xml/xml_base.h"
#include "tinyxml2.h"