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 ...
随机推荐
- nginx事件模块分析(一)
nginx ngx_events_module模块分析 ngx_events_module模块是核心模块之一,它是其它所有事件模块的代理模块.nginx在启动时只与events模块打交道,而由even ...
- QlikView ETL - 分隔字符串的方法 SubField
开篇介绍 今天在使用 QV 加载数据的时候会碰到列中的一些状态,信息是通过:或者 / 等符号分隔的,这样不利于做数据分析,因为字符串中的内容本身就是维度.上网搜了一下找到了解决的方法,记录一下. 比如 ...
- Nginx学习笔记(九) 配置文件详细说明
配置文件详细说明 工作了几个月要开始做一些后台开发,免不了接触nginx,以前一般只是简单的使用,更多的分析内部模块的具体实现,为了部署需要进一步掌握配置方法. 全局配置信息 #nginx worke ...
- [stm32] GPIO及最小框架
1.GPIO硬件结构图: 2.GPIO程序结构: 3.框架介绍: 这里的ASM是固定启动文件夹,startup_stm32f10x_hd.s表示当前stm32类型为高容量设备,当然还有md.s等. C ...
- SublimeText2 快捷键一览
ctrl+shift+w: 关闭Sublime,关闭所有打开文件ctrl+n: 新建文件ctrl+s: 保存ctrl+shift+s: 另存为ctrl+f4: 关闭文件ctrl+w: 关闭f11: 切 ...
- Qt 二级菜单栏 中文无法输入问题
问题描述:Qt5.3.1版本在建立主界面的二级菜单的时候,中文无法输入,而英文确是可以输入的.(首先我在网页上面搜索了一下,他们说是Qt的设计问题.) 解决方法: (1)粘贴复制,把中文写在其他的地方 ...
- 往linux上传、下载
http://skypegnu1.blog.51cto.com/8991766/1538371
- jquery判断页面滚动条(scroll)是上滚还是下滚,且是否滚动到头部或者底部
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- .NET Remoting学习笔记(二)激活方式
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科 ♂风车车.Net 激活方式概念 在 ...
- Maven学习总结(八)——使用Maven构建多模块项目
在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...