该supervisor是不是一个节点,它是一套函数,适用于supervisor字段设置为TRUE的机器人节点。该supervisor API可用于访问所不具备额外功能的正规机器人。
作为用于常规机器人控制器,所述wb_robot_init,wb_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();
// ...
}
}
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;对于字符串,则为空字符串" "。