找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 4704|回复: 0

解魔方机器人[二]-基本动作(下)

[复制链接]
发表于 2016-8-21 16:26:39 | 显示全部楼层 |阅读模式
本帖最后由 xvholly 于 2016-8-21 16:26 编辑

如果理解了底座马达的基本动作,就会很好整理出手臂马达和探头马达的基本动作。唯一区别是,手臂马达和探头马达由于动作比较固定,采用的位置控制方式均为绝对位置。

另外还有一个机器人的输入设备,颜色传感器。颜色传感器的主要作用就是扫描魔方色块的颜色,在传感器工作模式上与LEGO官方定义的三种模式(环境光、反射光、颜色)也略有不同。

手臂马达

机器人的手臂动作主要包括:

  • 完全抬起,这样可以进行扫描和方向旋转
  • 按住魔方,这样可以配合底座进行拧魔方
  • 拉推魔方,这样可以将魔方翻面,而这个动作又可以分为拉和推

对应于马达的基本动作为:

  • 抬起
  • 按住
  • 拉回(推与按住相同)

按照机器人的搭建结构,完成这4种基本动作是通过大型马达所转动的位置实现的。我们设定手臂抬起是马达的初始化状态,即此时位置为0,之后通过试验可以很容易的得到每种动作所对应的马达的位置。


抬起


按下


拉起

程序设计

  1. # EV3手臂马达连接在端口B
  2. hand = ev3dev.large_motor('outB')
  3. if hand.connected == True:
  4.   hand.speed_regulation_enabled = 'off'
  5.   hand.duty_cycle_sp = 65
  6.   hand.stop_command = 'hold'

  7. # 设定手臂完全抬起时为初始化状态,位置值position = 0
  8. def hand_raise():
  9.   hand.run_to_abs_pos(position_sp=0)
  10.   while 'holding' not in hand.state: time.sleep(0.2)
  11. # 手臂按住
  12. def hand_press():
  13.   hand.run_to_abs_pos(position_sp=110)
  14.   while 'holding' not in hand.state: time.sleep(0.2)

  15. # 手臂拉起,确保拉起的位置比魔方翻动时的最高点要高
  16. def hand_pull():
  17.   hand.run_to_abs_pos(position_sp=233)
  18.   while 'holding' not in hand.state: time.sleep(0.2)

  19. # 翻动模式,为拉起和按下的动作组合
  20. def hand_turn():
  21.   hand_pull()
  22.   hand_press()
复制代码


探头马达

探头马达用来控制颜色传感器进行定位扫描,按照扫描位置的不同可以分为:中心块、边块、角块,再加上完全收起的位置,因此探头马达的基本动作有4种:

  • 收起
  • 扫描中心块
  • 扫描边块
  • 扫描角块

按照搭建结构,完成以上动作是通过中型马达所转动的位置实现。我们设定探头收起是马达的初始化状态,即此时位置为0,之后通过试验可以容易得到每种动作所对应的马达位置。


扫描中心


扫描边块


扫描角块

程序设计

  1. # 探头马达为中型马达,连接在EV3的端口C上
  2. head = ev3dev.medium_motor('outC')
  3. if head.connected == True:
  4.   head.speed_regulation_enabled = 'off'
  5.   head.duty_cycle_sp = 50
  6.   head.stop_command = 'hold'
  7. else:
  8.   print 'head is not connected'

  9. # 探头收起,设定探头完全收起时为初始化位置,此时位置值为0
  10. def head_back():
  11.   head.run_to_abs_pos(position_sp=0)
  12.   while 'holding' not in head.state: time.sleep(0.2)

  13. # 扫描中心块
  14. def head_center():
  15.   head.run_to_abs_pos(position_sp=-380)
  16.   while 'holding' not in head.state: time.sleep(0.2)

  17. # 扫描边块
  18. def head_side_edge():
  19.   head.run_to_abs_pos(position_sp=-260)
  20.   while 'holding' not in head.state: time.sleep(0.2)

  21. # 扫描角块
  22. def head_side_coner():
  23.   head.run_to_abs_pos(position_sp=-212)
  24.   while 'holding' not in head.state: time.sleep(0.2)
复制代码

颜色传感器

颜色传感器在LEGO官方给出的模式有三种:环境光模式、反射光模式和彩色模式。其中彩色模式可以识别出7种不同的颜色,可惜这些颜色对于魔方的色块来说有些不适用,好在传感器实际的能力是可以识别出颜色的R、G、B值,因此采用RGB模式直接读取R、G、B值的方式来进行魔方色块的识别。

程序设计
  1. # 连接色彩传感器,并设定为RGB模式
  2. cs = ev3dev.color_sensor()
  3. cs.mode = 'RGB-RAW'
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-3-29 01:54 , Processed in 1.122893 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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