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 否则,机器人会跟打了鸡血一样。

这个完整的样例讲的差点儿相同了,后面就要进入深入的研究了,大家一起学习~

最新文章

  1. python+uwsgi导致redis无法长链接引起性能下降问题记录
  2. 指针,&amp;的用法
  3. Linux高级编程--11.信号
  4. Git与Repo入门(转载)
  5. 黑马程序员——JAVA基础之包,权限
  6. [CSS]学习总结
  7. Discuz!NT3.6与网站整合(操作用户信息)解决方案
  8. php抓取页面的几种方法详解
  9. Java中迭代列表中数据时几种循环写法的效率比较
  10. 在IOS应用中从竖屏模式强制转换为横屏模式
  11. PHP面试和PHP开发者都应掌握的10个问题
  12. 周强 201771010141 《面向对象程序设计(java)》第九周实验总结
  13. HDU 4825 Xor Sum(01字典树)题解
  14. telnet强制中断登录
  15. FileInputStream类与FileOutputStream类
  16. 20155203 2016-2017-3 《Java程序设计》第5周学习总结
  17. java把指定文字输出为图片流,支持文字换行
  18. 【转载】Linux内存中buffer和 cached的比较
  19. WEB-INFO 目录
  20. ruby学习笔记(1)-puts,p,print的区别

热门文章

  1. 项目中那些事|ListView中嵌套ListView问题
  2. 聊聊高并发(三十八)解析java.util.concurrent各个组件(十四) 理解Executor接口的设计
  3. [Sqlite] 移动嵌入式数据库Sqlite日报SQL操作语句汇总
  4. Javascript异步数据的同步处理方法
  5. spring 普通类获取四大作用域request、applicationContext、session、page
  6. linux下执行strlwr函数出错:ld returned 1 exit status
  7. 算法学习 - 图的广度优先遍历(BFS) (C++)
  8. QT Programming 1
  9. 发展合作-ASP.Net传递页面之间的值
  10. KMP求字符串最小循环节