Skip to content

Commit 8d1086a

Browse files
committed
test capsule-mesh normals do not flip on collision
1 parent 42f7a0c commit 8d1086a

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

test/src/test_collision.cpp

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ TEST_F(TestCollision, checkJacobian)
557557

558558
TEST_F(TestCollisionNoRobot, checkDistanceConsistency)
559559
{
560-
const bool use_mesh = false;
560+
const bool use_mesh = true;
561561

562562
Eigen::Affine3d w_T_c;
563563
w_T_c.setIdentity();
@@ -620,8 +620,12 @@ TEST_F(TestCollisionNoRobot, checkDistanceConsistency)
620620

621621
auto decrease_distance = [&]()
622622
{
623-
auto J = cm->getDistanceJacobian(include_env);
624-
Eigen::VectorXd dq = -J.transpose() * Eigen::VectorXd::Ones(J.rows()) * step;
623+
Eigen::MatrixXd J = cm->getDistanceJacobian(include_env).bottomRows(8);
624+
J.leftCols(6).setZero(); // do not move the base
625+
626+
// std::cout << "J (rows: " << J.rows() << ", cols: " << J.cols() << "): \n" << J.format(2) << "\n";
627+
Eigen::VectorXd dq = -J.transpose() * (d.tail(8).array() > -0.05).matrix().cast<double>() * step;
628+
// Eigen::VectorXd dq = -J.transpose() * Eigen::VectorXd::Ones(8) * step;
625629
q = model->sum(q, dq);
626630

627631
model->setJointPosition(q);
@@ -631,27 +635,33 @@ TEST_F(TestCollisionNoRobot, checkDistanceConsistency)
631635
auto d_new = cm->computeDistance(include_env);
632636
auto n_new = cm->getNormals(include_env);
633637

634-
for (int i = 0; i < d.size(); i++)
638+
for (int i = d.size()-8; i < d.size(); i++)
635639
{
636-
// expect distance to decrease
637-
EXPECT_LE(d_new[i], d[i]) << "pair " << lp[i].first << " vs " << lp[i].second << "\n"
638-
<< "old d: " << d[i] << "\n"
639-
<< "new d: " << d_new[i] << "\n";
640+
// skip deep collisions (?)
641+
if(d_new[i] > -0.05)
642+
{
643+
// expect normals not to flip
644+
EXPECT_GE(n_new[i].dot(n[i]), -0.50) << "pair " << lp[i].first << " vs " << lp[i].second << "\n"
645+
<< "old d: " << d[i] << "\n"
646+
<< "new d: " << d_new[i] << "\n"
647+
<< "old n: " << n[i].transpose() << "\n"
648+
<< "new n: " << n_new[i].transpose() << "\n";
640649

641-
// expect normals not to flip
642-
EXPECT_GE(n_new[i].dot(n[i]), -0.1) << "pair " << lp[i].first << " vs " << lp[i].second << "\n"
643-
<< "old n: " << n[i].transpose() << "\n"
644-
<< "new n: " << n_new[i].transpose() << "\n";
650+
}
645651

646652
// update distance and normal
647653
n[i] = n_new[i];
648654
d[i] = d_new[i];
649655
}
650656
};
651657

652-
for(int i = 0; i < 25; i++)
658+
for(;;)
653659
{
654-
std::cout << "Step " << i << "\n";
660+
if(d.tail(8).maxCoeff() < -0.05)
661+
{
662+
break;
663+
}
664+
655665
std::cout << "d = " << d.tail(8).transpose().format(2) << "\n";
656666
decrease_distance();
657667
}

0 commit comments

Comments
 (0)