Webots简单自学笔记(随时更新)

Webots 2019a 中文
保存!保存!随手保存!!别的不重要,随手保存是王道!!!

一、Scene tree:场景树

(一)WorldInfo:世界信息

参考手册(F4)(reference.pdf) 3.53节 WorldInfo

  1. basicTimeStep:仿真最小的时间单元,如:为32时,即每次仿真的时间步长为32毫秒。
  2. Gravity:重力大小与方向。如图没有坐标系,可在菜单栏:查看->可选显示->显示坐标系统查看。
  3. Physics:搭载物理插件的参数。铰链、万向节等结构用到物理插件。

(二)Viewpoint:视角

  • follow:输入机器人名字,在仿真的时候视图跟随机器人移动。

(三)TexturedBackground: 项目背景

(四)TexturedBackgroundLight :项目光线

(五)Floor :地板

simulation view 右键->新增节点->PROTO nodes->webots projects->objects->floors
  1. translation:相对坐标轴所在位置
  2. rotation:旋转角度

二、GUI:菜单栏

(一)File:文件菜单

  1. Open Sample World:打开示例世界。可在搜索字段中输入文件名或其中的一部分搜索“.wbt”文件
  2. Reload World:重新加载世界。从已保存的版本重新加载当前世界,并从头开始进行仿真。
  3. Reset Simulation:复位仿真菜单项目。恢复仿真的初始状态,仿真并没有像重新加载一样完全被破坏和重建,但所有节点的初始状态都可以恢复,较快。
  4. Import VRML97… :导入VRML97对象。在场景树的底部添加VRML97对象,显示为Group、Transform或Shape节点,可以将这些对象转换为Webots节点(例如Solid,Robot等),或将它们剪切并粘贴到children现有Webots节点列表中。
  5. Export VRML97… :导出VRML97对象。当前世界保存为符合VRML97标准的“.WRL”的文件。
  6. Export HTML5 Model… :导出HTML5模型。将当前世界导出为交互式3D“ .html”文件。
  7. Make HTML5 Animation…:制作HTML5动画。

(二)Edit:编辑菜单
(三)View:查看菜单
(四)Simulation:模拟菜单
(五)Build:生成菜单
(六)Overlays:叠加菜单

  1. Camera Devices:摄像机设备
  2. RangeFinder Devices:测距仪设备
  3. Display Devices:显示设备
  4. Hide All Camera Overlays:隐藏所有摄像机覆盖物
  5. Hide All RangeFinder Overlays 隐藏所有RangeFinder叠加层
  6. Hide All Display Overlays:隐藏所有显示覆盖图

(七)Tools:工具菜单

  1. Documentation:文档。脱机Webots文档窗口。
  2. Restore Layout:还原布局。还原主窗口面板的出厂布局。
  3. Clear Console:清除控制台。
  4. Edit Physics Plugin:编辑物理插件。将在文本编辑器中打开物理插件的源代码。
  5. Preferences:首选项。弹出本节中描述的窗口。

(八)Wizards:向导菜单

  1. New Project Directory…:新建项目目录。首先提示您选择文件系统位置,然后创建一个项目目录。项目目录包含几个子目录,即世界文件、控制器文件、数据文件、插件等。Webots会记住当前项目目录,并自动从中打开并保存任何类型的当前项目目录的相应子目录文件。
  2. New Robot Controller …:创建新的控制器程序。首先提示在C,C++,Java,Python或MATLAB 控制器之间进行选择。如果您在Windows上选择C或C ++,Webots将为您提供创建Makefile / gcc项目或Visual Studio项目的可能性。然后,Webots将要求您输入控制器的名称,最后它将在当前项目目录中创建所有必需的文件(包括模板源代码文件)。
  3. New Physics Plugin…:新建物理插件。可创建新的物理插件。Webots要求您选择一种编程语言(C或C++)和新的物理插件的名称,然后,它将在当前项目中创建目录,模板源代码文件和Makefile。

(九)Help:帮助菜单

三、工具栏

在这里插入图片描述
显示/隐藏场景树 新增节点 还原视角 选择视角 打开文件 保存文件 重新加载世界
在这里插入图片描述
时间-速度表 复位仿真 分步运行仿真 实时运行仿真 运行仿真 加快运行仿真
在这里插入图片描述
仿真录像 HTML5动画录制 截图 调节音量

四、3D window:仿真界面(3D窗口)

五、Text editor:文本编辑器(代码区)

包括代码编写区域、编译区域、重新载入到机器人控制器中等。

六、Console:控制台(调试窗口)

提示每个机器人控制器的输出信息
.
.
.

一、创建模型

以球为例:

  1. simulation右键->新增->Base nodes->Solid(固体)节点
  2. Solid节点->children右键->Base nodes->Shape(为固体赋以形状),可在name为Shape节点命名
  3. Shape节点->geometry NULL双击->Sphere节点(为固体赋以具体形状)
  4. Shape节点->appearance NULL双击(为固体赋以花纹)
    appearance节点->roughness(粗糙度)和metalness(金属度)
  5. 修改Solid节点->translation 和rotation
  6. 让球自由落体:Solid节点-> physics NULL双击->Physics->density(密度)mass(质量)->“开始”按钮,实现自由落体
    默认密度1000,质量-1,代表不使用质量这个属性。密度改为-1,质量设置为相应值,则可设置质量信息。二者只能设置一个,另一个固定。
  7. 设置边界域,实现碰撞:Solid节点-> boundingObject NULL双击->Base nodes->Sphere
    若geometry修改了名字如“Ball”,则Solid节点-> boundingObject NULL双击->USE-> Ball(Sphere)

二、创建项目

  1. 向导->新建项目
  2. simulation view 右键->新增节点->PROTO nodes(Webots)->objects->floors->保存!!总忘保存!
  3. simulation view 右键->新增节点->PROTO nodes(Webots)->robots->gctronic->e-puck->E-puck(机器人自带controller)->保存!!总忘保存!
  4. 向导->新建机器人控制器->选择语言C->Microsoft VS->修改控制器名字
  5. E-puck节点->controller->刚刚建立的控制器

三、控制器

初始化机器人
开始仿真步骤
读取传感器数据
过程行为 电机采取行动
写执行器
清理机器人

初始化机器人:wb_robot_init();
初始化传感器、电机等。
控制器函数:
wb_motor_set_position:函数使用当前速度、加速度、电机转矩/力参数指定PID控制器使机器人到达目标位置
wb_motor_set_velocity:指定机器人运行速度。
wb_robot_get_device:返回一个指定的名字

四、连接

将两个物体焊接在一起

physics
children
boundingObject
children
geometry
children
children
geometry
children
children
geometry
Solid
Physics
DEF G0 Group
USE G0
Shape
Cylinder
Transform
Shape
Sphere
Transform
Shape
Sphere

节点 Node
节点继承

Solid
Group
Transform
Shape
Solid
Shape
Fluid
TrackWheel

Robot——机器人,Solid——个体,Group——组,Transfrom——坐标,Shape——外观

  1. Group节点:针对robot整个环境建立坐标系,直接派生节点Transform。
    等效于包含身份转换的Transform节点。Group使用DEF关键字命名,在boundingObject USE中使用USE语句进行了引用,则对整个robot进行边界设置。
  2. Transform节点:是一个分组节点,它为其子级定义相对于其父级坐标系的坐标系,也就是在已有(Group)坐标系上转换坐标系。
    translation字段:定义从父坐标系到子坐标系的平移。rotation字段:定义了子级坐标系相对于父级坐标系的任意旋转。如果一个Transform是使用DEF关键字命名的,后来又在boundingObject USE中使用USE语句进行了引用,则对应于其第一个Geometry子级的约束将应用于scale定义Transform及其所有其他引用的字段。
  3. Shape节点:用于创建世界呈现的对象。可见对象由几何形状和外观组成。
    appearance节点:指定要应用于几何图形的视觉属性(例如,材质和纹理)。geometry节点:指定几何图形外观形状。

做个小车 嘿嘿

Webots简单自学笔记(随时更新)_第1张图片

小车前进控制器:go_forward.cpp

#include <webots/robot.h>
#include <webots/motor.h>
#include <webots/distance_sensor.h>

/*
 * You may want to add macros here.
 */
#define TIME_STEP 64


/*
 * This is the main program.
 * The arguments of the main function can be specified by the
 * "controllerArgs" field of the Robot node
 */
int main(int argc, char **argv) {
    wb_robot_init();
    int i;
    bool avoid_obstacle_counter = 0;
    WbDeviceTag ds[2];
    char ds_names[2][10] = { "ds_left", "ds_right" };
    for (i = 0; i < 2; i++) {
        ds[i] = wb_robot_get_device(ds_names[i]);
        wb_distance_sensor_enable(ds[i], TIME_STEP);
    }
    WbDeviceTag wheels[4];
    char wheels_names[4][8] = { "motor1", "motor2", "motor3", "motor4" };
    for (i = 0; i < 4; i++) {
        wheels[i] = wb_robot_get_device(wheels_names[i]);
        wb_motor_set_position(wheels[i], INFINITY);
    }
    while (wb_robot_step(TIME_STEP) != -1) {
        double left_speed = 1.0;
        double right_speed = 1.0;
        if (avoid_obstacle_counter > 0) {
            avoid_obstacle_counter--;
            left_speed = 1.0;
            right_speed = -1.0;
        }
        else { // read sensors
            double ds_values[2];
            for (i = 0; i < 2; i++)
                ds_values[i] = wb_distance_sensor_get_value(ds[i]);
            if (ds_values[0] < 950.0 || ds_values[1] < 950.0)
                avoid_obstacle_counter = 100;
        }
        wb_motor_set_velocity(wheels[0], left_speed);
        wb_motor_set_velocity(wheels[1], right_speed);
        wb_motor_set_velocity(wheels[2], left_speed);
        wb_motor_set_velocity(wheels[3], right_speed);
    }
    wb_robot_cleanup();
    return 0;  // EXIT_SUCCESS

  return 0;
}

  1. HingeJoint节点:铰链接头,可用于铰链建模,即接头只围绕给定轴线(1个自由度)的旋转运动。
    继承了Joint的jointParameters字段,该字段只能用HingeJointParameters填充。axis:设置铰链的旋转方向。anchor:设置铰链的具体位置。device:device->Base nodes->Brake(刹车)RotationalMotor(电机)/PositionSensor(位置传感器)。如果未指定电动机,则该接头为被动接头。endpoint Solid:设定translation的位置,要和anchor 的参数有关,这个直接决定你的旋转物围绕anchor点旋转。position:此字段在“场景树”中不可见,请参见关节的隐藏位置字段。

  2. HingeJointParameters 节点:从JointParameters派生,可以被用来指定所述铰链转动轴线和与该旋转轴不同的关节参数(例如,角位置,停止角度,弹簧和阻尼常数等)。
    anchor字段:指定锚位置,即铰链轴穿过的点。与axis从JointParameters节点继承的字段一起,anchor以唯一的方式确定铰链旋转轴。它以相对于最近的上层Transform节点的帧的相对坐标表示。suspensionSpringConstant字段:指定沿悬架轴的悬架弹簧常数。suspensionAxis字段:指定悬挂轴的方向。suspensionDampingConstant字段:指定沿悬架轴的悬架阻尼常数。suspensionSpringConstant和suspensionDampingConstant字段可沿着限定的轴线suspensionAxis添加一个线性弹簧或阻尼行为。这些字段在JointParameters的“弹簧和阻尼器”部分中有更详细的描述。

  3. Device 节点: 抽象节点(不可实例化),表示机器人设备(执行器和/或传感器)。

    wb_device_get_model:返回相应设备的型号字符串
    

    返回与参数(tag)给出的WbDeviceTag对应的设备的模型字符串。如果WbDeviceTag与有效设备不匹配,则此函数返回NULL;如果该设备不是固定设备(即,没有model字段),则此函数返回空字符串。

    wb_device_get_name:将WbDeviceTag转换为其相应的设备名称
    

    将参数(tag)给出的WbDeviceTag转换为其相应的名称。如果WbDeviceTag与有效设备不匹配,则此函数返回NULL。

    wb_device_get_node_type:将WbDeviceTag转换为其相应的WbNodeType
    

    将参数(tag)给出的WbDeviceTag转换为其相应的WbNodeType(请参见Supervisor API)。如果WbDeviceTag与有效设备不匹配,则此函数返回NULL。

PROTO

PROTO节点允许用户通过添加自己的节点来扩展节点集。因此,用户可以构建和调用复杂对象。

PROTO根据内置节点或其他PROTO节点来定义新的节点类型;PROTO接口定义PROTO的字段。一旦定义,PROTO节点可以像内置节点一样在场景树中实例化。

Your First PROTO教程提供了创建自己的PROTO节点的动手过程。
可以将刚建立的四轮机器人导出成一个单独节点,,这样可以在新的世界直接使用

项目文件夹->proto文件夹->新建文本文档.txt,修改成后缀为.proto文件(如:FourWheelRobot.proto)->编写PROTO节点文件->在同一个项目文件夹下world新建世界->新增节点->PROTO nodes(Current Project)->FourWheelRobot(Robot)
PROTO节点编写格式

PROTO protoName [
  protoFields  //对周边环境的定义   
]
{
  protoBody  //机器人代码
}
// An highlighted block
var foo = 'bar';
PROTO FourWheelsRobot [
  field SFVec3f    translation 0 0 0
  field SFRotation rotation    0 1 0 0
  field SFFloat    bodyMass    1
]
{
  Robot {
  	translation IS translation
  	rotation IS rotation
  	children [
  	  //# list of children nodes
  	  //将.wbt文件通过vs code打开,将其中children内的部分复制到这里
  	]
  	boundingObject USE BODY
  	physics Physics {
  	  density -1
  	  mass IS bodyMass
  	}
	controller "four_wheels_collision_avoidance"
  }
}

你可能感兴趣的:(webots)