找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 16674|回复: 18

大家是否有兴趣一起做一个NXT编程软件效率比较

[复制链接]
发表于 2011-2-10 09:55:13 | 显示全部楼层 |阅读模式
本帖最后由 grant7788 于 2011-2-10 11:29 编辑

接触NXT两周多了,是女儿的新年礼物,她很喜欢,我也越来越喜欢了。
NXT-G界面比较友好,适合小朋友,小学二年级的女儿都可以很快上手。
可是对我来讲,NXT可选择的编程方式,实在是太多种了,不知道是否有人和我一样,面对多种选择,无所适从。

图形编程类:
NXT-G
ROBOLAB
LabVIEW

文本编程类:
C: NXC / RobotC / nxtOSEK
ASM: NBC
JAVA: LeJOS (NXJ)
pbLUA

我一直在想,是否有人做过这6种(可能还有更多)编程软件所产生的程序,在NXT上的性能测试?
看了本论坛,糖版做过NXT-G与NXC的一个比较。
在其它的论坛看了一下,貌似没找到类似的资料。
也许,我们可以大家一起组织起来,做一些测试?
有兴趣的朋友请跟帖报名,报名时请提供您可以做哪种编程语言的测试。

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2011-2-10 09:55:51 | 显示全部楼层
本帖最后由 grant7788 于 2011-2-10 10:58 编辑

二楼留作整理报名人员名单。
糖伯虎          NXT-G, NXC
grant7788    待定
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-2-10 10:02:43 | 显示全部楼层
其实有人做过试验,也有一张表列出来各个软件没一定时间内循环的次数....你可以在论坛找找
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 10:04:47 | 显示全部楼层
本帖最后由 grant7788 于 2011-2-10 11:03 编辑

三楼留作测试方法的汇总。
我想起个头。我想到的比较项目有:
1. 生成的软件代码大小。这个比较方便,编译、下载好以后,可以用工具软件看文件的大小。
2. 单项运算能力。做一个循环,比如,10e4次或10e8次,循环中只做一种运算,分别测试+ / - / * / /的运算时间。在循环前、后读NXT的时间,相减并除以循环次数,可得到做每种运算的时间。(NXT-G以及NXC都可以读到ms级的NXT时间,应该够用了)
3. 综合运算能力。比如计算PI的值。循环一定次数,求得每次的平均时间。
4. 巡线一周的时间。选择比较简单的算法,如遇黑左转遇白右转,马达设置同样的功率(如75),用同样的地图,秒表计时,得到巡线一周的时间。
5. 显示能力测试。循环显示一行字,或是一个数字,计算每次的时间。

目前想到这些,其余请大家补充。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 10:06:39 | 显示全部楼层
本帖最后由 grant7788 于 2011-2-10 10:59 编辑
394069341 发表于 2011-2-10 10:02
其实有人做过试验,也有一张表列出来各个软件没一定时间内循环的次数....你可以在论坛找找

我只看到了糖版的试验。
这样的话,我再找找...

找到,您说的是这个吗?
http://www.cmnxt.com/forum-viewthread-tid-272-highlight-%C8%ED%BC%FE%2B%B1%C8%BD%CF.html

英文原帖在此:
http://www.teamhassenplug.org/NXT/NXTSoftware.html
仔细看了一下原帖的测试软件的方法,也是比较有趣的:
This pseudo-code was written as an outline so developers could "benchmark" the speed of their software.  It includes functionality used in most programs.
It was sent to developers of different languages, and they were asked to write the programs.
The results are posted on the main page.  Here's what the rows represent:
Speed (loops/min): This is the number of times the program ran through the loop in 60 seconds.
Memory (bytes): The size of the program that was downloaded to the NXT
Time to write:   The approxamate time it took the "experts" to write the program
Program: The actual program, available for download.  For graphic languages, a graphic of the program is also available



Here's the pseudo-code
-----------
Set A to 0

Start loop
Read light sensor(3)
Read US sensor(4)
Read & Display Rotation Sensor(B)
Get random number (1-100) (RN to be used later)
Display value of:(Light Sensor+US Sensor+Rotation Sensor)*100/(RN)
Set motor speed for B and C to RN (Using Coast)
If RN > 50, Increase A by 1
If RN < 50, Decrease A by 1
If RN = 50, no change to A
Display A
Set motor A speed to A (if A<0, set direction to reverse)
Display Loop Count
Loop for 60 seconds
Stop Motors
   Show display for 10 seconds
-----------



  We will post a few results, including:
1) Number of iterations the program can execute in 60 seconds
2) Size of program downloaded to the NXT
3) Approximate time it took the experts to write the program
4) The actual program, as text or a graphic


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-2-10 10:30:39 | 显示全部楼层
我报名参加吧,不过个人能力仅限于nxtg和nxc,另外告诉下楼主,nxc和nqc不是同一东西,前者给nxt用,后者给rcx用。函数库是不一样的
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 10:44:03 | 显示全部楼层
本帖最后由 grant7788 于 2011-2-10 11:01 编辑

把上面老外做的测试的程序伪代码部分,改成中文,供大家参考。

以下为伪代码
-----------
设A为0

循环开始
    读光传感器Sensor3
    读超声传感器Sensor4
    读回并显示角度传感器的值Sensor(B)
    生成随机数(1-100),赋给RN
    显示值:(光传感器+超声传感器+角度传感器)*100/(RN)
    马达B,C速度设为RN (使用滑行模式)
    如果RN>50, A加1
    如果RN<50, A减1
    如果RN=50, A不变
    显示A
    马达A速度设为A (如果A<0, 马达设为反向旋转)
    显示循环次数
循环60秒
停止马达
显示10秒钟
-----------

仔细想了一下这个老外的测试,基本上模仿了NXT的实际使用中的情况,
只是,我担心让效率变得很低的,应该是显示的部分。
而实际使用中,大部分情况下,显示应该是可以不用的。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 10:57:56 | 显示全部楼层
本帖最后由 grant7788 于 2011-2-10 11:04 编辑

回复 糖伯虎 的帖子

报名收到。
那么就把NXT-G和NXC的给你,
我自己留着机动... 呵呵。

NQC拿掉了。我原来是以为NXC是NQC的升级版。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 11:28:00 | 显示全部楼层
本帖最后由 grant7788 于 2011-2-10 11:31 编辑

加一个... nxtOSEK。
貌似很强大... 去看看。
有兴趣的一起:http://lejos-osek.sourceforge.net/

以下摘自本论坛zjfchine的回帖。原始出处如下。
http://www.cmnxt.com/forum-redirect-goto-findpost-ptid-272-pid-8184-fromuid-16691.html
如果想了解底层技术,还有一个选择:nxtOSEK, 一个开源的OSEK实现。可使用使用非标准固件或标准,可以
1.本机arm代码执行(运行在非标准固件上,速度最快,程序大小可突破64k限制,可达到224K)。
2.字节码方式执行(运行在标准固件上),这个项目其实就是lejos项目的后继版本。
项目还提供一个simulink模块,可以在MATLAB上开发nxt程序,利用pc机和MATLAB的强大功能,大大扩展了nxt的应用,官方网站上有例子:比如用nxt实现扫描仪功能,实现机器人的自平衡等。
若大家想学习实时嵌入式操作系统,项目提供了两个实时嵌入式操作系统:topper_jsp与topper_osek,默认使用topper_osek,二者都提供源代码,但不好的是:注释是日语。
topper_jsp系统在日本工业领域已应用2,3十年,被证明是可靠的实时系统。但在世界范围应用不广。
topper_osek是OSEK/VDX的nxt实现。OSEK,是指德国的汽车电子类开放系统和对应接口标准(open systems and the corresponding interfaces for automotive electronics),而VDX则是汽车分布式执行标准(vehicle distributed executive),后者最初是由法国独自发起的,后来加入了OSEK团体。两者的名字都反映出OSEK/VDX的目的是为汽车电子制定标准化接口。该标准完全独立,对目标系统只限制了少量的条件。这个标准被广泛的应用于世界主要汽车制造商的汽车内。并且在OSEK/VDX的官方网站上有英文的规范,这样我们就可以更容易的理解topper_osek。当完全掌握了topper_osek系统后,可以自己修改它,甚至可以移植其它实时系统,比如 μC/OS-II。
所有,我建议对底层技术感兴趣的同学,可以使用nxtOSEK,虽然学习曲线非常陡峭,但当你克服之后,机器人,嵌入式系统你对来说就是坦途,而且可以从中体会到别样的快乐。

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-2-10 13:00:11 | 显示全部楼层
lejos可以邀请本论坛版主程序猎人,不过他好像最近忙,不知道有空不
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 13:45:12 | 显示全部楼层
回复 糖伯虎 的帖子

嘿嘿... Proramus是吧,我看过他的帖子。先等大家报名,实在不行再捉吧。Java我确实不熟。
LabVIEW应该是宜宾老张比较熟。

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-2-10 19:18:31 | 显示全部楼层
其实我觉得运行速度跟编程软件关系占少部分.....NXT系统固件才是大部分因素.....
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-2-10 19:26:05 | 显示全部楼层
394069341 发表于 2011-2-10 19:18
其实我觉得运行速度跟编程软件关系占少部分.....NXT系统固件才是大部分因素.....

这句话有道理,但并非绝对。对于同样的算法,不同的编程工具,最后生成的汇编代码,或是最后生成的机器码,应该是有很大差距的。
这也就是为什么之前糖版发的帖子中,同样功能的程序,同样一分钟内,循环次数可以差数倍甚至数十倍的原因。
另外如LabVIEW这类的图形编程工具,为了达到易用性,在数据层的封装是做得很复杂的,这也增加了最后代码的体积,降低了运行效率。

我比较怀疑的,是那个测试中,ROBOLAB的数据。ROBOLAB可以讲是LabVIEW的再一次封装,按理说效率和LabVIEW应该差不多,除非底层特地优化过。存疑,有机会实际测一下再看吧。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-2-10 19:30:19 | 显示全部楼层
而且关于NXTG和LABVIEW7.1的一个细节问题....
NXTG中的一些原带的传感器模块中增加了delay..所以有人会觉得NXTG写出的传感器程序检测速度比较慢.
但在lavbiew中使用较底层的调用方法,速度就会明显不同.

举个栗子...
我曾经做过一个实验,用NXTG写一个检测声音传感器的速度实验,程序内容是,
<循环>检测声音传感器,检测触动传感器</循环>

然后也用LABVIEW的较底层调用写了一个相同意思的程序,因为这两个传感器的调用会改变NXT传感器端口中第5跟线的高低电平,检测声音传感器会变成高电平,检测触碰的时候就是低电平(这个高低电平的设定是固件中已经设定好的)
然后我利用这个电平用三极管去驱动一个LED...NXTG写出的程序,闪动的速度肉眼可见......但用labview写出的,就只感觉LED暗了一半(其实是闪动速度太快了....),主要可惜的就是...那时我忘记拿示波器测一下频率了.....

所以我得出一个结论...NXTG的运行速度与程序模块有关系....如果用labview写了一个没有delay的简单调用程序,速度还是很可观的...具体多可观.....回学校我再去测一下...
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-2-10 19:33:26 | 显示全部楼层
回复 grant7788 的帖子

robolab是labview7.0而NXTG是labview7.1
因为版本不同所以固件也不一样.并且因为ROBOLAB的制造公司并不是labview,所以最底层的设计思维也与现在的NXTG大不一样.ROBOLAB编写出来的程序确实很小,而且运行速度也确实很快.我估计是底层程序设计的简单.因为以前是给RCX用的,RCX的内存太小了...所以不敢设计太复杂......不像NXTG..可以塞比较多东西...这个是我猜的= =||
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-4-18 13:01 , Processed in 4.412252 second(s), 18 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表