Sumo Robot 机器人大战
近期,DFRobot内部员工业余时间Sumo Robot 机器人大战开赛在即,欢迎有兴趣的朋友参加,第一次测试性比赛时间为:7月15日。比赛规则如下:提供pdf文件附件。
Part1场地设置:1. 80cm直径圆形场地。2. 蓝底白圈,中间白色十字,白边宽度5cm。3. 材质:亚光深色桌。4. 场地边界一米外没有障碍物。Part2车辆限制:1. 原型机:mini Robot chassis2. 尺寸:<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. 比赛采用淘汰赛制,对阵图于赛前一日抽签,并进行车辆检查。检查完毕任何外形不得修改。
上传一些国际上的赛事图片,供大家参考一下。
这里需要大家知道的是第一次比赛非常正式,目的只不过是让大家练练手,真正的比赛在第二次,大家可以改动的空间更大,完全自己设计机器人,到时候鹿死谁手。。。。。。哈哈。。。我们比赛见
本帖最后由 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 ();
}
}
晚上搜到一篇挺不错的资料——RobotCup的一篇技术文档,不过是英文的哦!!!哈哈
mark………………
页:
[1]