@@ -557,7 +557,7 @@ TEST_F(TestCollision, checkJacobian)
557557
558558TEST_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