本帖最后由 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 程序设计- # 转魔方的机器人马达指令
- # U面旋转
- def twist_u_clockwise():
- base_anticlockwise()
- hand_turn()
- hand_press()
- base_anticlockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- base_clockwise()
- def twist_u_anticlockwise():
- base_anticlockwise()
- hand_turn()
- hand_press()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- base_clockwise()
- def twist_u_reverse():
- base_anticlockwise()
- hand_turn()
- hand_press()
- base_clockwise()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- base_clockwise()
- # D面旋转
- def twist_d_clockwise():
- base_clockwise()
- hand_turn()
- hand_press()
- base_anticlockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- base_anticlockwise()
- def twist_d_anticlockwise():
- base_clockwise()
- hand_turn()
- hand_press()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- base_anticlockwise()
- def twist_d_reverse():
- base_clockwise()
- hand_turn()
- hand_press()
- base_clockwise()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- base_anticlockwise()
- # F面旋转
- def twist_f_clockwise():
- hand_turn()
- hand_turn()
- hand_press()
- base_anticlockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_raise()
- def twist_f_anticlockwise():
- hand_turn()
- hand_turn()
- hand_press()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_raise()
- def twist_f_reverse():
- hand_turn()
- hand_turn()
- hand_press()
- base_clockwise()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_raise()
- # B面旋转
- def twist_b_clockwise():
- hand_press()
- base_anticlockwise()
- hand_raise()
- def twist_b_anticlockwise():
- hand_press()
- base_clockwise()
- hand_raise()
- def twist_b_reverse():
- hand_press()
- base_clockwise()
- base_clockwise()
- hand_raise()
- # L面旋转
- def twist_l_clockwise():
- hand_turn()
- hand_press()
- base_anticlockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- def twist_l_anticlockwise():
- hand_turn()
- hand_press()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- def twist_l_reverse():
- hand_turn()
- hand_press()
- base_clockwise()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_turn()
- hand_turn()
- hand_raise()
- # R面旋转
- def twist_r_clockwise():
- hand_turn()
- hand_turn()
- hand_turn()
- hand_press()
- base_anticlockwise()
- hand_raise()
- hand_turn()
- hand_raise()
- def twist_r_anticlockwise():
- hand_turn()
- hand_turn()
- hand_turn()
- hand_press()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_raise()
- def twist_r_reverse():
- hand_turn()
- hand_turn()
- hand_turn()
- hand_press()
- base_clockwise()
- base_clockwise()
- hand_raise()
- hand_turn()
- hand_raise()
- # 动作对应关系
- move_step = {
- "U1":twist_u_clockwise,
- "U2":twist_u_reverse,
- "U3":twist_u_anticlockwise,
- "D1":twist_d_clockwise,
- "D2":twist_d_reverse,
- "D3":twist_d_anticlockwise,
- "F1":twist_f_clockwise,
- "F2":twist_f_reverse,
- "F3":twist_f_anticlockwise,
- "B1":twist_b_clockwise,
- "B2":twist_b_reverse,
- "B3":twist_b_anticlockwise,
- "L1":twist_l_clockwise,
- "L2":twist_l_reverse,
- "L3":twist_l_anticlockwise,
- "R1":twist_r_clockwise,
- "R2":twist_r_reverse,
- "R3":twist_r_anticlockwise
- }
复制代码- ###=================MAIN FUNCTION====================###
- def main():
- # 扫描魔方
- cube_scan = buildup_cube_module()
- # 建立模型
- cube_module = cvt2reid(cube_scan)
- # 植入算法
- cube_solved = cube_algorithm(cube_module)
- # 分解动作
- for i in range(len(cube_solved)/2):
- solve_step = cube_solved[i*2]+cube_solved[i*2+1]
- # 执行动作
- move_step[solve_step]
- # 结束任务
- end_of_mission()
- if __name__ == '__main__':
- main()
- ###=====================EOF==========================###
复制代码
写在最后从打算做这个项目到最后完成,前后用了大约2个月的时间。不得不说,在程序设计和实验的过程中遇到了在做之前没有想到的困难。也许这个系列的文章中简单的一段话,在实际做的过程中却是经过了很长时间多次的学习、研究才完成的。 本来是想每年用LEGO完成一个项目,定的计划也是2015年完成数字识别机器人、2016年完成解魔方机器人,但随着自己对EV3各类传感器、马达以及ev3dev系统和Python语言的不断熟悉,今年的任务也就提前完成了。 整理文字的过程是一个很枯燥繁琐的过程,同样也是一个总结和分享的过程。不得不说,在写这段文字的时候还是很开心的。接下来做什么样的项目还没有想好,也许会跟网络编程或者物联网开放平台相关。 如果你对我关注的东西也感兴趣,欢迎共同探讨。
|