Add on_export_state_interfaces() to dynamics_linearizing_controller.cpp. chainable
authorWalter Fetter Lages <w.fetter@ieee.org>
Sun, 15 Jun 2025 21:15:53 +0000 (18:15 -0300)
committerWalter Fetter Lages <w.fetter@ieee.org>
Sun, 15 Jun 2025 21:15:53 +0000 (18:15 -0300)
include/linearizing_controllers/dynamics_linearizing_controller.hpp
src/dynamics_linearizing_controller.cpp

index 3b2320f..e98503a 100644 (file)
@@ -66,6 +66,9 @@ namespace effort_controllers
 
                LINEARIZING_CONTROLLERS_PUBLIC
                std::vector<hardware_interface::CommandInterface> on_export_reference_interfaces(void) override;
+       
+               LINEARIZING_CONTROLLERS_PUBLIC  
+               std::vector<hardware_interface::StateInterface> on_export_state_interfaces() override;
 
                LINEARIZING_CONTROLLERS_PUBLIC
                bool on_set_chained_mode(bool chained_mode) override;
index 8d2f645..748bf34 100644 (file)
@@ -212,6 +212,25 @@ namespace effort_controllers
                return interfaces;
        }
 
+       std::vector<hardware_interface::StateInterface> DynamicsLinearizingController::on_export_state_interfaces(void)
+       {
+               std::vector<hardware_interface::StateInterface> interfaces;
+
+               std::vector<std::string> names;
+               names.push_back("linear/velocity");
+               names.push_back("angular/velocity");
+
+               state_interfaces_values_.resize(names.size());
+
+               for(size_t i=0; i < names.size();i++)
+               {
+                       // reference_interfaces_ is declared in the base class
+                       interfaces.push_back(hardware_interface::StateInterface(std::string(get_node()->get_name()),names[i],&state_interfaces_values_[i]));
+               }
+
+               return interfaces;
+       }
+
        bool DynamicsLinearizingController::on_set_chained_mode(bool /*chained_mode*/)
        {
                return true;
@@ -278,6 +297,11 @@ namespace effort_controllers
 
                Eigen::Vector2d u;
                odom_.getVelocity(u);
+               
+               for(unsigned int i=0;i < u.size() && i < state_interfaces_values_.size();i++)
+               {
+                       state_interfaces_values_[i]=u[i];       
+               }
 
                if(!std::isnan(reference_interfaces_[0]) && !std::isnan(reference_interfaces_[1]))
                {