导语:树莓派是为学习计算机编程教育而设计的一种微型电脑,其系统是基于Linux的, 虽然只有信用卡大小,但视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全”。因此自问世以来,受到了众多计算机发烧友和创客的追捧。
树莓派可以用来开发各种硬件产品,此次雷锋网硬创公开课邀请到国际资深创客,莫比嗨客树莓派智能机器人有限公司创始人兼CEO刘端阳,从树莓派的起源讲起,一步步教我们如何开发出一款机器人。
嘉宾介绍:
刘端阳,莫比嗨客树莓派智能机器人有限公司创始人兼CEO,国际资深创客。
以下内容整理自刘端阳在雷锋网硬创公开课的分享。关注雷锋网(公众号:雷锋网)旗下微信公众号「新智造」,可获取嘉宾完整PPT。
公开课视频:
计算的历史与计算思维
计算的过程中经历了这么几个发展:最早的时候是应用于自动式,比如弹道导弹的计算,但是随着计算的发展,其有了更加宽广范围的应用,比如军队、政府、银行等都会用到计算设备。
计算设备的发展历史,按照公认的说法,分为大型机、小型机、PC阶段,以及现在基于Arm体系结构的手机时代。那么,反向思考的话,未来的硬件设备是什么样的趋势呢?
小型化
图1 树莓派大小
大家可以在PPT上看到,我放了一个美元的图标和一个小的设备,这个小的设备叫树莓派。可以看到这个设备是非常小的,但它的性能却非常强,可以说随着电子设备二极管的高度集成,未来设备将趋向小型化。
量子化
图2 Dwave
在电子化的基础上,计算设备另一个发展形式是量子化,最典型的是Dwave公司,它最后被Google收购了。
计算思维是什么
计算思维(Computational Thinking)这个概念由CMU的周以真教授提出,刚开始大家都觉得云里雾里的,其实它的核心就是:我们要用计算机的基本概念比如迭代、循环、Loof做整体的问题求解、系统设计和人类行为分析的一种思维活动。从这个角度来讲,计算思维是基本问题解决之道。在生活中,比如我们经常去超市买东西,结账时我们会排成一列进行结算,这与我们计算机的队列是一样的。
树莓派(RPI)的历史
图3 树莓派的历史
树莓派的出现其实是一个偶然的事情,同时也是必然的事情。这个偶然是大家没想到这个东西会这么火,就连创始人Eben Epton也没想到。那它的出现为什么是必然的呢?
2006年Eben Epton发现一个问题,剑桥大学近期入学的学生编程能力普遍较低,原因是什么呢?就是我们现有的“舒适的图像化编程”毁灭了创造的乐趣,于是他开始构思:我能不能做一种设备让学生有创造性的乐趣?之后Eben Epton和小伙伴一起设计了很多设备,但都不符合要求。
2007年苹果的iPhone发布,世界迎来了互联网时代。2008年树莓派基金会设计了一款原型机,使用了Atmel的ATmega644,这个事件发生后,树莓派基金会终于找到一个“好基友”:ARM芯片。现在很多移动设备都使用ARM芯片,因为功耗小,所以它的电池是可以使用很长时间的。当然,这个东西设计出来后的产品推广需要很长时间。所以,到2011年问题就出现了,当时英国的产业链是不完全的,所以Eben Epton找到了深圳的一家工厂,于是第一批50片Alpha电路板上线。2012年第一周,Eben Epton将电路板放在EBay上拍卖,结果10个电路板在Ebay上共筹集了16000英镑,这让他信心倍增,说明这种产品是非常受大家欢迎的。
图4 树莓派1代
2012年2月29日树莓派1代发布,那时候要使用树莓派系统还需要插入一个很大的SD卡,然后基于千兆网络就可以连接USB了,它主要是把GPIO接口给露出来了,因为大家知道以前的设备都是集成在USB接口上的,所以那时候都是即插即拔的,现在突然露出来,那么就需要很大的创造性了。
图5 树莓派结构和功能
左边的树莓派既可以接USB的接口,又能通过USB接键盘,把SD插入进去以后就可以写入系统了。大家都知道操作系统在计算设备上是非常关键的,因为它极大地降低整个应用开发的周期和成本,就是你在独特的设备上开发应用和在已经有了通用操作系统的设备上开发应用的时间周期和难度是不同的。
右边是Raspberry Pi 3 Model B。
树莓派与创客教育
1949年前,文盲的标志是不识字;1970年前后,文盲的标志是数理化不好;1990年前后,文盲的标志是英语不好;到了2013年,文盲的标志则是不会编程。在这种环境下,创客成为一种新的时尚,因为创造成为市场。以机器人为依托的创客教育,树莓派最后成为创客的首选,原因如下:
(1)RPI是电脑(2)性价比超高(3)体积小
MBH创客蜂巢是从树莓派机器人开始起步的,在这里聚集了很多创客,而想要成为一名创客,需要这些技能:
(1)长生剑:树莓派-机器人大脑蛋白质
(2)碧月刀-Processing
(3)3D建模软件-SketchUp等
(4)多情环-电路板设计
(5)葵花宝典-Python编程设计
(6)一指禅-机器学习(智能的最直接的体现)
树莓派与嵌入式设备
树莓派与单片机
单片机的功能比较单一,只是为了某种特定意义而设计,而树莓派是有操作系统的PC,功能全且性能强。
树莓派与Arduino
树莓派有操作系统,能使用Python开发,能运行高级算法。
Arduino实时性强,普及比较广泛。
树莓派OS与Python编程
在树莓派上,我们会将所有的代码写入SD卡中,就是我们通常说树莓派的系统是被烧进去的。那么,树莓派的系统都有哪些呢?
官方的系统是基于Debian 的Raspbian OS,有的时候推荐使用Ubuntu Mate系统。随着树莓派被广泛地接受,微软也开始支持树莓派了,目前Win10 IOT 是支持的,同时Android也支持树莓派。而树莓派是装有Linux系统的PC,所以天然地可以使用Python编程。Python在国内的普及率不是很高,但是在国外是被大量使用的,例如谷歌。在我的认知中Python只有操作系统的驱动程序是不能写的,其他所有程序都是可以写的,比如开发WEB、嵌入式设备等。
什么是机器人
能自动执行工作的机械设备就叫机器人——首先,它是能够自动的执行工作,其次是机械设备,比如挖掘机,或者拖地的机器人。
一个机器人的组成部分包括机械装置(执行机构)、传感装置Sensors(传动+感知)、控制系统(大脑)。
机器人如何工作
图6 机器人工作原理
一句话概括:用Python代码,通过GPIO接口,去控制传动和感知设备,让机械设备按照预想的动作去执行任务。
如何一步步地构建一个机器人?
第一步就是组装硬件,硬件组装完后就是测试,会有专门的测试平台来测试。测试完以后我们就要设计相应的软件。
树莓派GPIO接口与控制器
图7 树莓派GPIO接口
接下来我给大家重点讲下树莓派上比较特殊的,也就是树莓派GPIO接口与控制器。GPIO对于树莓派来说是很特别的,这也是吸引创客的主要原因。GPIO接口有40个pin和引脚,有的是接电压和电流的,还有的是用于外接传感器的。外接传感器有时候会多于40个,那这个时候该怎么办呢?这个时候我们就需要做一些树莓派的扩展板了。
图8 树莓派拓展板和集群
左上角是我们MBH创客蜂巢自己生产的一个扩展板,当初我们想要做智能农业和智能家居工程,但是发现40个接口根本不够,因为我们要接很多很多的传感器去感知整个空间里的环境,比如温度、湿度、酸碱度等等。
这个扩展板有一个独立的CPU,然后上面设计了很多的引脚。大家可以在我们的论坛上或官网上找到代码,这些我们都已经开源了。
我感觉最好玩的应该是图中下部位置的扩展板了,它并没有像树莓派其他设备一样把GPIO接口用引脚给引出来,它只是打了几个孔。有人说我们是用更大的板子把所有的孔或Pi Zero设备集在一起形成集群一样的扩展板,但是Pi Zero设备是比较小的,如果要去扩展的话是可以插很多Pi Zero设备的,比如你插100个,总体积也不会有什么大的变化。所以,有的人就在这上面挖矿,也就是挖比特币,还有人纯粹把它当做集群,相当于NOS,可以在里面存入大量文件,而且还是并行的处理方式,相当于你可以对你的文件进行多重备份,而不用害怕它会丢失了。
大家都知道树莓派和Python是可以天然地结合在一起的,所以天然的Python在GPIO接口上有库:
sudo apt-get install python-dev
wget http://raspberry-gpio-python.googlecode.com/files/RPI.GPIO-0.5.3a.tar.gz
tar xvzf RPI.GPIO-0.5.3a.tar.gz
sudo pytho setup.py install
关于树莓派的控制器,这里我们主要讲下步进电机。树莓派的GPIO接口可以控制其他装置,只要你给它信号,这个信号不一定是脉冲信号,可以是连续的或跳跃的各种信号——给它规则的跳跃信号就可以控制步进电机,不规则的信号就可以控制其他传动装置或感应装置。
树莓派与传感器
图9 常见传感器
如果我们把机器人与人做类比的话,那么传感器对应人又是什么呢?传感器就像人类的器官一样,可以听、说、看、动。传感器种类是非常多的,我们可以通过GPIO接口或是扩展板将这些传感器接入到树莓派中,而且可以用Python的库控制它们。
常用的传感器有超声波传感器、红外传感器、温湿度传感器。所谓传感器,就是能够将传感信号感知成普遍的电信号的设备。比如超声波传感器,可以把声波信号映射为电信号。
案例一:树莓派打造无人机
图10 基于树莓派的无人机
这是我们自己设计的一款飞行机器人,现在也叫无人机。当时我们在翻译一本书叫《树莓派机器人蓝图》,其中第七章就是讲飞行机器人的,但是它的飞控是用Pix hawk,而Pix hawk的价格非常昂贵,用完之后还不能做他用。于是我们想是不是可以用树莓派去做无人机的飞控呢?前面我们也讲过,树莓派和代码其实构成了整个机器人的大脑,而无人机上的大脑就是飞控,它的螺旋桨被称为执行机构,电动机就是传输机构。我们用这样装置做出来的飞控并不比Pix hawk或是Pix 4性能差。在这个过程中,刚开始我们的代码是用C语言写的,写完之后发现CPU的使用率会达到100%,不过后来经过优化整个CPU的使用率也不过8%,这也就验证了树莓派是完全可以用来做无人机的飞控的!
那么,我们就以这个无人机为例,为大家讲讲如何用树莓派来做飞控。
图11 机器人工作布线图
我们用倒叙的方式来思考。首先,它要让四个螺旋桨转动,因为只有螺旋桨转动无人机才能起飞。而螺旋桨在转动过程中要执行哪些工作呢?比如无人机在转弯的时候怎么办?在这个时候就需要两个螺旋桨转动的速度快些,另外两个螺旋桨转动速度慢些。无人机在飞行过程中两个螺旋桨是正转,而另外两个螺旋桨是反转的,执行这些命令也需要传感。
现在大部分无人机都是由一个手柄,或者是手机APP来控制。这些控制设备通过websocket来传输命令信号,信号在CPU上经过处理后,结果通知到GPIO接口,然后GPIO接口向传动装置发送命令信号,传动装置再向感知设备发送信号。在无人机上,电机是传动装置,当GPIO接口向它发送命令信号后,螺旋桨会随之正转或反转。
另外,无人机的平衡也非常关键。所以,我们在无人机上加了一个陀螺仪,陀螺仪在很多领域都有应用,无人机的平衡需要它的四个叶片转动速度一样,而且整个无人机不发生倾斜的情况下无人机才能保持平衡。那么,我们就需要在代码上进行补偿。
图12 机器人控制程序代码结构
如果你想用树莓派做无人机,用这一套代码就够了。如果你想加一些传感器,比如摄像头,那么就加一个camera.py的代码就好了。
图13 camera.py源代码
案例二:树莓派打造智能避障小车
图14 树莓派寻迹避障小车
既然是个小车,那肯定是能走的。而避障,也就是碰到一个物体要停下来,避障需要传感器,比如超声波传感器,或者红外传感器。最后还有一个“智能”,比如它第一次走是一个探索的过程,第二次走就会走的更顺利,这个时候我们可以加入一些机器学习的方法,让整个路径得到优化。也就是说,这个小车要能走、能避障、能学习。
原理:
1.小车—电机启动—前后左右
2.停止—电机不转—设置时间周期
3.障碍识别—传感器(超声波,红外识别,激光雷达等)
4.GPIO接口—L298N驱动
5.将代码写入树莓派Sd卡中
图15 机器人控制系统代码结构
这里的代码多了一个aeduino,这是因为小车在避障过程中需要很快地刹车,而树莓派的实时数据的处理性能没有aeduino好。然后再加入一些机器学习的算法,这个小车就算有些智能了。
图16 《树莓派机器人蓝图权威宝典》
如果大家觉得我今天讲得不够详细,可以去看《树莓派机器人蓝图权威宝典》这本书。这本书通过70个案例讲述如何一步步用树莓派做机器人。
Q&A 环节
Q:树莓派的操作系统能方便移植到别的开发板吗?
A:因为树莓派的OS使用了Linux kernel,所以完全可以。现在树莓派嗨推出了桌面操作系统PIXEL OS。
Q:用树莓派开发和用普通的单片机开发相比有什么优势?
A:树莓派功能更加的全,能接入的传感器更多。
Q:飞行时间切片法这个不是说帧率做不上去么?
A:代码优化其实是可以的。
Q:单片机上有各种总线(串口 can口等) 一般的传感器单片机都能够使用啊?难道树莓派有些特殊传感器?
A:树莓派上基本所有传感器都可以用,因为GPIO。
Q:树莓派操作系统稳定性怎么样?因为很多项目由于稳定性原因不采用这种嵌入式,转向plc了。
A:稳定性经过几年的发展还是可以的,但是现在在工业上稳定性不好,尤其是有电磁干扰的情况下树莓派不稳定。
。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/89561.html