RedHawk 属性 query/Config 从组件 A 到组件 B

RedHawk Property query/Config from Component A to Component B

我是 RedHawk 的新手,遇到以下情况:

我有三个组件A B 和C,B 和C 都有一个属性 技能,这是描述B 或C 能力的关键字。流程是:A 启动并查询 B.skill 和 C.skill 因此 A 知道 B 和 C 可以做什么。然后,当 A 遇到适合 B 或​​ C 技能组合的任务时,A 将启动该特定组件来完成任务。

我的问题是:组件A如何访问B的属性?我在网上查了一下,找到了一些简单的 redhawk 查询介绍(https://redhawksdr.github.io/Documentation/mainch4.html section 4.6.2),但我希望有人能给我一个演示 A 如何访问 B 的 属性 的代码片段。另外,我找不到查询 api 的任何详细文档。如果有人可以指导我,那就太好了。

谢谢。

这个示例可能会更清晰一些,但在我的示例片段中,CompA 有两个输出端口,它们都是资源类型,名称为 compB_connection 和 compC_connection。然后我们可以连接到 compB 和 compC 的资源端口(也称为棒棒糖端口),这是到组件本身的直接连接,因为它继承自资源 API。这使我们可以访问组件上的方法,如启动、停止、配置、查询等。有关完整列表,请参阅 idl 文件。

CompB 和 CompC 都有一个 属性,id 为 "skill"。我们可以使用查询 API 来查询这些属性的值。

std::string CompA_i::any_to_string(CORBA::Any value) {
    std::ostringstream result;
    const char* tmp;
    value >>= tmp;
    result << tmp;
    return result.str();
}

int CompA_i::serviceFunction() {
    CF::Properties compB_props, compC_props;

    compB_props.length(1);
    compC_props.length(1);

    compB_props[0].id = "skill";
    compC_props[0].id = "skill";

    compB_connection->query(compB_props);
    compC_connection->query(compC_props);

    std::cout << "CompB Skills: " << any_to_string(compB_props[0].value) << std::endl;
    std::cout << "CompC Skills: " << any_to_string(compC_props[0].value) << std::endl;

    return FINISH;
}

现在,当我们将 CompA 连接到 CompB 和 CompC 并启动波形或沙箱时,我们会得到以下输出:

CompB Skills: nunchuck skills
CompC Skills: bow hunting skills

核心框架代码prop_helpers.cpp中找到any_to_string方法;某个地方的头文件中可能有一个辅助函数,这将是一个更好的修复。