本帖最后由 xvholly 于 2016-8-21 16:26 编辑
如果理解了底座马达的基本动作,就会很好整理出手臂马达和探头马达的基本动作。唯一区别是,手臂马达和探头马达由于动作比较固定,采用的位置控制方式均为绝对位置。 另外还有一个机器人的输入设备,颜色传感器。颜色传感器的主要作用就是扫描魔方色块的颜色,在传感器工作模式上与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'
复制代码
|