Skip to content

Commit af17879

Browse files
Add read_only attribute to JointInfo and ActuatorInfo (#3426) (#3429)
(cherry picked from commit f259f03) Co-authored-by: Sai Kishor Kothakota <sai.kishor@pal-robotics.com>
1 parent ab72594 commit af17879

4 files changed

Lines changed: 16 additions & 3 deletions

File tree

hardware_interface/include/hardware_interface/hardware_info.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ struct JointInfo
112112
std::string role;
113113
double mechanical_reduction = 1.0;
114114
double offset = 0.0;
115+
bool read_only = false;
115116
};
116117

117118
/// Contains semantic info about a given actuator loaded from URDF for a transmission
@@ -123,6 +124,7 @@ struct ActuatorInfo
123124
std::string role;
124125
double mechanical_reduction = 1.0;
125126
double offset = 0.0;
127+
bool read_only = false;
126128
};
127129

128130
/// Contains semantic info about a given transmission loaded from URDF

hardware_interface/src/component_parser.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ constexpr const auto kSizeAttribute = "size";
6767
constexpr const auto kNameAttribute = "name";
6868
constexpr const auto kTypeAttribute = "type";
6969
constexpr const auto kRoleAttribute = "role";
70+
constexpr const auto kReadOnlyAttribute = "read_only";
7071
constexpr const auto kReductionAttribute = "mechanical_reduction";
7172
constexpr const auto kOffsetAttribute = "offset";
7273
constexpr const auto kReadWriteRateAttribute = "rw_rate";
@@ -554,6 +555,9 @@ JointInfo parse_transmission_joint_from_xml(const tinyxml2::XMLElement * element
554555
JointInfo joint_info;
555556
joint_info.name = get_attribute_value(element_it, kNameAttribute, element_it->Name());
556557
joint_info.role = get_attribute_value(element_it, kRoleAttribute, element_it->Name());
558+
const auto * read_only_attr = element_it->FindAttribute(kReadOnlyAttribute);
559+
joint_info.read_only =
560+
read_only_attr ? parse_bool(ros2_control::strip(read_only_attr->Value())) : false;
557561
joint_info.mechanical_reduction =
558562
get_parameter_value_or(element_it->FirstChildElement(), kReductionAttribute, 1.0);
559563
joint_info.offset =
@@ -566,6 +570,9 @@ ActuatorInfo parse_transmission_actuator_from_xml(const tinyxml2::XMLElement * e
566570
ActuatorInfo actuator_info;
567571
actuator_info.name = get_attribute_value(element_it, kNameAttribute, element_it->Name());
568572
actuator_info.role = get_attribute_value(element_it, kRoleAttribute, element_it->Name());
573+
const auto * read_only_attr = element_it->FindAttribute(kReadOnlyAttribute);
574+
actuator_info.read_only =
575+
read_only_attr ? parse_bool(ros2_control::strip(read_only_attr->Value())) : false;
569576
actuator_info.mechanical_reduction =
570577
get_parameter_value_or(element_it->FirstChildElement(), kReductionAttribute, 1.0);
571578
actuator_info.offset =
@@ -675,7 +682,7 @@ void auto_fill_transmission_interfaces(HardwareInfo & hardware)
675682
transmission.actuators.push_back(
676683
ActuatorInfo{
677684
"actuator1", transmission.joints[0].state_interfaces,
678-
transmission.joints[0].command_interfaces, "actuator1", 1.0, 0.0});
685+
transmission.joints[0].command_interfaces, "actuator1", 1.0, 0.0, false});
679686
}
680687
}
681688
}

hardware_interface/test/test_component_parser.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,16 +734,20 @@ TEST_F(TestComponentParser, successfully_parse_valid_urdf_system_multi_joints_tr
734734
EXPECT_EQ(hardware_info.transmissions[0].joints[0].role, "joint1");
735735
EXPECT_EQ(hardware_info.transmissions[0].joints[0].mechanical_reduction, 10.0);
736736
EXPECT_EQ(hardware_info.transmissions[0].joints[0].offset, 0.5);
737+
EXPECT_FALSE(hardware_info.transmissions[0].joints[0].read_only);
737738
EXPECT_EQ(hardware_info.transmissions[0].joints[1].name, "joint2");
738739
EXPECT_EQ(hardware_info.transmissions[0].joints[1].role, "joint2");
739740
EXPECT_EQ(hardware_info.transmissions[0].joints[1].mechanical_reduction, 50.0);
740741
EXPECT_EQ(hardware_info.transmissions[0].joints[1].offset, 0.0);
742+
EXPECT_FALSE(hardware_info.transmissions[0].joints[1].read_only);
741743

742744
ASSERT_THAT(hardware_info.transmissions[0].actuators, SizeIs(2));
743745
EXPECT_EQ(hardware_info.transmissions[0].actuators[0].name, "joint1_motor");
744746
EXPECT_EQ(hardware_info.transmissions[0].actuators[0].role, "actuator1");
747+
EXPECT_TRUE(hardware_info.transmissions[0].actuators[0].read_only);
745748
EXPECT_EQ(hardware_info.transmissions[0].actuators[1].name, "joint2_motor");
746749
EXPECT_EQ(hardware_info.transmissions[0].actuators[1].role, "actuator2");
750+
EXPECT_FALSE(hardware_info.transmissions[0].actuators[1].read_only);
747751
}
748752

749753
TEST_F(TestComponentParser, successfully_parse_valid_urdf_sensor_only)

ros2_control_test_assets/include/ros2_control_test_assets/components_urdfs.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,13 +352,13 @@ const auto valid_urdf_ros2_control_system_multi_joints_transmission =
352352
</joint>
353353
<transmission name="transmission1">
354354
<plugin>transmission_interface/DifferentialTransmission</plugin>
355-
<actuator name="joint1_motor" role="actuator1"/>
355+
<actuator name="joint1_motor" role="actuator1" read_only="true"/>
356356
<actuator name="joint2_motor" role="actuator2"/>
357357
<joint name="joint1" role="joint1">
358358
<mechanical_reduction>10</mechanical_reduction>
359359
<offset>0.5</offset>
360360
</joint>
361-
<joint name="joint2" role="joint2">
361+
<joint name="joint2" role="joint2" read_only="false">
362362
<mechanical_reduction>50</mechanical_reduction>
363363
</joint>
364364
</transmission>

0 commit comments

Comments
 (0)