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

在正式开始前

  1.本文使用的是树莓派 B2

  2.你已经对树莓派已有了相当的了解,并已 SD卡上烧制了 Raspbian/Wheezy系统
  3.系统安装在内存卡中,内存卡的容量需要至少在 8GB以上

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

  你将要制作的第一个项目采用的是一种简易的遥控小车,如下图所示。

  这是一种Xmods 遥控车,在Radio Shack1 有售,在零售店或网上商店也可以买到。当然你也可以使用其他类型的遥控小车。采用这种小车的优点在于它的驱动和转向很容易控制。
  下图显示的是这种小车中间的控制部分。

  你需要直接控制小车的两处连接:一处是驱动电机,另一处是转向单元。这种小车的驱动单元位于车尾处。正常情况下,你会看到两根驱动直流电机的导线。接头位于车尾,看起来像下图一样。

  在车的主控部分,可以看到有个接头,接头有两根导线,用来控制小车的速度,如图1-5所示。

  拆除这个插头和这些导线;你将用树莓派和一个电机控制器来为小车的驱动系统提供所需电压。导线上电压的高低将决定电机旋转的快慢;电压的正负极变化将决定电机的转向。树莓派需要提供一个±6V 的电压信号,用来控制小车速度和行驶方向。
  你还需要取代小车前方转向单元的控制信号,这有一点点困难。图1-6 是位于车头的连接插头。

  控制模块的五针连接,如下图所示。

  关键是了解如何用导线来控制转向。方法是打开这个单元,其内部结构如下图所示。

  从上图可以看出来,蓝色、黄色导线( 图中圆圈处) 连接到直流电机,橙色、褐色、红色导线(图中矩形处)连接到另一个控制电路。电机会驱动车轮正转或反转,电压的极性决定旋转的方向,电压的高低决定了车轮转动的快慢。橙色、褐色和红色导线需特别注意,要探明它们的作用有点困难,可以使用电压表和示波器来了解它们的工作原理。橙色和褐色的导线比较直观,它们分别是接3.5V 和接地GND。红色导线是一条控制线,采用PWM(Pulse Width Modulation)技术,输出信号为频率330HZ、占空比为10% 的方波信号。它是一个使能控制信号。没有这个信号,转向单元就不能被激活。
  一旦你明白了原有小车系统中的控制信号是如何工作的,就可以通过树莓派输出这些信号来控制小车。要达到这个目的,树莓派需提供3.3V 的直流信号,一个接地GND 信号,一个330Hz、3.3V 的PWM 信号,以及驱动转向单元的±6V 电压。你可以将小车中已有的导线和一些自己买来的导线焊在一起,然后用热缩管包好,从而与小车中原有的插头连接在一起(见下图)。

  你还需要连接小车的后轮部分以便驱动小车的两个后轮。下图是连接好后看到的样子。

  另外,你还需要把小车的电池连接到树莓派上,让树莓派采用小车的电池电源,下图是重新修改连接后的示意图。

  要控制小车,你需要提供小车所需的每个控制信号。±6V的电压信号不能直接取自树莓派。你需要某种电机控制器提供信号来控制小车后轮的驱动和转向单元。提供这些信号最简单的方法是使用电机扩展板,这是种外加的硬件,可以装在树莓派上,并能根据电压和电流为小车的转向和驱动提供动力。可通过网上购买RaspiRobot V2 扩展板来满足需求,如下图所示。

  欲了解扩展板的详情,可以访问http://www.monkmakes.com/?page_id=6983。这块扩展板将提供驱动和转向信号给你的遥控小车。你还需要一个附加的信号,就是用于激活转向单元的PWM 信号。下面是把树莓派和这块扩展板相连接的步骤:

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

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

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

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

5.你需要使用Pin1 3.3V 接口连接3.3V 信号,Pin9 GND 接口连接接地GND 信号。你还需要连接其中的一个GPIO接口,通过320Hz 的频率、占空比10% 的PWM 信号去激活单元。下图所示为连接Pin12 GPIO18 接口。

  到此,硬件连接已完成。
  硬件已准备好,现在你可以通过树莓派实现所有的功能。首先,安装与扩展板所相关的库文件,这可在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 代码,用来控制驱动电机和转向电机。这些代码看起来和下面的差不多(见下图)。

  这些代码详细说明如下。

  • 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 代码的第一部分(见下图)。

  在开始下一步前,可将Python 代码复制到一个新文件,并把该文件命名为xmodControl.py。在这段代码中,你需要一些额外的引用声明4,用于直接获取键盘的输入,而无须敲击回车键。这会让实时交互更加及时。getch() 函数接收实际按键的状态。
  其余代码看起来和之前的程序差不多,该程序的第二部分如下所示(见下图)。

  代码的第二部分是一个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/ 下载。当运行该软件时,你会看到如下界面(见下图)。

  4. 输入VNC 服务器地址,也就是你树莓派的IP 地址,然后单击Connect(连接)。你会看到一个未加密连接的提示警告,选择Continue(继续),接着你会看到如下的弹出对话框(见下图。

  5. 输入你在树莓派上启动VNC 服务时所输入的密码,然后你就能看到树莓派的图形界面了,看起来类似于下面的屏幕截图(见下图)。

  现在你可以访问系统的所有功能。然而,由于传递的是图形数据,因此这些功能的响应速度比较慢。为了避免你在每次启动树莓派时都输入vncserver 命令,可以使用http://www.havetheknowhow.com/Configure-the-server/Run-VNC-on-boot.html 中提供的指令。
  VNC 服务器也可在Linux 上使用。你可以用一个被称为Remote Desktop Viewer(远程桌面浏览器)的软件远程查看树莓派的图形化用户界面(GUI)。如果你还没有安装这个软件,则可以根据你使用的Linux 系统版本,通过软件应用升级程序进行安装。一旦你安装了这个软件,执行以下的步骤:
  1.运行软件,你可以看到下面的界面(见下图)。

  2.确认VNC 服务器正在树莓派上运行,最简单的方法就是使用SSH 登录,然后在提示下运行vncserver。现在在Remote Desktop Viewer 界面中单击Connect,接着会出现一个窗口,在Protocol 选项下,选择VNC,然后你会看到如下的屏幕截图(见下图)。

  3. 现在输入主机IP 地址,确认你在结尾处包括了a:1,然后单击Connect。还需要输入VNC 服务器密码,这个密码是你在树莓派上第一次运行vncserver 命令时输入的密码,如下图所示。

  这时候就可以看到树莓派的图形界面了。现在,你需要查看连接到小车的USB 网络摄像头拍摄的画面。这个相当容易,只需要插入USB 网络摄像头,然后下载一个视频播放器软件。推荐你使用luvcview。如需要安装,键入sudo apt-get install luvcview 命令即可。
  所有工具都准备好后,你现在可以运行vncview 了,这将生成一个luvcview 窗口,通过这个窗口就可以看到摄像头捕获的画面,并且通过执行你之前编写的xcmodControl.py 代码远程控制小车。屏幕看起来像下面这样(见下图)。

  接下来,你还可以创造许多附加功能到你的树莓派小车上,比如说加入操作杆控制或者更多的自主控制。

零部件

  ★ 本文使用的零部件列表如下。
  (1)Pixhark 飞控,本书中使用树莓派3 作为替代方案。
  (2)电机4 个。
  (3)轴距在450mm 的四轴飞行支架。
  (4)直径是10 英寸,螺距为4.7 的螺旋桨。
  (5)沉金F450 机架。
  (6)方达11.1V 控电。
  (7)两个5 号无人机手柄电池。
  (8)MPU6050 模块。
  ★ 扫描下方二维码购买上述零部件。

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

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

  1. 基于树莓派的遥控小车

    一.引言 最近在准备一个计算机类比赛,需要用树莓派做成一个智能乒乓球捡球车,做过一些人工智能项目的也知道,所谓人工智能,只有人工,没有智能(实力吐槽),只要你知道实现的原理,做很多人工智能的东西都能得 ...

  2. 以前不懂事现在只想搞钱,从0-1搭建一个树莓派小车

    项目来源背景 自从上了大学,感触很多,身为一个计算机系的小白,见识到了大佬们的学识渊博,就此下定决心,要向他们不断的靠近(身为一个什么也不懂的小白,难免都不太愿意跟我交流).起初真正意义上认识树莓派是 ...

  3. 树莓派制作遥控小车教程

    树莓派制作遥控小车教程 一.成品图 二.准备材料: 三.开始制作 1.接线 2.写程序 一.成品图 二.准备材料: 1.树莓派 2.充电宝 3.小车套件(底盘,车轮,电机,电池座) 4.导线,杜邦线 ...

  4. 1.树莓派、Python、STM32、上位机、局域网、PC智能遥控小车(含源码)

    整体功能:电脑上观看小车前方画面,通过电脑方向键控制小车前后运动.左右转弯,如前进后退键,按下前进或后退,松开停车,左右同理 关键技术部分:PC端:使用pygame编写上位机,作为服务器 树莓派端:图 ...

  5. 做一个树莓派微博机器人

    准备 首先得有一个树莓派,如果你还不知道什么是树莓派,可以先去淘宝一百多淘一个,就是一个小巧的卡片电脑,可以安装linux操作系统,就用树莓派配置一个crontab定时跑就可以.如果没有的话,vps或 ...

  6. esp32-cam摄像头+远程遥控小车

    目录 1.esp32cam开发 2.51单片机开发 3.手机端开发 4.总结 先来说说需要的器件,因为是心血来潮做的一个简单的实验,所以用的也都是最基础的东西.淘宝买的一个小车底板,外加四个带轮子的减 ...

  7. 分享一款基于Micro Bit 的遥控小车的设计

    原文首发地址:https://www.icxbk.com/community/thread-103353-1-1.html 大家好,我是『芯知识学堂』的SingleYork,首先,感谢<电子芯吧 ...

  8. 基于OpenCV和深度学习的自动驾驶遥控小车

    阅读原文 项目中使用的技术 Python + OpenCV Neural Network + Haar-Cascade Classifiers 项目目标 改装后遥控小车完成三个任务:自动驾驶,识别信号 ...

  9. Android蓝牙遥控小车软件

    PS:不需写一行Android代码哦~~~                    很多热衷于玩单片机小车.机器人的童靴,往往也向往着有天能自己编写一个Android手机的遥控程序,通过自己的手机遥控小 ...

  10. 低成本DIY视频预览遥控小车

    QQ讨论群:301849022 视频:http://v.youku.com/v_show/id_XNTg1NzI4MDg0.html 简介: 对于喜欢电子的人来说,智能小车是每个人都曾经触碰过的项目, ...

最新文章

  1. 31岁成为博导!从小乡村走出的985高校教授坦言:读书这条路最简单...
  2. win mysql 最大连接_常用的三种修改mysql最大连接数的方法
  3. Angular 下的 directive (part 2)
  4. 15 - 使用 Fabric 自动化部署
  5. Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探
  6. MySQL—视图(二)
  7. 数据结构之B树与B+树
  8. 初学Android,字符串,数字,尺寸,数组资源(十二)
  9. 百度SEO资源吧emlog模版全套源码
  10. js动态添加的元素,动作绑定
  11. 函数名,闭包,装饰器
  12. Atitit 代码要写的漂亮 老板要的是效率 冲怎么办突 目录 1. 代码要写高效,写漂亮,要考虑可扩展性和安全性,到了公司才发现老板要的是效率,不在乎你的代码写的是否高效,安全,是否具有可扩展性
  13. 致敬逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
  14. obs多推流地址_推流篇| 如何在广交会直播中使用OBS推流,播放视频、PPT等
  15. 如何检查python安装成功_如何检查python是否安装成功
  16. React项目中请求跨域解决方法
  17. 安卓10侧边返回_向返回键说拜拜,安卓10向全面屏手势继续迈进
  18. USB3.0扩展坞集线器Hub引起鼠标卡顿飘解决方法
  19. 蓝色基因超级计算机玩仙剑6,世界上最快的计算机——蓝色基因超级计算机
  20. php+mysql 留言板系统 登录 管理员 审核回复 学生适用

热门文章

  1. 第四十四篇 面向对象高阶
  2. Lodop打印旋转180度 倒着打
  3. PS把一张白纸里的黑色图形抠出来
  4. debian安装中文字体
  5. 来不及说再见,Kobe
  6. BZOJ1301 字符加密Cipher (后缀数组)
  7. linux 之学习路线
  8. es6语法图片切换demo
  9. Petrozavodsk Winter-2018. Carnegie Mellon U Contest
  10. jquery 自定义事件