How to create a new project
Wizard - New project directory
Scene Tree
Scene tree is a representation of the current world
How to create a controller
Wizards - New Robot Controller
How to link a controller with a robot
Scene tree - “Robot” - Controller - Choose
Sensors and Actuators in Robot(class):
#include <webots/Robot.hpp>
Accelerometer *Robot::getAccelerometer(const std::string &name);
Camera *Robot::getCamera(const std::string &name);
Compass *Robot::getCompass(const std::string &name);
Connector *Robot::getConnector(const std::string &name);
Display *Robot::getDisplay(const std::string &name);
DistanceSensor *Robot::getDistanceSensor(const std::string &name);
Emitter *Robot::getEmitter(const std::string &name);
GPS *Robot::getGPS(const std::string &name);
Gyro *Robot::getGyro(const std::string &name);
InertialUnit *Robot::getInertialUnit(const std::string &name);
LightSensor *Robot::getLightSensor(const std::string &name);
Motor *Robot::getMotor(const std::string &name);
Pen *Robot::getPen(const std::string &name);
PositionSensor *Robot::getPositionSensor(const std::string &name);
Receiver *Robot::getReceiver(const std::string &name);
Servo *Robot::getServo(const std::string &name);
TouchSensor *Robot::getTouchSensor(const std::string &name);
DESCRIPTION
These functions return a reference to an object corresponding to a specified name. Depending on the called function, this object can be an instance of a Device subclass. For example, if a robot contains a
DistanceSensor node whose name field is "ds1", the function getDistanceSensor will return a reference to a
DistanceSensor object. If the specified device is not found, the function returns NULL in C++, null in Java or thenone in Python.
DARwIn-OP model
The DARwIn-OP model contains principally:
- the 20 DOF
- LEDs
- accelerometer
- gyro
- camera
- realistic physics
There is no emitter or receiver in this model, so if we want to use emitter and receiver, we have to use other robots or define robots our own.
Supervisor
Supervisor is a special kind of robot. They can call functions of other robots and can also take a screen shot or a video of the simulation, restart or terminate the simulation, etc. It can read or modify the value of every fields in the Scene Tree, e.g. read or change the position of robots, the colors of objects, or switch on or off the light sources, and do many other useful things.
How to make a robot hover in the air
The key idea here is to give the robot some force to overcome gravity.
Give the robot a name:
Scene Tree - Aircraft - DEF: AIRCRAFT
2. Give the robot a initial position:
Scene tree - “aircraft robot” - translation - 0, 0.5, 0.5
3. Create a physics plugin:
Wizard - New Physics Plugin
4. After that, we will get a physics file in C or C++
5. In the physics file:
Define a dBodyID which will refer to the aircraft:
static dBodyID body1;
6. In the function void webots_physics_init(dWorldID world, dSpaceID space, dJointGroupID contactJointGroup) of the physics file, initialize body1:
body1 = dWebotsGetBodyFromDEF("AIRCRAFT");
7. In the function void webots_physics_step() of the physics file, add the force which would overcome gravity:
if(body1) dBodyAddForce(body1, 0, 9.81, 0);
8. Add the physics plugin into the project:
Scene tree - WorldInfo - physics - Select - “my-physics”.
How to output to console
Include the file stdio.h and use printf(“hello\n”).
The tricky thing here is that the command in printf must end up with a ‘\n’. Else it will not be output.
How to make a robot move in the air
The basic idea is to make the robot communicate with the physics plugin with radio and add force in the physics plugin to help it move.
Add an emitter in the robot to communicate with physics plugin:
Scene tree - “robot” - child - add emitter
2. Set Emitter range to -1, channel to 0, baudRate to -1. This is because the physics can only receive radio in channel 0.
3. Send the signal where you want the robot move with function wb_emitter_send.
4. In the physics plugin, receive the signal sent by the robot with function dWebotsReceive.
5. Use the function dBodyAddForce to give force to the robot and make it move.
PS.
If we only want the robot to move for several steps, we should remove the force given before by adding the opposite force.
If we want to make the robot move with keyboard instructions, we should enable keyboard in the robot controller and listen to the keyboard.
If we want to use one robot to send instruction to another robot to make it move, we can just sent radio signal in channel 0 with the designed data format.
- ASP.NET Core 1.1.0 Release Notes
ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- MAGIC XPA最新版本Magic xpa 2.4c Release Notes
New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...
- Magic xpa 2.5发布 Magic xpa 2.5 Release Notes
Magic xpa 2.5發佈 Magic xpa 2.5 Release Notes Magic xpa 2.5 Release NotesNew Features, Feature Enhance ...
随机推荐
- 如何解决PC端和移动端自适应问题?
做网页时,我们通常需要考虑到不同电脑屏幕尺寸,以及不同手机屏幕大小等问题,解决样式发生改变的情况,那么如何解决呢?现在主要是采用自适应来解决高度,宽度的,以及图片自适应问题,下面就PC端和移动端来总结 ...
- Install Solr+tomcat
1. chose the release you want: http://archive.apache.org/dist/lucene/solr/. 1) copy [solr_home]/dist ...
- js 操作map对象
转自:http://smallvq123.javaeye.com/blog/823923 /* * Map对象,实现Map功能 * * * size() 获取Map元素个数 * isEmpty() 判 ...
- JSON与XML的区别
1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...
- Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理
上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...
- ArcServer 10.0 “No Content”、“Server Host Cannot be null” 错误
问题一:"No Content" 问题描述: 在输入服务地址时:http://192.168.1.180/arcgis/services 结果出现下面的错误: 解决办法: ...
- SQL语法的重要知识点总结
好几年没写SQL语句了.现在到了新的team,需要用到数据库.作为QA的话时常需要使用客户端工具连接到数据库中找寻或修改数据.这么长时间没使用,一些SQL的使用技巧都忘得差不多了.晚上看了一些资料,花 ...
- Express 4 更新改变文档
概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一 ...
- [BTS] Exception occurred when persisting state to the database
Error 1 Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'J ...
- 利用nodejs模块缓存机制创建“全局变量”
在<深入浅出nodejs>有这样一段(有部分增减): 1.nodejs引入模块分四个步骤 路径分析 文件定位 编译执行 加入内存 2.核心模块部分在node源代码的编译过程中就编译成了二级 ...