ros2_control - humble
Loading...
Searching...
No Matches
Public Member Functions | List of all members
inverted_pendulum_controller::InvertedPendulumController Class Reference

Hybrid energy-shaping swing-up and LQR balance controller for a Furuta rotary inverted pendulum. More...

#include <inverted_pendulum_controller.hpp>

Inheritance diagram for inverted_pendulum_controller::InvertedPendulumController:
Inheritance graph
[legend]
Collaboration diagram for inverted_pendulum_controller::InvertedPendulumController:
Collaboration graph
[legend]

Public Member Functions

controller_interface::CallbackReturn on_init () override
 Extending interface with initialization method which is individual for each controller.
 
controller_interface::InterfaceConfiguration command_interface_configuration () const override
 Get configuration for controller's required command interfaces.
 
controller_interface::InterfaceConfiguration state_interface_configuration () const override
 Get configuration for controller's required state interfaces.
 
controller_interface::CallbackReturn on_configure (const rclcpp_lifecycle::State &previous_state) override
 
controller_interface::CallbackReturn on_activate (const rclcpp_lifecycle::State &previous_state) override
 
controller_interface::CallbackReturn on_deactivate (const rclcpp_lifecycle::State &previous_state) override
 
controller_interface::return_type update (const rclcpp::Time &time, const rclcpp::Duration &period) override
 
bool is_balancing () const
 Returns true if currently in LQR balancing regime.
 
- Public Member Functions inherited from controller_interface::ControllerInterface
CONTROLLER_INTERFACE_PUBLIC bool is_chainable () const final
 
CONTROLLER_INTERFACE_PUBLIC std::vector< hardware_interface::CommandInterface > export_reference_interfaces () final
 
CONTROLLER_INTERFACE_PUBLIC bool set_chained_mode (bool chained_mode) final
 
CONTROLLER_INTERFACE_PUBLIC bool is_in_chained_mode () const final
 
- Public Member Functions inherited from controller_interface::ControllerInterfaceBase
CONTROLLER_INTERFACE_PUBLIC void assign_interfaces (std::vector< hardware_interface::LoanedCommandInterface > &&command_interfaces, std::vector< hardware_interface::LoanedStateInterface > &&state_interfaces)
 
CONTROLLER_INTERFACE_PUBLIC void release_interfaces ()
 
virtual CONTROLLER_INTERFACE_PUBLIC return_type init (const std::string &controller_name, const std::string &namespace_="", const rclcpp::NodeOptions &node_options=rclcpp::NodeOptions() .allow_undeclared_parameters(true) .automatically_declare_parameters_from_overrides(true))
 
CONTROLLER_INTERFACE_PUBLIC const rclcpp_lifecycle::State & configure ()
 Custom configure method to read additional parameters for controller-nodes.
 
CONTROLLER_INTERFACE_PUBLIC std::shared_ptr< rclcpp_lifecycle::LifecycleNode > get_node ()
 
CONTROLLER_INTERFACE_PUBLIC std::shared_ptr< rclcpp_lifecycle::LifecycleNode > get_node () const
 
CONTROLLER_INTERFACE_PUBLIC const rclcpp_lifecycle::State & get_state () const
 
CONTROLLER_INTERFACE_PUBLIC unsigned int get_update_rate () const
 
template<typename ParameterT >
auto auto_declare (const std::string &name, const ParameterT &default_value)
 Declare and initialize a parameter with a type.
 

Additional Inherited Members

- Protected Attributes inherited from controller_interface::ControllerInterfaceBase
std::vector< hardware_interface::LoanedCommandInterface > command_interfaces_
 
std::vector< hardware_interface::LoanedStateInterface > state_interfaces_
 
unsigned int update_rate_ = 0
 

Detailed Description

Hybrid energy-shaping swing-up and LQR balance controller for a Furuta rotary inverted pendulum.

This controller orchestrates two operating regimes:

  1. Non-linear Energy Shaping (Swing-up): Bang-bang energy pump driving the pendulum mechanical energy toward upright potential energy, combined with bounded arm-centering PD.
  2. Full-State LQR (Balancing): Regulates the arm position, arm velocity, pendulum angle, and pendulum velocity around the unstable upright equilibrium (q2 = 0).

Transitions between swing-up and balance are protected by candidate angular windows, actuator command feasibility gating, soft-start ramp blending, and fall hysteresis.

Member Function Documentation

◆ command_interface_configuration()

controller_interface::InterfaceConfiguration inverted_pendulum_controller::InvertedPendulumController::command_interface_configuration ( ) const
overridevirtual

Get configuration for controller's required command interfaces.

Method used by the controller_manager to get the set of command interfaces used by the controller. Each controller can use individual method to determine interface names that in simples case have the following format: <joint>/<interface>. The method is called only in inactive or active state, i.e., on_configure has to be called first. The configuration is used to check if controller can be activated and to claim interfaces from hardware. The claimed interfaces are populated in the command_interfaces_ member.

Returns
configuration of command interfaces.

Implements controller_interface::ControllerInterfaceBase.

◆ on_init()

controller_interface::CallbackReturn inverted_pendulum_controller::InvertedPendulumController::on_init ( )
overridevirtual

Extending interface with initialization method which is individual for each controller.

Implements controller_interface::ControllerInterfaceBase.

◆ state_interface_configuration()

controller_interface::InterfaceConfiguration inverted_pendulum_controller::InvertedPendulumController::state_interface_configuration ( ) const
overridevirtual

Get configuration for controller's required state interfaces.

Method used by the controller_manager to get the set of state interface used by the controller. Each controller can use individual method to determine interface names that in simples case have the following format: <joint>/<interface>. The method is called only in inactive or active state, i.e., on_configure has to be called first. The configuration is used to check if controller can be activated and to claim interfaces from hardware. The claimed interfaces are populated in the state_interface_ member.

Returns
configuration of state interfaces.

Implements controller_interface::ControllerInterfaceBase.

◆ update()

controller_interface::return_type inverted_pendulum_controller::InvertedPendulumController::update ( const rclcpp::Time &  time,
const rclcpp::Duration &  period 
)
overridevirtual

Control step update. Command interfaces are updated based on on reference inputs and current states. The method called in the (real-time) control loop.

Parameters
[in]timeThe time at the start of this control loop iteration
[in]periodThe measured time taken by the last control loop iteration
Returns
return_type::OK if update is successfully, otherwise return_type::ERROR.

Implements controller_interface::ControllerInterfaceBase.


The documentation for this class was generated from the following files: