Robot API

Het koppelen van motoren aan input lijkt me onderhevig aan verschillende modellen, die, indien veranderingen aan input ondersteunt moeten worden, onderscheiden moeten worden:

  • Relatieve aansturing: per veranderingsevent aan input-zijde wordt een relatieve aanpassing van output uitgevoerd. Bvb: volume van audio regelen met drukknoppen. (input: D, state: controller)
  • Absolute aansturing: per veranderingsevent aan input-zijde wordt de absolute waarde voor de output doorgegeven. Zonder nieuwe events blijft de output-waarde stabiel. Bvb: volume  van audio regelen via potentiometer. (input: D||A, state: input) Gemaakt voor de zumobot. Voorbeeld van D: besturing lambo.
  • Absolute aansturing met nulpunt: per veranderingsevent aan input-zijde wordt de absolute waarde voor de output doorgegeven. Na een bepaald tijdsinterval gaat de output terug naar 0. Bv. commando’s om vooruit/achteruit/links/rechts te gaan doorsturen vanuit een webinterface. (input: D||A)

Daarnaast kan het zijn dat de output naar motoren aangepast moet worden:

  • Bij een tracked vehicle kan je kiezen om het model zelf sturingen te laten uitvoeren, of je kan rechtstreeks de motors aanspreken.
Robot API

Fast fast lambo

Een leuk bijverschijnsel van electronica-prutserijen is dat je anders naar kinderspeelgoed gaat kijken… De telefoon van Olivia heeft grote knoppen met lichtjes achter, dus ik hoop dat ze er snel mee uitgespeeld is 🙂

In de gitter van Johnny-Five vermeldde iemand dat hij de remote van een speelgoed rc auto had gehackt, en aansluitingen aan de knop-contacten had gesoldeerd. Op die manier was het simpel om de auto via J5 aan te sturen. Simpel idee, dat moest ik ook eens proberen 🙂

Ondertussen heb ik een Lamborghini aan mijn wagenpark toegevoegd, en heb ik de contacten van de buttons al geïdentificeerd met de multimeter. Dit zou een goed projectje zijn om eens te documenteren. Een stappenplan zou bvb kunnen zijn:

1) Controller openen en ground zoeken (continuity), voltage over knoppen meten in beide standen.
2) Solderen van contact-draden over de knoppen.
3) Arduino test-programma schrijven dat over 3 sec steeds een knop aan zet, combinatie van knoppen.
4) J5 interface maken, websockets en REST api toevoegen
5) Coole toepassingen bedenken!

Fast fast lambo

Johnny-five

Na de moeilijkheden met xbee communicatie lijkt het toegankelijker om de Juggernaught aan te sturen via een ander draadloos protocol. Hoe langer hoe meer lijkt het erop dat wifi en bluetooth meer gebruikt gaan worden dan xbee, en dat is ook te merken aan de ondersteuning. Adafruit heeft bvb steeds meer BT modules, en de ez-link leek een zeer aangenaam alternatief.

De ez-link lijkt effectief een drop-in vervanging te zijn voor een seriële verbinding. Het meest logische lijkt dus (misschien contradictorisch) om zonder de module te beginnen. Het leek me leuk om de besturing via de wii nunchuck te doen, en die wordt ondersteunt in Johnny-Five. Dat framework kende ik al een tijd, maar ze pushen nu meer naar de voorgrond, o.a. via nodebots. Bovendien lijk het de grondlegger voor cylon.js. Ook interessant lijkt hun open-source kit voor een sumobot: http://bocoup.com/weblog/assembling-preparing-robotsconf-sumobot-with-johnny-five/

Als opstap leek het me dus goed om in J5 een esplora en een arduino met elkaar te laten communiceren. De esplora heeft een joystick met goede J5-support, dus dat zou geen probleem mogen geven. Uiteindelijk moet de esplora vervangen worden door een raspberry pi met nunchuck, zodat er nergens een “echte” computer aan te pas moet komen. Development op een raspberry pi op zich is al niet zo makkelijk, en J5 ondersteunt de raspberry pi via “plugins”. Hoe dat juist werkt moet ik nog eens opzoeken, maar het lijkt in ieder geval niet standaard te zijn.

Die eerste opstap leek echter al direct niet zo simpel. Hoewel er voorbeelden op de J5 website te vinden zijn voor het connecteren van verschillende boards, werkte de code bij mij niet. Het forum van nodebots leek bovendien ook al kaduuk, dus nam ik mijn toevlucht maar tot de gitter van J5. Nadat het probleem was gereproduceerd door een developer, kwam de hoofd-developer zich ermee bezig houden (die net terugkwam van JSConf, van toewijding gesproken), en werd een issue op GitHub geopend. Na een dag was het opgelost! You gotta love OSS!

Johnny-five