@@ -426,62 +426,6 @@ TEST(TEST_SO3, TEST_SO3_LIFT)
426
426
EXPECT_DOUBLE_EQ (so3_inv_log.coeffs ()(2 ), -so3_log.coeffs ()(2 ));
427
427
}
428
428
429
- TEST (TEST_SO3, TEST_SO3_COMPOSE)
430
- {
431
- // compose two particular elements giving identity as result
432
- SO3d so3a (toRad (-165 ),toRad (-135 ),toRad (-90 ));
433
- SO3d so3b (toRad (15 ),toRad (45 ),toRad (90 ));
434
-
435
- auto so3c = so3a.compose (so3b);
436
-
437
- EXPECT_DOUBLE_EQ (0 , so3c.x ());
438
- EXPECT_DOUBLE_EQ (0 , so3c.y ());
439
- EXPECT_DOUBLE_EQ (0 , so3c.z ());
440
- EXPECT_DOUBLE_EQ (1 , so3c.w ());
441
- }
442
-
443
- TEST (TEST_SO3, TEST_SO3_OP_COMPOSE)
444
- {
445
- // compose two particular elements giving identity as result
446
- SO3d so3a (toRad (-165 ),toRad (-135 ),toRad (-90 ));
447
- SO3d so3b (toRad (15 ),toRad (45 ),toRad (90 ));
448
-
449
- auto so3c = so3a * so3b;
450
-
451
- EXPECT_DOUBLE_EQ (0 , so3c.x ());
452
- EXPECT_DOUBLE_EQ (0 , so3c.y ());
453
- EXPECT_DOUBLE_EQ (0 , so3c.z ());
454
- EXPECT_DOUBLE_EQ (1 , so3c.w ());
455
- }
456
-
457
- TEST (TEST_SO3, TEST_SO3_OP_COMPOSE_EQ)
458
- {
459
- // compose two particular elements giving identity as result
460
- SO3d so3a (toRad (-165 ),toRad (-135 ),toRad (-90 ));
461
- SO3d so3b (toRad (15 ),toRad (45 ),toRad (90 ));
462
-
463
- so3a *= so3b;
464
-
465
- EXPECT_DOUBLE_EQ (0 , so3a.x ());
466
- EXPECT_DOUBLE_EQ (0 , so3a.y ());
467
- EXPECT_DOUBLE_EQ (0 , so3a.z ());
468
- EXPECT_DOUBLE_EQ (1 , so3a.w ());
469
- }
470
-
471
- TEST (TEST_SO3, TEST_SO3_BETWEEN)
472
- {
473
- // between two equals is identity
474
- SO3d so3b (toRad (15 ),toRad (45 ),toRad (90 ));
475
- SO3d so3a (toRad (-15 ),toRad (-45 ),toRad (-90 ));
476
-
477
- auto so3c = so3a.between (so3b);
478
-
479
- EXPECT_DOUBLE_EQ (0 , so3c.x ());
480
- EXPECT_DOUBLE_EQ (0 , so3c.y ());
481
- EXPECT_DOUBLE_EQ (0 , so3c.z ());
482
- EXPECT_DOUBLE_EQ (1 , so3c.w ());
483
- }
484
-
485
429
// / with Jacs
486
430
487
431
TEST (TEST_SO3, TEST_SO3_INVERSE_JAC)
@@ -554,80 +498,6 @@ TEST(TEST_SO3, TEST_SO3_LIFT_JAC)
554
498
// EXPECT_DOUBLE_EQ(1, J_log(0));
555
499
}
556
500
557
- TEST (TEST_SO3, TEST_SO3_COMPOSE_JAC)
558
- {
559
- // Composing these two elements a*b gives the identity;
560
- // Jac_a is rotation 'b' transpose;
561
- // Jac_b is identity
562
- SO3d so3a (toRad (-165 ),toRad (-135 ),toRad (-90 ));
563
- SO3d so3b (toRad (15 ), toRad (45 ), toRad (90 ));
564
-
565
- SO3d::Jacobian J_c_a, J_c_b;
566
-
567
- SO3d so3c = so3a.compose (so3b, J_c_a, J_c_b);
568
-
569
- EXPECT_DOUBLE_EQ (0 , so3c.x ());
570
- EXPECT_DOUBLE_EQ (0 , so3c.y ());
571
- EXPECT_DOUBLE_EQ (0 , so3c.z ());
572
- EXPECT_DOUBLE_EQ (1 , so3c.w ());
573
-
574
- EXPECT_EQ (3 , J_c_a.rows ());
575
- EXPECT_EQ (3 , J_c_a.cols ());
576
- EXPECT_DOUBLE_EQ (so3b.rotation ()(0 ,0 ), J_c_b (0 ,0 ));
577
- EXPECT_DOUBLE_EQ (so3b.rotation ()(1 ,0 ), J_c_b (0 ,1 ));
578
- EXPECT_DOUBLE_EQ (so3b.rotation ()(2 ,0 ), J_c_b (0 ,2 ));
579
- EXPECT_DOUBLE_EQ (so3b.rotation ()(0 ,1 ), J_c_b (1 ,0 ));
580
- EXPECT_DOUBLE_EQ (so3b.rotation ()(1 ,1 ), J_c_b (1 ,1 ));
581
- EXPECT_DOUBLE_EQ (so3b.rotation ()(2 ,1 ), J_c_b (1 ,2 ));
582
- EXPECT_DOUBLE_EQ (so3b.rotation ()(0 ,2 ), J_c_b (2 ,0 ));
583
- EXPECT_DOUBLE_EQ (so3b.rotation ()(1 ,2 ), J_c_b (2 ,1 ));
584
- EXPECT_DOUBLE_EQ (so3b.rotation ()(2 ,2 ), J_c_b (2 ,2 ));
585
-
586
- EXPECT_EQ (3 , J_c_b.rows ());
587
- EXPECT_EQ (3 , J_c_b.cols ());
588
- EXPECT_DOUBLE_EQ (1 , J_c_b (0 ,0 ));
589
- EXPECT_DOUBLE_EQ (0 , J_c_b (0 ,1 ));
590
- EXPECT_DOUBLE_EQ (0 , J_c_b (0 ,2 ));
591
- EXPECT_DOUBLE_EQ (0 , J_c_b (1 ,0 ));
592
- EXPECT_DOUBLE_EQ (1 , J_c_b (1 ,1 ));
593
- EXPECT_DOUBLE_EQ (0 , J_c_b (1 ,2 ));
594
- EXPECT_DOUBLE_EQ (0 , J_c_b (2 ,0 ));
595
- EXPECT_DOUBLE_EQ (0 , J_c_b (2 ,1 ));
596
- EXPECT_DOUBLE_EQ (1 , J_c_b (2 ,2 ));
597
-
598
-
599
- // GENERAL JACOBIANS
600
- //
601
- // Assert is through linearized equation
602
- // J = df/dR ==> f( R(+)w ) ~= f(R) (+) J*w, where (+) is right-plus
603
-
604
- so3a.setRandom ();
605
- so3b.setRandom ();
606
- so3c = so3a.compose (so3b, J_c_a, J_c_b);
607
-
608
- // Jac wrt first element
609
-
610
- SO3d::Tangent w = SO3d::Tangent::Random (); w.coeffs () *= 1e-4 ;
611
-
612
- SO3d so3c_pert = (so3a + w) * so3b;
613
- SO3d so3c_lin = so3c + J_c_a * w;
614
-
615
- EXPECT_NEAR (so3c_pert.w (), so3c_lin.w (), 1e-8 );
616
- EXPECT_NEAR (so3c_pert.x (), so3c_lin.x (), 1e-8 );
617
- EXPECT_NEAR (so3c_pert.y (), so3c_lin.y (), 1e-8 );
618
- EXPECT_NEAR (so3c_pert.z (), so3c_lin.z (), 1e-8 );
619
-
620
- // Jac wrt second element
621
-
622
- so3c_pert = so3a * (so3b + w);
623
- so3c_lin = so3c + J_c_b * w;
624
-
625
- EXPECT_NEAR (so3c_pert.w (), so3c_lin.w (), 1e-8 );
626
- EXPECT_NEAR (so3c_pert.x (), so3c_lin.x (), 1e-8 );
627
- EXPECT_NEAR (so3c_pert.y (), so3c_lin.y (), 1e-8 );
628
- EXPECT_NEAR (so3c_pert.z (), so3c_lin.z (), 1e-8 );
629
- }
630
-
631
501
TEST (TEST_SO3, TEST_SO3_RIGHT_LEFT_JAC_ADJ)
632
502
{
633
503
SO3Tangentd tan = SO3Tangentd::Zero ();
@@ -648,192 +518,6 @@ TEST(TEST_SO3, TEST_SO3_RIGHT_LEFT_JAC)
648
518
EXPECT_EIGEN_NEAR (tan.rjac (), tan.ljac ().transpose ());
649
519
}
650
520
651
- /*
652
- TEST(TEST_SO3, TEST_SO3_RPLUS_JAC)
653
- {
654
- SO3d so3a;
655
- SO3Tangentd so3b;
656
-
657
- SO3d so3c;
658
- SO3d::Jacobian J_rplus_m;
659
- SO3d::Jacobian J_rplus_t;
660
-
661
- so3a.rplus(so3b, so3c, J_rplus_m, J_rplus_t);
662
-
663
- EXPECT_DOUBLE_EQ(MANIF_PI, so3c.angle());
664
-
665
- EXPECT_EQ(1, J_rplus_m.rows());
666
- EXPECT_EQ(1, J_rplus_m.cols());
667
- EXPECT_DOUBLE_EQ(1, J_rplus_m(0));
668
-
669
- EXPECT_EQ(1, J_rplus_t.rows());
670
- EXPECT_EQ(1, J_rplus_t.cols());
671
- EXPECT_DOUBLE_EQ(1, J_rplus_t(0));
672
- }
673
-
674
- TEST(TEST_SO3, TEST_SO3_LPLUS_JAC)
675
- {
676
- SO3d so3a;
677
- SO3Tangentd so3b;
678
-
679
- SO3d so3c;
680
- SO3d::Jacobian J_lplus_t;
681
- SO3d::Jacobian J_lplus_m;
682
-
683
- so3a.lplus(so3b, so3c, J_lplus_t, J_lplus_m);
684
-
685
- EXPECT_DOUBLE_EQ(MANIF_PI, so3c.angle());
686
-
687
- EXPECT_EQ(1, J_lplus_t.rows());
688
- EXPECT_EQ(1, J_lplus_t.cols());
689
- EXPECT_DOUBLE_EQ(1, J_lplus_t(0));
690
-
691
- EXPECT_EQ(1, J_lplus_m.rows());
692
- EXPECT_EQ(1, J_lplus_m.cols());
693
- EXPECT_DOUBLE_EQ(1, J_lplus_m(0));
694
- }
695
-
696
- TEST(TEST_SO3, TEST_SO3_PLUS_JAC)
697
- {
698
- SO3d so3a;
699
- SO3Tangentd so3b;
700
-
701
- SO3d so3c;
702
- SO3d::Jacobian J_plus_m;
703
- SO3d::Jacobian J_plus_t;
704
-
705
- so3a.plus(so3b, so3c, J_plus_m, J_plus_t);
706
-
707
- EXPECT_DOUBLE_EQ(MANIF_PI, so3c.angle());
708
-
709
- EXPECT_EQ(1, J_plus_m.rows());
710
- EXPECT_EQ(1, J_plus_m.cols());
711
- EXPECT_DOUBLE_EQ(1, J_plus_m(0));
712
-
713
- EXPECT_EQ(1, J_plus_t.rows());
714
- EXPECT_EQ(1, J_plus_t.cols());
715
- EXPECT_DOUBLE_EQ(1, J_plus_t(0));
716
- }
717
-
718
- TEST(TEST_SO3, TEST_SO3_RMINUS_JAC)
719
- {
720
- SO3d so3a(MANIF_PI);
721
- SO3d so3b(MANIF_PI_2);
722
-
723
- SO3Tangentd so3c;
724
-
725
- SO3d::Jacobian J_rminus_a, J_rminus_b;
726
-
727
- so3a.rminus(so3b, so3c, J_rminus_a, J_rminus_b);
728
-
729
- EXPECT_DOUBLE_EQ(MANIF_PI_2, so3c.angle());
730
-
731
- EXPECT_EQ(1, J_rminus_a.rows());
732
- EXPECT_EQ(1, J_rminus_a.cols());
733
- EXPECT_DOUBLE_EQ(1, J_rminus_a(0));
734
-
735
- EXPECT_EQ(1, J_rminus_b.rows());
736
- EXPECT_EQ(1, J_rminus_b.cols());
737
- EXPECT_DOUBLE_EQ(-1, J_rminus_b(0));
738
- }
739
-
740
- TEST(TEST_SO3, TEST_SO3_LMINUS_JAC)
741
- {
742
- SO3d so3a(MANIF_PI);
743
- SO3d so3b(MANIF_PI_2);
744
-
745
- SO3Tangentd so3c;
746
-
747
- SO3d::Jacobian J_lminus_a, J_lminus_b;
748
-
749
- so3a.lminus(so3b, so3c, J_lminus_a, J_lminus_b);
750
-
751
- EXPECT_DOUBLE_EQ(-MANIF_PI_2, so3c.angle());
752
-
753
- EXPECT_EQ(1, J_lminus_a.rows());
754
- EXPECT_EQ(1, J_lminus_a.cols());
755
- EXPECT_DOUBLE_EQ(-1, J_lminus_a(0));
756
-
757
- EXPECT_EQ(1, J_lminus_b.rows());
758
- EXPECT_EQ(1, J_lminus_b.cols());
759
- EXPECT_DOUBLE_EQ(1, J_lminus_b(0));
760
- }
761
-
762
- TEST(TEST_SO3, TEST_SO3_MINUS_JAC)
763
- {
764
- SO3d so3a(MANIF_PI);
765
- SO3d so3b(MANIF_PI_2);
766
-
767
- SO3Tangentd so3c;
768
-
769
- SO3d::Jacobian J_minus_a, J_minus_b;
770
-
771
- so3a.minus(so3b, so3c, J_minus_a, J_minus_b);
772
-
773
- EXPECT_DOUBLE_EQ(MANIF_PI_2, so3c.angle());
774
-
775
- EXPECT_EQ(1, J_minus_a.rows());
776
- EXPECT_EQ(1, J_minus_a.cols());
777
- EXPECT_DOUBLE_EQ(1, J_minus_a(0));
778
-
779
- EXPECT_EQ(1, J_minus_b.rows());
780
- EXPECT_EQ(1, J_minus_b.cols());
781
- EXPECT_DOUBLE_EQ(-1, J_minus_b(0));
782
- }
783
-
784
- */
785
-
786
- TEST (TEST_SO3, TEST_SO3_BETWEEN_JAC)
787
- {
788
- SO3d so3b (toRad (15 ),toRad (45 ),toRad (90 ));
789
- SO3d so3a (toRad (-15 ),toRad (-45 ),toRad (-90 ));
790
-
791
- SO3d::Jacobian J_between_a, J_between_b;
792
-
793
- SO3d so3c = so3a.between (so3b, J_between_a, J_between_b);
794
-
795
- EXPECT_DOUBLE_EQ (0 , so3c.x ());
796
- EXPECT_DOUBLE_EQ (0 , so3c.y ());
797
- EXPECT_DOUBLE_EQ (0 , so3c.z ());
798
- EXPECT_DOUBLE_EQ (1 , so3c.w ());
799
-
800
- EXPECT_EQ (3 , J_between_a.rows ());
801
- EXPECT_EQ (3 , J_between_a.cols ());
802
-
803
- EXPECT_EQ (3 , J_between_b.rows ());
804
- EXPECT_EQ (3 , J_between_b.cols ());
805
-
806
- so3a.setRandom ();
807
- so3b.setRandom ();
808
- so3c = so3a.between (so3b, J_between_a, J_between_b);
809
-
810
- // Jac wrt first element
811
-
812
- SO3d::Tangent w = SO3d::Tangent::Random (); w.coeffs () *= 1e-4 ;
813
-
814
- SO3d so3c_pert = (so3a + w).between (so3b);
815
- SO3d so3c_lin = so3c + J_between_a * w;
816
-
817
- EXPECT_NEAR (so3c_pert.w (), so3c_lin.w (), 1e-8 );
818
- EXPECT_NEAR (so3c_pert.x (), so3c_lin.x (), 1e-8 );
819
- EXPECT_NEAR (so3c_pert.y (), so3c_lin.y (), 1e-8 );
820
- EXPECT_NEAR (so3c_pert.z (), so3c_lin.z (), 1e-8 );
821
-
822
- EXPECT_MANIF_NEAR (so3c_pert, so3c_lin, 1e-8 );
823
-
824
- // Jac wrt second element
825
-
826
- so3c_pert = so3a.between (so3b + w);
827
- so3c_lin = so3c + J_between_b * w;
828
-
829
- EXPECT_NEAR (so3c_pert.w (), so3c_lin.w (), 1e-8 );
830
- EXPECT_NEAR (so3c_pert.x (), so3c_lin.x (), 1e-8 );
831
- EXPECT_NEAR (so3c_pert.y (), so3c_lin.y (), 1e-8 );
832
- EXPECT_NEAR (so3c_pert.z (), so3c_lin.z (), 1e-8 );
833
-
834
- EXPECT_MANIF_NEAR (so3c_pert, so3c_lin, 1e-8 );
835
- }
836
-
837
521
TEST (TEST_SO3, TEST_SO3_TANGENT_SKEW)
838
522
{
839
523
SO3Tangentd so3_tan (SO3Tangentd::DataType (1 , 2 , 3 ));
0 commit comments