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全部折叠,不要展开)

场景树视图

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打开源文件。

过程如下:



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。

自学习Webots教程,未完待续...相关推荐

  1. 花了2万多买的Python教程全套,现在分享给大家……Python入门到精通(Python全栈开发教程)未完待续

    我的Python足迹 print("hello word!") #1.整数与浮点 print(123) print(123-321) print(0.1+0.2) #变量 长=10 ...

  2. Windows x64内核学习笔记(五)—— KPTI(未完待续)

    Windows x64内核学习笔记(五)-- KPTI(未完待续) KPTI 实验一:构造IDT后门并读取Cr3 参考资料 KPTI 描述:KPTI(Kernel page-table isolati ...

  3. 学习前端的实用网站——未完待续

    学习前端的实用网站--未完待续 一.学习类网站 1.视频教程 2.技术分享 3.大牛博客 4.参考手册 二.功能类网站 1.颜色 2.图标 3.字体 4.素材 三.辅助类网站 一.学习类网站 1.视频 ...

  4. 软件开发者的常用工具(含Visual Studio必备插件)【未完待续】

    目录 编程工具 Visual_Assist(小番茄) Resharper ImageWatch GDB_ImageWatch qt-vsaddin-msvc2013-2.3.2 AnkhSvn-2.5 ...

  5. 《今日简史》读书笔记(未完待续)

    <今日简史>读书笔记(未完待续) 这本书是尤瓦尔·赫拉利的简史三部曲的最后一本,前2本书是<未来简史>和<人类简史>.根据豆瓣上网友的评价,这本书是尤瓦尔·赫拉利写 ...

  6. linux引数列项目过长,Linux 命令个人总结====== 未完待续 个人认为比较重要

    Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789]命令.文件. [选项参数]: 数字"1"表示用户命令 ...

  7. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

  8. [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)

    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...

  9. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)

    Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...

  10. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

最新文章

  1. Android开发精要3--Android中的Intent机制
  2. TCP/IP详解--第二章
  3. SAP歷史更改記錄函數
  4. 宜搭功能更新:子表全面升级,高级流程可以批量审批
  5. 编译Linux内核的详细过程
  6. sigaction函数使用实例
  7. 【渝粤题库】陕西师范大学210023 学前儿童社会教育 作业(专升本)
  8. MATLAB使用imshow之后plot的坐标原点在左上角!
  9. 内联元素,取消间隙和默认效果
  10. 想成为高薪的Java架构师该如何做?
  11. 硬盘的IDE、AHCI和NVMe模式区别
  12. Realm_King 之 XPDL(XML Process Definition Language)
  13. 支持webrtc的摄像头
  14. 漫步在云台山茶园穿越,感受来自李亮先生的美意
  15. item_search_img - 按图搜索淘宝商品(拍立淘)
  16. 计算机视觉论文-2021-06-04
  17. Centos 7iso百度网盘下载
  18. cvc-complex-type.2.4.d: 发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。
  19. 新手建站注意事项指南
  20. leaflet监听地图(移动一段距离后发起请求)(leaflet篇.21)

热门文章

  1. (超级有用)ThinkPHP 5漏洞分析之SQL注入
  2. 有这样的老婆,真舒服!
  3. uniapp写好友列表
  4. .net core 视图文件乱码问题
  5. JAVA基础之基本加减乘除计算
  6. 不动的大图书馆 第一期
  7. 牵手思必驰,博泰车联网要打造一个通用的车载语音平台
  8. 教师评职称用计算机二级证书,教师晋升职称需要的荣誉证书,有年限限制吗?是五年之内的证书才有效吗...
  9. 动态注册(servlet、filter、listener)
  10. 浅谈原型及原型链的理解