返回 登录
0

打造机器人:为遥控小车加一个树莓派

引言:相信许多人都有个创造机器人的梦想,但以前个人打造一款机器人属于异想天开。这不仅仅是因为硬件零部件的昂贵,主要还在于中控系统的复杂性。不过树莓派这类开源微电脑的诞生,你的极客梦依托树莓派就能够实现。
如果你也曾幻想从无到有地亲手打造出自己的第一台机器人,那么树莓派这个硬件平台就是你上手的不二之选。
本文选自《树莓派机器人蓝图权威宝典》。

在正式开始前

  1.本文使用的是树莓派 B2
图片描述
  2.你已经对树莓派已有了相当的了解,并已 SD卡上烧制了 Raspbian/Wheezy系统
  3.系统安装在内存卡中,内存卡的容量需要至少在 8GB以上

对树莓派进行配置和控制遥控小车

  你将要制作的第一个项目采用的是一种简易的遥控小车,如下图所示。
图片描述
  这是一种Xmods 遥控车,在Radio Shack1 有售,在零售店或网上商店也可以买到。当然你也可以使用其他类型的遥控小车。采用这种小车的优点在于它的驱动和转向很容易控制。
  下图显示的是这种小车中间的控制部分。
【图3】
  你需要直接控制小车的两处连接:一处是驱动电机,另一处是转向单元。这种小车的驱动单元位于车尾处。正常情况下,你会看到两根驱动直流电机的导线。接头位于车尾,看起来像下图一样。
【图4】
  在车的主控部分,可以看到有个接头,接头有两根导线,用来控制小车的速度,如图1-5所示。
【图5】
  拆除这个插头和这些导线;你将用树莓派和一个电机控制器来为小车的驱动系统提供所需电压。导线上电压的高低将决定电机旋转的快慢;电压的正负极变化将决定电机的转向。树莓派需要提供一个±6V 的电压信号,用来控制小车速度和行驶方向。
  你还需要取代小车前方转向单元的控制信号,这有一点点困难。图1-6 是位于车头的连接插头。
【图6】
  控制模块的五针连接,如下图所示。
【图7】
  关键是了解如何用导线来控制转向。方法是打开这个单元,其内部结构如下图所示。
【图8】
  从上图可以看出来,蓝色、黄色导线( 图中圆圈处) 连接到直流电机,橙色、褐色、红色导线(图中矩形处)连接到另一个控制电路。电机会驱动车轮正转或反转,电压的极性决定旋转的方向,电压的高低决定了车轮转动的快慢。橙色、褐色和红色导线需特别注意,要探明它们的作用有点困难,可以使用电压表和示波器来了解它们的工作原理。橙色和褐色的导线比较直观,它们分别是接3.5V 和接地GND。红色导线是一条控制线,采用PWM(Pulse Width Modulation)技术,输出信号为频率330HZ、占空比为10% 的方波信号。它是一个使能控制信号。没有这个信号,转向单元就不能被激活。
  一旦你明白了原有小车系统中的控制信号是如何工作的,就可以通过树莓派输出这些信号来控制小车。要达到这个目的,树莓派需提供3.3V 的直流信号,一个接地GND 信号,一个330Hz、3.3V 的PWM 信号,以及驱动转向单元的±6V 电压。你可以将小车中已有的导线和一些自己买来的导线焊在一起,然后用热缩管包好,从而与小车中原有的插头连接在一起(见下图)。
【图9】
  你还需要连接小车的后轮部分以便驱动小车的两个后轮。下图是连接好后看到的样子。
【图10】
  另外,你还需要把小车的电池连接到树莓派上,让树莓派采用小车的电池电源,下图是重新修改连接后的示意图。
【图11】
  要控制小车,你需要提供小车所需的每个控制信号。±6V的电压信号不能直接取自树莓派。你需要某种电机控制器提供信号来控制小车后轮的驱动和转向单元。提供这些信号最简单的方法是使用电机扩展板,这是种外加的硬件,可以装在树莓派上,并能根据电压和电流为小车的转向和驱动提供动力。可通过网上购买RaspiRobot V2 扩展板来满足需求,如下图所示。
【图12】
  欲了解扩展板的详情,可以访问http://www.monkmakes.com/?page_id=6983。这块扩展板将提供驱动和转向信号给你的遥控小车。你还需要一个附加的信号,就是用于激活转向单元的PWM 信号。下面是把树莓派和这块扩展板相连接的步骤:

1.将电池电源接头和扩展板的电源接头连接在一起,如下图所示。

【图13】

2.接着,连接后轮驱动信号到扩展板上的电机1 号接口,如下图所示。

【图14】

3.连接前轮驱动接头到扩展板上的电机2 号接口,如下图所示。

【图15】

4.连接3.3V 和GND 引脚树莓派的GPIO(General Purpose Input/Output)接口。下图是这些接口的布置图。

【图16】

5.你需要使用Pin1 3.3V 接口连接3.3V 信号,Pin9 GND 接口连接接地GND 信号。你还需要连接其中的一个GPIO接口,通过320Hz 的频率、占空比10% 的PWM 信号去激活单元。下图所示为连接Pin12 GPIO18 接口。
【图17】
  到此,硬件连接已完成。
  硬件已准备好,现在你可以通过树莓派实现所有的功能。首先,安装与扩展板所相关的库文件,这可在http://www.monkmakes.com/?page_id=698 中找到。执行下述步骤:
1.运行命令wget https://github.com/simonmonk/raspirobotboard2/raw/master/python/dist/rrb2-1.1.tar.gz—该命令可获取所需的库文件。
2.然后运行 tar –zf rrb2-1.1.tar.gz—该命令将文件解压缩。
3.键入cd rrb2-1.1—改变目录到文件所在位置。
4.键入sudo python setup.py install—安装库文件。
  你需要编写一些Python 代码,用来控制驱动电机和转向电机。这些代码看起来和下面的差不多(见下图)。
【图18】
  这些代码详细说明如下。

  • import RPi.GPIO as GPIO :导入RPi.GPIO 类库,这个类库允许你向车头的转向单元发送一个PWM 信号。
  • import time :导入time 类库, 允许使用time.sleep(number_of_milliseconds)
    方法,该方法会产生一个固定的延时。
  • from rrb2 import * :导入rrb2 类库,rrb2 类库使你能控制两个直流电机。这个rrb2 就是你刚刚从GitHub
    下载的库文件。
  • pwmPin = 18:这将设定PWM接口为GPIO Pin18引脚,它是树莓派上的物理接口Pin12。
  • dc = 10 :设定PWM信号中的占空比为10%。
  • GPIO.setmode(GPIO.BCM) :设定RPi.GPIO 的定义模式为BCM 模式,允许你制定PWM 信号的物理接口。
  • GPIO.setup(pwmPin, GPIO.OUT) :设定PWM接口为输出,因而你能驱动转向单元的控制电路。
  • pwm = GPIO.PWM(pwmPin, 320) :在正确的接口上初始化PWM 信号,并设定PWM 信号为320Hz。
  • rr = RRB2() :实例化电机控制器的一个实例。
  • pwm.start(dc) :开始PWM信号。
  • rr.set_led(1) :点亮电机控制板上的 LED1。
  • rr.set_motors(1, 1, 1, 1) :设定两个电机同时移动从而使小车向前行驶。这个命令允许你设定电机正转或反转,以及设置指定的速度。第一个参数是1 号电机的速度,它的范围是从0到1 ;第二个参数是1 号电机的方向,1 是正转,0 是反转;第三个参数是2 号电机转速,范围也是从0到1;第四个参数是设定2号电机的反转和正转,取值1 或0。
  • print(“Loop, press CTRL C to exit”) :指示用户如何停止运行程序。
  • while 1 : 保持循环,直到“Ctrl+C”组合键被按下。
  • time.sleep(0.075) :让程序等待0.075 秒。
  • pwm.stop() :停止PWM信号。
  • GPIO.cleanup() :清除GPIO 指令并准备关闭。

当你键入sudo python xmod.py运行这个程序后,控制板上的LED1 会亮起来,这时候,后轮应该向前旋转,并且转向单元也开始运行。这些行为可以确认全部连接都是正确的。为了让项目更加有趣,你可以通过添加代码实现更多的动态控制。下面是Python 代码的第一部分(见下图)。
【图19】
  在开始下一步前,可将Python 代码复制到一个新文件,并把该文件命名为xmodControl.py。在这段代码中,你需要一些额外的引用声明4,用于直接获取键盘的输入,而无须敲击回车键。这会让实时交互更加及时。getch() 函数接收实际按键的状态。
  其余代码看起来和之前的程序差不多,该程序的第二部分如下所示(见下图)。
【图20】
  代码的第二部分是一个while 循环,用来不断获得输入指令并转换为你的遥控小车的命令:前进、后退、向左转、向右转。这个程序相当简单,也许你会想要加入更多的命令,从而提供更多的方式控制速度和方向。

远程访问遥控小车

  虽然你现在可以控制小车了,但若想要摆脱那些连接线的束缚,实现对小车的远程控制,则还需要添加无线局域网设备到树莓派中。下面我们来学习如何实现这个功能。实现该功能的第一步是安装无线局域网设备。虽然有几种可选的方案来实现,但是我们建议你采用效果较好、参考资料齐全的一种,详情可访问https://learn.adafruit.com/setting-upa-raspberry-pi-as-a-wifi-access-point/overview 来获取。
  你现在已能够通过无线接入点连接树莓派。 一旦你已创建了无线连接,就可以通过VNC连接登录,通过这种方式你还可以给自己的小车增加一个USB 摄像头,这样会让控制更加容易。
  为达此目的,首先下载一个能支持VNC连接的应用程序。vncserver 程序完全可以满足你的需求。
  你可以在树莓派终端窗口中键入sudo apt-get install tightvncserver 命令,将程序安装在树莓派上。
TightVNC Server 是一个允许你远程查看完整图形化桌面的应用程序。当你安装了该程序后,就可以通过下述指令进行操作:
  1. 在树莓派的终端窗口中键入vncserver 命令启动服务器。
  2. 根据提示你需要输入密码并确认,然后系统会询问你是否需要一个只供浏览的密码。
记住你输入的密码,使用VNC Viewer 远程登录时要用到这个密码。
  3. 在你的远程计算机上要有一个VNC Viewer( 连接浏览器),Windows 的用户可选择一个名为RealVNC 的软件, 它可以在http://www.realvnc.com/download/viewer/ 下载。当运行该软件时,你会看到如下界面(见下图)。
【图21】
  4. 输入VNC 服务器地址,也就是你树莓派的IP 地址,然后单击Connect(连接)。你会看到一个未加密连接的提示警告,选择Continue(继续),接着你会看到如下的弹出对话框(见下图。
【图22】
  5. 输入你在树莓派上启动VNC 服务时所输入的密码,然后你就能看到树莓派的图形界面了,看起来类似于下面的屏幕截图(见下图)。
【图23】
  现在你可以访问系统的所有功能。然而,由于传递的是图形数据,因此这些功能的响应速度比较慢。为了避免你在每次启动树莓派时都输入vncserver 命令,可以使用http://www.havetheknowhow.com/Configure-the-server/Run-VNC-on-boot.html 中提供的指令。
  VNC 服务器也可在Linux 上使用。你可以用一个被称为Remote Desktop Viewer(远程桌面浏览器)的软件远程查看树莓派的图形化用户界面(GUI)。如果你还没有安装这个软件,则可以根据你使用的Linux 系统版本,通过软件应用升级程序进行安装。一旦你安装了这个软件,执行以下的步骤:
  1.运行软件,你可以看到下面的界面(见下图)。
【图24】
  2.确认VNC 服务器正在树莓派上运行,最简单的方法就是使用SSH 登录,然后在提示下运行vncserver。现在在Remote Desktop Viewer 界面中单击Connect,接着会出现一个窗口,在Protocol 选项下,选择VNC,然后你会看到如下的屏幕截图(见下图)。
【图25】
  3. 现在输入主机IP 地址,确认你在结尾处包括了a:1,然后单击Connect。还需要输入VNC 服务器密码,这个密码是你在树莓派上第一次运行vncserver 命令时输入的密码,如下图所示。
【图26】
  这时候就可以看到树莓派的图形界面了。现在,你需要查看连接到小车的USB 网络摄像头拍摄的画面。这个相当容易,只需要插入USB 网络摄像头,然后下载一个视频播放器软件。推荐你使用luvcview。如需要安装,键入sudo apt-get install luvcview 命令即可。
  所有工具都准备好后,你现在可以运行vncview 了,这将生成一个luvcview 窗口,通过这个窗口就可以看到摄像头捕获的画面,并且通过执行你之前编写的xcmodControl.py 代码远程控制小车。屏幕看起来像下面这样(见下图)。
【图27】
  接下来,你还可以创造许多附加功能到你的树莓派小车上,比如说加入操作杆控制或者更多的自主控制。

零部件

  ★ 本文使用的零部件列表如下。
  (1)Pixhark 飞控,本书中使用树莓派3 作为替代方案。
  (2)电机4 个。
  (3)轴距在450mm 的四轴飞行支架。
  (4)直径是10 英寸,螺距为4.7 的螺旋桨。
  (5)沉金F450 机架。
  (6)方达11.1V 控电。
  (7)两个5 号无人机手柄电池。
  (8)MPU6050 模块。
  ★ 扫描下方二维码购买上述零部件。
【图28】
  本文选自《树莓派机器人蓝图权威宝典》。
                       图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                         图片描述

评论