@@ -953,6 +953,179 @@ TEST(URDF_V1_0_LEGACY, quat_xyzw_ignored_in_v1_0)
953953 EXPECT_DOUBLE_EQ (0.0 , z);
954954 EXPECT_DOUBLE_EQ (1.0 , w);
955955}
956+
957+ // / @note Joint types
958+ TEST (URDF_V1_0_LEGACY , revolute_joint_with_limits)
959+ {
960+ std::string urdf_str = R"urdf(
961+ <robot name="r" version="1.0">
962+ <link name="l1"/>
963+ <link name="l2"/>
964+ <joint name="j1" type="revolute">
965+ <parent link="l1"/>
966+ <child link="l2"/>
967+ <limit lower="-1.57" upper="1.57" effort="100.0" velocity="2.0"/>
968+ </joint>
969+ </robot>
970+ )urdf" ;
971+ urdf::ModelInterfaceSharedPtr model = urdf::parseURDF (urdf_str);
972+ ASSERT_NE (nullptr , model);
973+ EXPECT_EQ (urdf::Joint::REVOLUTE , model->getJoint (" j1" )->type );
974+ ASSERT_NE (nullptr , model->getJoint (" j1" )->limits );
975+ EXPECT_DOUBLE_EQ (-1.57 , model->getJoint (" j1" )->limits ->lower );
976+ EXPECT_DOUBLE_EQ ( 1.57 , model->getJoint (" j1" )->limits ->upper );
977+ EXPECT_DOUBLE_EQ (100.0 , model->getJoint (" j1" )->limits ->effort );
978+ EXPECT_DOUBLE_EQ ( 2.0 , model->getJoint (" j1" )->limits ->velocity );
979+ }
980+
981+ TEST (URDF_V1_0_LEGACY , revolute_joint_without_limits_fails)
982+ {
983+ std::string urdf_str = R"urdf(
984+ <robot name="r" version="1.0">
985+ <link name="l1"/>
986+ <link name="l2"/>
987+ <joint name="j1" type="revolute">
988+ <parent link="l1"/>
989+ <child link="l2"/>
990+ </joint>
991+ </robot>
992+ )urdf" ;
993+ EXPECT_EQ (nullptr , urdf::parseURDF (urdf_str));
994+ }
995+
996+ TEST (URDF_V1_0_LEGACY , prismatic_joint_with_limits)
997+ {
998+ std::string urdf_str = R"urdf(
999+ <robot name="r" version="1.0">
1000+ <link name="l1"/>
1001+ <link name="l2"/>
1002+ <joint name="j1" type="prismatic">
1003+ <parent link="l1"/>
1004+ <child link="l2"/>
1005+ <axis xyz="0 0 1"/>
1006+ <limit lower="-0.5" upper="0.5" effort="50.0" velocity="0.5"/>
1007+ </joint>
1008+ </robot>
1009+ )urdf" ;
1010+ urdf::ModelInterfaceSharedPtr model = urdf::parseURDF (urdf_str);
1011+ ASSERT_NE (nullptr , model);
1012+ EXPECT_EQ (urdf::Joint::PRISMATIC , model->getJoint (" j1" )->type );
1013+ }
1014+
1015+ TEST (URDF_V1_0_LEGACY , prismatic_joint_without_limits_fails)
1016+ {
1017+ std::string urdf_str = R"urdf(
1018+ <robot name="r" version="1.0">
1019+ <link name="l1"/>
1020+ <link name="l2"/>
1021+ <joint name="j1" type="prismatic">
1022+ <parent link="l1"/>
1023+ <child link="l2"/>
1024+ </joint>
1025+ </robot>
1026+ )urdf" ;
1027+ EXPECT_EQ (nullptr , urdf::parseURDF (urdf_str));
1028+ }
1029+
1030+ TEST (URDF_V1_0_LEGACY , continuous_joint_no_limits_required)
1031+ {
1032+ std::string urdf_str = R"urdf(
1033+ <robot name="r" version="1.0">
1034+ <link name="l1"/>
1035+ <link name="l2"/>
1036+ <joint name="j1" type="continuous">
1037+ <parent link="l1"/>
1038+ <child link="l2"/>
1039+ </joint>
1040+ </robot>
1041+ )urdf" ;
1042+ urdf::ModelInterfaceSharedPtr model = urdf::parseURDF (urdf_str);
1043+ ASSERT_NE (nullptr , model);
1044+ EXPECT_EQ (urdf::Joint::CONTINUOUS , model->getJoint (" j1" )->type );
1045+ EXPECT_EQ (nullptr , model->getJoint (" j1" )->limits );
1046+ }
1047+
1048+ TEST (URDF_V1_0_LEGACY , fixed_joint_no_limits_required)
1049+ {
1050+ std::string urdf_str = R"urdf(
1051+ <robot name="r" version="1.0">
1052+ <link name="l1"/>
1053+ <link name="l2"/>
1054+ <joint name="j1" type="fixed">
1055+ <parent link="l1"/>
1056+ <child link="l2"/>
1057+ </joint>
1058+ </robot>
1059+ )urdf" ;
1060+ urdf::ModelInterfaceSharedPtr model = urdf::parseURDF (urdf_str);
1061+ ASSERT_NE (nullptr , model);
1062+ EXPECT_EQ (urdf::Joint::FIXED , model->getJoint (" j1" )->type );
1063+ EXPECT_EQ (nullptr , model->getJoint (" j1" )->limits );
1064+ }
1065+
1066+ TEST (URDF_V1_0_LEGACY , floating_joint_no_limits_required)
1067+ {
1068+ std::string urdf_str = R"urdf(
1069+ <robot name="r" version="1.0">
1070+ <link name="l1"/>
1071+ <link name="l2"/>
1072+ <joint name="j1" type="floating">
1073+ <parent link="l1"/>
1074+ <child link="l2"/>
1075+ </joint>
1076+ </robot>
1077+ )urdf" ;
1078+ urdf::ModelInterfaceSharedPtr model = urdf::parseURDF (urdf_str);
1079+ ASSERT_NE (nullptr , model);
1080+ EXPECT_EQ (urdf::Joint::FLOATING , model->getJoint (" j1" )->type );
1081+ }
1082+
1083+ TEST (URDF_V1_0_LEGACY , planar_joint_no_limits_required)
1084+ {
1085+ std::string urdf_str = R"urdf(
1086+ <robot name="r" version="1.0">
1087+ <link name="l1"/>
1088+ <link name="l2"/>
1089+ <joint name="j1" type="planar">
1090+ <parent link="l1"/>
1091+ <child link="l2"/>
1092+ </joint>
1093+ </robot>
1094+ )urdf" ;
1095+ urdf::ModelInterfaceSharedPtr model = urdf::parseURDF (urdf_str);
1096+ ASSERT_NE (nullptr , model);
1097+ EXPECT_EQ (urdf::Joint::PLANAR , model->getJoint (" j1" )->type );
1098+ }
1099+
1100+ TEST (URDF_V1_0_LEGACY , unknown_joint_type_fails)
1101+ {
1102+ std::string urdf_str = R"urdf(
1103+ <robot name="r" version="1.0">
1104+ <link name="l1"/>
1105+ <link name="l2"/>
1106+ <joint name="j1" type="spring">
1107+ <parent link="l1"/>
1108+ <child link="l2"/>
1109+ </joint>
1110+ </robot>
1111+ )urdf" ;
1112+ EXPECT_EQ (nullptr , urdf::parseURDF (urdf_str));
1113+ }
1114+
1115+ TEST (URDF_V1_0_LEGACY , joint_without_type_attr_fails)
1116+ {
1117+ std::string urdf_str = R"urdf(
1118+ <robot name="r" version="1.0">
1119+ <link name="l1"/>
1120+ <link name="l2"/>
1121+ <joint name="j1">
1122+ <parent link="l1"/>
1123+ <child link="l2"/>
1124+ </joint>
1125+ </robot>
1126+ )urdf" ;
1127+ EXPECT_EQ (nullptr , urdf::parseURDF (urdf_str));
1128+ }
9561129int main (int argc, char **argv)
9571130{
9581131 ::testing::InitGoogleTest (&argc, argv);
0 commit comments