15#ifndef HARDWARE_INTERFACE__RESOURCE_MANAGER_HPP_
16#define HARDWARE_INTERFACE__RESOURCE_MANAGER_HPP_
22#include <unordered_map>
25#include "hardware_interface/actuator.hpp"
26#include "hardware_interface/actuator_interface.hpp"
27#include "hardware_interface/hardware_component_info.hpp"
28#include "hardware_interface/hardware_info.hpp"
29#include "hardware_interface/loaned_command_interface.hpp"
30#include "hardware_interface/loaned_state_interface.hpp"
31#include "hardware_interface/sensor.hpp"
32#include "hardware_interface/sensor_interface.hpp"
33#include "hardware_interface/system.hpp"
34#include "hardware_interface/system_interface.hpp"
35#include "hardware_interface/types/hardware_component_params.hpp"
36#include "hardware_interface/types/hardware_interface_return_values.hpp"
37#include "hardware_interface/types/resource_manager_params.hpp"
38#include "rclcpp/clock.hpp"
39#include "rclcpp/duration.hpp"
40#include "rclcpp/executor.hpp"
41#include "rclcpp/logger.hpp"
42#include "rclcpp/node_interfaces/node_clock_interface.hpp"
43#include "rclcpp/node_interfaces/node_logging_interface.hpp"
44#include "rclcpp/time.hpp"
45#include "rclcpp_lifecycle/state.hpp"
50class ControllerManager;
55 std::vector<std::string> failed_hardware_names;
63 rclcpp::node_interfaces::NodeClockInterface::SharedPtr clock_interface,
64 rclcpp::node_interfaces::NodeLoggingInterface::SharedPtr logger_interface);
67 explicit ResourceManager(rclcpp::Clock::SharedPtr clock, rclcpp::Logger logger);
85 const std::string & urdf,
86 rclcpp::node_interfaces::NodeClockInterface::SharedPtr clock_interface,
87 rclcpp::node_interfaces::NodeLoggingInterface::SharedPtr logger_interface,
88 bool activate_all =
false,
const unsigned int update_rate = 100);
106 const std::string & urdf, rclcpp::Clock::SharedPtr clock, rclcpp::Logger logger,
107 bool activate_all =
false,
const unsigned int update_rate = 100);
212 const std::string & controller_name, std::vector<StateInterface::ConstSharedPtr> & interfaces);
222 const std::string & controller_name);
265 const std::string & controller_name,
266 const std::vector<hardware_interface::CommandInterface::SharedPtr> & interfaces);
276 const std::string & controller_name);
316 const std::string & controller_name,
const std::vector<std::string> & interfaces);
484 const std::vector<std::string> & start_interfaces,
485 const std::vector<std::string> & stop_interfaces);
501 const std::vector<std::string> & start_interfaces,
502 const std::vector<std::string> & stop_interfaces);
518 const std::string & component_name, rclcpp_lifecycle::State & target_state);
565 const std::string & get_robot_description()
const;
578 rclcpp::Clock::SharedPtr
get_clock()
const;
580 bool components_are_loaded_and_initialized_ =
false;
581 bool allow_controller_activation_with_inactive_hardware_ =
false;
582 bool return_failed_hardware_names_on_return_deactivate_write_cycle_ =
true;
584 mutable std::recursive_mutex resource_interfaces_lock_;
585 mutable std::recursive_mutex claimed_command_interfaces_lock_;
586 mutable std::recursive_mutex resources_lock_;
587 mutable std::recursive_mutex joint_limiters_lock_;
590 bool validate_storage(
const std::vector<hardware_interface::HardwareInfo> & hardware_info)
const;
592 void release_command_interface(
const std::string & key);
598 rclcpp::Clock::SharedPtr clock, rclcpp::Logger logger,
const std::string & urdf = std::string(),
599 bool activate_all =
false,
unsigned int update_rate = 100);
601 std::unordered_map<std::string, bool> claimed_command_interface_map_;
603 std::unique_ptr<ResourceStorage> resource_storage_;
Definition loaned_command_interface.hpp:30
Definition loaned_state_interface.hpp:29
Definition resource_manager.hpp:59
void make_controller_reference_interfaces_available(const std::string &controller_name)
Add controller's reference interface to available list.
Definition resource_manager.cpp:1782
std::string get_state_interface_data_type(const std::string &name) const
Gets the data type of the state interface.
Definition resource_manager.cpp:1683
void import_controller_reference_interfaces(const std::string &controller_name, const std::vector< hardware_interface::CommandInterface::SharedPtr > &interfaces)
Add controllers' reference interfaces to resource manager.
Definition resource_manager.cpp:1765
std::vector< std::string > command_interface_keys() const
Returns all registered command interfaces keys.
Definition resource_manager.cpp:1924
bool command_interface_exists(const std::string &key) const
Checks whether a command interface is registered under the given key.
Definition resource_manager.cpp:2636
bool command_interface_is_claimed(const std::string &key) const
Checks whether a command interface is already claimed.
Definition resource_manager.cpp:1878
return_type set_component_state(const std::string &component_name, rclcpp_lifecycle::State &target_state)
Sets state of hardware component.
Definition resource_manager.cpp:2305
const std::unordered_map< std::string, joint_limits::JointLimits > & get_hard_joint_limits() const
Return the unordered map of hard joint limits.
Definition resource_manager.cpp:2015
bool are_components_initialized() const
if the resource manager load_and_initialize_components(...) function has been called this returns tru...
Definition resource_manager.cpp:1639
void set_on_component_state_switch_callback(std::function< void()> callback)
A method to register a callback to be called when the component state changes.
Definition resource_manager.cpp:2650
bool shutdown_components()
Shutdown all hardware components, irrespective of their state.
Definition resource_manager.cpp:1520
void remove_controller_exported_state_interfaces(const std::string &controller_name)
Remove controllers exported state interfaces from resource manager.
Definition resource_manager.cpp:1747
void make_controller_exported_state_interfaces_available(const std::string &controller_name)
Add controller's exported state interfaces to available list.
Definition resource_manager.cpp:1715
size_t sensor_components_size() const
Return the number of loaded sensor components.
Definition resource_manager.cpp:2626
std::vector< std::string > state_interface_keys() const
Returns all registered state interfaces keys.
Definition resource_manager.cpp:1658
size_t system_components_size() const
Return the number of loaded system components.
Definition resource_manager.cpp:2631
std::vector< std::string > get_controller_reference_interface_names(const std::string &controller_name)
Get list of reference interface of a controller.
Definition resource_manager.cpp:1775
bool command_interface_is_available(const std::string &interface) const
Checks whether a command interface is available under the given name.
Definition resource_manager.cpp:1943
void import_controller_exported_state_interfaces(const std::string &controller_name, std::vector< StateInterface::ConstSharedPtr > &interfaces)
Add controllers' exported state interfaces to resource manager.
Definition resource_manager.cpp:1699
void make_controller_exported_state_interfaces_unavailable(const std::string &controller_name)
Remove controller's exported state interface to available list.
Definition resource_manager.cpp:1725
std::vector< std::string > get_cached_controllers_to_hardware(const std::string &hardware_name)
Return cached controllers for a specific hardware.
Definition resource_manager.cpp:1871
std::string get_command_interface_data_type(const std::string &name) const
Gets the data type of the command interface.
Definition resource_manager.cpp:1949
bool state_interface_is_available(const std::string &name) const
Checks whether a state interface is available under the given key.
Definition resource_manager.cpp:1677
std::vector< std::string > get_controller_exported_state_interface_names(const std::string &controller_name)
Get list of exported tate interface of a controller.
Definition resource_manager.cpp:1708
void import_component(std::unique_ptr< SystemInterface > system, const HardwareComponentParams ¶ms)
Import a hardware component which is not listed in the URDF.
Definition resource_manager.cpp:1984
bool state_interface_exists(const std::string &key) const
Checks whether a state interface is registered under the given key.
Definition resource_manager.cpp:2643
void make_controller_reference_interfaces_unavailable(const std::string &controller_name)
Remove controller's reference interface to available list.
Definition resource_manager.cpp:1792
size_t actuator_components_size() const
Return the number size_t of loaded actuator components.
Definition resource_manager.cpp:2621
rclcpp::Clock::SharedPtr get_clock() const
Gets the clock for the resource manager.
Definition resource_manager.cpp:2664
HardwareReadWriteStatus read(const rclcpp::Time &time, const rclcpp::Duration &period)
Reads all loaded hardware components.
Definition resource_manager.cpp:2411
std::vector< std::string > available_command_interfaces() const
Returns all available command interfaces keys.
Definition resource_manager.cpp:1936
void remove_controller_reference_interfaces(const std::string &controller_name)
Remove controllers reference interfaces from resource manager.
Definition resource_manager.cpp:1814
bool prepare_command_mode_switch(const std::vector< std::string > &start_interfaces, const std::vector< std::string > &stop_interfaces)
Prepare the hardware components for a new command interface mode.
Definition resource_manager.cpp:2027
void import_joint_limiters(const std::string &urdf)
Import joint limiters from the URDF.
Definition resource_manager.cpp:1632
virtual bool load_and_initialize_components(const hardware_interface::ResourceManagerParams ¶ms)
Load resources from on a given URDF.
Definition resource_manager.cpp:1537
bool enforce_command_limits(const rclcpp::Duration &period)
Definition resource_manager.cpp:2390
bool perform_command_mode_switch(const std::vector< std::string > &start_interfaces, const std::vector< std::string > &stop_interfaces)
Notify the hardware components that realtime hardware mode switching should occur.
Definition resource_manager.cpp:2184
std::vector< std::string > available_state_interfaces() const
Returns all available state interfaces keys.
Definition resource_manager.cpp:1670
rclcpp::Logger get_logger() const
Gets the logger for the resource manager.
Definition resource_manager.cpp:2662
LoanedCommandInterface claim_command_interface(const std::string &key)
Claim a command interface given its key.
Definition resource_manager.cpp:1894
void cache_controller_to_hardware(const std::string &controller_name, const std::vector< std::string > &interfaces)
Cache mapping between hardware and controllers using it.
Definition resource_manager.cpp:1831
const std::unordered_map< std::string, joint_limits::SoftJointLimits > & get_soft_joint_limits() const
Return the unordered map of soft joint limits.
Definition resource_manager.cpp:2021
LoanedStateInterface claim_state_interface(const std::string &key)
Claim a state interface given its key.
Definition resource_manager.cpp:1645
HardwareReadWriteStatus write(const rclcpp::Time &time, const rclcpp::Duration &period)
Write all loaded hardware components.
Definition resource_manager.cpp:2512
const std::unordered_map< std::string, HardwareComponentInfo > & get_components_status()
Return status for all components.
Definition resource_manager.cpp:1996
Definition mujoco_system_interface.hpp:57
Parameters required for the initialization of a specific hardware component plugin....
Definition hardware_component_params.hpp:33
Definition resource_manager.hpp:53
Parameters required for the construction and initial setup of a ResourceManager. This struct is typic...
Definition resource_manager_params.hpp:30