Những hạn chế đáng chú ý khi sử dụng Java với Mindstorms NXT 2.0 là gì?


7

Tôi là một nhà phát triển Java lâu năm , người bắt đầu tìm hiểu về Lego Mindstorms NXT 2.0 . Có bất kỳ giới hạn nào khi sử dụng API Java không? Ngôn ngữ nào là mạnh nhất trên nền tảng?

Tôi đã tìm thấy một bài đăng, tôi nên sử dụng ngôn ngữ lập trình nào với NXT? trong đó đề cập đến nhiều lựa chọn thay thế. Câu trả lời là hữu ích, nhưng không đề cập đến các hạn chế của các ngôn ngữ khác nhau.


Bạn đã làm nghiên cứu gì? [link] lejos.sourceforge.net/nxt/nxj/api/index.html
Spiked3

Câu hỏi này quá rộng. Có lẽ bạn có thể hỏi về cụ thể những gì bạn muốn làm?
Josh Vander Hook

Vì vậy, hãy nghĩ rằng mục đích của câu hỏi có thể được rút ra là lejos là một ngôn ngữ đầy đủ tính năng cho nxt hay các hoạt động của chúng chỉ có thể được thực hiện bằng ngôn ngữ bản địa?
Bob Paulin

"Hoặc là các hoạt động của họ chỉ có thể được thực hiện bằng ngôn ngữ bản địa" - bạn vẫn mất tôi về điều đó - không biết nó đang hỏi gì. LeJOS là một triển khai của JVM. Các phần của Java không phù hợp (ví dụ TCP) không được triển khai. còn cái gì biết ở đây nữa? Hỏi ngôn ngữ nào mạnh nhất là quá mơ hồ - Ford hay Chevy? teamhassenplug.org/NXT/NXTSoftware.html có biểu đồ so sánh
Spiked3

@ Spiked3: Cảm ơn bạn đã biểu đồ so sánh. Người ta cũng có thể muốn biết (1) cái nào (nếu có) trong số các lựa chọn thay thế này hỗ trợ các hệ thống thời gian thực cứng (a) , (2) còn lại bao nhiêu bộ nhớ cho các chương trình và dữ liệu "cấp độ người dùng" của tôi các thư viện cơ sở hạ tầng hỗ trợ ngôn ngữ được tải, (3) thực hiện bất kỳ giải pháp thay thế nào hỗ trợ các trình xử lý ngắt, v.v.
David Cary

Câu trả lời:


2

Rất nhiều tùy chọn khác nhau liên quan đến ngôn ngữ được liệt kê trên trang wiki NXT http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0 .

  • NXT-G NXT-G là phần mềm lập trình được bao gồm trong bộ cơ sở tiêu chuẩn. Nó dựa trên lập trình đồ họa LabVIEW. Nó có một môi trường kéo và thả tương tác. Bộ công cụ LabVIEW [sửa] NXT-G được cung cấp bởi LabVIEW, một tiêu chuẩn công nghiệp trong lập trình. Được tạo bởi National Cụ, LabVIEW sử dụng lập trình luồng dữ liệu để tạo ra một công cụ ảo. Để cho phép lập trình nâng cao hơn, theo nghĩa đồ họa, National Cụ đã phát hành Bộ công cụ cho NXT. Phiên bản 1.0 xuất hiện vào tháng 12 năm 2006 Kể từ khi phát hành, một số lỗi đã được tìm thấy và các cảm biến mới đã được tạo ra. Mặc dù bộ công cụ cho phép tạo ra các cảm biến mới, National Cụ vẫn chưa chính thức phát hành bản cập nhật
  • Lego :: NXT Lego :: NXT cung cấp API giữa Perl và NXT.
  • Ada Một cổng của GNAT có sẵn cho NXT. Nó đòi hỏi nxtOSEK để chạy. Cổng bao gồm các ràng buộc Ada với phần cứng NXT và nxtOSEK.
  • Next Byte Code & Not eXactly C Next Byte Code (NBC) là một ngôn ngữ nguồn mở đơn giản với cú pháp ngôn ngữ lắp ráp có thể được sử dụng để lập trình gạch NXT. Không phải eXactly C (NXC) là ngôn ngữ nguồn mở cấp cao, tương tự như C, được xây dựng trên trình biên dịch NBC. Nó cũng có thể được sử dụng để lập trình gạch NXT. NXC về cơ bản là NQC cho NXT. Nó là ngôn ngữ lập trình của bên thứ ba được sử dụng rộng rãi nhất.
  • ROBOTC ROBOTC là một môi trường phát triển tích hợp nhắm vào các sinh viên được sử dụng để lập trình và điều khiển các robot LEGO NXT, VEX, RCX và Arduino sử dụng ngôn ngữ lập trình dựa trên ngôn ngữ lập trình C.
  • RoboMind RoboMind là một môi trường lập trình giáo dục cung cấp một ngôn ngữ kịch bản ngắn gọn để lập trình một robot mô phỏng. Tuy nhiên, các kịch bản quốc tế hóa này cũng có thể được xuất trực tiếp sang robot Lego Mindstorms. Nó không yêu cầu phần mềm tùy chỉnh để chạy.
  • NXTGCC NXTGCC là một chuỗi công cụ GCC để lập trình phần mềm NXT trong C. URBI [sửa] URBI là ngôn ngữ song song và hướng sự kiện, có giao diện với C ++ / Java và Matlab. Nó cũng có kiến ​​trúc thành phần (UObject) để tính toán phân tán. Urbi tương thích với nhiều robot, bao gồm Nao (cf Robocup), Bioloid hoặc Aibo.
  • leJOS NXT leJOS NXT là ngôn ngữ nguồn mở cấp cao dựa trên Java, sử dụng phần sụn tùy chỉnh được phát triển bởi nhóm leJOS.
  • nxtOSEK Để có thể viết bằng C (ngôn ngữ lập trình) / C ++, nxtOSEK có thể được sử dụng, nhưng điều đó cũng đòi hỏi phần sụn tùy chỉnh.
  • MATLAB và Simulink MATLAB là ngôn ngữ lập trình cấp cao cho điện toán số, thu thập và phân tích dữ liệu. Nó có thể được sử dụng để điều khiển robot LEGO NXT qua cổng nối tiếp Bluetooth (giao tiếp cổng nối tiếp là một phần của chức năng cơ bản của MATLAB) hoặc thông qua kết nối USB; ví dụ: sử dụng RWTH - Mindstorms NXT Toolbox (miễn phí & nguồn mở). Simulink là một môi trường dựa trên MATLAB để mô hình hóa và mô phỏng các hệ thống động. Sử dụng Simulink, người dùng có thể thiết kế các thuật toán điều khiển, tự động tạo mã C cho các thuật toán đó và tải mã được biên dịch lên LEGO NXT. Mã MATLAB và Simulink để lập trình NXT có sẵn miễn phí.
  • Lua pbLua là một triển khai của ngôn ngữ lập trình Lua, một ngôn ngữ kịch bản mục đích chung, cho Lego Mindstorms. FLL
  • Điều hướng NXT Điều hướng FLL Nxt Một chương trình nguồn mở để giúp điều hướng trên bảng cạnh tranh FLL. Sử dụng các tệp NXT-G và .txt để viết chương trình.
  • ruby-nxt ruby-nxt là một thư viện để lập trình NXT cho ngôn ngữ lập trình Ruby. Không giống như các ngôn ngữ khác cho NXT, mã không được biên dịch thành tệp nhị phân. Thay vào đó, mã được truyền trực tiếp đến NXT thông qua kết nối bluetooth. Phương thức thực hiện này chậm hơn đáng kể so với thực thi mã được biên dịch trực tiếp. Robotics.
  • NXT Robotics.NXT là giao diện Haskell cho NXT qua Bluetooth. Nó hỗ trợ các lệnh trực tiếp, tin nhắn và nhiều cảm biến (cũng không chính thức). Nó cũng hỗ trợ cho việc điều khiển dựa trên thông báo đơn giản của gạch NXT thông qua chương trình được thực thi từ xa (bao gồm mã NXC cơ bản).

Như đã đề cập trước đây biểu đồ trong http://teamhassenplug.org/NXT/NXTSoftware.html là một so sánh tốt.

Ngôn ngữ nào là mạnh nhất trên nền tảng?

Mặc dù tôi đồng ý rằng câu hỏi này quá mơ hồ, nhưng sau khi sử dụng NXT-G, Matlab, Labview và một số giao diện khác, tôi đã thấy rằng BricxCC IDE và NXC rất dễ sử dụng với sự trợ giúp theo ngữ cảnh tuyệt vời và rất nhiều ví dụ Nó cho phép tự do lập trình nhiều hơn mà các giải pháp dựa trên hình ảnh không cung cấp. Tôi đã không cố gắng sử dụng các ngôn ngữ lập trình cấp cao hơn như Java và C ++ vì hầu hết các ứng dụng tôi đang sử dụng sẽ không được hưởng lợi từ các chức năng nâng cao. Nếu bạn muốn các chức năng nâng cao này là NXT đúng phần cứng?

Người ta cũng có thể muốn biết (1) cái nào (nếu có) trong số các lựa chọn thay thế này hỗ trợ các hệ thống thời gian thực cứng

Bài đăng này cho LeJOS loại bỏ điều này liên quan đến Java: http://www.lejos.org/forum/viewtopic.php?f=18&t=4619: - "Chương trình cơ sở NXT chuyển đổi bối cảnh luồng cứ sau 1ms. Ngoài ra, bộ lập lịch của chương trình cơ sở NXT có thể dự đoán được nhiều hơn. Có thể khá chắc chắn để được lên lịch càng sớm càng tốt. Quy định động cơ thường chạy như một luồng ưu tiên cao. Nhưng như bạn đã đoán, phần sụn NXT cũng không phải là hệ thống thời gian thực. Các chủ đề có cùng mức độ ưu tiên được phục vụ vòng tròn. Thỉnh thoảng, trình thu gom rác sẽ tạm dừng toàn bộ JVM. Điều này luôn đúng với NXT. Nhưng Oracle JVM được sử dụng trên EV3 sử dụng các trình thu gom rác đồng thời. Tuy nhiên, trong trường hợp xấu nhất, ngay cả những trường hợp đó cũng bị dừng lại toàn bộ JVM. Thủ thuật để tránh điều đó là sử dụng lại đối tượng, mảng,và những thứ đó càng xa càng tốt trong các đường dẫn mã quan trọng về hiệu năng. "

còn lại bao nhiêu bộ nhớ trên NXT cho các chương trình và dữ liệu "cấp độ người dùng" của tôi sau khi các thư viện cơ sở hạ tầng hỗ trợ ngôn ngữ được tải

Bài đăng này cho LeJOS loại bỏ điều này liên quan đến Java: http://www.lejos.org/nxt/nxj/tutorial/AdvifiedTopics/Under HiểuFilesLCPMemTools.htmlm

"NXT có bộ nhớ flash 256kb. Một phần cố định khi bắt đầu bộ nhớ flash được phân bổ cho hệ thống. Nó được sử dụng để giữ phần sụn, tiếp theo là menu khởi động. Phần còn lại của khu vực hệ thống này không được sử dụng. của khu vực hệ thống khác nhau giữa các bản phát hành.

Phần sụn được viết bằng C, với một số ngôn ngữ lắp ráp ARM. Menu khởi động được viết bằng Java (trong dự án khởi động ở SVN).

Bộ nhớ flash được đọc và ghi trong các trang 256 byte. Trang đầu tiên sau khu vực hệ thống được sử dụng cho các cài đặt hệ thống liên tục được quản lý bởi menu khởi động.

Phần còn lại của bộ nhớ flash được sử dụng cho hệ thống tệp người dùng. Hai trang đầu giữ bảng tệp (thư mục) và các trang còn lại giữ tệp người dùng. Các tệp được giữ như một tập hợp byte liền kề - tức là chúng sử dụng một phạm vi số trang duy nhất không có khoảng trống. Điều này cho phép một tập tin được xử lý như một vùng bộ nhớ. "

làm bất kỳ trong số các lựa chọn thay thế này hỗ trợ xử lý ngắt

Một cách lập trình xử lý ngắt chương trình trên NXT là lập trình ở cấp độ thấp hơn: http://www.tau.ac.il/~stoledo/lego/nxt-native/

"Bắt đầu khá dễ dàng. Bạn cần hai công cụ: công cụ phát triển GNU cho bộ xử lý ARM và một số cách để tải các chương trình kết quả về NXT. Tôi sử dụng nexttool để tải chương trình xuống NXT, nhưng tôi cho rằng bạn có thể sử dụng NXT-G cũng vậy. Có một số bản phân phối các công cụ GNU cho ARM. Tôi thường sử dụng một bản phân phối có tên WinARM, dành cho windows, GNUARM và YAGARTO là hai tùy chọn khác (tôi đã sử dụng GNUARM trên Linux). "


Trong khi các liên kết được đánh giá cao, sớm hay muộn chúng sẽ bị ràng buộc. Để được chứng minh trong tương lai, sẽ là một ý tưởng tốt để trích dẫn các phần có liên quan nhất của văn bản mà bạn liên kết đến ngay trong câu trả lời này.
Shahbaz

Shahbaz Tôi đã chỉnh sửa bài viết để ngăn chặn sự thối rữa liên kết.
Tom Bamber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.