我一直在为Webots机器人模拟试验不同的适应度函数(简而言之:我正在使用遗传算法来发展有趣的行为)。

我现在的想法是根据它的运动速度。该运动是通过设置新的关节位置来执行的,当前它会导致抖动的随机运动。我一直在查看Webots中可用的节点,但是除了GPS节点(Aibo中不可用)之外,我找不到任何相关的节点。

我要实现的是测量距离从每次移动后的先前位置到当前位置。我该怎么办?

#1 楼

几年前,我曾使用主管了解Webots 4中模拟的Khepera机器人的位置。
C代码的主要组件如下:

声明:

  #define STEP 64

  NodeRef robot_node;
  float robot_data[4]={0,0,0,0};


获取名为Khepera的节点:

  robot_node=(NodeRef)supervisor_node_get_from_def("KHEPERA");


每隔STEP毫秒从节点获取数据:

supervisor_field_get(robot_node,SUPERVISOR_FIELD_TRANSLATION|SUPERVISOR_FIELD_ROTATION_ANGLE,&robot_data,STEP);


以上所有内容均在主管的主要周期之前被调用。主循环包含一个robot_step(STEP);调用,以使系统定期填充机器人数据结构的元素(x,y,z,头部坐标)。

同样,Webots 4也许有更好的方法在Webots 7中完成任务,但这可能是一个起点。

评论


$ \ begingroup $
我认为自版本4起,情况并没有太大改变。我使用Java编程,因此方法名称有所不同,但是通过管理程序检索翻译看起来非常相似。谢谢!
$ \ endgroup $
–Anna Pawlicka
13年2月11日在8:42

#2 楼

我去了源代码网上商店(Cyber​​botics),并得到了这两种解决方案:


Aibo没有GPS。而且添加它并不是直接的,因为它的节点层次结构隐藏在原型机制的后面。 Aibo的定义(如果是开源的话):
$ WEBOTS / resources / projects / robots / aibo / protos / Aibo_ERS7.proto
GPS可以添加到项目中(进入protos路径)并进行修改
添加GPS就像在Robot节点的直接子节点内添加GPS节点一样简单。
管理者允许查询场景树。这包括获取Aibo的位置。
此解决方案更加清晰。以下示例显示了主管从场景树中检索信息的方法:
$ WEBOTS / projects / samples / devices / worlds / supervisor.wbt