Első lépések
Vonalkövetés
Vonalkövetés 2 szenzor
Labdázás
Egyensúlyozás
2008. január 9., szerda
2007. december 5., szerda
2007. november 19., hétfő
MotorTachoCount
Ezzel szivok mostanában, mivel az összes motor forgató parancs nullázza a számlálót. Valahogy jó lenne a két motor fordulatainak számát külön megjegyezni, hogy tudjuk mennyit ment a robot.
A megoldáson még gondolkozok.
Jó hir, hogy a HiTechnic szenzorok használhatók könnyen az ultrasonichoz hasonlóan, ugyanúgy beállitva és olvasva az adatokat. Eddig a Color sensort és a Compasst használtuk.
A megoldáson még gondolkozok.
Jó hir, hogy a HiTechnic szenzorok használhatók könnyen az ultrasonichoz hasonlóan, ugyanúgy beállitva és olvasva az adatokat. Eddig a Color sensort és a Compasst használtuk.
MotorOverload
Próbálkozunk egy olyasmit megoldani, hogy ha a robot háttal nekimegy vminek, vagy oldalról felmászik a falra, akkor vegye észre magát. Sajnos a szenzorok száma korlátozott, úgyhogy a motorok encodereire szeretnénk ezt a megoldást alapozni. Sajnos a végső teszteléskor az akkuk lemerültek, úgyhogy nem tudtuk teljesen tesztelni ezt a megoldást.
Ha jól értelmezem, akkor a MotorOverload() akkor ad 1-es értéket vissza, ha több erőre van szüksége a forgáshoz, mint amennyit kap. Ez alapján akarjuk megállitani a motrokat és visszaforditani a robotot.
Az idevágó szál:
Ha jól értelmezem, akkor a MotorOverload() akkor ad 1-es értéket vissza, ha több erőre van szüksége a forgáshoz, mint amennyit kap. Ez alapján akarjuk megállitani a motrokat és visszaforditani a robotot.
Az idevágó szál:
task stopback(){A robot mozgási iránya mindig be van állitva, igy tudjuk merre kell visszaforduljon.
while(true){
if((MotorOverload(OUT_B) == 1) || (MotorOverload(OUT_C) == 1)){
Off(OUT_BC);
ClearScreen();
GraphicOut(30,10,"faceclosed.ric");
if(curdir == 1){
Acquire(motor);
curdir = 2;
OnRevReg(OUT_BC, 30, OUT_REGMODE_SPEED);
Wait(500);
forog();
Release(motor);
}
else{
Acquire(motor);
curdir = 1;
OnFwdReg(OUT_BC, 30, OUT_REGMODE_SPEED);
Wait(500);
Release(motor);
}
ClearScreen();
GraphicOut(30,10,"faceopen.ric");
}
}
}
2007. november 13., kedd
Videjók :)
ocsilalala feltett pár videót a youtube-ra, lehet nézegetni miken dolgozgattunk. (mondtam már, hogy szar az editor a blogon? kódban sokkal jobb irni :P )
Na ez a mostani robot, ezzel fogunk ez után is dolgozni
Egy kicsit meg van keményitve a karja, már nem megy szarrá egy erős fogásnál.
Eddig ezt tudja a robot:
- induláskor 10 mp-ig körbeforog, keres valami közeli tárgyat (a labdát elméletileg), ha nincs meg akkor indul előre, másképp a labda felé
- meglát vmit az ultrasonic-kal, lelassul, és megy tovább. kinyitott karral. Ha hirtelen már nem látja a tárgyat, akkor valszeg labda és átment fölötte és megpróbálja megfogni
- ha sikerült megfogni (touch szenzor), akkor örül, és forog gyorsan mint a bolond, megáll majd zenél
- ha nem tűnt el a tárgy, akkor biztos nem labda, megfordul s megy másfelé
- ezen kivül nem esik le az asztalról a light szenzor miatt (kivéve ha háttal megy)
Másik robot (ez még Robotics Studióval programozva, nem tud semmit majdnem, egyetlen szenzort használ)
2007. november 6., kedd
Mai szórakozás a robottal
Kipróbáltuk a Bricxcc-t és az NXC-t a robotokkal, és eddig csak jók a tapasztalatok. Messze egyszerűbb és átláthatóbb igy programozni a robotot, mint VPL-ben. Magyarul a VPL egy fos emellett.
A Watching the Brick opció nagyon fasza, minden szenzor és encoder állapotát lehet látni realtime is. Ezenkivül a Tools menüben sok más hasznos cucc van.
Egyedüli "gond" amibe az elején belefutottunk, az a csatlakozás volt. Nem elég szimplán párositani bluetoothon a robotot (Windows vagy Bluesoleil), mert kellenek az NXT driverek is. Ebben különbözött a csatlakozás az MSRS-től. Megoldás: párositás törlése a Winből, driver felrak, restart, Bricxcc elindit, vár, majd a listában megjelennek BTH előtaggal és névvel az érzékelt robotok. Tehát nem COM portot kell választani! Utána megy is, a robot kéri a passkey-t és ennyi, kikapcsolás után is egyből csatlakozik.
A leforditott programok a robot flash-jébe kerülnek, és ott is maradnak, utólag is lehet őket futtatni kézzel, gépi beavatkozás nélkül. És a programok a roboton futnak! Meg lehet őket állitani a gépről is, ha szarul sül el valami, és a robotról is. VPL-ben ezzel szopás van, és szerintem ha a robot kimegy a bluetyúk hatókörből, akkor szinte biztos, hogy a VPL program is megbolondul, ez nem :D
Na akkor jöhetnek a programok:
Egyszerű előre-hátra mozgás
Szenzoros mozgás
Előre megy addig, amig a touch szenzor nem ér el vmit, vagy az ultrasonic 20 cm-nél közelibb távot érzékel, vagy a light szenzor 30-nál kisebb intenzitást érzékel(bekapcsolt fénnyel), vagyis ha nekimegy valami alsó tárgynak, amit az ultrasonic nem érzékel, vagy közel kerül vmihez, vagy vége az asztalnak :)
A Watching the Brick opció nagyon fasza, minden szenzor és encoder állapotát lehet látni realtime is. Ezenkivül a Tools menüben sok más hasznos cucc van.
Egyedüli "gond" amibe az elején belefutottunk, az a csatlakozás volt. Nem elég szimplán párositani bluetoothon a robotot (Windows vagy Bluesoleil), mert kellenek az NXT driverek is. Ebben különbözött a csatlakozás az MSRS-től. Megoldás: párositás törlése a Winből, driver felrak, restart, Bricxcc elindit, vár, majd a listában megjelennek BTH előtaggal és névvel az érzékelt robotok. Tehát nem COM portot kell választani! Utána megy is, a robot kéri a passkey-t és ennyi, kikapcsolás után is egyből csatlakozik.
A leforditott programok a robot flash-jébe kerülnek, és ott is maradnak, utólag is lehet őket futtatni kézzel, gépi beavatkozás nélkül. És a programok a roboton futnak! Meg lehet őket állitani a gépről is, ha szarul sül el valami, és a robotról is. VPL-ben ezzel szopás van, és szerintem ha a robot kimegy a bluetyúk hatókörből, akkor szinte biztos, hogy a VPL program is megbolondul, ez nem :D
Na akkor jöhetnek a programok:
Egyszerű előre-hátra mozgás
#include "NXCDefs.h"
task main(){
OnFwd(OUT_BC, 30);
Wait(2000);
OnRev(OUT_BC, 40);
Wait(2000);
Off(OUT_BC);
Szenzoros mozgás
Előre megy addig, amig a touch szenzor nem ér el vmit, vagy az ultrasonic 20 cm-nél közelibb távot érzékel, vagy a light szenzor 30-nál kisebb intenzitást érzékel(bekapcsolt fénnyel), vagyis ha nekimegy valami alsó tárgynak, amit az ultrasonic nem érzékel, vagy közel kerül vmihez, vagy vége az asztalnak :)
#include "NXCDefs.h"
#define THRESHOLD 30
#define NEAR 20
#define VOL 7
task music()
{
while (true)
{
PlayTone(784,73);
Wait(75);
PlayTone(740,73);
Wait(75);
PlayTone(659,73);
Wait(75);
PlayTone(587,73);
Wait(75);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(188);
PlayTone(784,73);
Wait(75);
PlayTone(740,73);
Wait(75);
PlayTone(659,73);
Wait(75);
PlayTone(587,73);
Wait(75);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(188);
PlayTone(587,16);
Wait(18);
PlayTone(659,17);
Wait(19);
PlayTone(659,17);
Wait(19);
PlayTone(587,17);
Wait(19);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(38);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(38);
PlayTone(587,16);
Wait(18);
PlayTone(659,17);
Wait(19);
PlayTone(659,17);
Wait(19);
PlayTone(587,17);
Wait(19);
PlayTone(659,35);
Wait(37);
PlayTone(659,17);
Wait(19);
PlayTone(587,17);
Wait(19);
PlayTone(659,16);
Wait(18);
PlayTone(659,36);
Wait(38);
PlayTone(659,17);
Wait(19);
PlayTone(880,35);
Wait(37);
PlayTone(784,36);
Wait(38);
PlayTone(784,16);
Wait(18);
PlayTone(587,17);
Wait(19);
PlayTone(659,36);
Wait(38);
PlayTone(587,16);
Wait(18);
PlayTone(659,36);
Wait(38);
PlayTone(587,17);
Wait(19);
PlayTone(659,35);
Wait(75);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(38);
PlayTone(659,35);
Wait(75);
PlayTone(587,16);
Wait(18);
PlayTone(587,17);
Wait(19);
PlayTone(587,36);
Wait(38);
PlayTone(587,16);
Wait(18);
PlayTone(587,17);
Wait(19);
PlayTone(494,36);
Wait(38);
PlayTone(440,16);
Wait(18);
PlayTone(392,17);
Wait(19);
PlayTone(330,36);
Wait(38);
PlayTone(330,35);
Wait(37);
}
}
task kar(){
while(true){
OnFwd(OUT_B, 10);
Wait(3000);
Off(OUT_B);
OnRev(OUT_B, 10);
Wait(3000);
Off(OUT_B);
Wait(100);
}
}
task kiir(){
while(true){
ClearScreen();
TextOut(10, 60, "distance:");
NumOut(10, 50, SensorUS(IN_4));
TextOut(10, 40, "light:");
NumOut(10, 30, Sensor(IN_3));
Wait(300);
}
}
task movement()
{
SetSensorLight(IN_3);
SetSensor(IN_1,SENSOR_TOUCH);
SetSensorLowspeed(IN_4);
OnFwd(OUT_AC, 100);
while (true)
{
if (Sensor(IN_3) < THRESHOLD)
{
OnRev(OUT_AC, 75);
Wait(500);
Off(OUT_AC);
OnRev(OUT_A, 75);
Wait(1000);
until(Sensor(IN_3) >= THRESHOLD);
OnFwd(OUT_AC, 100);
}
if ((SensorUS(IN_4) < NEAR) || (SENSOR_1 == 1)){
OnRev(OUT_AC, 75);
Wait(500);
Off(OUT_AC);
OnRev(OUT_A, 75);
Wait(1000);
until((SensorUS(IN_4) >= NEAR) || (SENSOR_1 == 0));
OnFwd(OUT_AC, 100);
}
}
}
task main(){
Precedes(kiir, music, movement, kar);
}
Feliratkozás:
Bejegyzések (Atom)