Add frame support to the cable composite.
Also cleanup user_composite.cc includes. PiperOrigin-RevId: 740730596 Change-Id: I05df59926d8e61de45fd6b2a3a63121b7a390448
This commit is contained in:
committed by
Copybara-Service
parent
d6943731b2
commit
5c955b8fe2
@@ -12,25 +12,17 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#include <mujoco/mjspec.h>
|
|
||||||
#include "user/user_composite.h"
|
#include "user/user_composite.h"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstddef>
|
|
||||||
#include <cstdio>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <map>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mujoco/mjmacro.h>
|
|
||||||
#include <mujoco/mjmodel.h>
|
#include <mujoco/mjmodel.h>
|
||||||
|
#include <mujoco/mjspec.h>
|
||||||
#include <mujoco/mjtnum.h>
|
#include <mujoco/mjtnum.h>
|
||||||
#include "cc/array_safety.h"
|
#include "cc/array_safety.h"
|
||||||
#include "engine/engine_io.h"
|
|
||||||
#include "engine/engine_util_blas.h"
|
#include "engine/engine_util_blas.h"
|
||||||
#include "engine/engine_util_errmem.h"
|
#include "engine/engine_util_errmem.h"
|
||||||
#include "engine/engine_util_misc.h"
|
#include "engine/engine_util_misc.h"
|
||||||
@@ -40,9 +32,9 @@
|
|||||||
#include "user/user_util.h"
|
#include "user/user_util.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
namespace mju = ::mujoco::util;
|
namespace mju = ::mujoco::util;
|
||||||
using mujoco::user::VectorToString;
|
|
||||||
using mujoco::user::StringToVector;
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// strncpy with 0, return false
|
// strncpy with 0, return false
|
||||||
@@ -60,6 +52,7 @@ mjCComposite::mjCComposite(void) {
|
|||||||
type = mjCOMPTYPE_PARTICLE;
|
type = mjCOMPTYPE_PARTICLE;
|
||||||
count[0] = count[1] = count[2] = 1;
|
count[0] = count[1] = count[2] = 1;
|
||||||
mjuu_setvec(offset, 0, 0, 0);
|
mjuu_setvec(offset, 0, 0, 0);
|
||||||
|
frame = nullptr;
|
||||||
|
|
||||||
// plugin variables
|
// plugin variables
|
||||||
mjs_defaultPlugin(&plugin);
|
mjs_defaultPlugin(&plugin);
|
||||||
@@ -381,6 +374,9 @@ mjsBody* mjCComposite::AddCableBody(mjCModel* model, mjsBody* body, int ix,
|
|||||||
offset[1]+uservert[3*ix+1],
|
offset[1]+uservert[3*ix+1],
|
||||||
offset[2]+uservert[3*ix+2]);
|
offset[2]+uservert[3*ix+2]);
|
||||||
mjuu_copyvec(body->quat, this_quat, 4);
|
mjuu_copyvec(body->quat, this_quat, 4);
|
||||||
|
if (frame) {
|
||||||
|
mjs_setFrame(body->element, frame);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mjuu_setvec(body->pos, length_prev, 0, 0);
|
mjuu_setvec(body->pos, length_prev, 0, 0);
|
||||||
double negquat[4] = {prev_quat[0], -prev_quat[1], -prev_quat[2], -prev_quat[3]};
|
double negquat[4] = {prev_quat[0], -prev_quat[1], -prev_quat[2], -prev_quat[3]};
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ class mjCComposite {
|
|||||||
std::vector<float> uservert; // user-specified vertex positions
|
std::vector<float> uservert; // user-specified vertex positions
|
||||||
double size[3]; // rope size (meaning depends on the shape)
|
double size[3]; // rope size (meaning depends on the shape)
|
||||||
mjtCompShape curve[3]; // geometric shape
|
mjtCompShape curve[3]; // geometric shape
|
||||||
|
mjsFrame* frame; // frame where the composite is defined
|
||||||
|
|
||||||
// body names used in the skin
|
// body names used in the skin
|
||||||
std::vector<std::string> username;
|
std::vector<std::string> username;
|
||||||
|
|||||||
@@ -2388,7 +2388,7 @@ void mjXReader::OneActuator(XMLElement* elem, mjsActuator* actuator) {
|
|||||||
|
|
||||||
|
|
||||||
// make composite
|
// make composite
|
||||||
void mjXReader::OneComposite(XMLElement* elem, mjsBody* body, const mjsDefault* def) {
|
void mjXReader::OneComposite(XMLElement* elem, mjsBody* body, mjsFrame* frame, const mjsDefault* def) {
|
||||||
string text;
|
string text;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
@@ -2402,6 +2402,7 @@ void mjXReader::OneComposite(XMLElement* elem, mjsBody* body, const mjsDefault*
|
|||||||
}
|
}
|
||||||
ReadAttr(elem, "count", 3, comp.count, text, false, false);
|
ReadAttr(elem, "count", 3, comp.count, text, false, false);
|
||||||
ReadAttr(elem, "offset", 3, comp.offset, text);
|
ReadAttr(elem, "offset", 3, comp.offset, text);
|
||||||
|
comp.frame = frame;
|
||||||
|
|
||||||
// plugin
|
// plugin
|
||||||
XMLElement* eplugin = FirstChildElement(elem, "plugin");
|
XMLElement* eplugin = FirstChildElement(elem, "plugin");
|
||||||
@@ -3467,7 +3468,7 @@ void mjXReader::Body(XMLElement* section, mjsBody* body, mjsFrame* frame,
|
|||||||
// composite sub-element
|
// composite sub-element
|
||||||
else if (name == "composite") {
|
else if (name == "composite") {
|
||||||
// parse composite
|
// parse composite
|
||||||
OneComposite(elem, body, def);
|
OneComposite(elem, body, frame, def);
|
||||||
}
|
}
|
||||||
|
|
||||||
// flexcomp sub-element
|
// flexcomp sub-element
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ class mjXReader : public mjXBase {
|
|||||||
void OneEquality(tinyxml2::XMLElement* elem, mjsEquality* pequality);
|
void OneEquality(tinyxml2::XMLElement* elem, mjsEquality* pequality);
|
||||||
void OneTendon(tinyxml2::XMLElement* elem, mjsTendon* ptendon);
|
void OneTendon(tinyxml2::XMLElement* elem, mjsTendon* ptendon);
|
||||||
void OneActuator(tinyxml2::XMLElement* elem, mjsActuator* pactuator);
|
void OneActuator(tinyxml2::XMLElement* elem, mjsActuator* pactuator);
|
||||||
void OneComposite(tinyxml2::XMLElement* elem, mjsBody* pbody, const mjsDefault* def);
|
void OneComposite(tinyxml2::XMLElement* elem, mjsBody* pbody, mjsFrame* pframe,
|
||||||
|
const mjsDefault* def);
|
||||||
void OneFlexcomp(tinyxml2::XMLElement* elem, mjsBody* pbody, const mjVFS* vfs);
|
void OneFlexcomp(tinyxml2::XMLElement* elem, mjsBody* pbody, const mjVFS* vfs);
|
||||||
void OnePlugin(tinyxml2::XMLElement* elem, mjsPlugin* plugin);
|
void OnePlugin(tinyxml2::XMLElement* elem, mjsPlugin* plugin);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user