Webots入门指南:从下载安装到创建第一个物理仿真项目
1. 为什么你需要Webots?从零开始的机器人仿真之旅
如果你对机器人、自动驾驶小车,或者任何会动的智能设备感兴趣,但又苦于没有真实的硬件来测试你的想法,那我强烈建议你试试Webots。我刚开始接触机器人编程那会儿,最头疼的就是写好的代码,一放到真实机器人上就跑飞了,不是撞墙就是原地打转,修一次硬件又费钱又费时间。后来发现了仿真软件,简直是打开了新世界的大门,而Webots就是其中对新手最友好、功能又足够强大的一个。
简单来说,Webots就是一个专业的机器人仿真平台。你可以把它想象成一个高度逼真的“机器人沙盒游戏”。在这个虚拟世界里,你可以随心所欲地搭建各种机器人模型(从简单的轮式小车到复杂的仿生狗),设计各种环境(比如迷宫、街道、工厂车间),然后为机器人编写控制程序,观察它在虚拟环境中的一举一动。所有的物理规律,比如重力、摩擦力、碰撞,软件都会帮你模拟好。这意味着,你可以在不花一分钱买硬件、不担心摔坏机器人的情况下,无限次地测试和调试你的算法。无论是学生做课程设计、研究者验证新想法,还是工程师进行算法前期开发,Webots都是一个绝佳的起点。
我第一次用它,是为了做一个简单的自动避障小车项目。在Webots里,我十分钟就搭好了小车和几个障碍物,写了个基础的传感器读取和电机控制代码,看着小车在仿真里流畅地运行、避障,那种成就感别提多爽了。等到仿真效果完美了,再把代码移植到真实的Arduino小车上,成功率就高多了。所以,无论你是编程小白,还是有一定经验的开发者,只要想踏入机器人这个领域,从Webots开始准没错。
2. 手把手带你下载与安装Webots
万事开头难,但Webots的安装过程可以说是相当“无痛”了。我们一步步来,确保你一次成功。
2.1 获取安装包的两种可靠途径
首先,你需要拿到Webots的安装程序。这里我提供两个最常用、最稳妥的渠道。
首选官方渠道:直接访问Webots的官网。在浏览器里输入 cyberbotics.com 就能找到。官网的优点是版本永远是最新的,而且下载过程安全可靠。进入官网后,一眼就能看到大大的“Download”按钮。点击后,网站会自动检测你的操作系统(Windows, macOS, 或 Linux),并推荐对应的安装包。我建议就下载它推荐的稳定版(Stable Release)。官网下载可能需要一点耐心,因为服务器在国外,速度可能不太稳定,但这是最正统的方式。
备选国内网盘:考虑到国内访问国外网站有时会遇到网络波动,很多热心网友会把安装包分享到国内的网盘上。比如,你可以在百度网盘搜索“Webots 安装包”加上版本号(如R2023b)。使用网盘时,请务必注意核对文件大小和发布者的信誉,确保文件安全。这里需要提醒的是,从非官方渠道获取软件,一定要有安全意识,下载后最好用杀毒软件扫描一下。对于完全的新手,如果官网下载实在困难,使用一个信誉良好的网盘资源作为起步也是可以的,但后续更新和学习,还是应该以官网和官方文档为主。
2.2 跨平台安装详解与个性化设置
下载好安装包(通常是一个.exe文件用于Windows,.dmg文件用于Mac,.tar.gz用于Linux),我们就可以开始安装了。
Windows系统:双击.exe安装程序,基本上就是一路“Next”。安装过程中你会看到一个选择安装路径的界面,默认是装在C盘。如果你C盘空间紧张,可以换到其他盘,比如D:\Webots,这完全没问题,不影响使用。接下来会有一个选择视觉主题的步骤,这个我建议你留意一下。Webots提供了“System Default”、“Light”和“Dark”几种主题。如果你习惯深色界面,保护眼睛,那就选“Dark”;如果喜欢明亮风格,就选“Light”。这个设置安装后也能改,所以不用太纠结。
macOS系统:打开.dmg文件,把Webots的图标拖拽到“应用程序”文件夹里就完成了安装,非常简单。
Linux系统:对于.tar.gz压缩包,你需要解压到你喜欢的目录,例如/home/你的用户名/Webots。解压后,进入目录,直接运行./webots这个可执行文件就能启动。为了方便,你可以在桌面创建一个启动器,或者将Webots的路径添加到系统的PATH环境变量中。
整个安装过程确实没什么坑,就像安装一个普通软件一样。安装完成后,你的桌面上或开始菜单里就会出现Webots的图标。
3. 初次启动与界面汉化,打造舒适开发环境
激动人心的时刻到了,双击图标启动Webots!
3.1 跳过或浏览欢迎指南
第一次启动时,Webots会弹出一个“入门指南”(Guide)窗口。这个指南里包含了一些简单的教程和示例项目介绍,全是英文的。如果你英语不错,或者迫不及待想看看软件能做什么,可以花几分钟浏览一下,里面有一些机器人演示视频,挺有意思的。但如果你和我当初一样,只想快点上手操作,直接关掉这个窗口就行,完全不影响后续使用。这个指南以后也可以在帮助菜单里随时打开。
关闭指南后,你就看到了Webots的主界面。别被那些英文按钮和菜单吓到,我们接下来就把它变成熟悉的中文。
3.2 详细的中文界面设置步骤
将界面汉化,能极大降低初学者的学习门槛。Webots官方对中文的支持非常友好。
- 在顶部菜单栏,找到 “Tools”(工具)这一项,点击它。
- 在下拉菜单中,选择 “Preferences...”(首选项)。这会打开一个设置窗口。
- 在弹出的设置窗口中,你会看到几个标签页。我们需要的在 “General”(通用)标签页里。
- 在“General”页面中,寻找 “Language”(语言)或“Interface language”这样的下拉选择框。
- 点击下拉框,在列表中找到 “简体中文 (Chinese Simplified)” 并选中它。
- 最后,点击窗口右下角的 “Apply”(应用)或 “OK”(确定)。
此时,Webots可能会提示你需要重启软件来使语言更改生效。放心点击确认重启。重启之后,你就会发现整个界面,包括菜单、按钮、提示文字,全都变成了中文!是不是瞬间感觉亲切多了?这个小小的设置,能让你在后续探索功能时更加得心应手。
4. 创建你的第一个仿真项目:一个会弹跳的球
理论说再多,不如动手做一遍。现在,我们就来创建第一个Webots世界,目标很简单:制作一个带有物理属性的球,把它放在空中,然后让它自由落体掉到地面上弹跳。这个过程会涉及到Webots最核心的“节点树”编辑思想。
4.1 新建世界与添加地面
启动Webots后,我们首先需要创建一个新的仿真环境,在Webots里这叫一个“世界”(World)。
- 点击左上角菜单栏的 “文件” -> “新建世界”。这时你会看到一个空荡荡的3D视图。
- 在界面左侧,有一个非常重要的面板叫 “场景树”。它现在应该只显示一个“WorldInfo”节点。这个面板就像我们项目的“大纲”,所有虚拟世界里的物体(在Webots中称为“节点”)都以树状结构列在这里。
- 在场景树窗口的顶部,找到那个小小的 “添加” 按钮(通常是一个加号“+”图标)。点击它,会弹出一个庞大的节点选择库。
- 在弹出的节点库中,找到 “PROTO nodes (Webots Projects)” 这个分类。展开它,里面有一个非常实用的节点叫 “矩形运动场 (RectangleArena)”。选中它,点击“添加”或直接双击。我强烈推荐新手勾选这个,因为它能一键生成一个带有纹理的、作为参考系的矩形地面,省去了我们自己建模的麻烦。
添加完成后,场景视图里立刻出现了一个绿色的网格地面,场景树里也多了一个“RectangleArena”节点。我们的舞台就搭好了。
4.2 构建一个球体模型
现在,我们要往这个世界里放一个球。在Webots里,一个可交互的物体通常由多个节点组合而成,我们来一步步组装。
- 再次点击场景树顶部的 “添加” 按钮。这次,我们在节点库的 “Base nodes”(基础节点)分类下寻找。
- 在“Base nodes”里,找到并选择 “Solid”(刚体)节点,然后添加。这个“Solid”节点代表了一个具有物理属性的“容器”,我们之后要把球的形状和物理属性“装”进这个容器里。在场景树里,它可能显示为“Solid (unknown)”之类的名字。
- 点击“Solid”节点左边的箭头展开它,你会看到它下面有“children”、“boundingObject”、“physics”等字段。目前它们都是“NULL”(空)。
- 首先,我们来定义球的形状。选中“Solid”下的 “children” 字段,然后点击场景树窗口里的 “添加” 按钮(或者右键“children”选择新增)。
- 在节点库的“Base nodes”里,这次选择 “Shape”(形状)节点并添加。这个节点专门用来定义物体的视觉外观。
- 展开新添加的“Shape”节点,它下面有“appearance”和“geometry”两部分。“appearance”控制颜色材质,“geometry”控制几何形状。我们先给这个形状起个名字方便后面引用:选中“Shape”节点,在场景树下方的“DEF”输入框里,给它命名为 “Ball”。DEF就像是给这个节点贴了个独一无二的标签。
- 选中“Shape”下的 “geometry” 字段(目前是NULL),点击“添加”。在节点库的“Base nodes”里找到 “Sphere”(球体)节点并添加。好了!现在3D视图里应该出现了一个灰色的球体,但它可能一半嵌在地面里。
4.3 赋予球体真实的物理属性
现在这个球只是个“视觉模型”,它没有重量,不会掉下来。我们要让它变成一个“物理实体”。
- 设置初始位置:为了让演示效果更明显,我们先把球抬到空中。在场景树中,回到最顶层的“Solid”节点(“Ball”形状的父容器)。找到它的 “translation”(位置)字段。它有三个数值,分别代表X(左右)、Y(前后)、Z(上下)坐标。我们把Z坐标的值改大一些,比如从0改成 2.0(单位是米)。修改后按回车,你会立刻看到3D视图中的球体升到了空中。
- 添加碰撞边界:物理引擎需要知道物体的边界在哪里才能计算碰撞。选中“Solid”节点下的 “boundingObject” 字段(目前是NULL)。这里就是关键的一步:我们不需要新建节点,而是直接复用刚才定义的视觉形状。点击“boundingObject”字段,在场景树下方的“USE”下拉框中,你应该能看到我们之前DEF定义的 “Ball”。选择它!这意味着,物理碰撞的边界就使用“Ball”这个形状,完美匹配我们的视觉模型。
- 添加物理属性:最后,让这个固体遵循物理定律。选中“Solid”节点下的 “physics” 字段(目前是NULL),点击“添加”。在节点库的“Base nodes”里选择 “Physics”(物理)节点并添加。这样,这个“Solid”就具备了质量、惯性等物理属性。你可以保持默认参数,它已经有一个合理的质量。
4.4 运行仿真,见证奇迹
所有设置都完成了!现在,看向Webots界面顶部那一排仿真控制按钮(像播放器的按钮)。
- 点击那个黑色的 “播放” 三角按钮(或者按快捷键Ctrl+P)。
- 奇迹发生了!你会看到空中的球体开始自由落体,砸向地面,然后弹起,再落下,如此反复,直到能量耗尽在地面上微微滚动。整个运动过程非常符合物理直觉。
- 你可以随时点击 “暂停” 按钮(两个竖杠)停止仿真,或者点击 “步进” 按钮(一个三角加竖杠)让仿真一帧一帧地走,仔细观察每一刻的变化。
- 点击 “重置” 按钮(一个圆圈箭头),世界会恢复到初始状态,球又回到空中。
恭喜你!你已经成功在Webots中创建了一个完整的、带有物理仿真的项目。这个过程虽然步骤不少,但它清晰地展示了Webots基于节点树构建世界的基本逻辑:用“Solid”作为容器,用“Shape”定义样子,用“Physics”赋予灵魂,用“boundingObject”划定碰撞范围。理解了这个逻辑,以后创建更复杂的机器人,无非就是在这棵树上添加更多的“枝杈”(节点)而已。
5. 深入探索:从球体到你的第一个机器人
做完弹跳球,你可能觉得这离“机器人”还有点远。别急,我们可以基于这个基础,快速迈出下一步。Webots的强大之处在于它内置了海量的机器人模型和传感器组件,我们可以像搭积木一样使用它们。
5.1 尝试官方示例,快速建立认知
在汉化后的菜单栏,点击 “帮助” -> “向导”,可以重新打开那个入门指南。更有用的是,点击 “文件” -> “打开样本世界”。这里分类整理了数十个官方示例世界,从简单的移动机器人到自动驾驶汽车、无人机、仿人机器人,应有尽有。
我强烈建议你打开 “robots/gctronic/e-puck” 这个世界。这是一个非常经典的微型轮式机器人模型。打开世界后,先别急着运行。仔细观察它的场景树:你会发现它本质上就是一个复杂的“Solid”节点,下面包含了车身形状、两个轮子关节(HingeJoint)、轮子电机、距离传感器、摄像头等多个子节点。你可以展开每个节点,看看它们的参数是如何设置的。然后运行仿真,看看这个小机器人在迷宫里是怎么通过传感器感知环境并运动的。通过研究这些现成的、能工作的例子,是学习Webots建模最快的方法。
5.2 为你的球体添加控制器,让它“智能”起来
我们的球现在只会被动地受物理定律影响。如何让它“主动”动起来呢?这就需要为它编写一个“控制器”(Controller)。控制器其实就是一段程序(支持Python, C, C++, Java, MATLAB等),用来读取传感器数据、做出决策、控制执行器(如电机)。
- 创建控制器文件:在场景树中,选中我们创建的“Solid”节点。在右侧的属性面板中(如果没看到,点击菜单“视图”->“属性”),寻找“controller”字段。它默认是“”。点击下拉框,选择“...”。在弹出的对话框中,给控制器起个名字,比如“my_ball_controller”,并选择你熟悉的编程语言,比如Python。
- 编写简单控制逻辑:Webots会自动为你生成一个控制器代码框架,并打开代码编辑器。这个框架里有一个主循环。我们可以在循环里添加简单的代码。例如,用Python写,我们可以获取球体的位置,然后每隔一段时间给它一个向上的力,模拟它自己跳跃:
from controller import Robot import time robot = Robot() # 这里的robot对象就代表我们的球体Solid timestep = int(robot.getBasicTimeStep()) # 获取翻译(位置)字段 translation_field = robot.getSelf().getField("translation") while robot.step(timestep) != -1: # 获取当前Z坐标 current_pos = translation_field.getSFVec3f() # 如果球掉到地面附近(Z坐标很小),就把它重新抛到空中 if current_pos[2] < 0.5: new_pos = [current_pos[0], current_pos[1], 3.0] # 设置到Z=3米高 translation_field.setSFVec3f(new_pos) time.sleep(0.1) # 稍微延迟一下,便于观察 - 运行与观察:保存控制器代码。回到主界面,确保球的“controller”属性已经是你刚创建的“my_ball_controller”。点击运行仿真。现在,球每次掉落到地面附近,都会自动“蹦”回空中,实现了一个非常简单的自动控制。虽然这个例子很简单,但它完整展示了“仿真模型”与“控制程序”是如何联动的。
从拖放节点构建模型,到编写代码控制模型行为,这就是在Webots中进行机器人开发的核心闭环。我建议你多花时间折腾这些内置样例,尝试修改它们的参数,甚至拆解它们的节点结构,这是积累经验最快的方式。记住,仿真环境最大的优势就是“容错”,在这里你可以大胆尝试任何想法,搞“炸”了也不过是点一下重置按钮而已。
更多推荐


所有评论(0)