CSK.Blog--个人原创Weblog

基于MK802、Arduino和OpenCV库的互动开发

这是一个文章系列的一部分,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net),以及指向本文原始出处的链接!

访问目录:基于MK802 MiniPC的扩展开发应用-简介篇(http://www.csksoft.net/blog/post/mk802_dev_intro.html)

 

revision: 0

这是本系列文章的最后一篇了。本文将以如下几个基于MK802的应用实例进行介绍,向大家展示MK802在机器人控制以及计算机视觉方面的应用潜力。
1. 基于MK802的摄像头自动光源跟踪
2. 基于MK802的人脸摄像机云台跟踪
3. MK802将路由器网络通讯情况显示与VFD屏幕
这些是例子基于了我前5篇文章[1][2][3][4][5]所介绍的各类技巧和环境所形成的,这里我就假设大家已经阅读过先前的文章了,这里将以介绍思路和原理的方式来介绍这些实例。如果想进一步了解他们的实现,可以在本系列文章在github开设的项目中查看他们的源代码,在前一篇文章[5]中我也介绍了如何编译他们的。

Demo applications run on MK802 MiniPC to show MK802 potential in OpenCV and arduino related areas

另外之前也有一些朋友表示这些实例使用的算法并不高级,性能也不佳。这里我就做一个统一的回应,本系列文章介绍的这些实例的目的并不是去实现这些功能本身,这些实例目前的确存在更好地实现。我制作这些实例的目的是为了向大家介绍MK802用于机器人控制和计算机视觉算法处理方面的强大潜能,因此我都尽可能使用了被大家熟知或者存在于OpenCV例子当中的程序作为范本。至于如何将这些例子进行改进扩充,就是靠大家发扬光大了:-)。

另外还有很多人会问这些例子能不能在树梅派、MK802的后续升级版本、XXXXX上面实现?这里我再次重复前几篇文章的说明,这里介绍的一切方法和思路对所有基于Linux的系统有效。当然,如果只是简单的复制这里的步骤,那恐怕只能用于MK802了。

点击文章标题浏览正文

在MK802上结合OpenCV库进行计算机视觉处理

这是一个文章系列的一部分,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net),以及指向本文原始出处的链接!

访问目录:基于MK802 MiniPC的扩展开发应用-简介篇(http://www.csksoft.net/blog/post/mk802_dev_intro.html)

 

revision: 0

这里将介绍MK802这类基于Cortrex A8/A9相对于Arduino这类单片机开发版、树梅派、以及PC对于爱好者来说最具有吸引力的优势所在:性能足够强大,可以运行OpenCV这类库的视觉算法,同时体积足够小,也相对于PC足够的省电。
这篇文章正是介绍如何在MK802上使用OpenCV库并利用它进行计算视觉相关应用的开发的。在我实际使用的体验来看,OpenCV在MK802上运行的性能虽然相比PC还有一些差距,一些复杂的算法运行的较慢,但是大部分的算法都可以满足需求。并且如果进一步的优化后,相信可以有更多的性能提升。
需要注意的是本文并不是OpenCV以及计算机视觉方面的教程,对于涉及到的一些视觉算法的知识以及OpenCV本身的背景知识,还需要读者自行学习。本文将着重关注如何在MK802这类MiniPC上使用OpenCV这个问题。

点击文章标题浏览正文

MK802与外部硬件设备的通讯

这是一个文章系列的一部分,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net),以及指向本文原始出处的链接!

访问目录:基于MK802 MiniPC的扩展开发应用-简介篇(http://www.csksoft.net/blog/post/mk802_dev_intro.html)

 

revision: 2

通过了前几篇文章[1][2][3]的介绍,相信大家已经为MK802准备好了适合的自制系统也了解了应用开发的基本过程。从这篇文章开始我们将正式介绍本系列文章的最终目的:使用MK802与Arduino等外部硬件通讯,制作各类应用。
这篇文章将介绍其中的一个重要步骤:如何实现MK802与外部硬件设备的通讯。这是后续进一步开发的必要环节。

图:利用MK802的2个usb口连接usb外设


图:直接将MK802和Arduino相连

图:在自制舵机云台上安装的USB摄像头(将在后续文章介绍)

点击文章标题浏览全文

基于MK802的应用开发和相关的工具

这是一个文章系列的一部分,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net),以及指向本文原始出处的链接!

访问目录:基于MK802 MiniPC的扩展开发应用-简介篇(http://www.csksoft.net/blog/post/mk802_dev_intro.html)

 

revision: 1

 

这里将介绍如何在MK802的Linux系统上进行程序开发和开发工程中会用到的一些工具和技巧。虽然文章是针对MK802这个MiniPC写的,但是由于采用了Linux系统,因此文章中介绍的内容其实都是标准Linux系统所支持的,因此自然可以在其他类型的MiniPC(如树梅派)上使用。


在之前的系列文章中我介绍了如何在MK802运行定制的传统Linux发行版。在此基础上,我们就可以使用标准Linux开发的技巧来为MK802开发程序。如果你很了解Linux的开发知识,不妨跳过本系列直接阅读后续的文章。


另外需要提醒大家的是本文并不打算写成一个系统的Linux开发教程,因此对于很多背景知识,还需要大家去学习相关的书籍。这里只是抛砖引玉式的通过一些例子让大家了解为MK802开发的大致过程。

点击文章标题浏览全文

基于MK802 MiniPC的扩展开发应用-软/硬件修改和扩展

这是一个文章系列的一部分,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net),以及指向本文原始出处的链接!

访问目录:基于MK802 MiniPC的扩展开发应用-简介篇(http://www.csksoft.net/blog/post/mk802_dev_intro.html)

 

revision: 0

这部分将介绍各种针对MK802硬件以及软件的修改技巧,相对来说,这部分介绍的都属于各种杂碎的小技巧,文章构成上比较零碎,并且相对于整个系列文章其他部分独立。
虽然这些都是各种小技巧,有些甚至属于雕虫小技,不过在必要的地方我也会通过问题本身做一些对linux kernel的进一步介绍。

在本文中将介绍的例子有:

  1. 引出MK802的内部调试串口信号,用于kernel的调试和开发
  2. 通过fex脚本配置hdmi的输出分辨率至1080p和其他尺寸以及色彩深度
  3. 在自制系统内利用MK802的内置Flash存储文件
  4. 将CPU主频超频至1.1G,以及实现动态频率调节降低功耗

点击文章标题浏览正文

基于MK802 MiniPC的扩展开发应用-系统自制

这是一个文章系列的一部分,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net)以及指向本文原始出处的链接!

访问目录:基于MK802 MiniPC的扩展开发应用-简介篇(http://www.csksoft.net/blog/post/mk802_dev_intro.html)

 

为嵌入式设备定制系统是一个需要很多背景知识的技能。这里无法假设各位的背景知识结构,因此在文章组织上,我将默认拥有相关经验的直接操作过程写在最前面。随后是为新手提供的简单的背景介绍。最后的部分是对一些问题的深入探讨。对于一些超出本文范围的内容,我也给出了对应的参考文献,方便感兴趣的人进一步的研究。

为何需要系统自制?


MK802出厂内置的是Android 4.0 (ICS) 系统,虽然这个系统在芯片厂家和设备厂家的优化下具有最好的硬件兼容性,但是对于我们接下来所需要进行的二次开发来说,采用其他传统的Linux发行版将比较方便。

当然也有人会坚持继续采用Android,这点其实没有任何问题,但需要注意这个平台的一些不同之处。对此在本文的后半部分我将专门讨论这一问题,大家可以根据自身情况来做取舍。

所谓系统自制,其实就是让MK802运行由我们为他所定制的基于Linux Kernel的系统,在这个过程中我们将加入后面开发所需要的驱动/组件,删除无关的组件,并作必要的性能优化。从而构建出适合于进行扩展开发所需要的系统环境。

而这个过程将包含如下几个阶段:
1. 配置并编译Linux Kernel/uboot等核心
2. Rootfs的选取和打包
3. 向MK802部署自制系统

MK802支持的系统部署模式


MK802,或者说采用Allwinner A10芯片的设备,支持从两种渠道启动系统:内部NAND Flash以及外部的SD卡。他的具体运作机制,可以参考[7]。这个方式很类似PC的多重启动:在启动过程中,如果发现SD卡中存在有可以用的系统时,则直接从SD卡引导系统。否则才会去加载内置的NAND flash中的系统。

这对我们来说是一个好消息,这样我们的自制系统可以直接保存在一张外部的SD卡上。一方面可以保证原生的Android系统不被破坏,另一方面也有利于对我们的自制系统进行备份。

当然,如果愿意,也是可以将自制系统写入内部的NAND flash。这部分的操作其实与保存在SD卡上类似,可以参考文献[10]。

本文将采用SD卡上系统的模式进行介绍。


图:可以将自制系统安装在SD卡上

会不会破坏设备?无法使用?变砖?

在前文已经介绍了,如果将系统保存在SD卡上,则完全不会破坏MK802自带的Android系统。除此之外,Allwinner A10芯片设计上也有一个很好用的模式:支持USB固件下载[7]。如果内部的NAND flash上的系统被破坏,只要芯片本身没有损坏,则可以通过usb连接PC,通过官方提供的LiveSuite工具进行原始固件恢复[12]。因此即使是将自制系统部署在内部对NAND Flash上,也完全不必担心变砖。
这里提供给大家三个方案供选择:
1- 完全定制自己的系统
这是相对繁琐,最本质的操作过程,但有无可比拟的优势。

2- 使用社区有的编译打包脚本
使用社区提供的编译脚本,简化第一种方案的流程。同时在必要的时候可以重新按照方案1的部分流程做更进一步的定制。不过这里还需要做一些额外的人手干预修改编译行为。

3-使用别人提供的系统镜像

相对简单,但存在一些限制。具体采用哪个方案,大家可以看每个方案前的介绍自己衡量。


 

2012/11/22 updated: 

这里也直接发布出我制作的系统完整镜像,大家可以直接按照方案3的描述,直接将镜像写入自己的SD卡。该系统按照本文的描述进行配置,采用linaro 12.07 ubuntu armhf rootfs以及带有USB摄像头等必要驱动支持的linux kernel。

可以直接使用命令:

gunzip -c mk802_linaro_initial.img.gz | dd of=/dev/<你的SD设备名> bs=64k

将镜像写入SD卡,请确保SD卡容量>=8Gb。具体细节,请阅读方案3

同时,为了方便大家,这里也给出我预先编译的Linux Kernel/Uboot包,他采用方案2描述的hardware pack形式系统,可以参考方案二了解细节。其中包含了对USB Camera、USB串口的支持。

下载地址:http://www.csksoft.net/data/mk802/mk802_hwpack_cskbuild.7z

点击文章标题浏览正文

基于MK802 MiniPC的扩展开发应用-简介篇

这将是一个文章系列的第一篇,介绍基于MK802这类MiniPC的扩展开发,并展示他在计算机视觉、机器人控制方面的潜能

欢迎转载,但请保留原始作者信息(Shikai Chen, http://www.csksoft.net)一直指向本文原始出处的链接!

为了增加大家兴趣,首先将相关的演示视频贴出。他们的细节将在后续文章中介绍。

基于MK802,结合Arduino控制的人脸自动追踪云台

基于MK802和Arduino的光源追踪

基于MK802的摄像头画面前景学习和提取

基于MK802的网络带宽统计显示

 

 简介

自从以树梅派(raspberry-pi)为代表的低成本微型电脑问世以来,市面上陆续的就有各种基于Cortex-A8 ARM的Android微型主机出现。其中比较典型的就是MK802,他是国内厂家推出的一款大小与u盘类似的迷你电脑。

图:MK802 MiniPC

 

虽然只有U盘大小,但是它具备了不错的配置: 1Ghz的cortex-A8 ARM处理器: Allwinner A10、最高达1Gb 的DDR3内存、2个usb 口可外接usb设备、内置WIFI网卡,并且使用HDMI接口可输出高达1080p画质的图像。使用的是Google Android 4.0的操作系统。

这样的配置已经和几年前的主流PC性能相仿,而且价格也不贵,一般几百块钱的成本即可买到。并且相比较树梅派来说性能也高出了一截(树梅派使用的是ARM11的处理器,主频仅为700Mhz)。

除了能够出色完成基本的上网、视频播放、游戏娱乐外,这样的配置允许这台U盘大小的机器运行许多以前只能在PC上进行的工作:比如基于OpenCV的计算机视觉运算、视频传输和处理、语言合成和识别、复杂的人工智能算法等等。并且爱好者也可以通过MK802上边的2个USB口以及WIFI与其他设备、传感器或者开发板进行交互,达到更多地功能。

因此它对于电子制作爱好者具有非常大的吸引力。很多方面MK802可以代替一台x86 PC,并且更小的体积/重量以及功耗使得这样的设备可以被航模、无人机、小型机器人这类对体积、重量、功耗非常敏感的设备所搭载,并且强大的运算能力足以胜任一些以前看似不可能再小型设备上进行的算法。


不过厂家推出他的初衷是作为连接电视机用的媒体播放器或者机顶盒使用,因此目前市面上大部分的应用还是围绕着如何用它进行多媒体播放或者日常上网娱乐展开的。鲜有介绍如何基于MK802这类小主机进行扩展开发、使用OpenCV进行视觉识别、与Arduino通讯实现功能扩展的文章。

因此在这个系列的文章中,我尝试结合自己的经验以及整理得到的网上各类有关于MK802的扩展开发的文章,为大家介绍如何基于MK802这类微型主机进行扩展的开发,以及如何与Arduino等开发板进行互连互动,并且使用OpenCV进行计算机视觉方面的应用。希望这个系列对大家能起到参考作用,期待大家充分挖掘出这类迷你PC的潜能,做出更多更有趣的东西。

当然,本文介绍的很多技巧和方法不仅仅适用于MK802,同样任何基于Linux系统的主机(包括PC)都将适用。因此这里提到的方法和代码,也可以在其他类似的迷你主机,例如树梅派、MK802的后续升级版本上使用。

图:本系列文章将介绍的例子:使用MK802结合Arduino,实现的人脸跟踪系统

本系列文章的将分为如下几大部分:

第一部分:MK802的系统自制

这部分将介绍如何自行编译Linux Kernel、uboot等核心软件达到对MK802硬件的完全控制和定制的能力,并且将推荐几个适合于MK802的Linux发行版本(主要是rootfs包)。
这将是对MK802进行二次开发和扩展的一个必要环节。
这部分的一些部分会需要读者具有Linux开发的一些背景知识,不过我也会介绍一些便捷的方式使用其他人预先制作的系统,为新手绕过这个步骤。当然凡事都有两面性,对于使用其他人现成的系统,将在后续的扩展开发中丧失一定的灵活性甚至会造成一定的阻碍。

第二部分:MK802的软/硬件修改和扩展


这部分将介绍一些hack小技巧,来对MK802的软硬件做出一些的改动达到自身的需求。例如引出调试串口信号,这将是对kernel调试非常重要的。这部分的内容相对后续部分独立,如果不感兴趣也可以跳过这部分。

第三部分:基于MK802的应用开发和相关的工具


这里将介绍如何在MK802的Linux系统上进行程序开发和开发工程中会用到的一些工具和技巧。
将介绍如何对MK802这类ARM设备在PC上进行交叉编译,如何部署到目标系统以及如何调试等内容。
这部分是对MK802进行扩展所必须的,不过由于篇幅和时间限制,这部分的介绍只是走马观花式的。其实质是基于Linux这类POSIX系统的开发技巧,以及对gcc工具链的使用知识,这些方面的知识还是需要读者能够参考相关的数据系统的进行学习。

第四部分:MK802与外部硬件设备的通讯


这部分将以Arduino为主要例子,介绍如何通过MK802经过usb口如何与Arduino设备进行互通。同时也会给出其他通讯方式的实现思路。
这部分末尾将介绍一个使用MK802与arduino通讯并驱动舵机云台的例子。

第五部分:在MK802上结合OpenCV库进行计算机视觉处理

这部分将介绍如何在MK802上扩展摄像头、交叉编译OpenCV库并进行使用的过程
这部分末尾将介绍如何通过MK802在一个128x64分辨率的VFD显示屏上显示摄像头画面的例子

第六部分:基于MK802、Arduino和OpenCV库的互动开发


这部分将为了本系列文章的几个配套实例的开发思路。包括人脸的跟踪、光源的跟踪、将路由器网络流量信息展示在于MK802连接的屏幕上。

 

分页:[«]1[»]

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)