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

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

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

手臂马达

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

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

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

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

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

抬起

抬起

按下

按下

拉起

拉起

程序设计

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

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

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

# 翻动模式,为拉起和按下的动作组合
def hand_turn():
  hand_pull()
  hand_press()

探头马达

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

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

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

扫描中心

扫描中心

扫描边块

扫描边块

扫描角块

扫描角块

程序设计

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

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

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

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

# 扫描角块
def head_side_coner():
  head.run_to_abs_pos(position_sp=-212)
  while 'holding' not in head.state: time.sleep(0.2)

颜色传感器

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

程序设计

# 连接色彩传感器,并设定为RGB模式
cs = ev3dev.color_sensor()
cs.mode = 'RGB-RAW'

发表评论

电子邮件地址不会被公开。 必填项已用*标注