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;
}
程式碼根據註釋很容易理解,但是以後擴充套件需要用到更多的函式就要檢視reference manual了,大家一起學習。那麼我把如何使用controller操控robot的注意事項說一下
1)world建立完成以後,我們就要建立controller,這裡我們要記得我們當初在differentialWheels節點的controller域填的名字嗎,那麼我們就要嚴格按照這個名字在Wizard->new Robot Controller填上完全一致的名字,否則在連結controller原始檔時會報錯。
2)我們也可以使用VC6.0來進行原始檔的編寫,這樣更方便快捷,這裡要注意的要在VC6.0中新增程式碼根據註釋很容易理解,但是以後擴充套件需要用到更多的函式就要檢視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 worldWebUI
- Gradle for Android 第二篇( Build.gradle入門 )GradleAndroidUI
- [入門級]Setting up Python in Windows 7PythonWindows
- Not enough space to build proposed filesystem while setting up superblockUIWhileBloC
- gRPC(二)入門:Protobuf入門RPC
- mySql入門-(二)MySql
- Storm入門指南第二章 入門ORM
- Flutter入門篇(二)Flutter
- Go快速入門(二)Go
- spring入門(二)Spring
- Vue快速入門(二)Vue
- Electron 入門指北(二)
- 五線譜入門(二)
- [譯】Redux入門教程(二)Redux
- Flask二之快速入門Flask
- Flutter入門——山寨掘金(二)Flutter
- HTML入門基礎(二)HTML
- JavaSE基礎入門(二)Java
- 機器學習入門|聚類(二)機器學習聚類
- AVFoundation 簡單入門二
- nodejs入門指南(二)NodeJS
- ExpressJS入門指南(二)ExpressJS
- Struts快速入門(二) (轉)
- Nginx入門實踐(二)Nginx
- SpringBoot入門教程(十七)@Service、@Controller、@Repository、@ComponentSpring BootController
- Unity3D開發入門教程(二)—— Lua入門Unity3D
- 逆向入門分析實戰(二)
- vuex 基本入門和使用(二)Vue
- openresty前端開發入門二REST前端
- ActiveMQ從入門到精通(二)MQ
- Jetpack ---- Data Binding入門(二)Jetpack
- JavaScript入門-函式function(二)JavaScript函式Function
- EF Core 二 、 入門 EF Core
- 聊聊Dubbo(二):簡單入門
- Spring MVC入門教程(二)SpringMVC
- ES6快速入門(二)
- TinyXML快速入門(一)(二)(三)XML
- ReactJS入門學習二ReactJS