Skip to content

Commit 84187b6

Browse files
committed
created cascaded structure
1 parent c72b14f commit 84187b6

8 files changed

Lines changed: 109 additions & 441 deletions

File tree

hardware_interface/include/hardware_interface/actuator_interface.hpp

Lines changed: 9 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -126,41 +126,11 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
126126
CallbackReturn init(
127127
const HardwareInfo & hardware_info, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock)
128128
{
129-
actuator_clock_ = clock;
130-
actuator_logger_ = logger.get_child("hardware_component.actuator." + hardware_info.name);
131-
info_ = hardware_info;
132-
if (info_.is_async)
133-
{
134-
RCLCPP_INFO_STREAM(
135-
get_logger(), "Starting async handler with scheduler priority: " << info_.thread_priority);
136-
async_handler_ = std::make_unique<realtime_tools::AsyncFunctionHandler<return_type>>();
137-
async_handler_->init(
138-
[this](const rclcpp::Time & time, const rclcpp::Duration & period)
139-
{
140-
const auto read_start_time = std::chrono::steady_clock::now();
141-
const auto ret_read = read(time, period);
142-
const auto read_end_time = std::chrono::steady_clock::now();
143-
read_return_info_.store(ret_read, std::memory_order_release);
144-
read_execution_time_.store(
145-
std::chrono::duration_cast<std::chrono::nanoseconds>(read_end_time - read_start_time),
146-
std::memory_order_release);
147-
if (ret_read != return_type::OK)
148-
{
149-
return ret_read;
150-
}
151-
const auto write_start_time = std::chrono::steady_clock::now();
152-
const auto ret_write = write(time, period);
153-
const auto write_end_time = std::chrono::steady_clock::now();
154-
write_return_info_.store(ret_write, std::memory_order_release);
155-
write_execution_time_.store(
156-
std::chrono::duration_cast<std::chrono::nanoseconds>(write_end_time - write_start_time),
157-
std::memory_order_release);
158-
return ret_write;
159-
},
160-
info_.thread_priority);
161-
async_handler_->start_thread();
162-
}
163-
return on_init(hardware_info);
129+
hardware_interface::HardwareComponentParams params;
130+
params.hardware_info = hardware_info;
131+
params.clock = clock;
132+
params.logger = logger;
133+
return init(params);
164134
};
165135

166136
/// Initialization of the hardware interface from data parsed from the robot's URDF and also the
@@ -215,7 +185,7 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
215185
}
216186
hardware_interface::HardwareComponentInterfaceParams interface_params;
217187
interface_params.hardware_info = info_;
218-
interface_params.executor = params.executor;
188+
// interface_params.executor = params.executor;
219189
return on_init(interface_params);
220190
};
221191

@@ -227,10 +197,9 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod
227197
*/
228198
virtual CallbackReturn on_init(const HardwareInfo & hardware_info)
229199
{
230-
info_ = hardware_info;
231-
parse_state_interface_descriptions(info_.joints, joint_state_interfaces_);
232-
parse_command_interface_descriptions(info_.joints, joint_command_interfaces_);
233-
return CallbackReturn::SUCCESS;
200+
hardware_interface::HardwareComponentInterfaceParams params;
201+
params.hardware_info = hardware_info;
202+
return on_init(params);
234203
};
235204

236205
/// Initialization of the hardware interface from data parsed from the robot's URDF.

hardware_interface/include/hardware_interface/resource_manager.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,11 @@ class ResourceManager
107107
* interfaces.
108108
*
109109
* \param[in] params ResourceManagerParams containing the parameters for the ResourceManager.
110+
* \param[in] load boolean argument indicating if the components should be loaded and
111+
* initialized. If false, the ResourceManager will not load any components and will only
112+
* initialize the ResourceManager with the given parameters.
110113
*/
111-
explicit ResourceManager(const hardware_interface::ResourceManagerParams & params);
114+
explicit ResourceManager(const hardware_interface::ResourceManagerParams & params, bool load = true);
112115

113116
ResourceManager(const ResourceManager &) = delete;
114117

@@ -595,8 +598,9 @@ class ResourceManager
595598
rclcpp::Logger logger,
596599
const std::string & urdf = std::string(),
597600
bool activate_all = false,
598-
unsigned int update_rate = 100,
599-
rclcpp::Executor::SharedPtr executor = nullptr);
601+
unsigned int update_rate = 100
602+
//,rclcpp::Executor::SharedPtr executor = nullptr
603+
);
600604

601605
std::unordered_map<std::string, bool> claimed_command_interface_map_;
602606

hardware_interface/include/hardware_interface/sensor_interface.hpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -110,20 +110,11 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
110110
CallbackReturn init(
111111
const HardwareInfo & hardware_info, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock)
112112
{
113-
sensor_clock_ = clock;
114-
sensor_logger_ = logger.get_child("hardware_component.sensor." + hardware_info.name);
115-
info_ = hardware_info;
116-
if (info_.is_async)
117-
{
118-
RCLCPP_INFO_STREAM(
119-
get_logger(), "Starting async handler with scheduler priority: " << info_.thread_priority);
120-
read_async_handler_ = std::make_unique<realtime_tools::AsyncFunctionHandler<return_type>>();
121-
read_async_handler_->init(
122-
std::bind(&SensorInterface::read, this, std::placeholders::_1, std::placeholders::_2),
123-
info_.thread_priority);
124-
read_async_handler_->start_thread();
125-
}
126-
return on_init(hardware_info);
113+
hardware_interface::HardwareComponentParams params;
114+
params.hardware_info = hardware_info;
115+
params.clock = clock;
116+
params.logger = logger;
117+
return init(params);
127118
};
128119

129120
/// Initialization of the hardware interface from data parsed from the robot's URDF and also the
@@ -157,7 +148,7 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
157148
}
158149
hardware_interface::HardwareComponentInterfaceParams interface_params;
159150
interface_params.hardware_info = info_;
160-
interface_params.executor = params.executor;
151+
// interface_params.executor = params.executor;
161152
return on_init(interface_params);
162153
};
163154

@@ -169,10 +160,9 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
169160
*/
170161
virtual CallbackReturn on_init(const HardwareInfo & hardware_info)
171162
{
172-
info_ = hardware_info;
173-
parse_state_interface_descriptions(info_.joints, joint_state_interfaces_);
174-
parse_state_interface_descriptions(info_.sensors, sensor_state_interfaces_);
175-
return CallbackReturn::SUCCESS;
163+
hardware_interface::HardwareComponentInterfaceParams params;
164+
params.hardware_info = hardware_info;
165+
return on_init(params);
176166
};
177167

178168
/// Initialization of the hardware interface from data parsed from the robot's URDF.

hardware_interface/include/hardware_interface/system_interface.hpp

Lines changed: 9 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -130,41 +130,11 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
130130
CallbackReturn init(
131131
const HardwareInfo & hardware_info, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock)
132132
{
133-
system_clock_ = clock;
134-
system_logger_ = logger.get_child("hardware_component.system." + hardware_info.name);
135-
info_ = hardware_info;
136-
if (info_.is_async)
137-
{
138-
RCLCPP_INFO_STREAM(
139-
get_logger(), "Starting async handler with scheduler priority: " << info_.thread_priority);
140-
async_handler_ = std::make_unique<realtime_tools::AsyncFunctionHandler<return_type>>();
141-
async_handler_->init(
142-
[this](const rclcpp::Time & time, const rclcpp::Duration & period)
143-
{
144-
const auto read_start_time = std::chrono::steady_clock::now();
145-
const auto ret_read = read(time, period);
146-
const auto read_end_time = std::chrono::steady_clock::now();
147-
read_return_info_.store(ret_read, std::memory_order_release);
148-
read_execution_time_.store(
149-
std::chrono::duration_cast<std::chrono::nanoseconds>(read_end_time - read_start_time),
150-
std::memory_order_release);
151-
if (ret_read != return_type::OK)
152-
{
153-
return ret_read;
154-
}
155-
const auto write_start_time = std::chrono::steady_clock::now();
156-
const auto ret_write = write(time, period);
157-
const auto write_end_time = std::chrono::steady_clock::now();
158-
write_return_info_.store(ret_write, std::memory_order_release);
159-
write_execution_time_.store(
160-
std::chrono::duration_cast<std::chrono::nanoseconds>(write_end_time - write_start_time),
161-
std::memory_order_release);
162-
return ret_write;
163-
},
164-
info_.thread_priority);
165-
async_handler_->start_thread();
166-
}
167-
return on_init(hardware_info);
133+
hardware_interface::HardwareComponentParams params;
134+
params.hardware_info = hardware_info;
135+
params.clock = clock;
136+
params.logger = logger;
137+
return init(params);
168138
};
169139

170140
/// Initialization of the hardware interface from data parsed from the robot's URDF and also the
@@ -219,7 +189,7 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
219189
}
220190
hardware_interface::HardwareComponentInterfaceParams interface_params;
221191
interface_params.hardware_info = info_;
222-
interface_params.executor = params.executor;
192+
// interface_params.executor = params.executor;
223193
return on_init(interface_params);
224194
};
225195

@@ -231,13 +201,9 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI
231201
*/
232202
virtual CallbackReturn on_init(const HardwareInfo & hardware_info)
233203
{
234-
info_ = hardware_info;
235-
parse_state_interface_descriptions(info_.joints, joint_state_interfaces_);
236-
parse_state_interface_descriptions(info_.sensors, sensor_state_interfaces_);
237-
parse_state_interface_descriptions(info_.gpios, gpio_state_interfaces_);
238-
parse_command_interface_descriptions(info_.joints, joint_command_interfaces_);
239-
parse_command_interface_descriptions(info_.gpios, gpio_command_interfaces_);
240-
return CallbackReturn::SUCCESS;
204+
hardware_interface::HardwareComponentInterfaceParams params;
205+
params.hardware_info = hardware_info;
206+
return on_init(params);
241207
};
242208

243209
/// Initialization of the hardware interface from data parsed from the robot's URDF.

hardware_interface/src/actuator.cpp

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,26 +55,11 @@ const rclcpp_lifecycle::State & Actuator::initialize(
5555
const rclcpp_lifecycle::State & Actuator::initialize(
5656
const HardwareInfo & actuator_info, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock)
5757
{
58-
std::unique_lock<std::recursive_mutex> lock(actuators_mutex_);
59-
if (impl_->get_lifecycle_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_UNKNOWN)
60-
{
61-
switch (impl_->init(actuator_info, logger, clock))
62-
{
63-
case CallbackReturn::SUCCESS:
64-
impl_->set_lifecycle_state(
65-
rclcpp_lifecycle::State(
66-
lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED,
67-
lifecycle_state_names::UNCONFIGURED));
68-
break;
69-
case CallbackReturn::FAILURE:
70-
case CallbackReturn::ERROR:
71-
impl_->set_lifecycle_state(
72-
rclcpp_lifecycle::State(
73-
lifecycle_msgs::msg::State::PRIMARY_STATE_FINALIZED, lifecycle_state_names::FINALIZED));
74-
break;
75-
}
76-
}
77-
return impl_->get_lifecycle_state();
58+
hardware_interface::HardwareComponentParams params;
59+
params.hardware_info = actuator_info;
60+
params.logger = logger;
61+
params.clock = clock;
62+
return initialize(params);
7863
}
7964

8065
const rclcpp_lifecycle::State & Actuator::initialize(

0 commit comments

Comments
 (0)