6735| 5
|
Sumo Robot 机器人大战 |
近期,DFRobot内部员工业余时间Sumo Robot 机器人大战开赛在即,欢迎有兴趣的朋友参加,第一次测试性比赛时间为:7月15日。 比赛规则如下:提供pdf文件附件。 Part1 场地设置: 1. 80cm直径圆形场地。 2. 蓝底白圈,中间白色十字,白边宽度5cm。 3. 材质:亚光深色桌。 4. 场地边界一米外没有障碍物。 Part2 车辆限制: 1. 原型机:mini Robot chassis 2. 尺寸:<15X15cm 高度不限 3. 重量:<500g (使用DFrobot自制称重器作为官方比赛用秤) 4. 控制类型:自控(非遥控) 5. 机器人比赛任何时刻尺寸不得超过15X15cm尺寸 6. 可用电机:N20系列(即mini Robot chassis所配电机同系列不同变速箱) 7. 驱动轮:2个 Part3 电子设置: 1. 主要微处理器:Arduino系列 2. 最大电池容量:4 节 1.5V电池 Part4 赛前准备: 1. 位置:边线内任意直径两端。 2. 启动时间:比赛开始后5秒内机器人不得位移。 3. 比赛开始后所有人类远离场地边界1米以外。比赛结束前不得靠近。 4. 比赛开始3分钟后比赛强制结束。(HCR进场清场,人类不得靠近) 5. 比赛开始:裁判宣布比赛开始秒表开始计时。 Part5 输赢判定: 1. 2胜制:率先获得2场胜利者获胜。 2. 单场比赛最多局数10,10局后获得最多胜局者获胜。10局后仍未分出胜负…双双淘汰。 3. 比赛双方其中一方离开边界(不包括压线)之后2秒内没有返回且另一方仍在界内,界内方获胜。比赛结束。 4. 2秒内双双出界,且无任意方在2秒内返回,平局。比赛结束 5. 3分钟内没有分出胜负,hcr进场清场,平局。比赛结束。 6. 一方出界后,2秒内另一方亦出界,重新计时2秒,2秒内返回一方获胜。比赛结束。皆返回,比赛继续。 7. 单场比赛中任何一方不得修改机器人程序,每局间隔1分钟,越期不参赛者,判负。 8. 比赛采用淘汰赛制,对阵图于赛前一日抽签,并进行车辆检查。检查完毕任何外形不得修改。 |
234.02 KB, 下载次数: 3931
本帖最后由 swanglei 于 2013-7-1 12:51 编辑 来个样例代码 头文件先。。。。 /* * created 2013-05-23 * by lisper * control two DC car * init_dc (); need 4 arguments * ctlcar (char left, char right); * */ #include <Arduino.h> #define Lfront LOW #define Lback HIGH #define Rfront HIGH #define Rback LOW uint8_t ld = 4; uint8_t ls = 5; uint8_t rd = 7; uint8_t rs = 6; // init dc, like: init_dc (4 5 7 6) void init_dc (uint8_t ldp, uint8_t lsp, uint8_t rdp, uint8_t rsp) { ld = ldp; ls = lsp; rd = rdp; rs = rsp; pinMode (ld ,OUTPUT); pinMode (ls ,OUTPUT); pinMode (rd ,OUTPUT); pinMode (rs ,OUTPUT); } // x >= -127 && x <=127 void ctlcar (char left, char right) { if (left < 0) { left = -left; digitalWrite (ld, Lback); } else { digitalWrite (ld, Lfront); } if (right < 0) { right = -right; digitalWrite (rd, Rback); } else { digitalWrite (rd, Rfront); } analogWrite (ls, left*2); analogWrite (rs, right*2); } |
接下来主程序。。。 #include <Arduino.h> #include "ctlcar.h" #define sp 40 //speed #define FOUND(x) (x > 200) // #define OVER(x) (!x) int front_pin = A0; //front sensor pin int left_pin = 8; //left line pin int right_pin = 10; //right line pin int left; //left sensor value int right; //right sensor value int front; //front sensor value int l_sp = 30; //left speed int r_sp = 30; //right speed unsigned long start_time = 0; void setup() { Serial.begin (9600); pinMode (front_pin, INPUT); pinMode (left_pin, INPUT); pinMode (right_pin, INPUT); init_dc (4, 5, 7, 6); } // void loop() { front = analogRead (front_pin); left = digitalRead (left_pin); right = digitalRead (right_pin); //Serial.println (front); if (FOUND (front) && !OVER (left) && !OVER (right)) { ctlcar (50, 50); } else if (OVER (left) && !OVER (right)){ ctlcar (-sp, -sp); delay (300); ctlcar (sp, -sp); delay (random (300, 400)); } else if (OVER (right) && !OVER (left)){ ctlcar (-sp, -sp); delay (300); ctlcar (-sp, sp); delay (random (300, 400)); } else if (OVER (right) && OVER (left)){ ctlcar (-sp, -sp); delay (300); if (random (-1, 1)) ctlcar (-sp, sp); else ctlcar (sp, -sp); delay (random (300, 400)); } else if (millis () - start_time > 300){ if (random (-1, 1)) { ctlcar (sp, sp/2); } else { ctlcar (sp/2, sp); } start_time = millis (); } } |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed