Xbox-ohjaimella ajaminen

(Huom! Tämä postaus sisältää vain selitystä Xbox-ohjaimen arvojen lukemisesta, laskemisesta ja muusta tylsästä.)

Robotista on saatava kauko-ohjattava kilpailun yhtä osiota varten, joten on valittava jokin ohjain, joka on mukava käyttää ja tarvittaessa pystyy tarpeeksi tarkkaan ohjaukseen. RC-lennokin ohjain olisi kätevä (ja sellaiselle rakennankin vielä ohjausjärjestelmän), mutta tärkeämpää olisi saada robotti nopeasti liikkumaan ja testailtavaksi, joten valitsin Xbox-ohjaimen.

LabVIEW:ssä on valmiiksi ohjaimen datan lukemiseen tarkoitettu aliohjelma, joka toimi myös Xbox-ohjaimen kanssa. Xbox ohjaimen voi liittää tietokoneeseen USB-kaapelilla tai Bluetoothilla, molemmat toimivat (paitsi Bluetooth saattaa pätkiä eteenkin kisoissa). Aliohjelma palauttaa listan eri nappien ja analogisten “tattien” , sekä liipaisinten arvoista. Nappien arvot ovat joko True tai False, joten ne on helppo käyttää suoraan robotin toimintoihin, jotka ovat aina joko päällä tai pois – ei välimuotoja. Analogisia arvoja kannattaa taas käyttää vaikkapa nopeuden säätelyyn. Ja tässäpä ongelma tulikin – Xbox-ohjaimen analogiset arvot ovat väliltä [-32768,32767] ja Steering Framen ohjaus ottaa vastaan arvoja väliltä [-1,1]. Yksinkertaisin tapa olisi vain jakaa ohjaimelta tuleva arvo luvulla 32767, mutta tällöin ohjaus olisi lineaarista ja liian kiikkerä ohjattavaksi sormien liikkeillä.

Tähän ratkaisuksi tein ohjelman, joka skaalaa ohjaimelta tulevat arvot logaritmisesti asteikolle [-1,1]. Ohjelma sisältää jonkin verran matematiikkaa ja ohjelman lähdekoodi näyttääkin aika sotkuiselta, sillä LabVIEW ei ole tarkoitettu matematiikan laskemiseen (toki sekin onnistuu, mutta melko epäselvästi).

Ohjelma, joka lukee arvot Xbox-ohjaimelta, muuttaa ne sopivaan muotoon ja lisää ne julkiseen double array- tyyppiseen muuttujaan.

Loppujen lopuksi sain aikaan ohjelman, joka mahdollistaa robotin ohjaamisen Xbox-ohjaimella siten, että liipaisimista ohjataan robotin nopeutta y-akselin suhteen (eteen-taakse), vasemmalla stickillä robotin pyörimistä ja oikealla stickillä robotin liikettä x-akselin suunnassa (sivuttaisliike).

Ohjelma lukee siis tietokoneeseen liitetyn ohjaimen dataa ja lähettää sen sopivassa muodossa robotin myRIO-yksikköön, joka välittää tiedon moottorinohjaimille ja muulle elektroniikalle. Robotin sähköisestä rakenteesta selvennystä myöhemmin.

Leave a comment