@@ -1404,3 +1404,113 @@ TEST_F(TestComponentParser, urdf_incomplete_throws_error)
14041404 std::string (ros2_control_test_assets::urdf_tail);
14051405 ASSERT_THROW (parse_control_resources_from_urdf (urdf_to_test), std::runtime_error);
14061406}
1407+
1408+ TEST_F (TestComponentParser, parse_joint_state_interface_descriptions_from_hardware_info)
1409+ {
1410+ const std::string urdf_to_test =
1411+ std::string (ros2_control_test_assets::urdf_head) +
1412+ ros2_control_test_assets::valid_urdf_ros2_control_system_multi_joints_transmission +
1413+ ros2_control_test_assets::urdf_tail;
1414+ const auto control_hardware = parse_control_resources_from_urdf (urdf_to_test);
1415+
1416+ const auto joint_state_descriptions =
1417+ parse_state_interface_descriptions (control_hardware[0 ].joints );
1418+ EXPECT_EQ (joint_state_descriptions[0 ].get_prefix_name (), " joint1" );
1419+ EXPECT_EQ (joint_state_descriptions[0 ].get_interface_name (), " position" );
1420+ EXPECT_EQ (joint_state_descriptions[0 ].get_name (), " joint1/position" );
1421+
1422+ EXPECT_EQ (joint_state_descriptions[1 ].get_prefix_name (), " joint2" );
1423+ EXPECT_EQ (joint_state_descriptions[1 ].get_interface_name (), " position" );
1424+ EXPECT_EQ (joint_state_descriptions[1 ].get_name (), " joint2/position" );
1425+ }
1426+
1427+ TEST_F (TestComponentParser, parse_joint_command_interface_descriptions_from_hardware_info)
1428+ {
1429+ const std::string urdf_to_test =
1430+ std::string (ros2_control_test_assets::urdf_head) +
1431+ ros2_control_test_assets::valid_urdf_ros2_control_system_multi_joints_transmission +
1432+ ros2_control_test_assets::urdf_tail;
1433+ const auto control_hardware = parse_control_resources_from_urdf (urdf_to_test);
1434+
1435+ const auto joint_command_descriptions =
1436+ parse_command_interface_descriptions (control_hardware[0 ].joints );
1437+ EXPECT_EQ (joint_command_descriptions[0 ].get_prefix_name (), " joint1" );
1438+ EXPECT_EQ (joint_command_descriptions[0 ].get_interface_name (), " position" );
1439+ EXPECT_EQ (joint_command_descriptions[0 ].get_name (), " joint1/position" );
1440+ EXPECT_EQ (joint_command_descriptions[0 ].interface_info .min , " -1" );
1441+ EXPECT_EQ (joint_command_descriptions[0 ].interface_info .max , " 1" );
1442+
1443+ EXPECT_EQ (joint_command_descriptions[1 ].get_prefix_name (), " joint2" );
1444+ EXPECT_EQ (joint_command_descriptions[1 ].get_interface_name (), " position" );
1445+ EXPECT_EQ (joint_command_descriptions[1 ].get_name (), " joint2/position" );
1446+ EXPECT_EQ (joint_command_descriptions[1 ].interface_info .min , " -1" );
1447+ EXPECT_EQ (joint_command_descriptions[1 ].interface_info .max , " 1" );
1448+ }
1449+
1450+ TEST_F (TestComponentParser, parse_sensor_state_interface_descriptions_from_hardware_info)
1451+ {
1452+ const std::string urdf_to_test = std::string (ros2_control_test_assets::urdf_head) +
1453+ ros2_control_test_assets::valid_urdf_ros2_control_sensor_only +
1454+ ros2_control_test_assets::urdf_tail;
1455+ const auto control_hardware = parse_control_resources_from_urdf (urdf_to_test);
1456+
1457+ const auto sensor_state_descriptions =
1458+ parse_state_interface_descriptions (control_hardware[0 ].sensors );
1459+ EXPECT_EQ (sensor_state_descriptions[0 ].get_prefix_name (), " sensor1" );
1460+ EXPECT_EQ (sensor_state_descriptions[0 ].get_interface_name (), " roll" );
1461+ EXPECT_EQ (sensor_state_descriptions[0 ].get_name (), " sensor1/roll" );
1462+ EXPECT_EQ (sensor_state_descriptions[1 ].get_prefix_name (), " sensor1" );
1463+ EXPECT_EQ (sensor_state_descriptions[1 ].get_interface_name (), " pitch" );
1464+ EXPECT_EQ (sensor_state_descriptions[1 ].get_name (), " sensor1/pitch" );
1465+ EXPECT_EQ (sensor_state_descriptions[2 ].get_prefix_name (), " sensor1" );
1466+ EXPECT_EQ (sensor_state_descriptions[2 ].get_interface_name (), " yaw" );
1467+ EXPECT_EQ (sensor_state_descriptions[2 ].get_name (), " sensor1/yaw" );
1468+
1469+ EXPECT_EQ (sensor_state_descriptions[3 ].get_prefix_name (), " sensor2" );
1470+ EXPECT_EQ (sensor_state_descriptions[3 ].get_interface_name (), " image" );
1471+ EXPECT_EQ (sensor_state_descriptions[3 ].get_name (), " sensor2/image" );
1472+ }
1473+
1474+ TEST_F (TestComponentParser, parse_gpio_state_interface_descriptions_from_hardware_info)
1475+ {
1476+ const std::string urdf_to_test =
1477+ std::string (ros2_control_test_assets::urdf_head) +
1478+ ros2_control_test_assets::valid_urdf_ros2_control_system_robot_with_gpio +
1479+ ros2_control_test_assets::urdf_tail;
1480+ const auto control_hardware = parse_control_resources_from_urdf (urdf_to_test);
1481+
1482+ const auto gpio_state_descriptions =
1483+ parse_state_interface_descriptions (control_hardware[0 ].gpios );
1484+ EXPECT_EQ (gpio_state_descriptions[0 ].get_prefix_name (), " flange_analog_IOs" );
1485+ EXPECT_EQ (gpio_state_descriptions[0 ].get_interface_name (), " analog_output1" );
1486+ EXPECT_EQ (gpio_state_descriptions[0 ].get_name (), " flange_analog_IOs/analog_output1" );
1487+ EXPECT_EQ (gpio_state_descriptions[1 ].get_prefix_name (), " flange_analog_IOs" );
1488+ EXPECT_EQ (gpio_state_descriptions[1 ].get_interface_name (), " analog_input1" );
1489+ EXPECT_EQ (gpio_state_descriptions[1 ].get_name (), " flange_analog_IOs/analog_input1" );
1490+ EXPECT_EQ (gpio_state_descriptions[2 ].get_prefix_name (), " flange_analog_IOs" );
1491+ EXPECT_EQ (gpio_state_descriptions[2 ].get_interface_name (), " analog_input2" );
1492+ EXPECT_EQ (gpio_state_descriptions[2 ].get_name (), " flange_analog_IOs/analog_input2" );
1493+
1494+ EXPECT_EQ (gpio_state_descriptions[3 ].get_prefix_name (), " flange_vacuum" );
1495+ EXPECT_EQ (gpio_state_descriptions[3 ].get_interface_name (), " vacuum" );
1496+ EXPECT_EQ (gpio_state_descriptions[3 ].get_name (), " flange_vacuum/vacuum" );
1497+ }
1498+
1499+ TEST_F (TestComponentParser, parse_gpio_command_interface_descriptions_from_hardware_info)
1500+ {
1501+ const std::string urdf_to_test =
1502+ std::string (ros2_control_test_assets::urdf_head) +
1503+ ros2_control_test_assets::valid_urdf_ros2_control_system_robot_with_gpio +
1504+ ros2_control_test_assets::urdf_tail;
1505+ const auto control_hardware = parse_control_resources_from_urdf (urdf_to_test);
1506+
1507+ const auto gpio_state_descriptions =
1508+ parse_command_interface_descriptions (control_hardware[0 ].gpios );
1509+ EXPECT_EQ (gpio_state_descriptions[0 ].get_prefix_name (), " flange_analog_IOs" );
1510+ EXPECT_EQ (gpio_state_descriptions[0 ].get_interface_name (), " analog_output1" );
1511+ EXPECT_EQ (gpio_state_descriptions[0 ].get_name (), " flange_analog_IOs/analog_output1" );
1512+
1513+ EXPECT_EQ (gpio_state_descriptions[1 ].get_prefix_name (), " flange_vacuum" );
1514+ EXPECT_EQ (gpio_state_descriptions[1 ].get_interface_name (), " vacuum" );
1515+ EXPECT_EQ (gpio_state_descriptions[1 ].get_name (), " flange_vacuum/vacuum" );
1516+ }
0 commit comments