Webots简介

简介

Webots是一款专业的物理仿真软件,被广泛运用在机器人仿真实践控制算法中,2018年12月该软件宣布开源。

Webots最初采用C进行编程,至今已经实现提供C、C++、Python、Java、Matlab接口的API进行仿真控制器。同时它提供了对应的ROS和ROS2功能包用于实现相关的节点接口。

学习资源汇总

Webots开源于2018年,国内相关的教程资源较少且由于软件尚处于开发阶段,各个版本的功能大相径庭,致使软件的学习成本较高,推荐参看官方手册进行学习。本笔记基于Webots2023a版本进行记录。

Webots Node

环境节点

WorldInfo

节点说明

WorldInfo节点用于设置仿真世界的基础信息,节点的官方文档内容如下:Worldinfo

该节点的属性如下:

WorldInfo {
SFString title "" # any string
MFString info [ ] # any string
SFString window "<none>" # any string
SFFloat gravity 9.81 # [0, inf)
SFFloat CFM 0.00001 # (0, inf)
SFFloat ERP 0.2 # [0, 1]
SFString physics "<none>" # any string
SFFloat basicTimeStep 32 # [1, inf)
SFFloat FPS 60 # [1, inf)
SFInt32 optimalThreadCount 1 # [1, inf)
SFFloat physicsDisableTime 1 # [0, inf)
SFFloat physicsDisableLinearThreshold 0.01 # [0, inf)
SFFloat physicsDisableAngularThreshold 0.01 # [0, inf)
SFNode defaultDamping NULL # {Damping, PROTO}
SFFloat inkEvaporation 0 # [0, inf)
SFString coordinateSystem "ENU" # {"ENU", "NUE", "EUN"}
SFString gpsCoordinateSystem "local" # {"WGS84", "local"}
SFVec3f gpsReference 0 0 0 # any vector
SFFloat lineScale 0.1 # [0, inf)
SFFloat dragForceScale 30.0 # (0, inf)
SFFloat dragTorqueScale 5.0 # (0, inf)
SFInt32 randomSeed 0 # {-1, [0, inf)}
MFNode contactProperties [] # {ContactProperties, PROTO}
}

常用属性

  • title: 世界名,用于描述此仿真世界的用处

  • info:世界说明,详细说明仿真的功能

  • gravity:仿真世界重力加速度,修改此属性可用于仿真月球、宇宙等环境

  • coordinateSystem:定义全局坐标系,影响加速度计、GPS、等设备的返回值

    • ENU:东北天坐标系,沿X正轴向东,沿Y正轴向北,沿Z正轴向天
    • NUE:沿X正轴向北,沿Y正轴向天,沿Z正轴向东
    • EUN:沿X正轴向东,沿Y正轴向天,沿Z正轴向北
  • gpsCoordinateSystem:GPS设备参考坐标系

    • WGS84:返回设备所在的经纬度及海拔高度
    • local:返回相对世界坐标系的位置
  • gpsReference:GPS参考点

    • gpsCoordinateSystem设置为WGS84,则参数表示为纬度、经度、海拔,单位为十进制度数和米
    • gpsCoordinateSystem设置为local,则参数表示为三轴上的坐标,单位为米
  • randomSeed:世界随机种子,应设置为非负数或-1(表示根据时间进行设置)。该参数将影响仿真传感器的噪声等,通过配置此参数可使得仿真效果被重现。

Viewpoint

节点说明

Viewpoint节点定义了用户查看仿真世界的视角,官方文档说明如下:Viewpoint

该节点的属性如下:

Viewpoint {
SFFloat fieldOfView 0.785398 # [0, pi]
SFRotation orientation 0 0 1 0 # unit axis, (-inf, inf) angle
SFVec3f position -10 0 0 # any vector
SFString description "" # any string
SFFloat near 0.05 # [0, far]
SFFloat far 0.0 # [near, inf)
SFFloat exposure 1.0 # [0, inf)
SFString follow "" # any string
SFBool followType "Tracking Shot" # {"None", "Tracking Shot", "Mounted Shot", "Pan and Tilt Shot"}
SFFloat followSmoothness 0.5 # [0, 1]
SFNode lensFlare NULL # {LensFlare, PROTO}
SFFloat ambientOcclusionRadius 2 # [0, inf)
SFFloat bloomThreshold 10 # [0, inf)
}

常用属性

  • fieldOfZView:视窗视角大小,单位为弧度制。小视角意味着长焦,大视角则代表广角

  • orientationposition:视窗在坐标系内的位姿设置,可通过鼠标在仿真世界内拖拽而直接修改。

  • follow:可设置视窗跟随指定物体进行移动,用于填写物体名称

    • 填写物体时,应从根节点开始写;
    • 使用:连接父节点和子节点;
    • 若节点名称包括:则用\:进行转义
    • 例如robot:second\:solid:target\solid表示follow的对象为robotsecond:solid下的target\solid
  • followType:设置视窗跟随follow的方式

    • None:视窗不变
    • Tracking Shot:视窗随对象平移
    • Mounted Shot:视窗随对象进行偏移和旋转(当需要展示从机器人内部向外观察时较好,例如车窗内)
    • Pan and Tilt Shot:视窗始终看向对象中心
  • followSmoothness:设置视窗跟随follow的平滑程度,仅在followType设置为Tracking Shot时有用,值越高移动约平滑

视角跟随的配置可直接在仿真世界中点击所需跟踪的物体后,直接在菜单栏 -> 查看 -> 追随物体中进行设置跟踪方式。

Background

节点说明

TexturedBackgroud和TexturedBackgroundLight节点分别用于设置背景图和环境光

TexturedBackgroud

该节点用于设置背景图,属性如下:

  • texture:背景图,根据需求在下拉菜单中进行选择

  • luminosity:背景亮度

  • skyColor:背景颜色,RGB值

-skybox:若设置为True则背景显示为texture中设置的内容,反之则显示设置的skyColor

TexturedBackgroundLight

  • texture:环境光类型,根据需求在下拉菜单中进行选择

  • luminosity:亮度

  • castShadows:设置为True则显示物体的阴影

特征节点