czwartek, 6 marca 2014

Programowanie Lego Minestorm NXT z lejOS

System LeJOS to fimeware do Lego NXT wgrywany zamiast oryginalnego oprogramowania. Wywodzi się z maszyny wirtualnej Javy TinyVM. Umożliwia on pisanie programów sterujących działaniem robota Lego w Javie. Pobierając wtyczkę do Eclipse ze strony projektu mamy wygodny edytor kodu, który przy odpowiedniej konfiguracji pozwala edytować oraz wysyłać i uruchamiać kod w naszym robocie Lego.

Instalacja leJOS

Do tworzenia programów w leJOS potrzebna jest Java 32bit również JDK, może być to openJDK. Należy ją zainstalować w wersji 32-bit nawet na 64-bitowym systemie: sudo apt-get install openjdk-7-jdk:i386 Sprawdzamy wersję jre i ustawiamy na 32-bitową: sudo update-alternatives --config java Pobieramy 32-bitowe Eclipse ze strony https://www.eclipse.org/downloads/ Następnie pobieramy biblioteki leJOS wybierając najnowszą wersję i paczkę dla naszego systemu ze strony: http://sourceforge.net/projects/lejos/files/lejos-NXJ/ i rozpakowujemy je do katalogu /opt/leJOS_NXT Teraz otwieramy Eclipse i w menu help->Eclipse Marketplace wyszukujemy wtyczkę leJOS dla NXT.Instalujemy i restartujemy Eclipse. W opcji tworzenia nowych projektów pojawił się pojekt lejOS NXT oraz nowe menu LeJOS NXJ z wgrywaniem firmware.

Programowanie w Java

Jednym z wzorcowych modeli robotów jakie możemy wykonać dzięki klockom Lego NXT jest shooterbot. Potrafi on strzelać kulkami. Z przodu robota ustawiony jest czujnik ultradźwiękowy pozwalający mierzyć odległość od przeszkód. W napisanym programie testowym robot ma się obracać czekając na „wroga”. Jeżeli ktoś zbliży się do niego na małą odległość (30cm), zatrzymuje się i oddaje strzał. Po strzale dalej obraca się. Schemat algorytmu:



Jego realizacja w postaci programu Java:

import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.nxt.UltrasonicSensor;
import lejos.util.Delay;
 
public class Test
{
 
public static void main(String[] args)
{
  LCD.drawString("Test program", 0, 0); 
  UltrasonicSensor ultra = new UltrasonicSensor(SensorPort.S3);
  Motor.A.setSpeed(200);
  Motor.B.setSpeed(200);
  boolean play = true;
  ultra.continuous();
  Motor.A.forward();
  Motor.B.backward();
  while(play){
    int dist = ultra.getDistance();
    Delay.msDelay(50L);
    LCD.clear();
    LCD.drawString(Integer.toString(dist),0,0);
    if(dist < 30){ 
      fire();
    }
 if(Button.readButtons() == Button.ID_ENTER) play = false;
 Delay.msDelay(200L);
}
 
}
 
private static void fire(){
  Motor.A.stop();
  Motor.B.stop();
  Motor.C.forward();
  Delay.msDelay(1000L);
  Motor.C.stop();
  Motor.A.forward();
  Motor.B.backward();
}
 
}
Działanie algorytmu przedstawiam na filmiku:

Enchanting

Jeżeli chcemy uczyć dzieci ze szkoły podstawowej to potrzebujemy prostszego sposobu na tworzenie programów. Oryginalne oprogramowanie dołączane razem z robotem niestety nie działa na Linuksie. Poza tym to oprogramowanie ma inne mankamenty. Program ten wygląda ciekawie, jednak szybko można odczuć jego braki. Ciężko napisać w nim jakiś większy kod, ponieważ bloki graficzne, z których buduje się program bardzo rozciągają się na ekranie i trudno jest prześledzić wzrokiem jego przebieg. Do tego nie znalazłem opcji skalowania rozmiaru widoku programu. Sam program bardziej przypomina schematy blokowe niż język programowania.
Na szczęście istnieje projekt Enchanting wykorzystujący znany program do nauki programowania dla dzieci Scratch. Napisany w języku Squeek program pozwala tworzyć kod w oparciu o graficzne elementy symbolizujące wyrażenia języka programowania. Pozwala on rysować po ekranie podobnie do LOGO. Twórcy Enchanting wpadli na pomysł, że zamiast sterować pisakiem po ekranie równie dobrze można sterować robotem Lego. Przygotowali wersję Scratch, która potrafi generować z ułożonych przez użytkownika graficznych puzzli kod przeznaczony dla Lego NXT. Kod ten środowisko Enchanting przesyła za pośrednictwem USB lub Bluetooth do pamięci robota. Twórcy wykorzystali firmeware LeJOS. Trzeba jednak pamiętać, że wgrywanie firmewaru zastępuje oryginalny i uniemożliwi nam korzystanie z dotychczasowego oprogramowania (bez ponownego wgrania oryginalnego firmewaru). W Scratch (i Enchanting) programowanie jest zbliżone w wyglądzie do typowego programowania. Występują te same elementy jak pętle, zwrotnice, przypisania itp. Tyle, że można je wykorzystywać wybierając i przeciągając na formatkę naszego programu. Dzięki takiemu rozwiązaniu znacznie łatwiej jest prześledzić działanie kodu programu, czytając go od góry do dołu. Oto przykład prostego algorytmu ruchu robota. Robot porusza się do przodu. W momencie gdy czujnik ultradźwiękowy wykryje przeszkodę robot obraca się i kontynuuje jazdę. Działanie algorytmu na filmiku:

Brak komentarzy:

Prześlij komentarz