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.

Notes on how to use Webots, especially how to make a robot fly in the air的更多相关文章

  1. 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 ...

  2. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  3. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  6. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  7. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  8. MAGIC XPA最新版本Magic xpa 2.4c Release Notes

    New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...

  9. 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 ...

随机推荐

  1. Text input(文本输入框)

    Text input(文本输入框)是用来获得用户输入的绝佳方式. 你可以用如下方法创建: <input type="text"> 注意,input元素是自关闭的.

  2. 第33讲:List的一阶函数操作代码实战详解

    今天来看一下关于List的一阶函数操作 让我们看下下面的代码 println(List(1,2,3,4):::List(4,5,6,7,8):::List(10,11))//列表连接    print ...

  3. [Xamarin] 透過WebClient跟網路取得資料 (转帖)

    之前寫過一篇文章,關於在Android上面取得資料 透過GET方式傳資料給Server(含解決中文編碼問題) 我們來回顧一下 Android 端的Code: 有沒有超多,如果是在Xaramin下面,真 ...

  4. SQL 注入

    我们的团队项目中有课程名称输入框,其中的内容会拼接到类sql查询语句中. 所以可能会产生类sql注入的问题,我们团队采用了利用正则表达式判断输入内容的形式来规避这类注入. 下面简单介绍一下sql注入 ...

  5. 【Leetcode】【Hard】Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  6. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)

    时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...

  7. 【ASP.NET Web API教程】6.4 模型验证

    本文是Web API系列教程的第6.4小节 6.4 Model Validation 6.4 模型验证 摘自:http://www.asp.net/web-api/overview/formats-a ...

  8. 从代码分析Android-Universal-Image-Loader的图片加载、显示流程

    从UNIVERSAL IMAGE LOADER. PART 3(四个DisplayImage重载方法详解)中,我们学习了Android-Universal-Image-Loader(以下简称UIL)中 ...

  9. 读《你必须知道的.NET》继承本质论 Bird bird=new Chicken()

    我们创建如下的三层继承层次类. public abstract class Animal { public abstract void ShowType(); } public class Bird ...

  10. [ACM_模拟] ZJUT 1155 爱乐大街的门牌号 (规律 长为n的含k个逆序数的最小字典序)

    Description ycc 喜欢古典音乐是一个 ZJUTACM 集训队中大家都知道的事情.为了更方便地聆听音乐,最近 ycc 特意把他的家搬到了爱乐大街(德语Philharmoniker-Stra ...