MSE83 版 (精华区)
发信人: plaster (石膏手), 信区: MSE83
标 题: 附件:比赛规则和通讯模块的说明
发信站: 听涛站 (2001年12月15日22:39:17 星期六), 站内信件
一、 赛制
1、 由摄像头捕获比赛区域内的图象,并传送至电脑。
2、 裁判系统通过分析图象给出当前坦克位置坐标及目标点位置坐标等实时信息,并将
数据写入指定共享内存区域。
3、 选手控制程序通过分析数据生成控制信号,并经通讯模块发送至坦克。
4、 坦克上的控制电路对控制信号作出相应反应,驱动电机控制坦克,从当前位置驶向
目标点。
参赛作品由三部分组成:
1、 坦克一辆,要求能够在水平场地上自主(二维)运动。坦克模型原型由大赛组委会
提供。允许选手对其进行一定改动,但必须在技术方案报告中详细写明。在比赛中,如
果模型坦克违反技术要求而没有在技术报告中说明,经评委评议,组委会有权取消选手
参赛资格。
2、控制坦克运行的可执行程序及源代码,要求可在windows98环境下运行。该程序能根
据从内存中读取的坦克的实时位置坐标及目标点的坐标信息,做出控制对策,并生成相
应的控制信号。通过通讯接口,控制坦克从当前位置到达目标点。(详见附件)
3、 技术报告一套:包括设计方案、电路原理、电路原理图、预算及本技术文档中涉及
的要求参赛者写明的部分。技术报告内容应与参赛其他两部分相符。在预赛和决赛中,
如模型或软件违反技术要求而没有在技术报告中指明,经现场评委评议,组委会有权取
消该队参赛资格。同时,技术报告将作为评奖的参考依据之一。
二、 预赛规则及评分办法
预赛的目的在于检验参赛作品能否达到完成比赛的最基本要求,比赛办法如下:
1、 在场地中靠近一端线处设置目标区。目标区为圆形,大小略大于坦克模型车体。
2、 现场公布出发点位置。出发点距目标区中心不小于2m,初始前进方向和出发点与目
标区中心之间连线的夹角在90度到180度之间。
3、 选手控制程序在接到裁判程序发出的"开始"指令后,控制坦克模型自主地由出发点
向目标区前进。裁判程序同时开始计时。
4、 坦克模型运动过程中,由裁判系统提供实时的位置信息给控制程序;控制程序可实
现实时的调整、控制。比赛过程中不得有任何形式的人工干预。
5、 当坦克模型中心(车体的几何中心)与目标区中心的距离小于坦克模型车体宽度的
一半时,裁判系统即判定坦克"到达"目标,给出"结束"信号,并停止计时。控制程序接
到"结束"信号,应控制坦克模型立即停止。
6、 按照到达目标所用时间长短排定名次,确定进入决赛的选手。
7、 有下列情况之一的视为犯规,取消比赛成绩:
1. 裁判程序发出"开始"指令之前坦克模型开始运动;
2. 在整个比赛过程中(含到达目标之后而停止之前),坦克车体越出有效比赛区域;
3. 比赛过程中人工干预坦克模型的运动。
三、 决赛规则及评分办法
1、 在平台上布置5到10个目标区。目标区的大小略小于坦克模型面积,并依次编号1、
2、……、N。
2、 现场公布出发点位置,距离一号目标区中心不超过0.5m,初始前进方向和出发点与
一号目标区中心之间连线的夹角小于90度。
3、 控制程序在接到裁判程序发出的"开始"指令后,依次向各目标区前进。
4、 满足以下两个条件时,判定"到达"第i个目标区:
1) 坦克模型车体几何中心与目标区中心的距离小于坦克模型车体宽度一半;
2) 第i-1个目标区已被判定为"到达"。
5、 比赛时间(120秒)结束,裁判程序发出"结束"指令。按当时"到达"目标区的数量排
定名次。若"到达"目标区数量相同,则"到达"最后一个目标区总耗时少者获胜。
6、 坦克模型运动过程中,由裁判系统提供的实时位置信息给控制程序;控制程序可实
现实时的调整、控制。比赛过程中不得有任何形式的人工干预。
7、 有下列情况之一的视为犯规,取消比赛成绩:
1) 裁判系统发出"开始"指令之前坦克模型开始运动;
2) 整个比赛过程中,坦克车体越出有效比赛区域;
3) 比赛过程中人工干预坦克模型的运动。
附件一:通信接口说明(车体部分的制作)
控制程序与坦克模型之间以无线方式进行通信。选手可自行设计通信部分,也可选用大
赛组委会提供的无线通信模块。鼓励选手发挥自己的特长,独立设计。
大赛提供的模块功能如下:
采用高频无线电通信。发射端接计算机并口(硬件地址378H),接收端输出8位高低电平
。接收端分为两个独立的端口A口、B口,分时使用。每个端口占用一个地址,输出4位数
据。向并口写入数据时,高4位为接收端口的地址(A口地址规定为0000B,B口地址规定
为0001B),低4位是需要传输的数据。接口为TTL电平。需要提供+5V电源,有8路控制
信号(高低电平)可供使用。
发射端加电后立即开始发送数据。不论并口数据位状态是否改变,发射端始终以固定的
频率重复发送。接收端带有数据锁存,接收到的数据可以一直保持到下一次正确接收信
号。受电路原理的限制,模块的延迟时间较长。A或B口的数据必须在并口保持100ms左右
才可保证正确接收(才可保证在接收端给出稳定正确的信号),即发送一组完整的8位控
制信号需要200ms左右的时间。在编程过程中应注意插入延时环节。
下面的示例程序完成了发送一组8位控制信号(3FH=00111111B)的过程:
MOV AL,03H;AL的高四位"0000"为A口地址,低四位"0011"是所发送数据
MOV DX,378H;378H是并口数据位的硬件地址
OUT DX,AL ;向并口发送数据03H,在接收端的A口出现0011B
CALL DELAY ;调用延时子程序,延迟时间不小于100ms
MOV AL,1FH; AL的高四位"0001"为B口地址,低四位"1111"是所发送数据
MOV DX,378H
OUT DX,AL ;向并口发送数据0FH,在接收端的B口出现1111B
模块使用过程中可能出现接收数据丢失或者错误的现象。控制程序中应包括对此异常情
况的处理。其他技术问题可向大赛组委会查询。
Visual C++6.0环境下的端口操作方法:
三个端口函数_outp, outpw, outpd发送数据。其中_outp可发送一个byte, _outpw可发
送一个word, _outpd可发送一个double word。
该三个函数说明如下:
int _outp( unsigned short port, int databyte );
unsigned short _outpw( unsigned short port, unsigned short dataword );
unsigned long _outpd( unsigned short port, unsigned long dataword );
要使用这三个函数必须先包含头文件<conio.h>。
选手坦克与大赛通讯模块的连接方法:选手在比赛前完成对坦克的改装,并在坦克外壳
上的指定部位预留与接收模块的接口。比赛前由大赛组委会进行坦克与通讯模块的连接
。
附件二:软件环境说明
指的是选手编写的控制程序是如何获得由裁判系统提供的实时位置信息的。
裁判系统用Windows API函数将实时的位置信息放置在内存中的某一段位置,选手也可通
过Windows API 函数OpenFileMapping和MapViewOfFile来调用该内存,在Visual C++
环境下可实现。
该内存名为ShareData,使用方法与VC下的数组类似。其数据由裁判系统写入,选手程序
只需读取即可。
其数据具体含义如下:
ShareData[0] 代表ShareData内存区信息情况
0表示整个内存区信息无效,此时选手不必读取ShareData内存区
1表示整个内存区信息有效,此时选手应该开始处理内存数据
ShareData[1]计时标志位
0 初值,由裁判系统写入
1 代表比赛"开始",并开始计时
2 代表比赛"结束",并停止计时
ShareData[2] 未定义
ShareData[3] 未定义
ShareData[4] 代表坦克位置信息进行了第ShareData[4]次更新
0 代表第零次更新
1 代表第一次更新
2 代表第二次更新
……
99代表第九十九次更新
此时坦克位置信息如果再次更新,ShareData[4]将变为0,重复上述过程。选手可
根据此信息判断裁判系统对位置信息的更新情况。(裁判系统的更新速率大约为每秒10
次。)
比如:上一次读取ShareData[4]时值为34,这次读取ShareData[4]值如果仍为34,可不
作处理;若值为35,可开始处理;若为36,说明选手程序处理信息的速度不够快,应进
一步优化算法。
ShareData[5] 未定义
ShareData[6] 代表坦克总共需要到达的目标点数目
ShareData[7] 代表坦克最后到达的是第几个目标点
0代表从起点出发,但未到达第一个目标点,
1代表已到达第一个目标点,但未到达第二个目标点
……
ShareData[8] 未定义
ShareData[9] 未定义
ShareData[10] 到 ShareData[17] 代表坦克的实时位置信息
如:
ShareData[10] 代表坦克左上角的横坐标
ShareData[11] 代表坦克左上角的纵坐标
ShareData[12] 代表坦克右上角的横坐标
ShareData[13] 代表坦克右上角的纵坐标
ShareData[14] 代表坦克右下角的横坐标
ShareData[15] 代表坦克右下角的纵坐标
ShareData[16] 代表坦克左下角的横坐标
ShareData[17] 代表坦克左下角的纵坐标
ShareData[18] 未定义
ShareData[19] 未定义
ShareData[20] 到 ShareData[39]代表各个目标区中心的位置信息
如:
ShareData[20]、ShareData[21]分别代表第一个目标区中心的位置信息
ShareData[22]、ShareData[23]分别代表第二个目标区中心的位置信息
……
ShareData[i*2+18]、ShareData[i*2+19]分别代表第i个目标区中心的位置信息
……
ShareData[N*2+18]、ShareData[N*2+19]分别代表最后一个目标区中心的位置信息
N由ShareData[6]指出。
选手程序应加入的程序代码:
//变量定义
#include <windows.h>
LPVOID m_pMap;
HANDLE m_hMap;
int *ShareData;
//使用前的初始化
m_hMap=OpenFileMapping(FILE_MAP_READ,FALSE,"tank_data_memory_share");
m_pMap=MapViewOfFile(m_hMap,FILE_MAP_READ,0,0,0);
ShareData=(int *)m_pMap;
//使用内存中数据的用法
ShareData[i]=1;
//或者
int a=ShareData[i];
//使用结束时的关闭
CloseHandle(m_hMap);
--
※ 修改:·plaster 於 12月15日22:42:13 修改本文·[FROM: 匿名天使的家]
※ 来源:·听涛站 tingtao.dhs.org·[FROM: 匿名天使的家]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.466毫秒