Programowanie robotów za pomocą JavaScript

39

Jako ktoś, kto spędza większość czasu na programowaniu w JavaScript, jaka jest najlepsza droga, aby dostać się do małej robotyki bez potrzeby zbytniego odchodzenia od mojego obecnego języka?

Czy są jakieś zestawy projektów lub narzędzia korzystające z języka JavaScript, które mogłyby ułatwić dostęp do pola programistom takim jak ja? Byłbym nawet zainteresowany środowiskami wirtualnymi, w których cały kod jest wykonywany w symulacji.

Sampson
źródło
3
Powinieneś sprawdzić ten post ... weblog.bocoup.com/javascript-arduino-programming-with-nodejs Omówiono implementację czysto Js protokołu używanego dla Arduino. Całkiem fajne rzeczy.
Chris Gutierrez,
Chciałbym zobaczyć implementację nodejs uruchomioną na robocie. Można po prostu sterować robotem przez Internet za pomocą gniazd sieciowych.
Lord Loh.
Nie programujesz w JavaScript - piszesz skrypty (które są używane w przeglądarce do manipulacji klientem DOM) Możesz programować w JAVA - co jest zupełnie inne. node.jsto też nie javascript. Jest to biblioteka C, która interpretuje wywołania AJAX jako mini serwer i jest używana do obsługi dużych zamówień - na przykład w serwisie eBay - Nie trzeba odświeżać strony na elemencie, który kończy się, ponieważ javascript synchronizuje cenę licytacji i czas za pomocą węzła .js niezwykle szybka reakcja przy jednoczesnym zmniejszeniu narzutu ruchu) node.js jest dobry dla arduino, bo tak jestC
Piotr Kula
Więc zaprogramowałbyś bota ci interfejs do niego za pomocą node.js - który z natury używa JavaScript ajax dla żądania, ale możesz także użyć żądań serwera lub innego sprytnego kodu, który i tak nie jest powiązany z JavaScript.
Piotr Kula,
Czy kod Arduino jest obecnie jedynym skutecznym sposobem?
Huzo,

Odpowiedzi:

22

Istnieje kilka projektów, które łączą platformę Arduino z silnikiem wykonywania javascript Node.js. Spójrz na Johnny-Five , który jest biblioteką na szczycie protokołu zdalnego sterowania Arduino Firmata lub node- reflecta , który jest interfejsem Node.js dla protokołu zdalnego sterowania Arduino Reflecta.

Osobiście zbudowałem robota Node.js o nazwie RocketBot , który łączy w sobie węzeł refleksyjny z joystickiem węzłowym na wierzchu Beaglebone i Arduino, dzięki czemu mogę potwierdzić, że to podejście działa dobrze.

Jay Beavers
źródło
12

Hmm, ciekawe pytanie! Osobiście polecam przyjrzeć się platformie Arduino. Jest zaprogramowany w C, więc składnia będzie ... znana pisarzowi JavaScript. Moim skromnym zdaniem wiedza o składni (podczas pętli, bloków if / etc. itp.) Stanowi 70% bitwy, gdy już się z tym zaznajomisz, możesz podłączyć i grać. Możesz kupić zestaw startowy za około 30 USD online od dobrych ludzi na SparkFun.com lub adafruit.com, możesz go zaprogramować na komputerze PC, Mac lub Linux, a jest on fabrycznie załadowany z wystarczającą liczbą przykładów, aby ułatwić Ci język szybko. Nie mówię, że po prostu wrzucisz do niego trochę kodu JavaScript i będziesz na swojej drodze, ale byłem programistą JavaScript, kiedy zaczynałem od Arduino, i bardzo łatwo było mi go pobrać i uruchomić. Powodzenia,

PS - powinieneś także zaznajomić się / budować układy elektroniczne (światła, silniki i tym podobne), ale każdy dobry zestaw wprowadzający Arduino wart swojej soli pomoże Ci zacząć, jeśli nie masz doświadczenia.

Chris
źródło
3
PS - Dobre pytanie do nowo powstałej strony Robotics.SE, tak myślę :)
Chris
1
Świetna odpowiedź, @Chris. Słyszałem o platformie Arduino od innych programistów JavaScript. Być może jest to najlepszy lek na bramę dla programisty, który chce się wciągnąć.
Sampson,
1
Jako młody programista JavaScript / web uważam, że twoje pytanie jest bardzo interesujące. Jak wspomniano wcześniej, istnieją platformy dla node.js i innych różnych wersji, jednak jeśli naprawdę dobrze znasz JavaScript, możesz naprawdę łatwo nauczyć się dowolnego innego języka, który bardzo polecam. Nie tylko zwiększa twoją umiejętność rozumienia podstawowej informatyki, ale także ułatwia uczenie się nowych rzeczy.
OneChillDude,
8

Robot Operating System (ROS) oferuje możliwość używania Javascript do sterowania robotami. W szczególności będziesz chciał spojrzeć na Rosbridge . Następnie będziesz musiał użyć rosserial do połączenia z mikrokontrolerem sterującym twoim robotem.

Chociaż jestem wielkim fanem ROS, jest to zbyt skomplikowany sposób na rozpoczęcie eksploracji dziedziny robotyki IMHO. Lepiej skorzystaj z Arduino i naucz się trochę C. Arduino świetnie się upraszcza, a C nie jest dużym odchyleniem od JS z punktu widzenia składni.

DaemonMaker
źródło
5

Zasadniczo istnieje wiele sposobów używania node.js z platformą, takich jak ta dla RPi . Istnieje o wiele więcej podobnych, jeśli po prostu ich szukasz .

Kolejnym interesującym jest ArduGate , który pozwala stronom internetowym komunikować się z arduino przez JS (choć prawdopodobnie nie dokładnie to, czego chciałeś, ponieważ nie kompiluje się i nie ładuje do arduino)

Chociaż tak naprawdę nie rozumiem, co jest złego w używaniu innego języka. Sam piszę przede wszystkim w JS, ale czuję się całkowicie komfortowo programując Arduino w C ++ (pozwala to również na C i Javę, a jeśli włożysz trochę pracy, całkiem sporo innych języków ). Pamiętaj, że nie potrzebujemy niczego wymyślnego do programowania robota - tylko normalne if, fors, whiles, switches i okazjonalneclass. Naucz się składni i już możesz iść :) Jedyną rzeczą jest to, że C / C ++ / Java są silnie napisane (chociaż jeśli używasz RPi, python jest słabo wpisany, ale wybredny na milion innych sposobów), więc na początku możesz poczuć trochę frustracji, gdy musisz określić typy dla wszystkiego. Jedną z zalet używania języków rodzimych jest to, że znacznie łatwiej jest znaleźć interfejsy API i przykładowy kod w sieci. Na przykład poza ArduGate (który ma wbudowaną funkcję i prawdopodobnie nie jest tym, czego chciałeś), nie mogę znaleźć żadnego sposobu na uzyskanie dostępu do EEPROM - wspólne zadanie. Tak więc, chyba że chcesz trzymać się prostych programów, po prostu lepiej używać języków ojczystych.

Manishearth
źródło
2

Mój przyjaciel faktycznie ma dość potężnego robota czołgowego, który jest kontrolowany za pomocą NodeJS przez Wi-Fi. Sam robot nie jest dokładnie „małym robotem” przy wadze 150 funtów, ale prawdopodobnie można się sporo nauczyć z kodu źródłowego. Ma wbudowanego netbooka, który prowadzi serwer WWW i rozmawia z Arduino. Możesz znaleźć kod źródłowy na jego stronie projektu Github . Kontrola w czasie rzeczywistym z przeglądarki internetowej na innym komputerze jest zaskakująco responsywna.

Joe Baker
źródło
2

Microsoft Robotics korzysta z protokołu zwanego protokołem zdecentralizowanego oprogramowania (DSSP) i wydało specyfikacje na podstawie licencji, która umożliwia każdemu wdrożenie go w dowolnym języku. Protokół DSSP jest całkowicie zgodny z obecnymi standardami sieciowymi i myślę, że dobrym pomysłem byłoby wdrożenie go w JavaScript i NodeJS. Dzięki temu aplikacja węzła może wchodzić w interakcje z dowolnymi dostępnymi obecnie usługami DSS w zakresie robotyki.

orad
źródło
1

Programowanie AR.Drone 2.0 z Javascriptem to świetna zabawa. Oto przykład, który powoduje, że dron startuje, porusza się, wykonuje przewrót, a następnie ląduje, a wszystko to za pomocą biblioteki node-ar-drone :

var arDrone = require('ar-drone');
var client = arDrone.createClient();

client.takeoff();

client
  .after(5000, function() {
    this.clockwise(0.5);
  })
  .after(3000, function() {
    this.animate('flipLeft', 15);
  })
  .after(1000, function() {
    this.stop();
    this.land();
  });

W blogu NodeBots - Rise of JS Robotics mówi się o zaletach javascript dla robotyki, w szczególności o naturalnym sposobie, w jaki obiekty i działania w świecie rzeczywistym mogą być modelowane jako łańcuchowe, zdarzające się procesy. Przykładowy kod powyżej do animowania drona wygląda bardzo podobnie do użycia jQuery do animacji elementu HTML:

$("#foo")
  .slideUp(300)
  .delay(800)
  .fadeIn(400);
John Wiseman
źródło
Zredagowałem odpowiedź, aby była bardziej szczegółowa i dodała więcej kontekstu. Dzięki za opinie.
John Wiseman,
Dzięki, John, to świetna edycja, coś w rodzaju odpowiedzi na przyszłość.
Mark Booth
0

Istnieje także projekt o nazwie Espruino , który jest interpretatorem JavaScript dla mikrokontrolerów ARM o niskiej mocy. Jest to przeróbka projektu tiny-js , małego interpretera C ++ dla Javascript.

Robz
źródło
0

Pomocne może okazać się poszukiwanie projektów robotyki opartych na javascript w Internecie, ponieważ społeczność robotów opartych na javascript szybko rośnie od czasu zadania tego pytania. Na przykład bloger stojący za https://burningservos.com udokumentował procesy budowania czworonożnego robota od zera i omówił wiele bibliotek javascript, które ocenił lub wykorzystał blogger. Istnieje również sekcja „hardware” w usterki (lub nawet w Adafruit i Hackster.io ), gdzie ludzie dzielą się swoją sprzętu opartego javascript hacking projekty, w których można sprawdzić bibliotek one używane.

Michael Jae-Yoon Chung
źródło