Tutorial 1:Your First Simulation in Webots

文章目录

      • 1.Start Webots
      • 2.Create a New World
      • 3.Add an e-puck Robot
      • 4.Create a New Controller
      • 5.Extend the Controller to Speed Control
      • 6.Conclusion

第一篇教程的目的是让您熟悉用户界面和 Webot 的基本概念。您将创建第一个包含简单环境的模拟:一个有地板和墙壁的竞技场、几个盒子、一个电子冰球机器人和一个使机器人移动的控制器程序。
Tutorial 1:Your First Simulation in Webots_第1张图片

1.Start Webots

启动Webots软件

2.Create a New World

一个世界是一个文件,其中包含诸如物体的位置、它们的外观、它们如何相互作用、天空的颜色是什么、重力、摩擦力、物体质量等的定义等信息。它定义了模拟的初始状态。不同的对象称为节点,并在场景树中分层组织。因此,一个节点可能包含子节点。世界存储在扩展名为 .wbt 的文件中。文件格式源自 VRML97 语言,并且是人类可读的。世界文件必须直接存储在名为 worlds 的目录中。

Tutorial 1:Your First Simulation in Webots_第2张图片
选择next
Tutorial 1:Your First Simulation in Webots_第3张图片
最好为每个工程项目新建一个目录,然后选择目录next
Tutorial 1:Your First Simulation in Webots_第4张图片
这里可以更改世界的名字,然后next
Tutorial 1:Your First Simulation in Webots_第5张图片
Tutorial 1:Your First Simulation in Webots_第6张图片

接下来右键Add添加地板
Tutorial 1:Your First Simulation in Webots_第7张图片
Tutorial 1:Your First Simulation in Webots_第8张图片
Tutorial 1:Your First Simulation in Webots_第9张图片

Tutorial 1:Your First Simulation in Webots_第10张图片

3.Add an e-puck Robot

右键Add添加机器人

Tutorial 1:Your First Simulation in Webots_第11张图片
这个机器人自带一个避障的控制器
e-puck 是一个小型机器人,具有差动轮、10 个 LED 和多个传感器,包括 8 个距离传感器和一个摄像头。在本教程中,我们只对使用它的轮子感兴趣。我们将在接下来的教程中学习如何使用其他功能。
机器人应该移动、闪烁 LED 并避开障碍物。那是因为它有一个具有该行为的默认控制器。您可能已经注意到 3D 视图的左上角出现了一个黑色的小窗口。它显示了 e-puck 机器人的相机拍摄的图像。在机器人的控制器明确启用相机之前,此图像将保持黑色。这个小图像窗口可以通过拖动来移动。也可以通过拖动右下角来调整大小。最后,可以通过点击右上角的“x”来关闭它。您可以通过在“相机设备”子菜单中选择它,使其从“叠加”菜单再次可见。因为我们不需要它,所以您实际上可以将其关闭。
Tutorial 1:Your First Simulation in Webots_第12张图片
可以尝试通过这几个按钮进行单步仿真、暂停/开始、启动仿真、快速仿真(无画面)
Tutorial 1:Your First Simulation in Webots_第13张图片
可以看到这个机器人已经初步具备避障的功能。这里我们使用的是他自带的控制器,代码在安装目录下。接下来我们可以新建一个控制器。
Tutorial 1:Your First Simulation in Webots_第14张图片

4.Create a New Controller

我们现在将编写一个简单的控制器,使机器人向前移动。
控制器是定义机器人行为的程序。 Webots控制器可以用以下编程语言编写:C、C++、Java、Python、MATLAB、ROS等。C、C++和Java控制器需要编译后才能作为机器人控制器运行。 Python 和 MATLAB 控制器是解释型语言,因此它们无需编译即可运行。在本教程中,我们将使用 C 作为参考语言,但所有代码片段也可用于 C++、Java、Python 和 MATLAB。

Robot 节点的 controller 字段指定当前与机器人相关联的控制器。请注意,同一个控制器可以被多个机器人使用,但一个机器人一次只能使用一个控制器。每个控制器都在通常由 Webot 生成的单独子进程中执行。因为它们是独立的进程,所以控制器不共享相同的地址空间,并且可以在不同的处理器内核上运行。

新建控制器,Wizards->New Robot Controller
Tutorial 1:Your First Simulation in Webots_第15张图片

Tutorial 1:Your First Simulation in Webots_第16张图片
点击next
Tutorial 1:Your First Simulation in Webots_第17张图片
选择控制器代码使用的语言,然后next
Tutorial 1:Your First Simulation in Webots_第18张图片
使用webots自带的编译器还是VS进行编译,这里选用Webots即可,点击next
Tutorial 1:Your First Simulation in Webots_第19张图片
定义控制器的名字,这里我改成了epuck_go_forward,点击next
Tutorial 1:Your First Simulation in Webots_第20张图片
点击finish
Tutorial 1:Your First Simulation in Webots_第21张图片
选择刚才新建的controller epuck_go_forward
右侧代码区放入如下代码,保存。
Tutorial 1:Your First Simulation in Webots_第22张图片

#include 

// Added a new include file
#include 

#define TIME_STEP 64

int main(int argc, char **argv) {
    wb_robot_init();

    // get the motor devices
    WbDeviceTag left_motor = wb_robot_get_device("left wheel motor");
    WbDeviceTag right_motor = wb_robot_get_device("right wheel motor");
    // set the target position of the motors
    wb_motor_set_position(left_motor, 10.0);
    wb_motor_set_position(right_motor, 10.0);

    while (wb_robot_step(TIME_STEP) != -1);

    wb_robot_cleanup();

    return 0;
}

接下来编译控制器的C文件
Tutorial 1:Your First Simulation in Webots_第23张图片
若提问是否保存,点击save,替换初始的wbt文件。
如果一切正常,您的机器人应该会向前移动。机器人将以其最大速度移动一段时间,然后在轮子旋转 10 弧度后停止。
在项目的控制器目录中,已创建包含 epuck_go_forward控制器的目录。 epuck_go_forward目录包含一个在控制器编译后生成的 e-puck_go_forward二进制文件(在 Windows 上,此文件具有 .exe 扩展名)。控制器目录名称应与二进制名称匹配。
Tutorial 1:Your First Simulation in Webots_第24张图片
可以看到机器人往前直走,往墙上撞。在控制器目录有我们的C代码和编译出的exe可执行文件。
Tutorial 1:Your First Simulation in Webots_第25张图片

5.Extend the Controller to Speed Control

机器人的轮子通常是以速度控制的,而不是像我们在前面的例子中那样以位置控制。为了控制车轮马达的速度,你需要将目标位置设置为无限大,并设置所需的速度。
机器人现在将移动(轮子将以每秒 1 弧度的速度旋转)并且永不停止。如果没有任何反应,请不要忘记通过选择 Build / Build 菜单项或单击代码区域上方的齿轮图标来编译您的代码。编译错误在控制台中以红色显示。如果有,修复它们并重试编译。然后,重新加载世界。

我们和第四步类似新建一个控制器epuck_speed_forward
这里参考第四步
Tutorial 1:Your First Simulation in Webots_第26张图片
更改为如下代码

#include 

// Added a new include file
#include 

#define TIME_STEP 64

#define MAX_SPEED 6.28

int main(int argc, char **argv) {
  wb_robot_init();

  // get a handler to the motors and set target position to infinity (speed control)
  WbDeviceTag left_motor = wb_robot_get_device("left wheel motor");
  WbDeviceTag right_motor = wb_robot_get_device("right wheel motor");
  wb_motor_set_position(left_motor, INFINITY);
  wb_motor_set_position(right_motor, INFINITY);

  // set up the motor speeds at 10% of the MAX_SPEED.
  wb_motor_set_velocity(left_motor, 0.1 * MAX_SPEED);
  wb_motor_set_velocity(right_motor, 0.1 * MAX_SPEED);

  while (wb_robot_step(TIME_STEP) != -1) {
  }

  wb_robot_cleanup();

  return 0;
}

Tutorial 1:Your First Simulation in Webots_第27张图片
编译然后reload,通过修改下图位置的代码可以调节速度
Tutorial 1:Your First Simulation in Webots_第28张图片

6.Conclusion

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

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

你可能感兴趣的:(Webots使用教程,机器人,人工智能,webots,强化学习)