首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制Webots模拟步骤

控制Webots模拟步骤
EN

Stack Overflow用户
提问于 2019-07-09 21:12:39
回答 2查看 965关注 0票数 2

是否可以编程计算Webots模拟步骤,即每次一个模块完成其规划时,Webots应根据模块的输出计算下一个模拟步骤。

我已经检查了Supervisor模式,但除了设置模拟模式外,它似乎对模拟运行没有一些控制。

编辑1:

如何在另一个ROS节点规划完成后,从脚本中执行一个模拟步骤( Webots环境下的ctrl+1)?

EN

回答 2

Stack Overflow用户

发布于 2019-07-09 23:01:11

在Supervisor控制器中,您还可以访问所有Robot API。因此,可以使用wb_robot_get_basic_time_step()函数获得全局离散时间步长常数(由the WorldInfo.basicTimeStep field定义),并使用wb_robot_get_time()函数获得以秒为单位的模拟时间。

模拟基本时间步长是不能在模拟期间修改的常量。当控制器(包括supervisors)调用wb_robot_step(int duration)函数时,模拟将继续进行,并且在此“持续时间”之后,手将返回给控制器。在此期间,可以应用一个(或多个,如果"duration“严格地大于"WorldInfo.basicTimeStep")模拟步骤。

票数 4
EN

Stack Overflow用户

发布于 2019-07-17 15:23:05

在你的版本之后,这里有一个更具体的答案。我之前的回答仍然是正确的,但更一般。

当控制器同步时( Robot.synchronization字段的默认情况),Webots将等待控制器调用wb_robot_step(int duration)函数来执行模拟步骤。

因此,如果您想从控制器执行单个步骤(如按Ctrl + 1时),您只需调用wb_robot_step(int duration)函数一次。

为了说明这一点,下面的控制器每3秒执行一次模拟步骤:

代码语言:javascript
复制
"""Perform one simulation step after some event."""

from controller import Robot
import time

robot = Robot()
timestep = int(robot.getBasicTimeStep())

while True:
    time.sleep(3)  # Wait 3 real seconds to simulate a blocking event.

    print 'Perform a simulation step.'
    robot.step(timestep)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56953420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档