Webots入门(二)-build up a controller
A simple controller
控制器程序读取传感器的值,然后改动行走速度来避开障碍物。
以下是控制器源码mybot_simple.c:
#include<webots/robot.h>
#include<webots/differential_wheels.h>
#include<webots/distance_sensor.h>
#define SPEED 60
#define TIME_STEP 64 int main()
{
wb_robot_init();//初始化webots
//获取并使能距离传感器
WbDeviceTag ir0 = wb_robot_get_device("ir0");
WbDeviceTag ir1 = wb_robot_get_device("ir1");
wb_distance_sensor_enable(ir0,TIME_STEP);
wb_distance_sensor_enable(ir1,TIME_STEP); while(wb_robot_step(TIME_STEP)!=-1){ //GET distance sensor values
double ir0_value = wb_distance_sensor_get_value(ir0);
double ir1_value = wb_distance_sensor_get_value(ir1); //Computer the motor speeds
double left_speed, right_speed;
if (ir1_value > 500) {
/*
*假设两个传感器都检測到了某物,这意味着面对着一堵墙。这样的状况我们须要后退。
*/
if(ir0_value > 500){
left_speed = -SPEED;
right_speed = -SPEED/2;
}
else{
left_speed = -ir1_value /10;
right_speed = (ir0_value / 10) + 5;
}
}
else if(ir0_value>500){
left_speed = (ir1_value / 10) + 5;
right_speed = -ir0_value /10;
}
else{
left_speed = SPEED;
right_speed = SPEED;
} //设置移动速度
wb_differential_wheels_set_speed(left_speed, right_speed);
}
return 0; }
代码依据凝视非常easy理解,可是以后扩展须要用到很多其它的函数就要查看reference manual了,大家一起学习。那么我把怎样使用controller操控robot的注意事项说一下
1)world建立完毕以后,我们就要建立controller,这里我们要记得我们当初在differentialWheels节点的controller域填的名字吗,那么我们就要严格依照这个名字在Wizard->new Robot Controller填上全然一致的名字,否则在链接controller源文件时会报错。
2)我们也能够使用VC6.0来进行源文件的编写,这样更方便快捷,这里要注意的要在VC6.0中加入代码依据凝视非常easy理解,可是以后扩展须要用到很多其它的函数就要查看reference manual了,大家一起学习。那么我把怎样使用controller操控robot的注意事项说一下world建立完毕以后,我们就要建立controller,这里我们要记得我们当初在differentialWheels节点的controller域填的名字吗,那么我们就要严格依照这个名字在Wizard->new
Robot Controller填上全然一致的名字,否则在链接controller源文件时会报错。我们也能够使用VC6.0来进行源文件的编写,这样更方便快捷。
(1) 选择Project菜单条中的Setting菜单项,在弹出的Project Settings对话框中选择C\C++属性页后,然后在该属性页中的Category下拉框中选择Preprocessor在其Additional Include Directories文本框中手动输入{$WEBOTSHOME}\include
(2) 然后再到Link属性页中,在该属性页中的Category下拉框中选择General选项,将Output Files Name文本框中的Release\simulation.exe,改为simulation.exe,然后在其Object/library modules文本框中手动加入controller.lib
(3) 最后在Category下拉框中选择Input选项,在其Additional library path文本框中输入{$WEBOTSHOME}\lib。
3) 最后执行时要注意将WorldInfo的runRealTime 改为true 否则,机器人会跟打了鸡血一样。
这个完整的样例讲的差点儿相同了,后面就要进入深入的研究了,大家一起学习~
Webots入门(二)-build up a controller的更多相关文章
- AngularJS入门心得1——directive和controller如何通信
粗略地翻了一遍<JavaScript DOM编程艺术>,就以为可以接过AngularJS的一招半式,一个星期过去了,我发现自己还是Too Young,Too Simple!(刚打照面的时候 ...
- 微服务(入门二):netcore通过consul注册服务
基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...
- springMVC入门二
一.准备工作 参考springMVC入门一,搭建maven项目如下: 前台结构如下: 项目介绍:使用springMVC实现前后台数据交互,例如controller返回json,页面传入pojo 二.具 ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)
原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...
- DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表
原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...
- css入门二-常用样式
css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...
- IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)
1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...
随机推荐
- linux LNMP自动安装脚本
#!/bin/bashsoft_dir="/home/soft"config_dir="/home/config"httpd="httpd-2.0.5 ...
- UpdatePanel Repeater内LinkButton造成页面刷新问题
本意:UpdatePanel1内嵌的Repeater1中带有LinkButton1, 将由LinkButton1触发页面的UpdatePanel2更新,而不需要更新UpdatePanel1,当然也不需 ...
- mahout源码KMeansDriver分析之五CIMapper
接上文重点分析map操作: Vector probabilities = classifier.classify(value.get());// 第一行 Vector selections = pol ...
- H264 编解码框架简单介绍
阅读完H264/AVC 编解码器的介绍,脑海中仅仅是留下下面三条: 1.H264并没有明白规定一个编解码器怎样实现,仅仅是规定了一个编码后的视频比特流的句法,和该比特流的解码方法,这个与MPEG 类似 ...
- Codeforces 191 C Fools and Roads (树链拆分)
主题链接~~> 做题情绪:做了HDU 5044后就感觉非常easy了. 解题思路: 先树链剖分一下,把树剖分成链,由于最后全是询问,so~能够线性操作.经过树链剖分后,就会形成很多链,可是每条边 ...
- 依赖注入(DI)
依赖注入(DI) IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用“好莱坞原则”是应用程序以被动的方式实现对流程的定制.我们可以采用若干设 ...
- 深入理解java虚拟机系列(一):java内存区域与内存溢出异常
文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上 ...
- 视频编解码器,bbv 缓冲区溢出和下溢
使用硬件相似数据处理.数据通常未来,形式的处理后,立即出动.所以,一般有一个数据馈送,数据输出,2接口. 实时硬件处理的基本要求.进来的数据,紧接着治疗头发治疗,这需要在很短的时间,好多毫秒以内,才干 ...
- hdu5338 (二进制,双指针)
这种双循环的优化问题碰到过很多了.层出不穷. 但无非就是要利用前面循环时,所产生的信息,从而减少计算. 可以注意到log其实是不超过40的, 那么以这方面入手,时间复杂度就可以降为nlogn log= ...
- Windows Phone开发(4):框架和页
原文:Windows Phone开发(4):框架和页 在开如之前,我想更正一个小问题,之前我在第一篇文章中说,Visual Studio Express for Windows Phone的中文版没有 ...