ros2_control - rolling
Classes | Typedefs | Enumerations | Functions | Variables
hardware_interface Namespace Reference

Classes

class  Actuator
 
class  ActuatorInterface
 
class  AsyncComponentThread
 
struct  ControllerInfo
 Controller Information. More...
 
class  Handle
 A handle used to get and set a value on a given interface. More...
 
class  StateInterface
 
class  CommandInterface
 
struct  HardwareComponentInfo
 Hardware Component Information. More...
 
struct  InterfaceInfo
 
struct  MimicJoint
 This structure stores information about a joint that is mimicking another joint. More...
 
struct  ComponentInfo
 
struct  JointInfo
 Contains semantic info about a given joint loaded from URDF for a transmission. More...
 
struct  ActuatorInfo
 Contains semantic info about a given actuator loaded from URDF for a transmission. More...
 
struct  TransmissionInfo
 Contains semantic info about a given transmission loaded from URDF. More...
 
struct  InterfaceDescription
 
struct  HardwareInfo
 This structure stores information about hardware defined in a robot's URDF. More...
 
class  LoanedCommandInterface
 
class  LoanedStateInterface
 
struct  HardwareReadWriteStatus
 
class  ResourceManager
 
class  Sensor
 
class  SensorInterface
 
class  System
 
class  SystemInterface
 
class  ResourceStorage
 

Typedefs

using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
 Virtual Class to implement when integrating a 1 DoF actuator into ros2_control. More...
 
using HANDLE_DATATYPE = std::variant< double >
 

Enumerations

enum class  MimicAttribute { NOT_SET , TRUE , FALSE }
 This enum is used to store the mimic attribute of a joint.
 
enum class  return_type : std::uint8_t { OK = 0 , ERROR = 1 , DEACTIVATE = 2 }
 

Functions

HARDWARE_INTERFACE_PUBLIC std::vector< HardwareInfoparse_control_resources_from_urdf (const std::string &urdf)
 Search XML snippet from URDF for information about a control component. More...
 
HARDWARE_INTERFACE_PUBLIC std::vector< InterfaceDescriptionparse_state_interface_descriptions (const std::vector< ComponentInfo > &component_info)
 
HARDWARE_INTERFACE_PUBLIC void parse_state_interface_descriptions (const std::vector< ComponentInfo > &component_info, std::unordered_map< std::string, InterfaceDescription > &state_interfaces_map)
 
HARDWARE_INTERFACE_PUBLIC std::vector< InterfaceDescriptionparse_command_interface_descriptions (const std::vector< ComponentInfo > &component_info)
 
HARDWARE_INTERFACE_PUBLIC void parse_command_interface_descriptions (const std::vector< ComponentInfo > &component_info, std::unordered_map< std::string, InterfaceDescription > &command_interfaces_map)
 
HARDWARE_INTERFACE_PUBLIC double stod (const std::string &s)
 Helper function to convert a std::string to double in a locale-independent way. More...
 
HARDWARE_INTERFACE_PUBLIC bool parse_bool (const std::string &bool_string)
 
constexpr bool lifecycleStateThatRequiresNoAction (const lifecycle_msgs::msg::State::_id_type state)
 
std::string interfaces_to_string (const std::vector< std::string > &start_interfaces, const std::vector< std::string > &stop_interfaces)
 

Variables

constexpr char HW_IF_POSITION [] = "position"
 Constant defining position interface name.
 
constexpr char HW_IF_VELOCITY [] = "velocity"
 Constant defining velocity interface name.
 
constexpr char HW_IF_ACCELERATION [] = "acceleration"
 Constant defining acceleration interface name.
 
constexpr char HW_IF_EFFORT [] = "effort"
 Constant defining effort interface name.
 
constexpr char HW_IF_TORQUE [] = "torque"
 Constant defining torque interface name.
 
constexpr char HW_IF_FORCE [] = "force"
 Constant defining force interface name.
 
constexpr char HW_IF_CURRENT [] = "current"
 Constant defining current interface name.
 
constexpr char HW_IF_TEMPERATURE [] = "temperature"
 Constant defining temperature interface name.
 
constexpr char HW_IF_PROPORTIONAL_GAIN [] = "proportional"
 
constexpr char HW_IF_INTEGRAL_GAIN [] = "integral"
 Constant defining integral gain interface name.
 
constexpr char HW_IF_DERIVATIVE_GAIN [] = "derivative"
 Constant defining derivative gain interface name.
 
constexpr char HW_IF_INTEGRAL_CLAMP_MAX [] = "integral_clamp_max"
 Constant defining integral clamp interface name.
 
constexpr char HW_IF_INTEGRAL_CLAMP_MIN [] = "integral_clamp_min"
 Constant defining integral clamp interface name.
 
constexpr char HW_IF_FEEDFORWARD [] = "feedforward"
 Constant defining the feedforward interface name.
 
auto trigger_and_print_hardware_state_transition
 

Detailed Description

Author
: Denis Stogl

Typedef Documentation

◆ CallbackReturn

typedef rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn hardware_interface::CallbackReturn

Virtual Class to implement when integrating a 1 DoF actuator into ros2_control.

Virtual Class to implement when integrating a complex system into ros2_control.

Virtual Class to implement when integrating a stand-alone sensor into ros2_control.

The typical examples are conveyors or motors.

Methods return values have type rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn with the following meaning:

Returns
CallbackReturn::SUCCESS method execution was successful.
CallbackReturn::FAILURE method execution has failed and and can be called again.
CallbackReturn::ERROR critical error has happened that should be managed in "on_error" method.

The hardware ends after each method in a state with the following meaning:

UNCONFIGURED (on_init, on_cleanup): Hardware is initialized but communication is not started and therefore no interface is available.

INACTIVE (on_configure, on_deactivate): Communication with the hardware is started and it is configured. States can be read and non-movement hardware interfaces commanded. Hardware interfaces for movement will NOT be available. Those interfaces are: HW_IF_POSITION, HW_IF_VELOCITY, HW_IF_ACCELERATION, and HW_IF_EFFORT.

FINALIZED (on_shutdown): Hardware interface is ready for unloading/destruction. Allocated memory is cleaned up.

ACTIVE (on_activate): Power circuits of hardware are active and hardware can be moved, e.g., brakes are disabled. Command interfaces for movement are available and have to be accepted. Those interfaces are: HW_IF_POSITION, HW_IF_VELOCITY, HW_IF_ACCELERATION, and HW_IF_EFFORT.

The typical examples are Force-Torque Sensor (FTS), Interial Measurement Unit (IMU).

Methods return values have type rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn with the following meaning:

Returns
CallbackReturn::SUCCESS method execution was successful.
CallbackReturn::FAILURE method execution has failed and and can be called again.
CallbackReturn::ERROR critical error has happened that should be managed in "on_error" method.

The hardware ends after each method in a state with the following meaning:

UNCONFIGURED (on_init, on_cleanup): Hardware is initialized but communication is not started and therefore no interface is available.

INACTIVE (on_configure, on_deactivate): Communication with the hardware is started and it is configured. States can be read and non-movement hardware interfaces commanded. Hardware interfaces for movement will NOT be available. Those interfaces are: HW_IF_POSITION, HW_IF_VELOCITY, HW_IF_ACCELERATION, and HW_IF_EFFORT.

FINALIZED (on_shutdown): Hardware interface is ready for unloading/destruction. Allocated memory is cleaned up.

ACTIVE (on_activate): Power circuits of hardware are active and hardware can be moved, e.g., brakes are disabled. Command interfaces for movement are available and have to be accepted. Those interfaces are: HW_IF_POSITION, HW_IF_VELOCITY, HW_IF_ACCELERATION, and HW_IF_EFFORT.

The common examples for these types of hardware are multi-joint systems with or without sensors such as industrial or humanoid robots.

Methods return values have type rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn with the following meaning:

Returns
CallbackReturn::SUCCESS method execution was successful.
CallbackReturn::FAILURE method execution has failed and and can be called again.
CallbackReturn::ERROR critical error has happened that should be managed in "on_error" method.

The hardware ends after each method in a state with the following meaning:

UNCONFIGURED (on_init, on_cleanup): Hardware is initialized but communication is not started and therefore no interface is available.

INACTIVE (on_configure, on_deactivate): Communication with the hardware is started and it is configured. States can be read and non-movement hardware interfaces commanded. Hardware interfaces for movement will NOT be available. Those interfaces are: HW_IF_POSITION, HW_IF_VELOCITY, HW_IF_ACCELERATION, and HW_IF_EFFORT.

FINALIZED (on_shutdown): Hardware interface is ready for unloading/destruction. Allocated memory is cleaned up.

ACTIVE (on_activate): Power circuits of hardware are active and hardware can be moved, e.g., brakes are disabled. Command interfaces for movement are available and have to be accepted. Those interfaces are: HW_IF_POSITION, HW_IF_VELOCITY, HW_IF_ACCELERATION, and HW_IF_EFFORT.

Function Documentation

◆ parse_command_interface_descriptions() [1/2]

std::vector< InterfaceDescription > hardware_interface::parse_command_interface_descriptions ( const std::vector< ComponentInfo > &  component_info)
Parameters
[in]component_infoinformation about a component (gpio, joint, sensor)
Returns
vector filled with information about hardware's CommandInterfaces for the component which are exported

◆ parse_command_interface_descriptions() [2/2]

void hardware_interface::parse_command_interface_descriptions ( const std::vector< ComponentInfo > &  component_info,
std::unordered_map< std::string, InterfaceDescription > &  command_interfaces_map 
)
Parameters
[in]component_infoinformation about a component (gpio, joint, sensor)
[out]command_interfaces_mapunordered_map filled with information about hardware's CommandInterfaces for the component which are exported

◆ parse_control_resources_from_urdf()

std::vector< HardwareInfo > hardware_interface::parse_control_resources_from_urdf ( const std::string &  urdf)

Search XML snippet from URDF for information about a control component.

Parameters
[in]urdfstring with robot's URDF
Returns
vector filled with information about robot's control resources
Exceptions
std::runtime_errorif a robot attribute or tag is not found

◆ parse_state_interface_descriptions() [1/2]

std::vector< InterfaceDescription > hardware_interface::parse_state_interface_descriptions ( const std::vector< ComponentInfo > &  component_info)
Parameters
[in]component_infoinformation about a component (gpio, joint, sensor)
Returns
vector filled with information about hardware's StateInterfaces for the component which are exported

◆ parse_state_interface_descriptions() [2/2]

void hardware_interface::parse_state_interface_descriptions ( const std::vector< ComponentInfo > &  component_info,
std::unordered_map< std::string, InterfaceDescription > &  state_interfaces_map 
)
Parameters
[in]component_infoinformation about a component (gpio, joint, sensor)
[out]state_interfaces_mapunordered_map filled with information about hardware's StateInterfaces for the component which are exported

◆ stod()

double hardware_interface::stod ( const std::string &  s)

Helper function to convert a std::string to double in a locale-independent way.

Exceptions
std::invalid_argumentif not a valid number from https://github.com/ros-planning/srdfdom/blob/ad17b8d25812f752c397a6011cec64aeff090c46/src/model.cpp#L53

Variable Documentation

◆ HW_IF_PROPORTIONAL_GAIN

constexpr char hardware_interface::HW_IF_PROPORTIONAL_GAIN[] = "proportional"
constexpr

Gains interface constants Constant defining proportional gain interface name

◆ trigger_and_print_hardware_state_transition

auto hardware_interface::trigger_and_print_hardware_state_transition
Initial value:
=
[](
auto transition, const std::string transition_name, const std::string & hardware_name,
const lifecycle_msgs::msg::State::_id_type & target_state)
{
RCUTILS_LOG_INFO_NAMED(
"resource_manager", "'%s' hardware '%s' ", transition_name.c_str(), hardware_name.c_str());
const rclcpp_lifecycle::State new_state = transition();
bool result = new_state.id() == target_state;
if (result)
{
RCUTILS_LOG_INFO_NAMED(
"resource_manager", "Successful '%s' of hardware '%s'", transition_name.c_str(),
hardware_name.c_str());
}
else
{
RCUTILS_LOG_ERROR_NAMED(
"resource_manager", "Failed to '%s' hardware '%s'", transition_name.c_str(),
hardware_name.c_str());
}
return result;
}