35
基于Lego原魔方机器人 于文君 2011-06-03

Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

基于Lego的还原魔方机器人!于文君!

2011-06-03!

Page 2: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

整体介绍!机械结构 图像处理 魔方算法 硬件控制

Page 3: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

流程介绍!

放置魔方,调整初始状态

读颜色,分六面48块

按照PC计算的步骤还原魔方

检验魔方是否被还原

接收颜色数据,并返回解魔方步骤

输出数据,供用查错

NXT端 PC端

帮助弱小的NXT 辅助计算

Page 4: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

实际演示 Video

实际演示

Page 5: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

构思过程!机械结构

1 动力转变 LDD lego 驱动设计

颜色处理 2

RGB/HSV 处理办法 容错设计 传感器

魔方算法 3

CFOP 降群法 魔方表示法 魔方坐标系

硬件控制 4 电机运动方式 传感器反馈 容错性

Page 6: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

机械结构 Question 1: 旋转变直线?

�四种实现方式:

� �①齿条

� �②蜗杆

� �③曲柄滑块机构

� �④传送带或者滑轮机构

� � �(参考几本机械原理的书)

Choice:齿条最佳,曲柄滑杆机构也可以接受

�想象力很重要⋯⋯

Page 7: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!
Page 8: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

机械结构

Question 2: 电机个数?

� � �1.NXT有电机个数限制:3个

� � �(多NXT控制,之间可以蓝牙通信)

� � �2.重力方案

� � �(对于三阶立式方案略显奢侈,高阶很适用)

� � �3.颜色传感器,摄像头� � �(摄像头节省一个电机)

�Choice:采用重力方案,在师兄现有结构图基础上修改。

Page 9: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

参考网上的和钟师兄的图!

Page 10: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

机械结构

Others:

� �1.Lego Digital Designer(LDD)方便实用的LegoCAD软件

� �2.Lego MindStorm 套装,机械结构相当全。

� �(不过缺乏较长的机构)

� �3.长杆件刚性不够,应尽量加固

Page 11: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

机械结构! 机械结构的部分还存在很多的问题,搭建一个机构不仅需要有成熟的思路,而且要有一定的灵感。想要将结构精巧的实现,需要很高的技巧和创造力。

国外甚至有很多Lego创作的“大师”。

Page 12: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

颜色处理!Question 1: 摄像头 or 传感器?

� � �1.摄像头略显不智能,东西还不齐备

� � �(需要对于硬件摄像头进一步了解, NXT与PC的通信,图像/颜色识别程序,�图像 降噪,未来的趋势)

� � �2.Lego传感器经测试,RGB值区分度还�比较满意

� � �3.现成的搭建图纸,只需做零星的修改

Choice:采用传感器,利用多余的一个电机驱动

Page 13: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

颜色处理!Question 2: RGB直接识别?

� �1.RGB三个通道的数值与环境相关

� �(直接识别会悲剧,直接采用比例或大小进行识别也不可行)

� �2.考虑HSV等其他识别方式

Choice:集体采样,集中处理,还能分担NXT的工作量。

� � �采用集中办法读取识别出错的概率已经比较小了,颜色出错一般是在电机旋转角度上。

Page 14: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

颜色处理!分析一组数据://oringe

{254,128,90},{248,120,80},{253,137,96},{266,137,78},{239,128,86}

//red

{246,92,86},{245,75,82},{239,64,77},{230,47,65},{266,77,77}

//white !?RGB处理方式不同?{308,297,286},{319,320,313},{299,249,240},{308,308,300},{323,320,312}

//yellow {256,224,114},{233,202,106},{260,230,119},{251,214,109},{253,220,107}

//green

{98,1180,121},{96,204,139},{104,202,144},{65,183,133},{85,189,133},

//blue

{95,136,181},{104,131,184},{78,107,171},{126,135,176},{83,122,181}�

Page 15: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

颜色处理!根据观察到的规律,按照如下方式识别:(共48组数据)1.所有颜色的三通道值相加从大到小排序,最大的前8个为白色

2.剩余颜色中,按R+G分量从大到小排序,最大的前8个为黄色

3.剩余颜色中,按G分量从大到小排序,最大的前8个为绿色4.剩余颜色中,按R分量从小到大排序,最小的前8个为蓝色5.剩余颜色中,按G-B分量从大到小排序,最大的前8个为橘黄色

6.剩余颜色为红色PS: 红色和橘黄色最难识别,他们各个通道均有交集,不能直接识别

Page 16: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

颜色处理!Others:

� �目前采用的方式还很朴素,将来应该转向摄像头/相机的方式来识别,提高效率。

� �这种识别方式需要3分钟左右。(可以进一步提高)

Page 17: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

魔方算法!Question 1: 还原步数

� �1.传统方法为CFOP算法,可以参考各种魔方的BBS均有详细介绍,属于主流算法。

� �使用简单公式在100步之外(人工),换算成机器步骤将有400-500步以上。相当考验观众耐心。

� �如果使用200个公式,则相当快(50-70人工步,200以上机器步数),但是相当考验程序员耐心。

� �2.网上资料 - 魔方快速算法!http://tomas.rokicki.com/cubecontest/winners.htm

� �基本上基于降群法,思想优先。

� �3.其余方法:棱先、角先;CFCE(一百多个公式);桥式(不到一百个公式)

Page 18: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

魔方算法!算法敲定:

� �最终采用上述网页中的第三名Jaap的算法,主要基于Thistlethwaite‘s four stage algorithm。平均人工步数为30步,机器步数150左右。

� �网站提供了一个C的程序,将其改写为Java程序并通过了验证。一般的电脑上计算时间不会超过半秒钟。

Page 19: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

魔方算法!魔方表示法约定

�一个魔方可以由一串字符串表示。

UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR(属于Mike Reid)

U: Up

F: Front � � �

R: Right

L: Left

D: Down

B: Back

Page 20: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

魔方算法!输出表示法约定:

�1.Jaap的输出为F3 U1 F3 D3 L1 D2 F3 U3 L2 D3(我命名之为URD表示法)(顺时针)

�2.自定义机器的输出表示法(自己命名为PBH表示法)

�将Jaap输出翻译为PBH表示法。

�如:BBBPHHHPHPPPHHHPPPHHHBBBPHPPPHHBPHHHPHHHBBBPHHPHHH � �

Page 21: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

魔方算法!Question 2: NXT Brick 太脆弱

� �1.NXT Brick采用32位 ARM7 微处理器,事实证明,连这个三阶的魔方的降群法也计算不了,估计是内存不足。

� �(实际结果是等待10分钟,出现一个未知错误)

� �

� �2.体力活就只能交给PC来干吧,但是多了根USB线,有点不爽。

Page 22: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

魔方算法!对应的程序中的算法:

� �1.PC端接收,java程序计算

� 2.具体三个相关的类,入口位于Class CubeSolverPC,包含主要算法Thistlethwaite's four stage algorithm。其余两个类Class ColorIdentify用于将接收的color数据分门别类,Class CubeCenter用于将URDSteps转换为PBHSteps。(具体后面会讲)

� �3.将主要计算的部分放到PC上执行,以后可以利用蓝牙通信,这样看起来更酷点。

Page 23: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

硬件编程!环境配置:�1.采用Java语言,使用JDK1.6版本,IDE(Integrated Development Environment)选用IBM的开源Eclipse。�2.专用API,LeJOS 0.85版本。专门为Lego的NXT和RCX编程开发的Java专用API(color小bug),需要JDK1.5以上版本。�3.NXT brick需要刷机,利用安装LeJOS后的工具将NXT Brick的操作系统刷为配套使用的。�4.通信使用USB方式另一种环境配置:�1.采用Labview+NXT MindStrom2.0插件。�2.Labview编程,通信问题较简单,计算问题较麻烦。可能需要采用外部其他计算方式辅助(如师兄采用Matlab)

Page 24: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

硬件编程!关于Eclipse的配置:

� �作为专业的IDE,Eclipse对于Java的编写和调试提供了很大方便。

� �将常用的几个NXT的编译工具,如NXJ compile,download,和 explorer等增加到运行按钮中,之后即可以直接点击使用。

� �Eclipse开源,而且支持众多插件,对于C++,Python等语言也有插件支持。

� �

Page 25: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

硬件编程!程序框架:� �PC端:三个类 CubeSolver,ColorIdentify,CubeCenter三个类。� �NXT端:一个程序yumaxwellV3(目前版本)。需要download至NXTBrick中执行。

� �整套程序大致有1500行左右,将来还要增加其他功能。

运行顺序:� �1.先运行NXT端yumaxwellV3.nxj程序,� �2.直到NXTBrick发出连续三声twoBeeps,运行CubeSolver类中的main函数。

Page 26: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

硬件编程!程序具体介绍:

� �1.yumaxwellV3中集成了读魔方颜色和根据步骤转魔方的功能

� �2.CubeSolver类实现通信,计算魔方解法(根据URD计算URDSteps,从Jaap程序改写得来)的功能

� �3.CubeCenter类提供一个和魔方一起旋转的坐标系,并根据URDSteps计算出PBHSteps。方便NXTBrick理解魔方旋转的步骤

� �4.ColorIdentify类将colorAllSide的数据识别为具体的颜色

数据流程:

robot->colorRGB->colorString(URD)->URDSteps->PBHSteps->robot

Page 27: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

具体的详细步骤!yumaxwellV4

ColorIdentify

CubeSolverPC

readColor()

readOneSide()

AngleEdge

Comm

out

inout

in

colorRGBTo URD()

findCenter()

CubeCenter

URDToPBH()

Get Result

()

rotateBySolver()

checkAllSide()Success!

int[][]

int[][]

int[][]

URD

URD Steps

PBH Steps

PBH Steps

PBH Steps

int[]int[]

int[][]

Sort()

Start

Page 28: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

关键的问题:机械的容错性!涉及到四方面的问题:

� �1.读颜色的细长杆件的刚度

� �2.三只电机均有一定的回程差,所以必须朝向一个方向旋转,但是pawMotor需要来回旋转,所以总出现问题。

� �3.电机角度控制并不是十分精确,所以增加了两个传感器来控制两个电机的角度,但是传感器太大,控制效果一般。

� �4.魔方本身需要润滑,并且大小严格限制,并不能做到随便一个魔方都能旋转。原则是宁小勿大。

Page 29: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

外观上的改进!进一步增加的东西:

� �1.声音 NXT可以播放wav格式声音,使之更像一个机器人

� �2.超声识别 �超声传感器能够测距,可以用来识别是否有魔方放在上面。还可以用来设成断点。

� �3.PC端程序 �目前还是代码状态,IDE或者命令行操作,可以改进成为GUI界面,美观且方便操作

� �4.容错改进 �在程序中增加监控部分,使得出现错误可以挽救,不必从头开始

� �5.转动方式改进 �目前为方便代码编写,有些地方没有采用最短路径,需要改进

Page 30: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

外观上的改进!� �6.初始状态要求 �任意面放置均可还原,需要修改读颜色和算法程序,初始电机位置

� �7.魔方解法容错 �解魔方的没有对初始输入进行验证,增加验证可以更好的判断颜色的正确性

� �8.多线程的应用 �可以使程序更加好用,比如增加断点,实时控制等,更加智能

� �……

Page 31: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

进一步的发展!有许多可以提高的地方:

� �1.更复杂的高阶魔方

� �2.更好的机械结构

� �3.增加实时演示功能,二维、三维的仿真模拟

� �4.摆脱Lego,使用更有效率的硬件设备

Page 32: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

特别鸣谢!� �感谢钟思阳师兄提供的关于这个题目的各种相关资料。

� �

� �搭建结构图,图像识别,labview和matlab程序

� �扩展的想法,尝试的经验,硬件的基础

� �

� �还有热情的关心和帮助!

Page 33: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

总结!1.关于魔方转机器人这个题目,个人认为最难的部分在于机械结构的设计和实现

2.这个题目涉及到各方面的知识,机械,编程,电子设备,通信,图像处理等等,有些是浅尝辄止,有些被我用别的方法绕过了,有些东西还是需要仔细学习的。

3.时间比较紧,但这仅仅是第一个版本

Page 34: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

最后 看看真正NB的魔方机器人

魔方视频.mp4

Page 35: Lego的还原魔方机器人 - PKU · 2011. 6. 3. · 基于Lego的还原魔方机器人! 于文君! 2011-06-03!

The End!

希望老师和师兄多多指正!