Webots 2019a 中文
保存!保存!随手保存!!别的不重要,随手保存是王道!!!
(一)WorldInfo:世界信息
参考手册(F4)(reference.pdf) 3.53节 WorldInfo
(二)Viewpoint:视角
(三)TexturedBackground: 项目背景
(四)TexturedBackgroundLight :项目光线
(五)Floor :地板
simulation view 右键->新增节点->PROTO nodes->webots projects->objects->floors
(一)File:文件菜单
(二)Edit:编辑菜单
(三)View:查看菜单
(四)Simulation:模拟菜单
(五)Build:生成菜单
(六)Overlays:叠加菜单
(七)Tools:工具菜单
(八)Wizards:向导菜单
(九)Help:帮助菜单
显示/隐藏场景树 新增节点 还原视角 选择视角 打开文件 保存文件 重新加载世界
时间-速度表 复位仿真 分步运行仿真 实时运行仿真 运行仿真 加快运行仿真
仿真录像 HTML5动画录制 截图 调节音量
包括代码编写区域、编译区域、重新载入到机器人控制器中等。
提示每个机器人控制器的输出信息
.
.
.
以球为例:
初始化机器人:wb_robot_init();
初始化传感器、电机等。
控制器函数:
wb_motor_set_position:函数使用当前速度、加速度、电机转矩/力参数指定PID控制器使机器人到达目标位置。
wb_motor_set_velocity:指定机器人运行速度。
wb_robot_get_device:返回一个指定的名字
将两个物体焊接在一起
节点 Node
节点继承
Robot——机器人,Solid——个体,Group——组,Transfrom——坐标,Shape——外观
小车前进控制器: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;
}
HingeJoint节点:铰链接头,可用于铰链建模,即接头只围绕给定轴线(1个自由度)的旋转运动。
继承了Joint的jointParameters字段,该字段只能用HingeJointParameters填充。axis:设置铰链的旋转方向。anchor:设置铰链的具体位置。device:device->Base nodes->Brake(刹车)RotationalMotor(电机)/PositionSensor(位置传感器)。如果未指定电动机,则该接头为被动接头。endpoint Solid:设定translation的位置,要和anchor 的参数有关,这个直接决定你的旋转物围绕anchor点旋转。position:此字段在“场景树”中不可见,请参见关节的隐藏位置字段。
HingeJointParameters 节点:从JointParameters派生,可以被用来指定所述铰链转动轴线和与该旋转轴不同的关节参数(例如,角位置,停止角度,弹簧和阻尼常数等)。
anchor字段:指定锚位置,即铰链轴穿过的点。与axis从JointParameters节点继承的字段一起,anchor以唯一的方式确定铰链旋转轴。它以相对于最近的上层Transform节点的帧的相对坐标表示。suspensionSpringConstant字段:指定沿悬架轴的悬架弹簧常数。suspensionAxis字段:指定悬挂轴的方向。suspensionDampingConstant字段:指定沿悬架轴的悬架阻尼常数。suspensionSpringConstant和suspensionDampingConstant字段可沿着限定的轴线suspensionAxis添加一个线性弹簧或阻尼行为。这些字段在JointParameters的“弹簧和阻尼器”部分中有更详细的描述。
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节点可以像内置节点一样在场景树中实例化。
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"
}
}