Webots是一款由商业变为免费的机器人仿真软件,拥有丰富的学习资源和社区。
Webots 是用于模拟机器人的开放源代码和多平台桌面应用程序。它提供了一个完整的开发环境来对机器人进行建模,编程和仿真。
它被设计用于专业用途,并且广泛用于工业,教育和研究。自 1998 年以来,Cyberbotics Ltd. 一直将 Webots 作为其主要产品。
Webots 提供了一个完整的开发环境来对机器人、车辆和机械系统进行建模、编程和仿真。
Webots是一款专业的移动机器人仿真软件包。它提供了一个快速原型制作环境,允许用户创建具有物理属性(例如质量、关节、摩擦系数等)的 3D 虚拟世界。用户可以添加简单的被动对象或称为移动机器人的主动对象。这些机器人可以有不同的运动方案(轮式机器人、腿式机器人或飞行机器人)。此外,它们可能配备许多传感器和执行器设备,例如距离传感器、驱动轮、相机、电机、触摸传感器、发射器、接收器等。最后,用户可以单独对每个机器人进行编程以表现出所需的行为. Webots包含大量机器人模型和控制器程序示例,帮助用户入门。
Webots 还包含许多与真实移动机器人的接口,因此一旦您的模拟机器人按预期运行,您就可以将其控制程序转移到真实机器人,如 e-puck、DARwIn-OP、Nao 等。可以添加新接口通过相关系统。
要对自己的机器人控制器进行编程,需要具备 C、C++、Java、Python 或 MATLAB 编程语言的基本知识。然而,即使您不懂这些语言,您仍然可以使用称为 BotStudio 的简单图形编程语言对 e-puck 和 Hemisson 机器人进行编程。
如果您不想使用 Webots 中提供的现有机器人模型,而是想创建自己的机器人模型,或在模拟环境中添加特殊对象,则需要 3D 计算机图形学和 VRML97 描述语言的基本知识。这将允许您在 Webots 中创建 3D 模型或从 3D 建模软件导入它们。
1.定义一个或多个机器人及其环境的Webots世界文件 (.wbt)。.wbt 文件有时确实依赖于外部 PROTO 文件 (.proto) 和纹理。
2.上述机器人的一个或多个控制器程序(C/C++/Java/Python/MATLAB)。
3.一个可选的物理插件,可用于修改 Webots 常规物理行为(在 C/C++ 中)。
在 Webots 中,世界是对机器人及其环境属性的 3D 描述。它包含每个对象的描述:位置、方向、几何形状、外观(如颜色或亮度)、物理属性、对象类型等。
世界保存在“.wbt”文件中。“.wbt”文件存储在每个Webots项目的“worlds”子目录中。
控制器是控制世界文件中指定的机器人的计算机程序。控制器可以用 Webots 支持的任何编程语言编写:C、C++、Java、Python 或 MATLAB。当模拟开始时,Webots 启动指定的控制器,每个控制器作为一个单独的进程,并将控制器进程与模拟的机器人关联起来。请注意,多个机器人可以使用相同的控制器代码,但是将为每个机器人启动不同的进程。
一些编程语言需要编译(C 和 C++),其他语言需要解释(Python 和 MATLAB),还有一些需要编译和解释(Java)。例如,C 和 C++ 控制器被编译为依赖于平台的二进制可执行文件(例如 Windows 下的“.exe”)。Python 和 MATLAB 控制器由相应的运行时系统(必须安装)解释。Java 控制器需要编译为字节代码(“.class”文件或“.jar”),然后由 Java 虚拟机解释。
每个控制器的源文件和二进制文件一起存储在一个控制器目录中。控制器目录放置在每个 Webots 项目的“controllers”子目录中。
Supervisor控制器是字段设置为 的Robot的控制器,它可以执行通常只能由人类操作员执行而不能由真实机器人执行的操作。Supervisor控制器可以用上述任何一种编程语言编写。然而,与常规机器人控制器不同的是,主管控制器将有权访问特权操作。特权操作包括模拟控制,例如,将机器人移动到随机位置,对模拟进行视频捕获等。
支持常见三维格式文件的导入
(.obj、.fbx、.blender、.stl …)
使用开源引擎 open dynamic engine
感知侧的传感器(光电、雷达等)
执行侧的电机
https://www.cyberbotics.com/doc/guide/starting-webots
Webots GUI 由四个主要窗口组成:
编辑菜单提供了常用的文本编辑功能来操作在文本编辑器中打开的文件,例如复制、粘贴、剪切等。
文本编辑器可以仅作阅读使用,编辑过程可以放在notepad++、vscode等中。
Rendering:
Follow Object:在固定(静态)视点和跟随移动对象(通常是机器人)的视点之间切换。如果您希望视点跟随某个对象,首先您需要使用鼠标选择该对象,然后根据您想要的以下行为检查子菜单的一项。
Restore Viewpoint:将视点的位置和方向恢复到加载或恢复文件时的初始设置。当您在场景中迷路并想要返回原始视点时,此功能非常方便。
Move viewpoint to object:将视点移动到所选节点的中心并进行缩放。如果所选项目是字段,则将定位上层父节点。该对象将位于 3D 视图的中心并且完全可见。
Align View to Object:移动并旋转视点,使选定节点居中,并将视点对齐到六个对象对齐轴中的任意一个上
Change View:移动视点以将其对齐到围绕选定对象的六个世界对齐轴中的任何一个。如果未选择任何对象,视点将以世界原点为中心。
Fullscreen:全屏
Virtual Reality Headset:使用 HTC Vive 或 Oculus Rift 等虚拟现实耳机来查看模拟
Perspective Projection:透视投影(默认),透视模式对应于自然投影:其中物体距离观察者越远,它在图像中出现的越小。
Orthographic Projection:正交投影,在正交投影中,距观察者的距离不会影响物体的显示大小。此外,在正交模式下,模型中平行的线会在屏幕上平行绘制,因此这种投影有时在建模阶段很有用。在正交模式下不渲染阴影。
Plain Rendering:普通渲染(默认)
Wireframe Rendering:线框模式,普通渲染模式下,对象以其几何面、材质、颜色和纹理进行渲染,就像眼睛或相机通常看到的一样。线框渲染模式下,仅渲染可渲染图元的片段。此模式对于调试网格体很有用。如果同时激活线框渲染模式和切换按钮,则仅绘制边界对象(而不是可渲染图元)。View / Optional Rendering / Show All Bounding Objects这可用于调试碰撞检测的问题。
Optional Rendering:可选渲染子菜单允许您显示或隐藏补充信息。这些渲染仅在主渲染中显示并隐藏在机器人相机中。它们用于更好地理解模拟的行为:
Scene Interactions:“场景交互”,允许您禁用某些用户与 3D 场景的交互,例如选择或移动对象或移动视点。这些选项可用于通过禁用一些不需要的功能来改善与 3D 场景的交互,或者阻止某些交互,例如在通过网络传输模拟时。
构建菜单提供编译(或交叉编译)控制器代码的功能。
Overlays菜单提供特定于渲染设备覆盖(Camera 、Display、 Rangefinder)的操作。仅当在 3D 窗口中选择机器人时,此菜单的某些操作才会激活:
其余的菜单项以 HTML 页面、PDF 文档等形式显示各种信息。
https://www.cyberbotics.com/doc/guide/the-3d-window
https://www.cyberbotics.com/doc/guide/the-scene-tree
Webots 控制台显示来自 Webots 的日志(例如打开世界时的解析警告或错误、编译输出、ODE 警告等)和控制器的输出。
https://www.cyberbotics.com/doc/guide/the-console
https://www.cyberbotics.com/doc/guide/preferences
Webots 包提供的示例世界可以轻松测试;“.wbt”文件位于“ WEBOTS_HOME/projects ”目录的各个“worlds”目录中,可以使用菜单Open Sample World中的项目直接从Webots打开File。控制器代码位于相应的“controllers”目录中。
在“ WEBOTS_HOME/projects/samples/demos/worlds ”目录中找到相应的“.wbt”文件;
在“ WEBOTS_HOME/projects/samples/demos/controllers ”目录中找到它们的控制器源代码。
anaglyph.wbt(浮雕)
gantry.wbt(龙门)
hexapod.wbt(六足)
moon.wbt(月亮)
soccer.wbt(足球)
stewart_platform.wbt(Stewart 并联机械臂)
世界文件位于“ WEBOTS_HOME/projects/samples/devices/worlds ”目录中;
其控制器位于“ WEBOTS_HOME/projects/samples/devices/controllers ”目录中。
accelerometer.wbt(加速度计)
altimeter.wbt(高度计)
battery.wbt(电池)
brake.wbt(刹车)
bumper.wbt(保险杠)
camera.wbt(相机)
camera_auto_focus.wbt(相机自动对焦)
camera_motion_blur.wbt(相机运动模糊)
camera_noise_mask.wbt(相机降噪)
camera_recognition.wbt(相机识别)
camera_segmentation.wbt(相机分割)
compass.wbt(指南针)
connector.wbt(连接器)
coupled_motors.wbt(耦合电机)
display.wbt(显示)
distance_sensor.wbt(距离传感器)
emitter_receiver.wbt(发射器-接收器)
encoders.wbt(编码器)
force_sensor.wbt(力传感器)
force3d_sensor.wbt(三维力传感器)
gps.wbt(gps)
gps_lat_long.wbt(gps 经纬度)
gyro.wbt(陀螺仪)
hinge_joint_with_backlash.wbt(带隙铰链接头)
hinge_2_joint_with_backlash.wbt(铰2接头带隙)
hokuyo.wbt(北洋)
imu.wbt(imu)
inertial_unit.wbt(惯性单元)
laser_pointer.wbt(光电传感器)
led.wbt(LED)
lidar.wbt(雷达)
light_sensor.wbt(光传暗器)
linear_motor.wbt(线性电机)
motor.wbt(电机)
motor2.wbt(电机2)
motor3.wbt(电机3)
pen.wbt(笔)
position_sensor.wbt(位置传感器)
propeller.wbt(螺旋桨)
radar.wbt(雷达)
range_finder.wbt(测距仪)
receiver_noise.wbt(接收器噪声)
sick.wbt(sick)
sick_point_cloud.wbt(sick 点云)
skin.wbt(使用Skin设备制作人体操纵模型的动画)
speaker.wbt(扬声器)
speaker_text_to_speech.wbt(扬声器_文本到语音)
spherical_camera.wbt(球形相机)
supervisor.wbt(supervisor)
track.wbt(轨道)
Webots 对象是模块化且可参数化的,因此可以从这些示例开始简单地创建其他环境。
这些示例的世界文件位于“ WEBOTS_HOME/projects/sample/environments/ ”目录中。
室外和城市环境位于“ WEBOTS_HOME/projects/vehicles/worlds ”中。
apartment.wbt(公寓)
break_room.wbt(休息室)
complete_apartment.wbt(完整公寓)
factory.wbt(工厂)
hall.wbt(大厅)
kitchen.wbt(厨房)
Webots 中可用的几何图元,对应示例的世界文件位于“ WEBOTS_HOME/sample/geometries/worlds ”目录中。
extended_solids.wbt(扩展实体)
extrusion.wbt(挤压)
floating_geometries.wbt(浮动几何体)
geometric_primitives.wbt(几何基元)
high_resolution_indexedfaceset.wbt(高分辨率索引面集)
muscle.wbt(肌肉)
physics_primitives.wbt(物理基元)
polygons.wbt(多边形)
textured_boxes.wbt(纹理框)
textured_proto_shapes.wbt(纹理原型形状)
textured_shapes.wbt(纹理形状)
webots_box.wbt(webots盒子)
复杂行为和/或功能的各种示例。这些示例位于“ WEBOTS_HOME/projects/samples/howto/ ”中。每个示例都有自己的控制器和世界目录。
asymmetric_friction1.wbt(非对称摩擦1)
asymmetric_friction2.wbt(非对称摩擦2)
binocular.wbt(双目)
biped.wbt(双足)
center_of_mass.wbt(质量中心)
console.wbt(控制台)
custom_robot_window_simple.wbt(定制机器人窗口简单)
custom_robot_window.wbt(定制机器人窗口)
cylinder_stack.wbt(气缸堆栈)
force_control.wbt(力控制)
four_wheels.wbt(四轮)
gears.wbt(齿轮)
inverted_pendulum.wbt(倒立摆)
mouse_events.wbt(鼠标事件)
omni_wheels.wbt(全向车轮模型)
openai_gym.wbt(OpenAI Gym)
passive_dynamic_walker.wbt(被动动态步行机器人)
pedal_racer.wbt(踏板赛车)
physics.wbt(物理插件下机器人)
rolling_friction.wbt(滚动摩擦)
rope.wbt(绳索)
sick_terrain_scanning.wbt(sick地形扫描)
spinning_top.wbt(旋转的陀螺)
supervisor_draw_trail.wbt(supervisor绘制轨迹)
texture_change.wbt(纹理变化)
url.wbt(URL形式引用资源)
vision.wbt(视觉)
ziegler_nichols.wbt(电机 PID参数)
Webots 的高级 3D 渲染功能。此处提供的示例可用作使用高级渲染技术创建您自己的模拟的起点。这些示例的世界文件位于“ WEBOTS_HOME/projects/samples/rendering/worlds ”目录中。
animated_skin.wbt(动画皮肤)
physically_based_rendering.wbt(基于物理渲染)
sponza.wbt()
Webbot 可以执行用编译语言(C/C++、Java)或解释语言(Python、MATLAB)编写的控制器。编译或解释过程需要额外的软件,这些软件通常必须单独安装。仅在Windows平台上使用C/C++时不需要安装单独的C/C++编译器;在此平台上,Webots 附带预安装和预配置的 MinGW C/C++ 编译器副本。对于任何其他语言或平台,必须单独安装软件开发工具。请注意,Webots 使用非常标准的工具,这些工具可能已经存在于标准安装中。否则,本章中的说明将为您提供有关软件开发工具安装的建议。
.wbt 文件包含需要为每个机器人启动的控制器的名称。控制器名称是一个独立于平台和语言的字段;例如,当控制器名称在 .wbt 文件中指定为“xyz_controller”时,这并没有说明控制器的编程语言或平台。这样做是为了确保.wbt文件独立于平台和编程语言。
当 Webots 尝试启动控制器时,它必须首先确定该控制器使用的编程语言。因此,Webots 在项目的控制器目录中查找与控制器名称匹配的子目录。然后,在此控制器目录中,它会查找与控制器名称相匹配的文件。例如,如果控制器的名称是“xyz_controller”,则 Webots 会在“PROJECT_DIRECTORY/controllers/xyz_controller”目录中按指定顺序查找这些文件。
Windows 版本的 Webots 预装了 MinGW C/C++ 编译器,因此通常无需安装单独的编译器。
Webots 版本中提供了 C++ API 的源代码。您可能有兴趣查看包含头文件的目录(“include/controllers/cpp”)以获得每个类和函数的精确定义,尽管参考指南提供了对公共函数的清晰描述。
https://www.cyberbotics.com/doc/guide/using-ros
https://www.cyberbotics.com/doc/guide/interfacing-webots-to-third-party-software-with-tcp-ip
https://www.cyberbotics.com/doc/guide/development-environments
Webots源代码编辑器是一个多标签文本编辑器,专门用于开发Webots控制器。通常建议使用此编辑器,因为它使编译变得简单。该编辑器具有 Webots 支持的语言(C/C++、Java、Python 和MATLAB TM )的语法突出显示和 Webots C API 的自动完成功能。
项目的根目录至少包含一个名为“worlds”的目录,其中包含一个世界文件。但通常还需要其他几个目录:
该目录包含控制器。每个控制器都在一个目录中定义。控制器由目录名称引用。这是控制器目录的示例,其中包含一个用 C 语言编写的可以编辑和执行的简单控制器。
controllers/
controllers/simple_controller/
controllers/simple_controller/Makefile
controllers/simple_controller/simple_controller.c
controllers/simple_controller/simple_controller[.exe]
https://www.cyberbotics.com/doc/guide/programming-fundamentals
https://www.cyberbotics.com/doc/guide/tutorials
https://www.cyberbotics.com/doc/guide/robots
Webots 中包含的所有机器人模型都列在这里。用户还可以添加自己的自定义模型。
https://www.cyberbotics.com/doc/guide/single-board-computers
NVIDIA Jetson Nano
https://www.cyberbotics.com/doc/guide/actuators
https://www.cyberbotics.com/doc/guide/sensors
https://www.cyberbotics.com/doc/guide/objects
1、官网–cyberbotics
2、从零开始的Webots入门教程与实战
3、github–webots
4、Webots教程(根据官网教程)
5、【webots教程】编写你的第一个控制器
6、Webots 舵轮底盘小教程