adeeb10abbas/smarty_arm_interface

Dynamic Reconfigure for ros2

Opened this issue · 1 comments

Ideally something like the following should be there. I am still not clear if we absolutely need this. I am just documenting the code for easily integration for later down the road.

#include <rclcpp/rclcpp.hpp>
#include <iostream>

class DynamicPositionShiftNode : public rclcpp::Node
{
public:
    DynamicPositionShiftNode() : Node("dynamic_position_shift")
    {
        this->declare_parameter("x0_shift", 0.0);
        this->declare_parameter("y0_shift", 0.0);
        this->declare_parameter("z0_shift", 0.0);

        parameter_callback_handle_ = this->add_on_set_parameters_callback(
            std::bind(&DynamicPositionShiftNode::parametersCallback, this, std::placeholders::_1));
    }

private:
    rcl_interfaces::msg::SetParametersResult parametersCallback(const std::vector<rclcpp::Parameter> &parameters)
    {
        auto result = rcl_interfaces::msg::SetParametersResult();
        result.successful = true;

        for (const auto &parameter : parameters)
        {
            RCLCPP_INFO(this->get_logger(), "Updating parameter: %s", parameter.get_name().c_str());

            if (parameter.get_name() == "x0_shift" ||
                parameter.get_name() == "y0_shift" ||
                parameter.get_name() == "z0_shift")
            {
                // Here, we can add  custom logic to handle the parameter change. For example, updating internal variables or reconfiguring your system.
                RCLCPP_INFO(this->get_logger(), "New value: %f", parameter.as_double());
            }
        }

        return result;
    }

    rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr parameter_callback_handle_;
};

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    auto node = std::make_shared<DynamicPositionShiftNode>();
    RCLCPP_INFO(node->get_logger(), "Dynamic Position Shift Node Started.");
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

update: chunpeng says we don't need this.