Allow orientation for user composite.
PiperOrigin-RevId: 740909723 Change-Id: Id38a55114d4257a461bbced57d35d6bb42a2597d
This commit is contained in:
committed by
Copybara-Service
parent
644b42bee3
commit
e8c67ca586
@@ -3003,8 +3003,13 @@ cable, which produces an inextensible chain of bodies connected with ball joints
|
|||||||
.. _body-composite-offset:
|
.. _body-composite-offset:
|
||||||
|
|
||||||
:at:`offset`: :at-val:`real(3), "0 0 0"`
|
:at:`offset`: :at-val:`real(3), "0 0 0"`
|
||||||
It specifies a 3D offset from the center of the parent body to the center of the grid of elements. The offset is
|
It specifies a 3D offset from the center of the parent body to the center of the first body of the cable. The offset
|
||||||
expressed in the local coordinate frame of the parent body.
|
is expressed in the local coordinate frame of the parent body.
|
||||||
|
|
||||||
|
.. _body-composite-quat:
|
||||||
|
|
||||||
|
:at:`quat`: :at-val:`real(4), "1 0 0 0"`
|
||||||
|
It specifies a quaternion that rotates the first body frame. The quaternion is expressed in the parent body frame.
|
||||||
|
|
||||||
.. _body-composite-vertex:
|
.. _body-composite-vertex:
|
||||||
|
|
||||||
|
|||||||
@@ -344,6 +344,8 @@
|
|||||||
| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ |
|
| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ |
|
||||||
| | | | :ref:`vertex<body-composite-vertex>` | :ref:`initial<body-composite-initial>` | :ref:`curve<body-composite-curve>` | :ref:`size<body-composite-size>` | |
|
| | | | :ref:`vertex<body-composite-vertex>` | :ref:`initial<body-composite-initial>` | :ref:`curve<body-composite-curve>` | :ref:`size<body-composite-size>` | |
|
||||||
| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ |
|
| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ |
|
||||||
|
| | | | :ref:`quat<body-composite-quat>` | | | | |
|
||||||
|
| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ |
|
||||||
+------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
| |_2| composite |br| |_2| |L| | | .. table:: |
|
| |_2| composite |br| |_2| |L| | | .. table:: |
|
||||||
| :ref:`joint | \* | :class: mjcf-attributes |
|
| :ref:`joint | \* | :class: mjcf-attributes |
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ Upcoming version (not yet released)
|
|||||||
- The default value of the flag for toggling :ref:`internal flex contacts<flex-contact-internal>` was changed from
|
- The default value of the flag for toggling :ref:`internal flex contacts<flex-contact-internal>` was changed from
|
||||||
"true" to "false". This feature has proven to be counterintuitive for users.
|
"true" to "false". This feature has proven to be counterintuitive for users.
|
||||||
|
|
||||||
|
General
|
||||||
|
^^^^^^^
|
||||||
|
- Add :ref:`orientation<body-composite-quat>` parameter to :ref:`composite<body-composite>`. Moreover, allow the
|
||||||
|
composite to be the direct child of a frame.
|
||||||
|
|
||||||
Bug fixes
|
Bug fixes
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
- :ref:`mj_jacDot` was missing a term that accounts for the motion of the point with respect to
|
- :ref:`mj_jacDot` was missing a term that accounts for the motion of the point with respect to
|
||||||
|
|||||||
@@ -52,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);
|
||||||
|
mjuu_setvec(quat, 1, 0, 0, 0);
|
||||||
frame = nullptr;
|
frame = nullptr;
|
||||||
|
|
||||||
// plugin variables
|
// plugin variables
|
||||||
@@ -260,19 +261,20 @@ bool mjCComposite::MakeCable(mjCModel* model, mjsBody* body, char* error, int er
|
|||||||
// populate uservert if not specified
|
// populate uservert if not specified
|
||||||
if (uservert.empty()) {
|
if (uservert.empty()) {
|
||||||
for (int ix=0; ix < count[0]; ix++) {
|
for (int ix=0; ix < count[0]; ix++) {
|
||||||
|
double v[3];
|
||||||
for (int k=0; k < 3; k++) {
|
for (int k=0; k < 3; k++) {
|
||||||
switch (curve[k]) {
|
switch (curve[k]) {
|
||||||
case mjCOMPSHAPE_LINE:
|
case mjCOMPSHAPE_LINE:
|
||||||
uservert.push_back(ix*size[0]/(count[0]-1));
|
v[k] = ix*size[0]/(count[0]-1);
|
||||||
break;
|
break;
|
||||||
case mjCOMPSHAPE_COS:
|
case mjCOMPSHAPE_COS:
|
||||||
uservert.push_back(size[1]*cos(mjPI*ix*size[2]/(count[0]-1)));
|
v[k] = size[1]*cos(mjPI*ix*size[2]/(count[0]-1));
|
||||||
break;
|
break;
|
||||||
case mjCOMPSHAPE_SIN:
|
case mjCOMPSHAPE_SIN:
|
||||||
uservert.push_back(size[1]*sin(mjPI*ix*size[2]/(count[0]-1)));
|
v[k] = size[1]*sin(mjPI*ix*size[2]/(count[0]-1));
|
||||||
break;
|
break;
|
||||||
case mjCOMPSHAPE_ZERO:
|
case mjCOMPSHAPE_ZERO:
|
||||||
uservert.push_back(0);
|
v[k] = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// SHOULD NOT OCCUR
|
// SHOULD NOT OCCUR
|
||||||
@@ -280,6 +282,8 @@ bool mjCComposite::MakeCable(mjCModel* model, mjsBody* body, char* error, int er
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mjuu_rotVecQuat(v, v, quat);
|
||||||
|
uservert.insert(uservert.end(), v, v+3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,8 @@ class mjCComposite {
|
|||||||
std::string prefix; // name prefix
|
std::string prefix; // name prefix
|
||||||
mjtCompType type; // composite type
|
mjtCompType type; // composite type
|
||||||
int count[3]; // geom count in each dimension
|
int count[3]; // geom count in each dimension
|
||||||
double offset[3]; // position offset for particle and grid
|
double offset[3]; // position offset
|
||||||
|
double quat[4]; // quaternion offset
|
||||||
|
|
||||||
// currently used only for cable
|
// currently used only for cable
|
||||||
std::string initial; // root boundary type
|
std::string initial; // root boundary type
|
||||||
|
|||||||
@@ -287,8 +287,8 @@ const char* MJCF[nMJCF][mjXATTRNUM] = {
|
|||||||
{"<"},
|
{"<"},
|
||||||
{"config", "*", "2", "key", "value"},
|
{"config", "*", "2", "key", "value"},
|
||||||
{">"},
|
{">"},
|
||||||
{"composite", "*", "8", "prefix", "type", "count", "offset",
|
{"composite", "*", "9", "prefix", "type", "count", "offset",
|
||||||
"vertex", "initial", "curve", "size"},
|
"vertex", "initial", "curve", "size", "quat"},
|
||||||
{"<"},
|
{"<"},
|
||||||
{"joint", "*", "17", "kind", "group", "stiffness", "damping", "armature",
|
{"joint", "*", "17", "kind", "group", "stiffness", "damping", "armature",
|
||||||
"solreffix", "solimpfix", "type", "axis",
|
"solreffix", "solimpfix", "type", "axis",
|
||||||
@@ -2402,6 +2402,7 @@ void mjXReader::OneComposite(XMLElement* elem, mjsBody* body, mjsFrame* frame, c
|
|||||||
}
|
}
|
||||||
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);
|
||||||
|
ReadAttr(elem, "quat", 4, comp.quat, text);
|
||||||
comp.frame = frame;
|
comp.frame = frame;
|
||||||
|
|
||||||
// plugin
|
// plugin
|
||||||
|
|||||||
Reference in New Issue
Block a user