非常荣幸收录高三学生Eic G.的一个机器人作品。刚收到这个作品说明的时候,我们都感到震惊,一个高中学生,居然将人工智能(尽管是用GNU的函数库)、图像识别、机械结合得如此完美!
GoRo围棋机器人

----------------------------------------------------------------------------------------------------------
简介:
GoRo围棋机器人,顾名思义就是可以下围棋的机器人。"Go"在英文中有围棋的意思,而"Ro"是英文中Robot的缩写。GoRo由一台电脑控制,这是他的大脑。大脑的工作是处理摄像头传回的图像,以及决定下一步该走哪。他也有小脑,既RCX。小脑控制他的动作,他接收和处理从传感器发回的信号并控制马达转动来完成拿子和下棋的动作。他的眼睛是一个35万象素的摄像头,摄像头捕捉的图像将传回电脑。他的手是由马达、传感器、齿轮、轨道和许多LEGO积木做成的,可以灵活的移动。
(点击图片可以打开大图)

GoRo系统结构

GoRo总装图

棋子移动结构




软件界面

编程截图

用MLCAD设计机械部分

改进图像识别算法

不同光线下的图像

图像分析

用NQC编写RCX的程序
GoRo有两种下棋模式,你和它下棋,他自己和自己下棋。
当你和他下棋时,他会用摄像头看棋盘,思考过后,用机械手下棋。
源代码说明:
我想说明的一点是,所有的源代码都只供参考而不保证其正常运行,且其中有几处BUG,下面会有大致的说明。
当然所有的源代码是公开的,在传播时请勿修改版权等信息,其复制、修改是不受限制的,但GNUGOEngAPI这个工程受 GPL 的约束,请注意。
如果你有任何问题或建议或发现了任何错误,可以与我联系,我若有时间我回尽力回答(我快高考了),联系方式会在最后给出。
不得不说明的是,GoRo与长沙雅礼中学的"'猜想'五子棋机器人"与"天弈象棋机器人"可能有雷同,但是我想说的是,我做到一半才知道有这些东西,而且我也得不到任何图片或其他资料。
代码分四部分:
1、GoRoVB : 用Visual Basic 6.0 编写的主程序,包括界面、图像采集和处理、与用户交互、文件的保存(SGF)。
2、GoRoNQC :用 NQC 编写,IDE为 Bricx Command Center (BricxCC). 用来和电脑通讯以及控制机械手下棋。
3、GNUGOEngAPI : 用GNU Go(开源)改写的动态链接库(DLL),人工智能程序。IDE : Visual C++ 6.0.
4、GoRoRePos : 用 Visual Basic 6.0 编写,用于对每一个点定位,并把结果放在Position.ini中,GoRoVB中会用到。
附:程序使用了VideoOCX.ocx(图象捕捉&识别) , Phantom.dll(Control RCX) 和 MS Agent(动画人物) 以及一个VB6.0自带的 MSCOMCT2.OCX 。
可能存在的BUG:
1、有关分辨率的变量可能有重复定义现象。
2、在电脑上用鼠标下棋的功能不可用。
----------------------------------------------------------------------------------------------------------
源代码文件列表
../GoRo_VB/
工程:
GoRobotVB.vbp 工程文件
窗体:
GRVBMainFrm.frm 主窗体
GRVBDialog.frm 新游戏对话框
GRVBSave.frm 保存文件对话框
GRVBAboutFrm.frm 关于
GRVBSplashFrm.frm 程序封面
模块:
ImageProcess.bas 图像处理模块
Board.bas 棋盘模块
ControlRobby.bas 控制动画小人模块
Initialize.bas 初始化模块
Main.bas 主程序模块
Mathods.bas 各类函数
Play.bas 下棋模块
PubDefines.bas 全局变量模块
ControlRCX.bas 与RCX通信模块
Interface_GNUGoEngAPI.bas 与GNUGOEngAPI的接口
Position.ini 识别时每个点的位置信息
../GoRoNQC/
GoRoNQC.nqc 控制RCX
../GoRoRePos/
Repos.vbp 工程文件
RePos.frm 窗体
RePos.bas 方法模块
../GNUGOEngAPI/
GNUGoEngAPI.c(GNUGoEngAPI.h) 主文件,导出的接口(API)
*.lib 用GNUGo.dsw生成的库文件。
Gnugo.h gnugo的头文件.
源代码下载(3.7M,需要很长时间)
控件下载(4.3M,需要很长时间)
----------------------------------------------------------------------------------------------------------
参考文献:
《Visual C++ 程序设计 --VB 程序员指南》("Visual C++ for Visual Basic Developers")
Author: (U.S.) Bill Locke
Translated : 肖国尊 王琪 郭卫风 等译
Presser: 机械工业出版社
《程序员修炼之道》 ("The Pragmatic Programmer") (Eic G.建议读这本书,做robot的也应读)
Author: (U.S.)Andrew Hunt & David Thomas
Translated : 马维达
Presser: 电子工业出版社
《Visual BASIC 计算机绘图实用技术》
Author: 谢步瀛 龚沛曾
Presser: 电子工业出版社
《21天学通C语言》 ("Teach Yourself C in 21 Days")
Author: (U.S.)Bradley L.Jones & (U.S.)Peter Aitken
Translated: 信达工作室
Presser: 人民邮电出版社
《Visual Basic 应用技巧与常见问题》
Author: 张毅 等
Presser: 机械工业出版社
《机器人探索-工程实践指南》(Robotic Explorations - A Hands-on Introduction to Engineering)
Author: (U.S.) Fred G. Martin
Translated: 刘荣 等
Presser: 电子工业出版社
《乐高组件和ROBOLABTM在工程学中的应用》(Thanks Mr. Song)
Author: Eric L. Wang (with Chris Rogers)
Presser: Knoxville, TN公司
《Qbasic语言程序设计教程》
Author: 刘瑞新 丁爱萍
Presser: 电子工业出版社
----------------------------------------------------------------------------------------------------------
我的感受和心得:
做这个机器人对我来说是一次挑战,因为我从来没有做过这样的东西,这方面的知识也很少。但是我慢慢的体会到不会的东西可以去学,不懂的东西就自己把它搞懂,不知道的东西就去了解,去查。一切都要靠自己,不要想着会有人来帮你。这样的思想让我学到了很多的东西,我很高兴。
到了最后,我明白了其实拿不拿奖并不重要,重要的是你是否学到了东西。"为了做一件事情而去学习" 比 "为了学习而学习"要好,也就是"做中学"(Learning in Working)。为了做这个机器人我学习了C语言,熟悉了VC、VB,了解了去开发一个软件是多么的不容易,还有科学的方法、耐心、毅力是多么重要。
希望每一个人都能在自己的舞台上Show出自己。
Eic G.
2005.3.28
----------------------------------------------------------------------------------------------------------
有几句箴言,希望每个人读后都有所感触:
好的开始是成功的一半。(方法很重要)
行百里者半于九十。(需要有耐心)
骐骥一跃,不能十步;驽马十驾,功在不舍。(不怕笨,就怕不坚持)
君子性非异也,善假于物也。(知识就是力量)
下面的话引自或间接引自《程序员修炼之道》:
你不应该局限与任何特定的技术,而是应该拥有足够广博的背景和经验基础,以让你能在特定情况下选择好的解决方案。你的背景源自对计算机科学的基本原理的理解,而你的经验来自广泛的实际项目。理论与实践的结合使你强大起来。
我们,采集的只是石头,却必须时刻展望未来的大教堂。 ――――采石工人的信条
了不起的草坪需要每天给予一点关心,了不起的程序员也是这样。每天为提炼你所拥有的技能而工作,为把新的工具增加到你的技能列表而工作。几年之后,你将会惊奇你的经验得到了怎样的发展,你的技能得到了怎样的提升。
在所有的弱点中,最大的弱点就是害怕弱点。―J.B.Bossuet, Politics from Holy Writ(圣经),1709
我们可以为我们的能力自豪,但对于我们的缺点――还有我们的无知和我们的错误――我们必须诚实。
责任是你主动担负的东西。你承诺确保某件事正确完成,但你不一定能直接控制事情的每一个方面。
不要容忍破窗户。
提供各种选择,不要找蹩脚的借口。
不要靠巧合编程。
----------------------------------------------------------------------------------------------------------
联系我(Eic G.):
E-mail:superefei[AT]hotmail[DOT]com
参加讨论:
phpbb2/viewtopic.php?t=7263
|