我是一位长期的Java开发人员,他开始学习Lego Mindstorms NXT 2.0。使用Java API是否有任何限制?哪种语言是平台上最强大的语言?

我发现了一个帖子,我应该在NXT中使用哪种编程语言?其中提到了许多替代方案。答案很有帮助,但没有提到不同语言的局限性。

评论

你做了什么研究? [link] lejos.sourceforge.net/nxt/nxj/api/index.html

这个问题太广泛了。也许您可以具体询问您要做什么?

因此,认为问题的意图可以归结为lejos是nxt的全功能语言还是它们的操作只能由本地语言执行?

“或者他们的操作只能由母语执行”-您仍然对此感到迷惑-不知道它在问什么。 LeJOS是JVM的实现。 Java的不适当部分(即TCP)未实现。还有什么要知道的?询问哪种语言最强健-福特或雪佛兰? teamhassenplug.org/NXT/NXTSoftware.html带有比较表

@ Spiked3:谢谢您的比较表。人们可能还想知道(1)这些备选方案中的哪些(如果有的话)支持硬实时系统(a),(2)在我的“用户级”程序和数据之后,NXT上还有多少存储空间语言支持基础结构库已加载,(3)这些替代方法中的任何一种都支持中断处理程序等。

#1 楼

在NXT Wiki页面http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0上列出了许多有关语言的选项。



NXT-G NXT-G是
标准基础套件中包含的编程软件。它基于LabVIEW图形化编程。它
具有交互式拖放环境。 LabVIEW
工具包[edit] NXT-G由LabVIEW(一种
编程的行业标准)提供支持。 LabVIEW由National Instruments创建,它使用数据流编程来创建虚拟仪器。为了允许进行更多的高级编程,在图形上,National Instruments
发布了NXT的工具包。 1.0版于2006年12月发布。自发布以来,已经发现了多个错误并创建了新的传感器。虽然该工具包允许创建新传感器,但National Instruments尚未正式发布更新

Lego :: NXT Lego :: NXT在Perl和
NXT之间提供了API。

Ada GNAT的端口可用于NXT。它需要
nxtOSEK才能运行。该端口包括Ada与NXT硬件和nxtOSEK的绑定。

下一个字节代码而不是精确的C下一个字节代码
(NBC)是一种简单的开源语言,具有汇编语言。
语法可用于对NXT程序块进行编程。并非完全如此,C(NXC)
是一种高级的开源语言,类似于C,是在NBC编译器的顶部构建的。它也可以用于对NXT砖块进行编程。
NXC基本上是NXT的NQC。它是使用最广泛的第三方编程语言。

ROBOTC ROBOTC是面向学生的集成开发环境,用于对程序进行编程和控制LEGO NXT,VEX,RCX和Arduino机器人。基于C编程语言的语言。

RoboMind RoboMind是一个教育性编程环境
提供了简洁的脚本语言,可用于对模拟的机器人进行编程。但是,这些国际化的脚本也可以直接
导出到Lego Mindstorms机器人。它不需要自定义
固件即可运行。

NXTGCC NXTGCC是用于使用C对NXT固件进行编程的GCC工具链。URBI [edit] URBI是一种并行且
事件驱动的语言,具有与C ++ / Java的接口和Matlab。它
还具有用于分布式计算的组件体系结构(UObject)。 Urbi与许多机器人兼容,包括Nao(cf
Robocup),Bioloid或Aibo。

leJOS NXT leJOS NXT是基于Java的高级开源语言,它使用由leJOS团队开发的自定义固件。

nxtOSEK To能够用
C(编程语言)/ C ++编写,可以使用nxtOSEK,但这也需要
自定义固件。

MATLAB和Simulink MATLAB是
用于数值计算,数据获取和分析的高级编程语言。它可用于通过蓝牙串行端口(串行端口通信是MATLAB基本功能的一部分)或通过USB连接来控制LEGO NXT机器人。例如,使用RWTH-Mindstorms NXT工具箱(免费和开源)。
Simulink是基于MATLAB的环境,用于对动态系统进行建模和仿真。使用Simulink,用户可以设计控制算法,自动为这些算法生成C代码,然后将编译后的代码下载到LEGO NXT上。免费提供用于NXT编程的MATLAB和Simulink
代码。

Lua pbLua是Lua编程语言的一种实现,它是Lego Mindstorms的通用脚本语言。 FLL

NXT导航FLL
Nxt导航一个开源程序,可帮助在FLL
竞争表上进行导航。使用NXT-G和.txt文件编写程序。

ruby-nxt ruby​​-nxt是一个库,用于为Ruby
编程语言编写NXT。与NXT的其他语言不同,代码
不会编译为二进制文件。而是通过蓝牙连接直接将代码
传输到NXT。这种
执行方法比直接执行已编译的代码
要慢得多。机器人技术。

NXT Robotics.NXT是通过蓝牙连接到
NXT的Haskell接口。它支持直接命令,消息和许多
传感器(也是非官方的)。它还支持通过远程执行的程序
(包括基本的NXC代码)对
基于消息的NXT砖进行简单的基于消息的控制。 //teamhassenplug.org/NXT/NXTSoftware.html是一个很好的比较。尽管我同意这个问题过于模棱两可,但是在使用NXT-G,Matlab,Labview和许多其他接口之后,我发现BricxCC IDE和NXC在上下文帮助很大的情况下非常易于使用。例子。它提供了许多基于视觉的解决方案无法提供的编程自由。我没有尝试使用高级编程语言,例如Java和C ++,因为我一直在使用的大多数应用程序都不会从高级功能中受益。如果您想要这些高级功能是NXT的正确硬件吗? />

LeJOS的这篇文章针对Java讨论了此问题:http://www.lejos.org/forum/viewtopic.php?f=18&t=4619:-“ NXT固件每1毫秒切换一次线程上下文。此外, NXT固件的可预测性要好得多,例如,调度程序将优先使用优先级高的线程,而不是优先级较低的任何线程,因此可以肯定地确定尽快调度优先级高的线程。它运行在高优先级线程上,但是正如您已经猜到的那样,NXT固件也不是实时系统,具有相同优先级的线程是轮流服务的,哦,偶尔,垃圾收集器会停止整个JVM。 NXT总是正确的,但是EV3上使用的Oracle JVM使用并发的垃圾收集器,但是,在最坏的情况下,即使是那些垃圾收集器也会停止整个JVM的运行,避免这种情况的窍门是重用对象,数组和对象。性能关键代码p中的此类内容aths。“


加载语言支持基础结构库后,“我的用户级”程序和数据上NXT上还有多少存储空间


关于LeJOS的这篇文章就Java讨论了此问题:http://www.lejos.org/nxt/nxj/tutorial/AdvancedTopics/UnderstandingFilesLCPMemTools.htm

”“ NXT具有256kb的闪存。闪存开始处的固定部分已分配给系统。它用于保存固件,其后是启动菜单。该系统区域的其余部分未使用。系统区域的大小在各个发行版之间有所不同。

固件是用C编写的,带有某些ARM汇编语言。启动菜单是用Java编写的(在SVN的启动项目中)。

Flash存储器以256字节的页进行读写。系统区域后的第一页用于通过启动菜单管理的持久性系统设置。

闪存的其余部分用于用户文件系统。前两个页面保存文件表(目录),其余页面保存用户文件。文件被保存为一组连续的字节-即,它们使用单​​个范围的页码而没有间隙。这样就可以将文件作为内存区域来寻址。“ NXT上的中断处理程序是在较低级别进行编程的:http://www.tau.ac.il/~stoledo/lego/nxt-native/

”“这很容易上手。您需要两个工具:用于ARM处理器的GNU开发工具,以及将生成的程序下载到NXT的某种方法。我使用nexttool将程序下载到NXT,但我想您也可以使用NXT-G。周围有许多用于ARM的GNU工具发行版。我通常使用一个称为WinARM的发行版,它用于Windows。 GNUARM和YAGARTO是另外两个选项(我在Linux上使用了GNUARM)。“

评论


$ \ begingroup $
尽管赞赏链接,但迟早它们必定会腐烂。为了适应未来,最好在此答案中引用您链接到的文本中最相关的部分。
$ \ endgroup $
– Shahbaz
13年11月12日14:36

$ \ begingroup $
Shahbaz我已编辑了帖子,以防止链接腐烂。
$ \ endgroup $
–汤姆·班伯(Tom Bamber)
13年11月13日在13:18