ROS2 参数监控功能是否可以监控自定义结构体参数?
-
ROS2的参数监控在官方教程中仅仅是监控了一两个int型和double型的参数。根据实际应用需求,我需要监控的参数接近100个,数量庞大的参数监控如果使用教程中的方式,每个参数定义一个回调函数,感觉不是很妥当。是否有更好的方式?是否可以自定义结构体参数,并对其进行监控,如果这样可行,那在回调函数中,获取这个结构体参数中各成员的值是否可以通过如下方法进行:
auto cb = [this](const rclcpp::Parameter &p) {
RCLCPP_INFO(this->get_logger(),
"cb: received an update to parameter '%s' of type: %s: %.2f",
p.component_a.get_name().c_str(),
p.component_a.get_type_name().c_str(),
p.component_a.as_double());
}
假设结构体参数为:
typedef struct
{
component_a;
component_b;
}
或者是否有更加合理的方式来实现这个功能?谢谢。 -
@凌云 根据我所知的,是不能的。不过是参数是支持string的,而string类型和结构体其实可以互转的。
typedef struct A { int a; int b; }test_a_t; test_a_t a1; string str_a1(reinterpret_cast<char*>(a1),sizeof(test_a_t)); test_a_t a2 = reinterpret_cast<test_a_t>(str_a1.data());
上述代码随手写的,静态转换上可能存在些问题,但一定是可以互转的。
-
@小鱼 您的意思,把结构体参数转换成string型变量,然后监控这个变量吗。
是否可以转换成字节数组型变量,这样是否更方便一点?就像结构体通信时编解码那样。 -
@凌云 字节数组理论也是可以的,只要能容纳数据就可。
-
@小鱼 好的,谢谢解惑。我有空试试。