Skip to content

Commit 3b2c1d6

Browse files
github-actions[bot]mergify[bot]
authored andcommitted
Bump version of pre-commit hooks (#2156)
Co-authored-by: christophfroehlich <[email protected]> Co-authored-by: Sai Kishor Kothakota <[email protected]> (cherry picked from commit 119d08c) # Conflicts: # controller_interface/src/chainable_controller_interface.cpp # controller_interface/test/test_chainable_controller_interface.hpp # controller_interface/test/test_led_rgb_device.cpp # controller_interface/test/test_semantic_component_command_interface.cpp # controller_manager/src/controller_manager.cpp # controller_manager/test/test_chainable_controller/test_chainable_controller.cpp # controller_manager/test/test_controller_manager_hardware_error_handling.cpp # controller_manager/test/test_hardware_management_srvs.cpp # hardware_interface/include/hardware_interface/actuator_interface.hpp # hardware_interface/include/hardware_interface/sensor_interface.hpp # hardware_interface/include/hardware_interface/system_interface.hpp # hardware_interface/src/actuator.cpp # hardware_interface/src/sensor.cpp # hardware_interface/src/system.cpp # hardware_interface/test/test_hardware_components/test_imu_sensor.cpp # hardware_interface/test/test_hardware_components/test_single_joint_actuator.cpp # hardware_interface/test/test_hardware_components/test_system_with_command_modes.cpp # hardware_interface/test/test_hardware_components/test_two_joint_system.cpp # hardware_interface_testing/test/test_components/test_actuator.cpp # hardware_interface_testing/test/test_components/test_actuator_exclusive_interfaces.cpp # hardware_interface_testing/test/test_components/test_sensor.cpp # hardware_interface_testing/test/test_components/test_system.cpp # hardware_interface_testing/test/test_resource_manager.cpp
1 parent 1db1d2d commit 3b2c1d6

32 files changed

+1821
-70
lines changed

.pre-commit-config.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ repos:
5656
args: ["--line-length=99"]
5757

5858
- repo: https://github.com/pycqa/flake8
59-
rev: 7.1.2
59+
rev: 7.2.0
6060
hooks:
6161
- id: flake8
6262
args: ["--extend-ignore=E501"]
6363

6464
# CPP hooks
6565
- repo: https://github.com/pre-commit/mirrors-clang-format
66-
rev: v19.1.7
66+
rev: v20.1.0
6767
hooks:
6868
- id: clang-format
6969
args: ['-fallback-style=none', '-i']
@@ -133,7 +133,7 @@ repos:
133133
exclude: CHANGELOG\.rst|\.(svg|pyc|drawio)$
134134

135135
- repo: https://github.com/python-jsonschema/check-jsonschema
136-
rev: 0.31.2
136+
rev: 0.32.1
137137
hooks:
138138
- id: check-github-workflows
139139
args: ["--verbose"]

controller_interface/src/chainable_controller_interface.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,34 @@ bool ChainableControllerInterface::is_in_chained_mode() const { return in_chaine
113113

114114
bool ChainableControllerInterface::on_set_chained_mode(bool /*chained_mode*/) { return true; }
115115

116+
<<<<<<< HEAD
117+
=======
118+
std::vector<hardware_interface::StateInterface>
119+
ChainableControllerInterface::on_export_state_interfaces()
120+
{
121+
state_interfaces_values_.resize(exported_state_interface_names_.size(), 0.0);
122+
std::vector<hardware_interface::StateInterface> state_interfaces;
123+
for (size_t i = 0; i < exported_state_interface_names_.size(); ++i)
124+
{
125+
state_interfaces.emplace_back(
126+
get_node()->get_name(), exported_state_interface_names_[i], &state_interfaces_values_[i]);
127+
}
128+
return state_interfaces;
129+
}
130+
131+
std::vector<hardware_interface::CommandInterface>
132+
ChainableControllerInterface::on_export_reference_interfaces()
133+
{
134+
reference_interfaces_.resize(exported_reference_interface_names_.size(), 0.0);
135+
std::vector<hardware_interface::CommandInterface> reference_interfaces;
136+
for (size_t i = 0; i < exported_reference_interface_names_.size(); ++i)
137+
{
138+
reference_interfaces.emplace_back(
139+
hardware_interface::CommandInterface(
140+
get_node()->get_name(), exported_reference_interface_names_[i], &reference_interfaces_[i]));
141+
}
142+
return reference_interfaces;
143+
}
144+
145+
>>>>>>> 119d08c (Bump version of pre-commit hooks (#2156))
116146
} // namespace controller_interface

controller_interface/test/test_chainable_controller_interface.hpp

+21
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,33 @@ class TestableChainableControllerInterface
6464
}
6565

6666
// Implementation of ChainableController virtual methods
67+
<<<<<<< HEAD
68+
=======
69+
std::vector<hardware_interface::StateInterface> on_export_state_interfaces() override
70+
{
71+
std::vector<hardware_interface::StateInterface> state_interfaces;
72+
73+
state_interfaces.push_back(
74+
hardware_interface::StateInterface(
75+
name_prefix_of_interfaces_, "test_state", &state_interfaces_values_[0]));
76+
77+
return state_interfaces;
78+
}
79+
80+
// Implementation of ChainableController virtual methods
81+
>>>>>>> 119d08c (Bump version of pre-commit hooks (#2156))
6782
std::vector<hardware_interface::CommandInterface> on_export_reference_interfaces() override
6883
{
6984
std::vector<hardware_interface::CommandInterface> command_interfaces;
7085

86+
<<<<<<< HEAD
7187
command_interfaces.push_back(hardware_interface::CommandInterface(
7288
name_prefix_of_reference_interfaces_, "test_itf", &reference_interfaces_[0]));
89+
=======
90+
command_interfaces.push_back(
91+
hardware_interface::CommandInterface(
92+
name_prefix_of_interfaces_, "test_itf", &reference_interfaces_[0]));
93+
>>>>>>> 119d08c (Bump version of pre-commit hooks (#2156))
7394

7495
return command_interfaces;
7596
}

controller_interface/test/test_force_torque_sensor.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ TEST_F(ForceTorqueSensorTest, validate_all_with_default_names)
3939
ASSERT_EQ(force_torque_sensor_->state_interfaces_.capacity(), size_);
4040

4141
// validate the default interface_names_
42-
ASSERT_TRUE(std::equal(
43-
force_torque_sensor_->interface_names_.begin(), force_torque_sensor_->interface_names_.end(),
44-
full_interface_names_.begin(), full_interface_names_.end()));
42+
ASSERT_TRUE(
43+
std::equal(
44+
force_torque_sensor_->interface_names_.begin(), force_torque_sensor_->interface_names_.end(),
45+
full_interface_names_.begin(), full_interface_names_.end()));
4546

4647
// get the interface names
4748
std::vector<std::string> interface_names = force_torque_sensor_->get_state_interface_names();

controller_interface/test/test_imu_sensor.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ TEST_F(IMUSensorTest, validate_all)
3838
ASSERT_EQ(imu_sensor_->state_interfaces_.capacity(), size_);
3939

4040
// validate the default interface_names_
41-
ASSERT_TRUE(std::equal(
42-
imu_sensor_->interface_names_.begin(), imu_sensor_->interface_names_.end(),
43-
full_interface_names_.begin(), full_interface_names_.end()));
41+
ASSERT_TRUE(
42+
std::equal(
43+
imu_sensor_->interface_names_.begin(), imu_sensor_->interface_names_.end(),
44+
full_interface_names_.begin(), full_interface_names_.end()));
4445

4546
// get the interface names
4647
std::vector<std::string> interface_names = imu_sensor_->get_state_interface_names();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Copyright (c) 2024, Sherpa Mobile Robotics
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#include "test_led_rgb_device.hpp"
16+
17+
void LedDeviceTest::SetUp()
18+
{
19+
full_cmd_interface_names_.reserve(size_);
20+
for (const auto & interface_name : interface_names_)
21+
{
22+
full_cmd_interface_names_.emplace_back(device_name_ + '/' + interface_name);
23+
}
24+
}
25+
26+
void LedDeviceTest::TearDown() { led_device_.reset(nullptr); }
27+
28+
TEST_F(LedDeviceTest, validate_all)
29+
{
30+
// Create device
31+
led_device_ = std::make_unique<TestableLedDevice>(
32+
device_name_, interface_names_[0], interface_names_[1], interface_names_[2]);
33+
EXPECT_EQ(led_device_->name_, device_name_);
34+
35+
// Validate reserved space for interface_names_ and command_interfaces_
36+
// As command_interfaces_ are not defined yet, use capacity()
37+
ASSERT_EQ(led_device_->interface_names_.size(), size_);
38+
ASSERT_EQ(led_device_->command_interfaces_.capacity(), size_);
39+
40+
// Validate default interface_names_
41+
EXPECT_TRUE(
42+
std::equal(
43+
led_device_->interface_names_.cbegin(), led_device_->interface_names_.cend(),
44+
full_cmd_interface_names_.cbegin(), full_cmd_interface_names_.cend()));
45+
46+
// Get interface names
47+
std::vector<std::string> interface_names = led_device_->get_command_interface_names();
48+
49+
// Assign values to position
50+
hardware_interface::CommandInterface led_r{device_name_, interface_names_[0], &led_values_[0]};
51+
hardware_interface::CommandInterface led_g{device_name_, interface_names_[1], &led_values_[1]};
52+
hardware_interface::CommandInterface led_b{device_name_, interface_names_[2], &led_values_[2]};
53+
54+
// Create command interface vector in jumbled order
55+
std::vector<hardware_interface::LoanedCommandInterface> temp_command_interfaces;
56+
temp_command_interfaces.reserve(3);
57+
temp_command_interfaces.emplace_back(led_r);
58+
temp_command_interfaces.emplace_back(led_g);
59+
temp_command_interfaces.emplace_back(led_b);
60+
61+
// Assign interfaces
62+
led_device_->assign_loaned_command_interfaces(temp_command_interfaces);
63+
EXPECT_EQ(led_device_->command_interfaces_.size(), size_);
64+
65+
// Validate correct assignment
66+
const std::vector<double> test_led_values_cmd = {0.1, 0.2, 0.3};
67+
EXPECT_TRUE(led_device_->set_values(test_led_values_cmd));
68+
69+
EXPECT_EQ(led_values_[0], test_led_values_cmd[0]);
70+
EXPECT_EQ(led_values_[1], test_led_values_cmd[1]);
71+
EXPECT_EQ(led_values_[2], test_led_values_cmd[2]);
72+
73+
// Validate correct assignment from message
74+
std_msgs::msg::ColorRGBA temp_message;
75+
temp_message.r = static_cast<float>(test_led_values_cmd[0]);
76+
temp_message.g = static_cast<float>(test_led_values_cmd[1]);
77+
temp_message.b = static_cast<float>(test_led_values_cmd[2]);
78+
EXPECT_TRUE(led_device_->set_values_from_message(temp_message));
79+
80+
double float_tolerance = 1e-6;
81+
EXPECT_NEAR(led_values_[0], test_led_values_cmd[0], float_tolerance);
82+
EXPECT_NEAR(led_values_[1], test_led_values_cmd[1], float_tolerance);
83+
EXPECT_NEAR(led_values_[2], test_led_values_cmd[2], float_tolerance);
84+
85+
// Release command interfaces
86+
led_device_->release_interfaces();
87+
ASSERT_EQ(led_device_->command_interfaces_.size(), 0);
88+
}

controller_interface/test/test_pose_sensor.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ TEST_F(PoseSensorTest, validate_all)
3636
ASSERT_EQ(pose_sensor_->state_interfaces_.capacity(), size_);
3737

3838
// Validate default interface_names_
39-
EXPECT_TRUE(std::equal(
40-
pose_sensor_->interface_names_.cbegin(), pose_sensor_->interface_names_.cend(),
41-
full_interface_names_.cbegin(), full_interface_names_.cend()));
39+
EXPECT_TRUE(
40+
std::equal(
41+
pose_sensor_->interface_names_.cbegin(), pose_sensor_->interface_names_.cend(),
42+
full_interface_names_.cbegin(), full_interface_names_.cend()));
4243

4344
// Get interface names
4445
std::vector<std::string> interface_names = pose_sensor_->get_state_interface_names();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// Copyright 2024 Sherpa Mobile Robotics
2+
// Licensed under the Apache License, Version 2.0 (the "License");
3+
// you may not use this file except in compliance with the License.
4+
// You may obtain a copy of the License at
5+
//
6+
// http://www.apache.org/licenses/LICENSE-2.0
7+
//
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
/*
15+
* Authors: Thibault Poignonec
16+
*/
17+
18+
#include "test_semantic_component_command_interface.hpp"
19+
20+
#include <limits>
21+
#include <memory>
22+
#include <string>
23+
#include <vector>
24+
25+
void SemanticCommandInterfaceTest::TearDown() { semantic_component_.reset(nullptr); }
26+
27+
TEST_F(SemanticCommandInterfaceTest, validate_command_interfaces)
28+
{
29+
// create 'test_component' with 3 interfaces using default naming
30+
// e.g. test_component_1, test_component_2 so on...
31+
semantic_component_ = std::make_unique<TestableSemanticCommandInterface>(component_name_);
32+
33+
// generate the interface_names_
34+
std::vector<std::string> interface_names = semantic_component_->get_command_interface_names();
35+
36+
// validate assign_loaned_command_interfaces
37+
// create interfaces and assign values to it
38+
std::vector<double> interface_values = {
39+
std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN(),
40+
std::numeric_limits<double>::quiet_NaN()};
41+
hardware_interface::CommandInterface cmd_interface_1{component_name_, "1", &interface_values[0]};
42+
hardware_interface::CommandInterface cmd_interface_2{component_name_, "2", &interface_values[1]};
43+
hardware_interface::CommandInterface cmd_interface_3{component_name_, "3", &interface_values[2]};
44+
45+
// create local command interface vector
46+
std::vector<hardware_interface::LoanedCommandInterface> temp_command_interfaces;
47+
temp_command_interfaces.reserve(3);
48+
// insert the interfaces in jumbled sequence
49+
temp_command_interfaces.emplace_back(cmd_interface_1);
50+
temp_command_interfaces.emplace_back(cmd_interface_3);
51+
temp_command_interfaces.emplace_back(cmd_interface_2);
52+
53+
// now call the function to make them in order like interface_names
54+
EXPECT_TRUE(semantic_component_->assign_loaned_command_interfaces(temp_command_interfaces));
55+
56+
// validate the count of command_interfaces_
57+
ASSERT_EQ(semantic_component_->command_interfaces_.size(), 3u);
58+
59+
// Validate correct assignment
60+
const std::vector<double> test_cmd_values = {0.1, 0.2, 0.3};
61+
EXPECT_TRUE(semantic_component_->set_values(test_cmd_values));
62+
63+
EXPECT_EQ(interface_values[0], test_cmd_values[0]);
64+
EXPECT_EQ(interface_values[1], test_cmd_values[1]);
65+
EXPECT_EQ(interface_values[2], test_cmd_values[2]);
66+
67+
// release the state_interfaces_
68+
semantic_component_->release_interfaces();
69+
70+
// validate the count of state_interfaces_
71+
ASSERT_EQ(semantic_component_->command_interfaces_.size(), 0u);
72+
73+
// validate that release_interfaces() does not touch interface_names_
74+
ASSERT_TRUE(
75+
std::equal(
76+
semantic_component_->interface_names_.begin(), semantic_component_->interface_names_.end(),
77+
interface_names.begin(), interface_names.end()));
78+
}

controller_interface/test/test_semantic_component_interface.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ TEST_F(SemanticComponentInterfaceTest, validate_custom_names)
6767

6868
// validate the interface_names_
6969
std::vector<std::string> interface_names = semantic_component_->get_state_interface_names();
70-
ASSERT_TRUE(std::equal(
71-
semantic_component_->interface_names_.begin(), semantic_component_->interface_names_.end(),
72-
interface_names.begin(), interface_names.end()));
70+
ASSERT_TRUE(
71+
std::equal(
72+
semantic_component_->interface_names_.begin(), semantic_component_->interface_names_.end(),
73+
interface_names.begin(), interface_names.end()));
7374

7475
ASSERT_EQ(interface_names.size(), size_);
7576
ASSERT_EQ(interface_names[0], semantic_component_->test_name_ + "/i5");
@@ -129,7 +130,8 @@ TEST_F(SemanticComponentInterfaceTest, validate_state_interfaces)
129130
ASSERT_EQ(semantic_component_->state_interfaces_.size(), 0u);
130131

131132
// validate that release_interfaces() does not touch interface_names_
132-
ASSERT_TRUE(std::equal(
133-
semantic_component_->interface_names_.begin(), semantic_component_->interface_names_.end(),
134-
interface_names.begin(), interface_names.end()));
133+
ASSERT_TRUE(
134+
std::equal(
135+
semantic_component_->interface_names_.begin(), semantic_component_->interface_names_.end(),
136+
interface_names.begin(), interface_names.end()));
135137
}

controller_manager/src/controller_manager.cpp

+29-4
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,9 @@ ControllerManager::ControllerManager(
272272
: rclcpp::Node(manager_node_name, namespace_, options),
273273
resource_manager_(std::make_unique<hardware_interface::ResourceManager>()),
274274
executor_(executor),
275-
loader_(std::make_shared<pluginlib::ClassLoader<controller_interface::ControllerInterface>>(
276-
kControllerInterfaceNamespace, kControllerInterfaceClassName)),
275+
loader_(
276+
std::make_shared<pluginlib::ClassLoader<controller_interface::ControllerInterface>>(
277+
kControllerInterfaceNamespace, kControllerInterfaceClassName)),
277278
chainable_loader_(
278279
std::make_shared<pluginlib::ClassLoader<controller_interface::ChainableControllerInterface>>(
279280
kControllerInterfaceNamespace, kChainableControllerInterfaceClassName))
@@ -283,6 +284,7 @@ ControllerManager::ControllerManager(
283284
RCLCPP_WARN(get_logger(), "'update_rate' parameter not set, using default value.");
284285
}
285286

287+
<<<<<<< HEAD
286288
std::string robot_description = "";
287289
get_parameter("robot_description", robot_description);
288290
if (robot_description.empty())
@@ -298,6 +300,28 @@ ControllerManager::ControllerManager(
298300
init_resource_manager(robot_description);
299301
init_services();
300302
}
303+
=======
304+
ControllerManager::ControllerManager(
305+
std::shared_ptr<rclcpp::Executor> executor, const std::string & urdf,
306+
bool activate_all_hw_components, const std::string & manager_node_name,
307+
const std::string & node_namespace, const rclcpp::NodeOptions & options)
308+
: rclcpp::Node(manager_node_name, node_namespace, options),
309+
diagnostics_updater_(this),
310+
executor_(executor),
311+
loader_(
312+
std::make_shared<pluginlib::ClassLoader<controller_interface::ControllerInterface>>(
313+
kControllerInterfaceNamespace, kControllerInterfaceClassName)),
314+
chainable_loader_(
315+
std::make_shared<pluginlib::ClassLoader<controller_interface::ChainableControllerInterface>>(
316+
kControllerInterfaceNamespace, kChainableControllerInterfaceClassName)),
317+
cm_node_options_(options),
318+
robot_description_(urdf)
319+
{
320+
initialize_parameters();
321+
resource_manager_ = std::make_unique<hardware_interface::ResourceManager>(
322+
urdf, trigger_clock_, this->get_logger(), activate_all_hw_components, params_->update_rate);
323+
init_controller_manager();
324+
>>>>>>> 119d08c (Bump version of pre-commit hooks (#2156))
301325
}
302326

303327
ControllerManager::ControllerManager(
@@ -307,8 +331,9 @@ ControllerManager::ControllerManager(
307331
: rclcpp::Node(manager_node_name, namespace_, options),
308332
resource_manager_(std::move(resource_manager)),
309333
executor_(executor),
310-
loader_(std::make_shared<pluginlib::ClassLoader<controller_interface::ControllerInterface>>(
311-
kControllerInterfaceNamespace, kControllerInterfaceClassName)),
334+
loader_(
335+
std::make_shared<pluginlib::ClassLoader<controller_interface::ControllerInterface>>(
336+
kControllerInterfaceNamespace, kControllerInterfaceClassName)),
312337
chainable_loader_(
313338
std::make_shared<pluginlib::ClassLoader<controller_interface::ChainableControllerInterface>>(
314339
kControllerInterfaceNamespace, kChainableControllerInterfaceClassName))

0 commit comments

Comments
 (0)