树莓派如何开发机器人

导语:树莓派是为学习计算机编程教育而设计的一种微型电脑,其系统是基于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:稳定性经过几年的发展还是可以的,但是现在在工业上稳定性不好,尤其是有电磁干扰的情况下树莓派不稳定。

分享基于WebRTC的Android移动端无线视频传输案例

摘 要: 视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出了一种基于WebRTC的Android移动端视频传输技术,介绍了信令与WebRTC连接实现机制,以及穿透的具体过程。

0 引言

本文提出了一种在移动端上(Android)的视频传输技术,选取了两台Android设备作为测试设备,方便快捷,而且可携带性强。移动智能终端作为监控端也是一个最佳的应用平台。随着谷歌Android的飞速发展[1],越来越多的人选择Android平台来观察视频数据。

1 技术简介

(1)Android系统

Android是基于Linux开放性内核的操作系统,也是一个开放的移动终端操作系统平台,为移动设备提供了一个包含了操作系统及应用程序的软件叠层架构。Android作为Google最具创新的产品之一[2],越来越多地被移动终端厂商使用和二次开发。Android具有很多特性,最大的特性是开放性,还有就是在其平台上开发的应用程序权限由开发人员决定。

(2)WebRTC

WebRTC是Google于2011年6月3日开源的即时通讯项目[3]。它是一个支持网页浏览器进行实时语音对话或视频对话的技术,其出现可以帮助Web浏览器、个人电脑或手机实现实时多媒体通信功能。WebRTC提供了各种实现视频会议的核心技术,包括音视频的采集、编解码、信号优化和处理以及网络传输等。

2 系统设计及实现

系统设计主要包含三个部分:音视频模块、信令服务和打洞服务。

2.1 音视频模块

VoiceEngine(WebRTC音频引擎)是包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。ISAC(Internet Speech Audio Codec)是针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认编解码器。NetEQ for Voice是针对音频的语音信号处理算法、自适应抖动控制算法以及语音包丢失隐藏算法。能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小,能够有效地处理由于网络抖动和语音包丢失对语音质量产生的影响。VideoEngine(WebRTC视频处理引擎),是包含一系列视频处理的整体框架,是从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。VP8视频图像编解码器是WebRTC视频引擎的默认编解码器,VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。Video Jitter Buffer(视频抖动缓冲器),可以降低由于视频抖动和视频信息包丢失带来的不良影响。对音视频模块VoiceEngine和VideoEngine进行编译使用,首先要到Google上下载安卓NDK,然后还要安装其他一些工具。以下对两个库文件简单解释,voe_audio_processingadds消噪(NS):自动增益控制和回声控制;voe_rtp_rtcp:增加了RTCP发送器报告、RTP/RTCP统计、前向纠错(FEC)和RTP实时捕捉。

2.2 信令服务

信令服务的作用是在通信双方都不知道对方的IP以及端口的情况下建立连接。由服务器建立连接来实现。WebRTC实现了两个API,分别是:MediaStream:通过MediaStream的API能够通过设备的摄像头及话筒获得视频、音频的同步流;RTCPeerConnection:RTCPeerConnection是WebRTC用于构建点对点之间稳定、高效的流传输的组件。WebRTC使用RTCPeerConnection传递数据,但传递数据之前,需要一种机制来协调通信并发送控制信息,而这种机制就是信令机制。WebRTC并没有制定任何信令的机制和协议,所以可以灵活选择任何信令协议[4]。Openfire是一种开源的实时协作(RTC)服务器,本文设计用它作为信令服务器。

信令交换的信息有:(1)用来控制通信开启或者关闭的连接控制消息;(2)媒体流元数据,比如解码器、解码器的配置、带宽、媒体类型等;(3)发生错误时彼此告知的消息;(4)外界所看到的网络上的数据,如IP地址、端口等;(5)用来建立安全连接的关键数据。

具体的连接建立方式由一种叫JSEP(JavaScript Session Establishment Protocol)的协议来规定,使用JSEP的原因在于在JSEP中需要交换的关键信息是多媒体会话描述(Multimedia Session Description)。JSEP将客户端之间传递的信令分为两种:offer信令和answer信令。它们主要内容的格式都遵循会话描述协议(Session Description Protocal,SDP)。通过offer和answer交换SDP描述符,流程如下:

(1)A和B双方建立一个RTCPeerConnection实例。

(2)A通过createOffer方法建立一个包含A的SDP描述符的offer信令。

(3)A通过setLocalDescription方法,将A的SDP描述符交给A的RTCPeerConnection实例。

(4)A将offer信令通过服务器发送给B。

(5)B将A的offer信令中所包含的SDP描述符提取出来,并通过setRemoteDescription方法交给B的RTCPeerConnection实例。

(6)B通过createAnswer方法建立一个包含B的SDP描述符的answer信令。

(7)B通过setLocalDescription方法将B的SDP描述符交给B的RTCPeerConnection实例。

(8)B将answer信令通过服务器发送给A。

(9)A接收到B的answer信令后,将其中B的SDP描述符提取出来,调用setRemoteDescripttion方法交给B的RTCPeerConnection实例。通过这一系列的信令交换之后,A和B所创建的RTCPeerConnection实例都包含了A和B的SDP描述符了。

2.3 打洞服务

打洞服务就是为了获取连接两端设备的网络地址[5]。要实现P2P视频传输,实际应用中不可能让用户自己去设置对方的IP和音视频端口,而且即使设置了对方的IP和端口也不一定能运行,因为P2P视频传输过程中,如果双方不在同一个网段则还需穿透NAT。

打洞原理:主要思路就是通过STUN服务器获取自己的IP、Port及NAT信息,然后通过信令服务器交换这些信息,最后两客户端根据各自得到的IP、Port、NAT信息进行相应的穿透。STUN是一种网络协议,可以让处于NAT后的客户端找出自己所处的公网IP地址,而且可以获取自己的NAT类型,以及一些相关的端口信息,这些信息用来在两个处于NAT之后的主机建立UDP通信。STUN由RFC 5389定义,是一个客户机-服务器协议,由于每个peer可能处于不同的网络中,所以每个peer都需要NAT穿越,确保双方都可访问对方的IP地址和端口以及STUN服务器。在RTCPeerConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越。ICE(Interactive Connectivity Establishment),交互式连接建立,是一种综合性的NAT穿越技术,可以整合各种NAT穿越技术,如STUN、TURN(Traversal Using Relay NAT,中继NAT实现的穿透)。ICE会先使用STUN,如果失败,ICE就会使用一个中继的TURN服务器。图1为iceServers配置信息。

树莓派如何开发机器人

在iceServers配置对象(RTCPeerConnection constructor)中设置STUN and/or TURN服务器地址信息,包括IP地址、端口号等。有了这些信息ICE会自动启动。STUN服务架设在外网,它有一个简单的任务:获取一个发送请求的设备(运行在NAT后边的应用)的IP和端口,然后返回这个地址。换句话说,应用使用STUN服务器发现它的外网IP和端口,这个过程确保了一个WebRTC端获得它自己的公共地址,然后通过signaling机制发送这个信息给另一端,这样就可以建立起一个直接连接。在实际应用中,不同的NATs有不同的工作方式,可能有多个NAT层,但是原理是一样的,原理如下:

(1)A通过公共IP与服务器建立连接。

(2)A发送一个加入某房间的信令,并设置房间号,信令中需要包含该房间的编号。

(3)若有新用户B加入,B会向服务器发送一个请求信令(new_peer),信令中包含新加入的用户B的信息以及房间号。

(4)若房间号相同,则建立A和B的通信连接。

系统框架如图2所示。

树莓派如何开发机器人

图2中两个peer分别指两个终端用户,NAT的用途是作为穿透使用,turnserver是由一个STUN服务器加上中继功能构成,当建立一个基于UDP的连接失败了,ICE就会使用一个中继的TURN服务器也就是Relay server。

3 测试及结果

树莓派如何开发机器人

在本次测试中,采用的两台Android手机分别是三星平板和魅族手机。如图3所示两台Android平台(一台是安卓手机,一台是安卓平板)正在进行视频传输,从屏幕中既可以观察远端传过来的情况又可以观察自己要传出去的视频情况。

4 结论

本文采用WebRTC音视频技术,利用NAT穿透和信令服务的搭建,实现了移动终端的无线视频传输。NAT穿透在实现跨网功能上起到了巨大的作用,对于安卓移动端具有良好的应用价值。

参考文献

[1] 李宁.Android开发权威指南[M].北京:人民邮电出版社,2011.

[2] 丁鹤洋,李太君,徐瑛.3G无线视频监控系统的设计与实现[J].通信技术,2012,45(2):68-70.

[3] 邹勇.基于XMPP和Webrtc的web实时通讯[D].南京:南京大学,2012.

[4] 王璐.Web模式下基于XMPP的即时通信系统的设计与实现[D].北京:北京邮电大学,2010.

[5] 杨佳胜.基于Android终端的视频通话系统设计与实现[D].大连:大连理工大学,2011.

展开阅读全文

页面更新:2024-04-30

标签:三星   机器人   无人机   螺旋桨   传感器   信号   接口   服务器   设备   视频

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top