Robottiohjelmoinnin harjoitustyö : Moottorit ja ajoneuvot
Moottorit
NXT-sarjaan kuuluu kolme servomoottoria, joiden asennon voi lukea moottorin kierroslaskurista asteen tarkkuudella, mistä on hyötyä muun muassa moottorien synkronoinnissa ja matkan mittaamisessa. Moottorit ovat hieman epätavallisen muotoisia ja painavia, joten voi olla usein järkevää rakentaa robotti niiden ympärille. Moottorin pyörimisen voi muuttaa lineaariseksi liikkeeksi esimerkiksi männällä, |
|
Huom.: moottoreissa on kohtalaisesti vääntöä, ja etenkin jos hammasrattaiden avulla sitä kasvattaa, kannattaa olla varovainen etteivät osat väänny ja mene pirstaleiksi. Servojen ei ole myöskään hyvä antaa olla liian pitkään jumiutuneessa tilassa.
Random-tieto: paitsi että moottori muuttaa sähköä liikkeeksi, käsin kääntämällä se muuttaa myös liikettä sähköksi. Koita kytkeä kaksi moottoria johdolla kiinni toisiinsa ja pyöritä toista.
Aseta moottorin nopeus | Motor motor = Motor.A; // 250 astetta sekunnissa motor.setSpeed(250); |
Käännä moottoria 90 astetta eteenpäin | motor.rotate(90); |
Käännä moottori haluttuun kulmaan | motor.rotateTo(-1458); |
Nollaa takometri | motor.resetTachoCount(); |
Tutki moottorin oikea nopeus
return motor.getRotationSpeed(); |
motor.resetTachoCount(); // aseta suuri nopeus motor.setSpeed(800); // moottori pyörimään motor.forward(); // odota 5s try{Thread.sleep(5000);}catch(Exception e) {} motor.stop(); // palauta asteina sekunnissa return motor.getTachoCount()/5; |
Lukitse moottori | // moottori pyrkii pysymään paikallaan, // voimalla 1-100 motor.lock(100); |
Vapauta moottori | motor.flt(); |
Ajoneuvot
Jos robotissa on kaksi itsenäisesti ohjattavaa pyörää, voidaan käyttää Pilot-rajapintaa abstrahoimaan rakenteen yksityiskohdat pois. Pilotissa on määritelty monia korkean tason toimintoja kaksipyöräisille ajoneuvoille, kuten tietyn astemäärän kääntyminen, halutun matkan kulkeminen ja kaaressa ajaminen.
Pilotin konstruktorille annetaan pyörien halkaisija (setin kumirenkaat = 56mm) ja pyörien välinen etäisyys mielivaltaisella mutta samalla yksiköllä.
Myös edelleen korkeamman tason luokat kuten CompassPilot ja SimpleNavigator (lejos.robotics.navigation) käyttävät Pilotia. lejos.robotics.proposal-pakkaus sisältää yhä hienostuneempia mutta viimeistelemättömiä toimintoja. Osa toiminnoista ei kuitenkaan toimi, mm. navigaattorin kääntymiskoodi tuntuu tällä haavaa olevan vähintäänkin osittain rikki. Esimerkeissä oletetaan ettei bugeja ole.
Luo Pilot-olio ja navigaattori | // luo Pilot. Yksiköillä ei ole väliä, tässä cm Pilot car = new TachoPilot(5.6f, 9.5f, Motor.A, Motor.B); // luo autoa ohjaava SimpleNavigator // huom. voi olla joissain versioissa TachoNavigator SimpleNavigator nav = new SimpleNavigator(car); |
Aja 50 cm eteenpäin | car.travel(50); |
Aja ympyrän kaarta pitkin | // säde 50cm, 90 astetta car.arc(50, 90); |
Navigoi koordinaatteihin
|
// liiku kohtaan (100,30) // (tässä tapauksessa senttimetreissä) nav.goTo(100,30); |
Sijainti | Point home = new Point(45f,45f); // lue robotin nykyinen sijainti ja suunta Pose robot = nav.getPose(); // laske etäisyys kotiin float matka = robot.distanceTo(home); float kulma = robot.angleTo(home); // jos liian kaukana kodista, liiku sinne if (matka > 100) nav.goTo(home.getX(), home.getY()); |
Nopeus
|
// 15 cm/s nav.setMoveSpeed(15); // 90 astetta/s nav.setTurnSpeed(90); |
Väistä este | UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S4); int dist = 255; car.forward(); // ajetaan kunnes jotain tulee eteen while(dist > 50) { dist = sonic.getDistance(); } // väistetään oikean kautta ohi car.rotate(-90); // ajetaan kaaressa, säteenä etäisyys esteeseen car.arc(dist, 90); // väistö päättyy . . . |