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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

博文视点 2016-12-21 17:23:32 浏览5643
展开阅读全文

在正式开始前

  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】
  本文选自《树莓派机器人蓝图权威宝典》。
                       图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                         图片描述

网友评论

登录后评论
0/500
评论
博文视点
+ 关注