Notes on how to use Webots, especially how to make a robot fly in the air

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 the none  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.

你可能感兴趣的:(robot)