CSK.Blog--个人原创Weblog

Arduino-Lite, 轻量级且高性能的AVR固件库

一篇拖了2年多的文章...目前首发于我们RoboPeak团队网站,可以过去查看中英文版本以及最好的阅读体验。这里只是缩略版本。

RP Blog文章:

Arduino-Lite, RoboPeak使用的高效轻量级AVR库(1) -- 介绍篇

http://www.robopeak.net/blog/?p=42

Arduino-Lite, RoboPeak使用的高效轻量级AVR库(2) -- 使用篇

http://www.robopeak.net/blog/?p=70

Arduino-Lite开发参考文档

http://www.robopeak.net/blog/?p=107

我blog早先时候写的一篇相关文章:

说说我从去年9月份开始的AVR单片机学习和使用

http://www.csksoft.net/blog/post/255.html

Arduino-Lite是我们RoboPeak机器人团队开发使用的轻量级高性能AVR固件库,我们机器人小车的AVR系统中全部采用Arduino-Lite所开发。目前已经将他全部开源了,希望对各位有所帮助。

Google Code项目主页: http://code.google.com/p/arduino-lite/

简介

Arduino固件库提供了非常易于初学者使用的函数库,可以很快对AVR进行开发,即使是专业人员用这个库也会觉得便利。同时他对引脚的抽象编号也有利于固件代码的移植。不过这个库相对体积过大,性能也不理想,所以难以在产品领域使用。这就是我们开发Arduino-Lite的原因所在。

Arduino-Lite包括了2大部分

1) 改良和扩充的Arduino固件库,

提供大多数情况下大于50%的代码尺寸缩小和10倍以上的运行速度加速。同时支持更多的AVR芯片和时钟频率。使得这个库能可被用于对成本和性能敏感的产品应用中

2) 自我包含的编译开发环境

不需要安装任何第三方程序即可完成AVR的开发、下载工作。Arduino-Lite自带了avr-gcc(WINAVR),不过创建新工程非常简单,基本的文件夹复制操作即可自动产生新的工程,也不用编写和修改Makefile脚本,都是智能进行的

 

这里先给出2个直观的例子:

实现PWM输出功能:

代码类型 代码 执行所需的AVR时钟周期
Arduino analogWrite(9, pwm_val); ~80
Arduino-Lite ANALOG_WRITE(9, pwm_val); 2
Arduino-Lite PWM_SET(9, pwm_val); 1
avr-gcc直接寄存器操作 OCR01 = pwm_val; 1

可以看出,Arduino-Lite提供的函数和使用方式与Arduino非常接近,但效率上他有和直接去操作AVR寄存器性能一致。

编写一个PWM驱动LED闪烁程序的代码尺寸对比: 

  • Arduino库产生的最终代码: 2048 byte
  • Arduino-Lite产生的最终代码: 100byte

对于AVR ISP编程器的支持,Arduino-Lite支持Arduino方式的串口下载,也支持HIDboot的USB-HID下载,同时原生支持我们RoboPeak做的开源USB免驱动编程器RoboPeak USB Connector进行AVR芯片编程(见http://www.robopeak.net/blog/?p=133)。

特点和适合使用的场合

同样使用C++/C编写且基于avr-gcc编译器。但与Arduino固件库相比,Arduino-Lite有如下优势。

非常轻量级

使用Arduino-Lite的固件往往比使用Arduino固件库小了50%以上.

高效率

许多Arduino-Lite提供的与Arduino固件相同功能的函数,例如digitalWrite之Arduino-Lite版本:DIGITAL_WRITE仅使用一条AVR指令实现.

支持更多的AVR芯片和时钟频率

除了 Atmega8(A), Atmega168(PA), Atmega328(PA), Atmega1280 芯片外, Arduino-Lite 也支持以下芯片: Attiny2313, Attiny26, Atmega48(PA), Atmega88(PA)

对于时钟频率, Arduino-Lite 支持从1Mhz 至 20Mhz 的频率范围.

 

除此之外,Arduino-Lite还有如下特点:

 

自包含,无需依赖任何第三方工具/编译器/库

只要系统中带有文本编辑器,即可直接用Arduino-Lite进行AVR固件开发、编译、烧录等动作。Arduino-Lite自带了avr-gcc(WINAVR)以及相关的函数库。

灵活易与整合的编译环境,基于Make,但无需用户编写或是生成任何Makefile

创建一个新的Arduino-Lite工程,最简单的办法是将模板工程文件夹解压缩并重命名为希望的工程文件。并将相关的源代码以任何目录结构放置于工程目录下,Arduino-Lite就能编译项目,无需用户修改/编写/生成Makefile.

 

我们认为Arduino-Lite适用于以下领域

  1. 对固件代码尺寸/器件成本敏感的场合,比如需要使用Attiny或者Atmega48等小Rom尺寸的芯片的场合
  2. 对固件执行速度有较高要求的场合,比如对实时性要求较高的工控领域和机器人控制器领域
  3. 喜欢使用Make脚本、自定义IDE等的开发环境
  4. Arduino/AVR爱好者,且有一定的编程经验,不满足于Arduino IDE环境,期望更高效的固件库
  5. 希望将Arduino的简易开发特性运用于Attiny, Atmega48以及不同时钟条件下的硬件环境
相比Ardunio的固件库,Arduino-Lite或许不适合
  1. 不喜欢命令行界面、Make编译脚本的人群 (我们也有计划将Arduino-Lite支持Arduino-IDE)
  2. 希望直接使用Arduino各类第三方库,急需应用的情况

实现细节

省略,请参考RP Blog原文:http://www.robopeak.net/blog/?p=42

 

如何使用

 可以在Google code上下载已经打包好的zip包,或者直接checkout 源代码使用,具体见:http://www.robopeak.net/blog/?p=70

 

开发和配置过程都异常的简单,基本都是鼠标操作即可搞定,也无需以来别的软件、库。

 

下面有段使用RP USB Connector进行AVR烧录的视频:

(http://www.tudou.com/programs/view/Den9uh3HTHE/)

 

函数手册

 略文,详见:http://www.robopeak.net/blog/?p=107

Arduino-Lite新增函数/宏

基本IO引脚控制

PWM输出控制

模拟量采集(ADC)

睡眠和延迟

中断处理和管理

串口通讯

调试功能

文本格式化

XV-11拆解和部件使用

详细的拆解照片就不发出来了,放出一小部分给大家看看,但不作解释:-)

XV-11国外已有不少开源项目利用起了这个硬件设备,蛮不错的。

最后来段视频:http://www.tudou.com/programs/view/1iMA0Tc3y1k/

Ar.Drone和XV-11入手

经历了一段时间的等待,Ar.Drone和XV-11都到货了,过程还算顺利。

 

Ar.Drone应该已经有不少人听说或者购买了,所以就贴几张照片,视频网上已经有太多了,就不重复了。

简单的说他是一个玩具级别的四轴飞行器。不过这个玩具还是比较复杂的,配备了前放和正下方的摄像头用于实时远程观看和航拍,并且用于姿态传感器数据,另外配备超声波测距仪(测高)、6DOF的惯导系统(3轴陀螺仪+3轴加速度计)。

虽然这个飞行器主要是供人消遣的(在iOS或者Android设备经过WIFI操作),不过厂商也提供了可在PC(linux, win32)、iOS、Android上的SDK,供开发者获取飞行器传感器数据、摄像头画面以及控制飞行。利用他的SDK即可实现自主飞行、目标物体跟踪和探测、SLAM等更加高级且有意义的事情。

另外他的控制系统是基于ARM9的Linux方案,网上也有人成功利用他的usb口外接额外GPS等外设、也可通过WIFI使用telnet登陆上边的linux shell,可谓充满了无限的可能性。感觉就是四轴中的Roomba...

使用下来觉得的确是一个不错的设计,虽然存在诸多缺点(噪音大,不是足够稳定,待机短),不过相比那些开源的四轴项目(如MK)或者其他的商业模型级别的4轴,Ar.Drone已经足够稳定和易用了,并且成本上也做得很出色,即使是售价都比开源的成本略高而已。这里面算法和传感器方案的创新有不少的功劳,比如他使用超声波方案代替了传统的气压计,节省了不少成本(虽然牺牲了些性能),也利用正下方的摄像头做水平位移的检测。

总的来说这是一款很值得体验的产品,并且,如果你不仅仅把他当作是一个玩物的话,他会带来更加巨大的价值。

 

再来提提XV-11,这估计国内就没什么人气了,不过他的竞争产品,Roomba相信大家就比较熟悉。XV-11和roomba相比绝对是遥遥领先了,不过他们都比不过人工的打扫效果。当然,我也并不看重他的打扫效果:-)。这里贴一些视频和图片:

 

http://www.tudou.com/programs/view/e4urN4N1uyk/ 

 

http://www.tudou.com/programs/view/X768U-jbvBY/

关于我们RoboPeak团队以及更多的图片视频

又是很久没有更新自己的Blog, 很多朋友都问起过RoboPeak团队和项目的情况,在我们正式发布Demo前,这里先透露一些相关的信息吧。今后关于RP的任何进展都首先会在团队网站公布,我的Blog也会友情转载:-)

 

团队网站:  www.RoboPeak.net

团队Blog: http://www.robopeak.net/blog/

RoboPeak是国内由一群软件工程师、电子工程师、新媒体艺术家所组成的机器人及相关技术领域的设计研发团队,于2009年底创建。

团队致力于民用机器人平台系统、机器人操作系统(ROS)以及相关设备的设计研发,并尝试将日新月异的机器人技术融入人们的日常生活与娱乐当中。同时,我们将尽力为机器人技术在开源硬件、开源软件社区的普及做出贡献。

团队在嵌入式系统、系统级软件/固件、图像识别等领域拥有丰富的经验,拥有独立设计,开发机器人操作系统、相关传感器设备硬件/固件的能力。

 

我们团队主要由高中本科的同学和朋友组成,大家利用业余的时间进行这个项目。之前我Blog中放出的照片中的智能小车就是我们制作的机器人平台系统的原型机,他包含了由团队自行设计的硬件系统以及我们定义的机器人操作系统RoboPeak Infrastructure. 下面贴一些进一步的介绍图片。

原型机的图片和配置:

激光雷达扫描得到的环境模型

下面是我们成员vinjn童鞋带来的演示视频:

激光雷达得到的平面地图信息

使用Ipad进行操控

一些RoboPeak设计的专属硬件

下面说说我自己的一些感想吧。这个项目至今已经快2年了,不过大家都比较低调,所以至今不大做什么宣传,不过我们都期待着在实现到一定的水平后有一个公开的发布演示,所谓厚积薄发:-)

就我个人来说,基本上业余时间都用在了RoboPeak上,虽然这目前只是一个业余的兴趣项目,不过还是希望能将他做到完美和极致。目前工作也差不多2年半了,的确感受到工作后不比学生阶段有很多的闲暇时间做些别的事情,也有很多现实的问题来面对。不过这不能成为放松的借口,通过参与RoboPeak,觉得还是有很多收获的,更重要的是有一群志同道合的伙伴,感觉很幸福。大家都在繁忙工作之余抽出时间来,很不容易。

机器人领域的特殊之处是他涉及的方面很宽,从最基本核心的机械、电子电路、传感器、运动理论以及到上层的软件构架、图像识别、定位和地图构建理论等都有所涉及。这一方面是一个很有趣的地方,因为这样可以在这个过程中学到新的知识和技能,我自己就从参与RoboPeak开始正式学习AVR单片机,以至于后来Blog都已经偏重硬件方面了。利用这样的机会去接触新的领域往往学习起来是最快的,不过另一方面也对从事这个领域的人有比较高的要求,如果只是简单的制作可以要遥控的小车,那这最多也就是个遥控玩具,要称为机器人,就需要有自主行动和规划的能力,这也是我们目前和今后打算探索的领域,也是打算在公开演示中所期望展示的部分。事情要做好,都要付出努力,兴趣也是如此,也需要有坚持和付出,过程不会都是有趣的,但是等到有了成果那种喜悦是非常美妙的。我自己也一直在想,虽然目前我们还是刚起步,一些设计也会被人觉得山寨,不过事在人为,这都会改变的。

另外也有不少朋友问过我们有没有打算开源或者公开设计,这个计划我们的确有,目前市面上也有很多优秀的开源库,例如MRPT(mrpt.org)库提供了现成的SLAM算法,当今比较热门的SLAM算法他都有所提供。今后在合适的时机,相信我们也会把自己的一些资料贡献给社区,希望对国内外机器人爱好者有所帮助,比如我们内部使用的Arduino改良库ArduinoLite已经公开(还没有机会好好的介绍),今后还有更加强大的东西会贡献出来。不过我们也担忧完全开源会被别人直接抄袭用于谋利,尤其是在我们国家,不过,真正有技术含量的东西,即使你全部开源了给抄袭者,他估计连怎么抄袭都不会。(相关的机器人研究论文和专利网上本来就都有)

说到此还是打住,大家如对我们的项目感兴趣,可以期待我们的正式发表以及我们的团队网页:-)

分页:[«]1[»]

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