Webots教程(根据官网改编)

  • Start Webots
  • Create a New World
  • Add an e-puck Robot
  • Create a New Controller
    • 将控制器扩展到速度控制
  • 结论

Start Webots

请按照以下安装说明下载并安装Webots 。

动手操作1:通过双击Webots图标(或在终端的命令行中调用它)来启动Webots。如果您是第一次在此计算机上运行Webots,则系统可能会提示您选择图形主题。您也可能会被邀请跟随Webots导览游,继续进行并结束导览游。

Create a New World

一个世界是包含像对象是一个信息的文件,他们的样子,它们如何相互影响,天空是什么,如何定义重力,摩擦力,物体的质量,等它定义的颜色模拟的初始状态。不同的对象称为“ 节点(Node)”,并在“ 场景树”中进行分层组织。因此,一个节点可能包含子节点。世界存储在具有.wbt扩展名的文件中。文件格式源自VRML97语言,并且易于阅读。世界文件必须直接存储在名为的目录中worlds。

动手练习2:通过单击3D视图的Pause按钮来暂停当前模拟(请参阅用户界面说明以找到按钮)。如果主工具栏上的虚拟计时器已停止,则模拟将暂停。Wizards通过选择New Project Directory…菜单项从菜单创建一个新项目,然后按照说明进行操作:
1、命名项目目录,my_first_simulation而不是建议的目录my_project。
2、命名世界文件my_first_simulation.wbt而不是建议的文件empty.wbt。
3、单击所有复选框,包括默认情况下未选中的“添加矩形区域”。

WorldInfo:包含模拟的全局参数。
Viewpoint:定义主要视点相机参数。
TexturedBackground:定义场景的背景(如果稍微旋转视点,您应该看到远处的山脉)
TexturedBackroundLight:定义与上述背景关联的光。
RectangleArena:定义到目前为止在该场景中看到的唯一对象。

每个节点都有一些称为Fields的可自定义属性。我们可以修改这些字段以更改矩形区域:

动手操作3:双击RectangleArena场景树中的节点。这应该打开节点并显示其字段。
1、选择该floorTileSize字段并将其值设置0.25 0.25为0.5 0.5。应该立即在3D视图中看到效果。
2、选择该wallHeight字段并将其值更改0.05为0.1。竞技场的墙现在应该更低。

在场景树视图中,如果字段与默认值不同,则它们将以不同的颜色显示(取决于主题)。现在,我们要添加一些对象:

动手操作4:双击RectangleArena场景树中的将其关闭并选择它。单击场景树顶部的Add按钮。在打开的对话框中,选择PROTO nodes (Webots Projects) / objects / factory / containers / WoodenBox (Solid)。一个大盒子应该出现在舞台中央。在场景树中双击它以打开其字段。
1、将其更改size为0.1 0.1 0.1而不是0.6 0.6 0.6。
2、将其更改translation为0 0.05 0而不是0 0.3 0。或者,您可以使用3D视图中显示的绿色箭头来调整其translation.y字段。
3、现在,在3D视图中按住Shift键并单击并拖动该框,然后将其移动到竞技场的某个角落。
4、选择该框,然后按ctrl- C,ctrl- V(Windows,Linux)或⌘ command- C,⌘ command- V(macOS)进行复制和粘贴。按住Shift并单击并拖动新框,将其移到其他位置。以这种方式创建第三个框。
5、移动这些框,以使任何框都不会位于竞技场的中心。您也可以使用绿色的旋转箭头沿垂直轴旋转框。也可以通过按住Shift并用鼠标右键拖动来完成。或者,您可以更改场景树中节点的rotation视场角度WoodenBox。
6、对结果满意后,请使用保存按钮保存世界。

添加节点(若加号为灰色,先点击3D窗口或者把所有的Node全部折叠,不要展开)
自学习Webots教程,未完待续…-编程知识网
场景树视图
自学习Webots教程,未完待续…-编程知识网

Add an e-puck Robot

e-puck是一款小型机器人,带有差速轮,10个LED和几个传感器,其中包括8个DistanceSensors和一个Camera。在本教程中,我们仅对使用其轮子感兴趣。在接下来的教程中,我们将学习如何使用其他功能。
现在,我们将向世界添加一个电子冰球模型。确保模拟已暂停并且虚拟时间为0。如果不是这种情况,请使用Reset按钮(rewind)重置模拟。
当修改Webots世界以进行保存时,首先要暂停模拟并将其重新加载到其初始状态,即从根本上讲,即主工具栏上的虚拟时间计数器应显示0:00:00:000。否则,每次保存时,每个3D对象的位置都会累积错误。因此,对世界的任何修改都应按以下顺序执行:暂停,重置,修改和保存仿真。
我们不需要从头开始创建e-puck机器人,只需要导入一个E-puck节点即可。这个节点实际上是一个PROTO节点,就像我们之前介绍的RectangleArena或WoodenBox一样。原型制作允许您创建自定义对象并重用它们。

动手操作5:选择WoodenBox场景树视图的最后一个节点。单击场景树视图顶部的Add按钮。在对话框中,选择PROTO nodes (Webots Projects) / robots / gctronic / e-puck / E-puck (Robot)。电子冰球机器人应该出现在舞台中央。移动和旋转此机器人,就像处理盒子一样。保存模拟并按下Run real-time按钮。

机器人应移动,LED闪烁并避免障碍物。这是因为它具有具有该行为的默认控制器。您可能已经注意到3D视图的左上角出现了一个黑色的小窗口。它显示了电子冰球机器人的相机拍摄的图像。该图像将保持黑色,直到由机器人的控制器明确启用相机为止。可以通过拖动来移动此小图像窗口。也可以通过拖动右下角来调整其大小。最后,可以通过单击右上角的“ x”将其关闭。您可以通过在“叠加设备”菜单中的“相机设备”子菜单中将其选中,使其再次可见。因为我们不需要它,所以您实际上可以将其关闭。
现在,当模拟运行时,让我们玩一下物理学:

动手操作6:按下+左键+拖动(使用某些Mac键盘上的键)向机器人施加力。在Linux上,除了+左键单击+拖动外,您还应该按键。无法对节点施加力,因为默认情况下,它们没有质量并且被视为粘在地板上。要在节点上启用物理,应将其场设置为某个值(例如0.2 kg)。完成此操作后,也应该能够对它们施加力。alt ⌥ optionctrlalt WoodenBoxWoodenBoxmass

可以暂停仿真,也可以实时或以快速模式逐步运行。
现在,我们将修改世界并减少物理模拟的步骤:这将提高模拟的准确性和稳定性(但会降低最大模拟速度)。

动手练习7:暂停仿真并还原它。在“场景树”视图中,展开WorldInfo节点(第一个节点)。将其basicTimeStep字段设置为16。然后保存模拟。

Create a New Controller

现在,我们将编程一个简单的控制器,该控制器将使机器人向前移动。
控制器是一个程序,限定了机器人的行为。Webots控制器可以用以下编程语言编写:C,C ++,Java,Python,MATLAB,ROS等。C,C ++和Java控制器必须先进行编译,然后才能作为机器人控制器运行。Python和MATLAB控制器是解释性语言,因此它们无需编译即可运行。在本教程中,我们将使用Python作为参考语言,但是所有代码段也都可以在C ++,Java,C和MATLAB中获得(其他详见官网)。
节点的controller字段Robot指定当前与机器人关联的控制器。请注意,同一台控制器可以由多个机器人使用,但一个机器人一次只能使用一个控制器。 每个控制器在通常由Webots产生的单独的子进程中执行。因为它们是独立的进程,所以控制器不共享相同的地址空间,并且可以在不同的处理器内核上运行。

本人采用IDE进行代码编辑和生成:

动手操作8:使用菜单创建一个新的C++(或其他语言)控制器epuck_go_forward(对于C ++和Java则称为EPuckGoForward)Wizards / New Robot Controller…。这将在中创建一个新epuck_go_forward(或EPuckGoForward)目录my_first_simulation/controllers。选择Visual Studio打开源文件。

过程如下:
自学习Webots教程,未完待续…-编程知识网

自学习Webots教程,未完待续…-编程知识网

自学习Webots教程,未完待续…-编程知识网

自学习Webots教程,未完待续…-编程知识网
自学习Webots教程,未完待续…-编程知识网
Visual Studio开发Webots控制器操作说明:使用Visual Studio开发Webots控制器

C++代码如下:

#include <webots/Robot.hpp>// Added a new include file
#include <webots/Motor.hpp>#define TIME_STEP 64// All the webots classes are defined in the "webots" namespace
using namespace webots;int main(int argc, char **argv) {Robot *robot = new Robot();// get the motor devicesMotor *leftMotor = robot->getMotor("left wheel motor");Motor *rightMotor = robot->getMotor("right wheel motor");// set the target position of the motorsleftMotor->setPosition(10.0);rightMotor->setPosition(10.0);while (robot->step(TIME_STEP) != -1);delete robot;return 0;
}

如果一切正常,机器人应向前移动。机器人将以其最大速度移动一会儿,然后在轮子旋转10弧度后停止。

将控制器扩展到速度控制

机器人的轮子通常是通过速度控制的,而不是像前面的示例那样通过位置控制的。为了控制车轮的电动机的速度,您需要将目标位置设置为无穷大并设置所需的速度:

#include <webots/Robot.hpp>// Added a new include file
#include <webots/Motor.hpp>#define TIME_STEP 64#define MAX_SPEED 6.28// All the webots classes are defined in the "webots" namespace
using namespace webots;int main(int argc, char **argv) {Robot *robot = new Robot();// get a handler to the motors and set target position to infinity (speed control)Motor *leftMotor = robot->getMotor("left wheel motor");Motor *rightMotor = robot->getMotor("right wheel motor");leftMotor->setPosition(INFINITY);rightMotor->setPosition(INFINITY);// set up the motor speeds at 10% of the MAX_SPEED.leftMotor->setVelocity(0.1 * MAX_SPEED);rightMotor->setVelocity(0.1 * MAX_SPEED);while (robot->step(TIME_STEP) != -1);delete robot;return 0;
}

现在,机器人将移动(轮子将以每秒0.1最大速度rad/s的速度旋转)并且永不停止。

结论

我们希望您喜欢创建第一个Webots模拟。您已经能够建立一个世界,添加一个机器人并对其进行编程。重要的是,您了解了以下概述的基本概念:

  • 世界由以树形结构组织的节点组成。
  • 世界保存在.wbtWebots项目中存储的文件中。
  • 该项目还包含定义机器人行为的机器人控制器程序。
  • 控制器可以用C或其他语言编写。
  • 必须先显式编译C,C ++和Java控制器,然后才能执行它们。
  • 控制器通过节点的controller字段与机器人相关联Robot。