当前位置: 首页 > 工具软件 > Webots > 使用案例 >

Webots-Supervisor

鄢开诚
2023-12-01

supervisor是不是一个节点,它是一套函数,适用于supervisor字段设置为TRUE的机器人节点。该supervisor API可用于访问所不具备额外功能的正规机器人。

Supervisor API 函数

作为用于常规机器人控制器,所述wb_robot_initwb_robot_step等等的功能必须在使用Supervisor控制器。

#include <webots/Supervisor.hpp>

namespace webots {
  class Supervisor : public Robot {
    Node *getRoot();
    Node *getSelf();
    Node *getFromDef(const std::string &name);
    Node *getFromId(int id);
    Node *getSelected();
    // ...
  }
}

掌握World上的节点

WbNodeRef node = wb_supervisor_node_get_from_def("ROBOT.JOINT.SOLID");

从它的DEF名称返回到World上某个节点的句柄。该返回值可用于后续对需要WbNodeRef参数的函数的调用。如果请求的节点在当前世界文件中不存在或不是PROTO的内部节点,则该函数返回NULL
可以在DEF参数中使用点( . )作为作用域运算符。在节点层次结构中查找特定的节点路径时,可以使用点。

这意味着我们在名为“ ROINT”的节点内的名为“ JOINT”的节点内搜索名为“ SOLID”的节点。

 #include <webots/Supervisor.hpp>

namespace webots {
  class Supervisor : public Robot {
    Node *getSelf();
    // ...
  }
}

该函数将句柄返回到运行控制器的Robot节点本身。这是一个实用程序功能,它简化了检索基础节点的任务,而不必为其定义DEF名称。

从节点获取字段引用

#include <webots/Node.hpp>

namespace webots {
  class Node {
    Field *getField(const std::string &fieldName) const;
    // ...
  }
}

该wb_supervisor_node_get_field函数检索节点字段的处理程序。该字段由其名称in field_name和node它所属的字段指定。它可以是单个字段(SF)或多个字段(MF)。如果对于指定的节点不存在这样的字段名称,或者该字段是PROTO的内部字段,则返回值为NULL。否则,它将处理程序返回到字段。
注意:wb_supervisor_node_get_field如果与字段名称相对应的字段是隐藏字段,则该函数将返回有效的字段处理程序。

获取字段的值

#include <webots/Field.hpp>

namespace webots {
  class Field {
    const double *getSFVec3f() const;
    // ...
  }
}

这些getSFVec3f()* 函数检索指定单field(SF)的值。字段的类型必须与使用的函数的名称匹配,否则返回值是不确定的(并显示警告消息)。如果field参数为NULL,类型错误或index无效,则返回默认值。对于布尔值,默认值定义为0和,0.0对于整数和双false精度值,对于矢量和指针,默认值为NULL;对于字符串,则为空字符串" "。

 类似资料: