找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 7068|回复: 3

解魔方机器人[六]-还原动作

  [复制链接]
发表于 2016-9-5 18:04:03 | 显示全部楼层 |阅读模式
本帖最后由 xvholly 于 2016-9-5 18:04 编辑

当利用可执行文件处理打乱的魔方,会得到一串类似F1U2B1D3……的字符,这些字符代表了还原魔方的动作,了解他们的具体含义就是最后我们需要解决的问题,而这个问题跟前面的比起来要简单得多。

6.1 动作表示

魔方一共有6个面,针对某1个面我们来拧他,分解后实际会得到3个基本动作:顺时针90度、顺时针180度、逆时针90度。看到这些有没有觉得亲切?这与之前我们分解EV3底座动作很类似。

对这3种动作用1 2 3来表示:

  • 1:顺时针90度
  • 2:顺时针180度
  • 3:逆时针90度

结合6个面的表示法U F R B L D,就可以完成每个面的动作表示。比如:F1表示F面顺时针90度、R2表示R面顺时针180度……

最后就是对这些魔方动作,结合EV3机器人的动作,完成程序设计。

6.2 程序设计
  1. # 转魔方的机器人马达指令
  2. # U面旋转
  3. def twist_u_clockwise():
  4.   base_anticlockwise()
  5.   hand_turn()
  6.   hand_press()
  7.   base_anticlockwise()
  8.   hand_raise()
  9.   hand_turn()
  10.   hand_turn()
  11.   hand_turn()
  12.   hand_raise()
  13.   base_clockwise()
  14. def twist_u_anticlockwise():
  15.   base_anticlockwise()
  16.   hand_turn()
  17.   hand_press()
  18.   base_clockwise()
  19.   hand_raise()
  20.   hand_turn()
  21.   hand_turn()
  22.   hand_turn()
  23.   hand_raise()
  24.   base_clockwise()
  25. def twist_u_reverse():
  26.   base_anticlockwise()
  27.   hand_turn()
  28.   hand_press()
  29.   base_clockwise()
  30.   base_clockwise()
  31.   hand_raise()
  32.   hand_turn()
  33.   hand_turn()
  34.   hand_turn()
  35.   hand_raise()
  36.   base_clockwise()

  37. # D面旋转
  38. def twist_d_clockwise():
  39.   base_clockwise()
  40.   hand_turn()
  41.   hand_press()
  42.   base_anticlockwise()
  43.   hand_raise()
  44.   hand_turn()
  45.   hand_turn()
  46.   hand_turn()
  47.   hand_raise()
  48.   base_anticlockwise()
  49. def twist_d_anticlockwise():
  50.   base_clockwise()
  51.   hand_turn()
  52.   hand_press()
  53.   base_clockwise()
  54.   hand_raise()
  55.   hand_turn()
  56.   hand_turn()
  57.   hand_turn()
  58.   hand_raise()
  59.   base_anticlockwise()
  60. def twist_d_reverse():
  61.   base_clockwise()
  62.   hand_turn()
  63.   hand_press()
  64.   base_clockwise()
  65.   base_clockwise()
  66.   hand_raise()
  67.   hand_turn()
  68.   hand_turn()
  69.   hand_turn()
  70.   hand_raise()
  71.   base_anticlockwise()

  72. # F面旋转
  73. def twist_f_clockwise():
  74.   hand_turn()
  75.   hand_turn()
  76.   hand_press()
  77.   base_anticlockwise()
  78.   hand_raise()
  79.   hand_turn()
  80.   hand_turn()
  81.   hand_raise()
  82. def twist_f_anticlockwise():
  83.   hand_turn()
  84.   hand_turn()
  85.   hand_press()
  86.   base_clockwise()
  87.   hand_raise()
  88.   hand_turn()
  89.   hand_turn()
  90.   hand_raise()
  91. def twist_f_reverse():
  92.   hand_turn()
  93.   hand_turn()
  94.   hand_press()
  95.   base_clockwise()
  96.   base_clockwise()
  97.   hand_raise()
  98.   hand_turn()
  99.   hand_turn()
  100.   hand_raise()

  101. # B面旋转
  102. def twist_b_clockwise():
  103.   hand_press()
  104.   base_anticlockwise()
  105.   hand_raise()
  106. def twist_b_anticlockwise():
  107.   hand_press()
  108.   base_clockwise()
  109.   hand_raise()
  110. def twist_b_reverse():
  111.   hand_press()
  112.   base_clockwise()
  113.   base_clockwise()
  114.   hand_raise()

  115. # L面旋转
  116. def twist_l_clockwise():
  117.   hand_turn()
  118.   hand_press()
  119.   base_anticlockwise()
  120.   hand_raise()
  121.   hand_turn()
  122.   hand_turn()
  123.   hand_turn()
  124.   hand_raise()
  125. def twist_l_anticlockwise():
  126.   hand_turn()
  127.   hand_press()
  128.   base_clockwise()
  129.   hand_raise()
  130.   hand_turn()
  131.   hand_turn()
  132.   hand_turn()
  133.   hand_raise()
  134. def twist_l_reverse():
  135.   hand_turn()
  136.   hand_press()
  137.   base_clockwise()
  138.   base_clockwise()
  139.   hand_raise()
  140.   hand_turn()
  141.   hand_turn()
  142.   hand_turn()
  143.   hand_raise()

  144. # R面旋转
  145. def twist_r_clockwise():
  146.   hand_turn()
  147.   hand_turn()
  148.   hand_turn()
  149.   hand_press()
  150.   base_anticlockwise()
  151.   hand_raise()
  152.   hand_turn()
  153.   hand_raise()
  154. def twist_r_anticlockwise():
  155.   hand_turn()
  156.   hand_turn()
  157.   hand_turn()
  158.   hand_press()
  159.   base_clockwise()
  160.   hand_raise()
  161.   hand_turn()
  162.   hand_raise()
  163. def twist_r_reverse():
  164.   hand_turn()
  165.   hand_turn()
  166.   hand_turn()
  167.   hand_press()
  168.   base_clockwise()
  169.   base_clockwise()
  170.   hand_raise()
  171.   hand_turn()
  172.   hand_raise()

  173. # 动作对应关系
  174. move_step = {
  175.   "U1":twist_u_clockwise,
  176.   "U2":twist_u_reverse,
  177.   "U3":twist_u_anticlockwise,
  178.   "D1":twist_d_clockwise,
  179.   "D2":twist_d_reverse,
  180.   "D3":twist_d_anticlockwise,
  181.   "F1":twist_f_clockwise,
  182.   "F2":twist_f_reverse,
  183.   "F3":twist_f_anticlockwise,
  184.   "B1":twist_b_clockwise,
  185.   "B2":twist_b_reverse,
  186.   "B3":twist_b_anticlockwise,
  187.   "L1":twist_l_clockwise,
  188.   "L2":twist_l_reverse,
  189.   "L3":twist_l_anticlockwise,
  190.   "R1":twist_r_clockwise,
  191.   "R2":twist_r_reverse,
  192.   "R3":twist_r_anticlockwise
  193. }
复制代码
  1. ###=================MAIN FUNCTION====================###
  2. def main():
  3.   # 扫描魔方
  4.   cube_scan = buildup_cube_module()
  5.   # 建立模型
  6.   cube_module = cvt2reid(cube_scan)
  7.   # 植入算法
  8.   cube_solved = cube_algorithm(cube_module)

  9.   # 分解动作
  10.   for i in range(len(cube_solved)/2):
  11.     solve_step = cube_solved[i*2]+cube_solved[i*2+1]
  12.     # 执行动作
  13.     move_step[solve_step]

  14.   # 结束任务
  15.   end_of_mission()

  16. if __name__ == '__main__':
  17.   main()
  18. ###=====================EOF==========================###
复制代码


写在最后

从打算做这个项目到最后完成,前后用了大约2个月的时间。不得不说,在程序设计和实验的过程中遇到了在做之前没有想到的困难。也许这个系列的文章中简单的一段话,在实际做的过程中却是经过了很长时间多次的学习、研究才完成的。

本来是想每年用LEGO完成一个项目,定的计划也是2015年完成数字识别机器人、2016年完成解魔方机器人,但随着自己对EV3各类传感器、马达以及ev3dev系统和Python语言的不断熟悉,今年的任务也就提前完成了。

整理文字的过程是一个很枯燥繁琐的过程,同样也是一个总结和分享的过程。不得不说,在写这段文字的时候还是很开心的。接下来做什么样的项目还没有想好,也许会跟网络编程或者物联网开放平台相关。

如果你对我关注的东西也感兴趣,欢迎共同探讨。



如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2017-11-2 14:22:53 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-12-25 13:13:23 | 显示全部楼层
学习,多谢分享。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-7-23 07:39:18 来自手机 | 显示全部楼层
学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-4-19 07:40 , Processed in 0.081495 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表