Update mj_energyPos.
PiperOrigin-RevId: 757678945 Change-Id: If236b9e8f376a2673abc87e818326e9188f6c15a
This commit is contained in:
committed by
Copybara-Service
parent
b0b2c48190
commit
9accc7ae51
@@ -84,7 +84,7 @@ static void mj_springdamper(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
case mjJNT_BALL:
|
case mjJNT_BALL:
|
||||||
{
|
{
|
||||||
// convert quatertion difference into angular "velocity"
|
// convert quaternion difference into angular "velocity"
|
||||||
mjtNum dif[3], quat[4];
|
mjtNum dif[3], quat[4];
|
||||||
mju_copy4(quat, d->qpos+padr);
|
mju_copy4(quat, d->qpos+padr);
|
||||||
mju_normalize4(quat);
|
mju_normalize4(quat);
|
||||||
|
|||||||
@@ -938,9 +938,7 @@ void mj_energyPos(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
switch ((mjtJoint) m->jnt_type[i]) {
|
switch ((mjtJoint) m->jnt_type[i]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
mju_copy4(quat, d->qpos+padr);
|
mju_sub3(dif, d->qpos+padr, m->qpos_spring+padr);
|
||||||
mju_normalize4(quat);
|
|
||||||
mju_sub3(dif, quat, m->qpos_spring+padr);
|
|
||||||
d->energy[0] += 0.5*stiffness*mju_dot3(dif, dif);
|
d->energy[0] += 0.5*stiffness*mju_dot3(dif, dif);
|
||||||
|
|
||||||
// continue with rotations
|
// continue with rotations
|
||||||
|
|||||||
@@ -454,6 +454,33 @@ TEST_F(SensorTest, PotentialEnergy) {
|
|||||||
mj_deleteModel(model);
|
mj_deleteModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(SensorTest, PotentialEnergyFreeJointSpring) {
|
||||||
|
constexpr char xml[] = R"(
|
||||||
|
<mujoco>
|
||||||
|
<option gravity="0 0 0"/>
|
||||||
|
<worldbody>
|
||||||
|
<body>
|
||||||
|
<geom size="1" mass="3"/>
|
||||||
|
<joint type="free" stiffness="2"/>
|
||||||
|
</body>
|
||||||
|
</worldbody>
|
||||||
|
<sensor>
|
||||||
|
<e_potential/>
|
||||||
|
</sensor>
|
||||||
|
</mujoco>
|
||||||
|
)";
|
||||||
|
mjModel* model = LoadModelFromString(xml);
|
||||||
|
mjData* data = mj_makeData(model);
|
||||||
|
data->qpos[0] = 1;
|
||||||
|
data->qpos[1] = 2;
|
||||||
|
data->qpos[2] = 3;
|
||||||
|
mj_forward(model, data);
|
||||||
|
EXPECT_EQ(data->sensordata[0], 0.5*2*14);
|
||||||
|
|
||||||
|
mj_deleteData(data);
|
||||||
|
mj_deleteModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(SensorTest, KineticEnergy) {
|
TEST_F(SensorTest, KineticEnergy) {
|
||||||
constexpr char xml[] = R"(
|
constexpr char xml[] = R"(
|
||||||
<mujoco>
|
<mujoco>
|
||||||
|
|||||||
Reference in New Issue
Block a user