Dynamic Reconfigure for ros2
Opened this issue · 1 comments
adeeb10abbas commented
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> ¶meters)
{
auto result = rcl_interfaces::msg::SetParametersResult();
result.successful = true;
for (const auto ¶meter : 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;
}
adeeb10abbas commented
update: chunpeng says we don't need this.