Technieken

JavaScript

We wilden niet dat de webpagina elke keer dat je de webcam liet bewegen opnieuw laadde. Daarom hebben we van een techniek gebruik gemaakt die beter bekend staat als AJAX. Dit staat voor Asynchronous Javascript And XML. Dat betekent dat je een request naar de server stuurt zonder de pagina waar het request vandaan komt refreshed. De informatie die je vervolgens binnenkrijgt (in XML formaat) kan weer worden verwerkt door de javascript.

Als je op een knop duwt, stuurt de JavaScript een GET request naar de server met daarin informatie over welke kant je op wilt gaan. De server berekent vervolgens wat de nieuwe standen van de armen zijn en geeft dan terug welke kanten er nog op bewogen kan worden. De juiste knoppen worden dan aan- en uitgezet in de browser en de gebruiker kan vervolgens weer kiezen welke kant hij op wil.

Er is ook Javascript gebruikt om de webcam te refreshen. Er wordt een tellertje gezet dat na een of enkele seconden het plaatje opnieuw van de server haalt en weergeeft.

PHP

Als servertaal waren we eerst van plan om Ruby te gebruiken. Omdat op de servers van de UvA wel PHP geinstalleerd staat maar geen Ruby hebben we toch gekozen om PHP te gaan gebruiken.

Het PHP script kijkt wat de vorige standen waren van de robot (dit staat in de robots.txt file) en past deze vervolgens aan. Hij controleert ook of de stap die de robot wil gaan zetten wel legitiem is. Als dit niet zo is wordt de stap afgekapt op de maximale uitwijking naar die bepaalde kant.

Vervolgens wordt er een XML bestand gemaakt wat wordt teruggestuurd naar de browser welke aangeeft welke kanten er nog op bewogen kunnen worden.

Het script slaat ook een bestand op: joints.txt. Dit bestand kan worden uitgelezen door umirtxsimulator of door het C programma dat we zelf hebben geschreven.

De webcam

We hebben enorme problemen gehad om de webcam aan de praat te krijgen op een redelijke manier. Eerst hebben we geprobeerd hem aan te sluiten op de linuxmachines, maar hier konden we de benodigde drivers niet installeren omdat we geen root rechten konden (mochten) krijgen.

Daarom hebben we besloten om de webcam aan Okke's laptop aan te sluiten en de plaatjes op een geregelde interval op te sturen naar een externe FTP server. We hadden zelf ook wel een FTP of HTTP server kunnen draaien, maar deze zijn zowel voor het interne netwerk als het internet niet toegankelijk.

Het programma dat we hebben gebruikt is TinCam.

C

Om de robot aan te sturen hebben we C gebruikt. Het programma leest elke twee seconden de joints.txt file uit en stuurt de juiste joint-standen naar de robot.

Stap voor stap

  1. Kopieer alle bestanden in de broncode zip naar een directory op je webserver.
  2. Open js/webcam.js en wijzig daarin de URLs en de timeout naar iets wat je zint. Doe hetzelfde in webcam.html.
  3. Open TinCam en stel het programma in om webcam-foto's te uploaden naar de plek die je zojuist hebt aangegeven in js/webcam.js. (Dit kan in het Setup > Setup... dialoogvenster onder de Website > FTP instellingen.
  4. Open joints.php en pas de "FILE" constante aan om te wijzen naar je joints.txt file.
  5. Open c/move.c en pas de bestandpaden aan (1 keer bij de echte leesinstructie, 1 keer bij de status-printf).
  6. Draai (onder Linux) het volgende commando: gcc -g c/move.c -o move_robot -L. -lumi -larm. Hiermee compile je de 'daemon' die de robot constant aanpast naar aanleiding van de joints.txt file. Kopieer de resulterende move_robot file naar de computer waar de robot op is aangesloten.
  7. Draai de resulterende executable op de computer waar de robot op is aangesloten, en open webcam.html in je Firefox 1.5 of vergelijkbare Gecko-based browser. Als het goed is heb je beeld (dan weet je dat TinCam en het javascript hun werk doen). Klik op een paar van de buttons en controleer of de robot beweegt. Als dat nog niet het geval is, controleer dan nog een keer of zowel joints.php en het C programma het juiste bestand uitlezen, en of het C programma en/of het PHP script geen foutmeldingen produceren.