SmartDrive 机器人

使用 SmartDrive 扩展板编程遥控机器人

作者:Rishi Deshpande (MagPi 第26期)
翻译:@MagPi

如何使用操纵杆控制机器人

树莓派几乎可以通过编程来解决任何问题,从这个角度来讲树莓派简直是令人吃惊的存在。我曾见过有人用这种便携小电脑做出多媒体中心、云存储设备、气象站、游戏模拟器以及其他许多有用的工具。

然而,我决定创造一个可以遥控并且不需要大量软件维护的机器。机器的硬件特性根据不同的用户而改变,因此我不过多的关注硬件而是在控制机器的代码上下功夫。

我用一个手柄来控制我的机器。为了控制电机,我使用了SmartDrive。这是一个可以让用户通过树莓派控制两个大电流电机的驱动。

程序的开始,需要输入如下的程序段:

import pygame
import sys, os
from SmartDrive import SmartDrive

pygame 用来创立一个手柄事件。sys 用来停止运行中的程序。os 用来读取字符环境。

下面是创建手柄事件的代码

try:
    j = pygame.joystick.Joystick(0)
    j.init()
    print 'Enabled joystick: ' + j.get_name()
except pygame.error
    print 'no jotstick found.' 

建议使用Try-block代码段,因为调试的时候能发现 pygame.error 的异常很重要。

使用单独的函数来使机器人运动是十分有效的。函数如下:

def move(motor, speed):
  direction = 1
  if(speed < 0):
    direction = 0
    speed = speed * -1
  if speed > 100:
    speed = 100
  SmartDrive,SmartDrive_Run_Unlimited(
    motor, direction, speed)

direction 等于0的时候,马达会向后转。当 direction 等于1的时候,马达会向前转。要注意 SmartDrive 的速度值区间是 0-100,所以编程时要注意这个范围。现在这个函数现在可以在任何时候被调用。

在写程序的主循环部分要注意需要对手柄轴坐标进行缩放。Pygameget_axis 函数的范围是从 -110 的时候是中间。因此我们需要将上面的值放大100倍来使之前函数的 Speed 参数可以和轴坐标值对应上。代码如下:

while True:
  pygame.event.get()
  x1 = 100 * j.get_axis(0)
  y1 = 100 * j.get_axis(1)
  if j.get_button(1):
    move(1, 0)
    move(2, 0)
    sys.exit(1)
  lMotor = x1 + y1
  rMotor = x1 - y1
  move(1, lMotor)
  move(2, -rMotor)

get_button 函数用来停止程序并使机器人停止运行。

我已经列出了我在这个项目中所使用的所有的电子器件、马达以及其他一些硬件。其实我挺推荐你去废品场淘一点用得到的马达,这样你就可以省下一小笔钱了。你可以找一找电动窗马达或者玩具车上的马达。我之所以用 SmartDrive 是因为它可以为每个马达提供 300W 的功率,尽管我实际使用时只用了 22W。

SmartDrive

正如我之前提到的,SmartDrive 可以使树莓派最多控制2个大电流电机。它由树莓派上的I2C接口控制。

程序接口是用 Python 编写的并且包含了许多可以用不同方法控制马达的函数。马达可以连接到 SmartDrive - 被标为M1和M2的两个(第三个是用来接电源的)黑色螺丝接线端子上。 当然使用C语言来编写 SmartDrive 也是可以的。

还有一些函数可以用来控制马达运行时的转向角度、每秒的转速、甚至可以指定转动的次数。它还支持旋转编码器。SmartDrive 还有一个很好的特性就是它提供了一个可以驱动树莓派的5V电源,这样我们就不用再找其他的电源了。

元件清单:

  1. SmartDrive
  2. Tempest TR1 .3-1 2 Battery (1 2V)
  3. DreamGrear Shadow USB wireless joystick
  4. 2x Pittman GM9234E765-R1 motors

源于社区,归于社区。 Github | @树莓派杂志中文版

你可能感兴趣的:(SmartDrive 机器人)