小組會議記錄 課 程 名 稱 智慧系統設計與應用
授 課 教 師 林金玲
組
別 第一組
組
主
題 E-puck 程式討論
日
期
時
間
14
地
點
RC 線上聊天室
101
年
時 0
4 分
月
長
2
~ 16
蕭姿俞
日 時
30
分
出 席 成 員 林書瑄、蕭姿俞、黃懷恩、費宗儒、吳育碩 記
錄
者
蕭姿俞 內
容
一、 使用 webots 模擬程式 二、 決定使用於言為 C 三、 理解範例程式,加以修改 1. Include 所需 API #include <stdio.h> #include <stdlib.h> #include <webots/differential_wheels.h> //馬達控制 #include <webots/distance_sensor.h>
//紅外線感測器
#include <webots/robot.h> #define TIME_STEP 64 2. 主程式 int main(int argc, char **argv) { wb_robot_init();
//robot 初始化
static WbDeviceTag ps[8];
//宣告感測器與對應變數
char ps_names[8][4] = {"ps0","ps1","ps2","ps3","ps4", "ps5", "ps6", "ps7"}; int i;
//自定義常數
int f =0; for(i=0;i<8;i++)
//利用 for 迴圈,取得紅外線感應器
{//使用內建方法 wb_robot_get_device( ); wb_distance_sensor_enable( ); }
老師
//宣告馬達變數 double left_speed, right_speed, Max_speed, Min_speed while(1)
//主要迴圈
{ int delay = wb_robot_step(TIME_STEP); if(delay==-1)break; double ps_values[8]; for( i=0;i<8;i++)
//使用 for 迴圈
{ 抓取感應器所偵測的數值 wb_distance_sensor_get_value( ); } //偵測左邊障礙物,設定偵測距離 bool left_obstacle = ps_values[5]>100.0|| ps_values[6]>100.0; //偵測右邊障礙物 bool right_obstacle = ps_values[2]>100.0|| ps_values[1]>100.0; //偵測前方障礙物 bool front_obstacle = ps_values[0]>100.|| ps_values[7]>100.0; //偵測後方障礙物 bool back_obstacle = ps_values[3]>100.|| ps_values[4]>100.0; //判斷速度有無 overflow if((left_speed>Min_speed)&&(left_speed<Max_speed)&&(right_speed>Min_speed)&&(right_speed<Max_speed)) { if(front_obstacle) //前方障礙 { if(f==0) {後退 } else { //右轉 f=0;} f++; } else if(back_obstacle) //後方障礙 {//前進} else if(left_obstacle) //左邊障礙 {//右轉} else if(right_obstacle) //右邊障礙 {//左轉 } else
}
{若速度超過-300~300,就將速度重設為 100 left_speed=100; right_speed=100; } //使用內建方法,驅動馬達 wb_differential_wheels_set_speed(left_speed,right_speed); } wb_robot_cleanup(); return 0; }