Hoe maak je een autonome basketbal spelen robot met behulp van een iRobot Create als een basis (5 / 7 stap)

Stap 5: Code

Het kan worden rommelig, maar het werkt.

#use "createlib.ic"
#use "xbccamlib.ic"

#define cam 0 / / camera servo poort
#define arm 3 / / arm servo poort
#define et (analog(0)) //et poort

/ * De kabel maken ook dient te worden aangesloten. De macht jack,
de 3 fronten sluit aan op de poort 8 en de een gelabelde U X in JP 28
(naast de USB-poort) met de U richting de camera * /

#define c_down 5 / / camera servo naar beneden
#define a_down 17 / / servo arm omlaag
#define houden 50 / / servo hold bal
#define gevangen 27 / / arm servo positie om te voorkomen betrapt op tafel
#define schieten 150 / / servo Gooi bal
#define track_c 25 / / camera servo track positie sluiten
#define track_f 45 / / camera servo track ver positie

#define center 120 / / center van camera visie
#define inrange 30 / / track_y coördineren wanneer de bal is in de klauw
#define bal 0 / / kanaal van oranje bal
#define ball_x (track_x(ball,0)) //x-coördinaat van de bal
#define ball_y (track_y(ball,0)) //y-coördinaat van de bal

#define langzaam 100 / / snelheid van langzame motor
#define snel 175 / / snelheid van snelle motor

#define duidelijk 0.2//sleep back uit de buurt van obstakels
#define tijd 0,5 //1.0 is een recht 90 graden draaien
#define rest 0.05//time om te slapen terwijl het bijhouden van de blobs

#define speeda 175 / / snelheid van vermijden om
#define back_s-200 / / speed om terug uit de buurt van bumped object
#define rechte 32767 / / drive in een rechte lijn

#define backb 2 / / kanaal van Rugplank hoofdkleur
#define square 1 / / kanaal van Rugplank accentkleur
#define track_d 250 / / camera positie voor het bijhouden van doel
#define track_find 70 / / camerapositie lang bijhouden
#define omgekeerde 2.25//sleep tijd voor een 180
#define back_f-150 / / weer hoge snelheid
#define back_sl-125 / / rug trage snelheid
#define center_x 178 / / waar x centrum voor cam
#define center_y 146 / / waar y center voor cam

int pida; //avoid proces
int pidb; //track-proces
int pidc; //score-proces
int have_ball = 0; //tells welke functie wij zijn in

void main() {}
lange ch;
enable_servos (); //enable servo 's
init_camera (); //start camera
cconnect (); //connect maken met volledige controle
start_a (); //start vermijden functie
start_b (); //start ball_tracking functie
while(1) {}
Als (r_button () || gc_ldrop|| gc_rdrop) {//if pakte of r schouder knop
Kill(pida);
Kill(pidb);
Kill(pidc);
disable_servos();
Disconnect();
pauze;}
create_battery_charge();
display_clear();
printf ("gratis %l\n =", gc_battery_charge);
if(gc_battery_charge<1200l|| b_button()) {}
Kill(pida);
Kill(pidb);
Kill(pidc);
Throw();
have_ball = 0;
create_demo(1);
while(b_button());
terwijl (gc_battery_charge < 2800l & &! b_button()) {}
create_battery_charge();
display_clear();
printf ("gratis %l\n =", gc_battery_charge);
Sleep(1.0);}
cconnect();
Back();
Sleep(2.0);
start_a();
start_b();}
}

}

ongeldig avoid() {}

while(1) {//repeat forever

create_sensor_update (); //update alle sensor-waardes
create_drive (speeda, rechte);
if(gc_lbump==1) {//left hobbel
avoid_right();} draait rechts om te voorkomen dat
anders if(gc_rbump==1) {//right hobbel
avoid_left();} draait links om te voorkomen dat
anders if(gc_lfcliff==1) {//left front cliff
avoid_right();}
anders if(gc_rfcliff==1) {//right front cliff
avoid_left();}
anders if(gc_lcliff==1) {//left klif
avoid_right();}
anders if(gc_rcliff==1) {//right klif
avoid_left();}
}
}

ongeldig track_ball() {}

Kill(pidc);

while(!have_ball) {//repeat tot get bal

track_update();
ver (); //sets de camera
klaar (); //sets de arm

while(et<255) {//until max waarde gebeurt er wanneer de bal wordt gevangen

track_update (); //update camerabeeld

Als (ball_x < =(center-5)) {//if de bal wordt overgelaten
track_update();
create_drive_direct (langzame, snel); //turn links
Sleep(rest);}

anders als (ball_x > =(center+5)) {//if de bal klopt
track_update();
create_drive_direct(Fast,Slow); / / sla rechtsaf
Sleep(rest);}

anders als (ball_x <(center+5) & & ball_x >(center-5)) {/ / als de bal is gecentreerd
track_update();
create_drive_straight (snelle); //go rechte
Sleep(rest);}
}
Grab (); //grab bal
pieptoon (); //make lawaai
Stop (); //stop rijden
have_ball = 1; //make een opmerking dat ik heb bal
}
start_c (); //find de mand
slaap (1.0); //sleep zodat ik niets doen wanneer ik gedood
}

ongeldig find_basket() {}

Kill (pidb), //kill bal proces voor het bijhouden
zoeken (); //put camera omhoog
track_set_minarea (1000); //the Rugplank is groot, dus alleen zoekt naar grote blobs

terwijl (have_ball) {//while ik heb de bal

track_update();
while(track_x(backb,0) < =(center_x-20) || track_x(backb,0) > =(center_x+20)) {//while niet gecentreerd
track_update();

if(track_x(backb,0) > =(center_x+20)) {//if het bord blijft
track_update();
create_spin_CCW(100);} Sla linksaf

anders if(track_x(backb,0) < =(center_x-20)) {//if het bord klopt
track_update();
create_spin_CW(300-center_x);} Sla rechtsaf vertragen het naderen van de center
}
Stop();

while(track_size(backb,0) < =(6000)) {//while het doel is van minder dan 6000 pixels in grootte
track_update();
if(track_x(backb,0) < =(center_x-5)) {//if het doel blijft
track_update();
create_drive_direct (langzame, snel); //turn links
Sleep(rest);}

anders if(track_x(backb,0) > =(center_x+5)) {//if de doelstelling klopt
track_update();
create_drive_direct(Fast,Slow); / / sla rechtsaf
Sleep(rest);}

anders if(track_x(backb,0) <(center+5) & & track_x(backb,0) >(center_x-5)) {/ / als het doel is gecentreerd
track_update();
create_drive_straight (snelle); //go rechte
Sleep(rest);}
}
Stop();
create_drive_straight(Fast); / / een beetje dichter
Sleep(1.0);
Stop();
Sleep(1.0);
create_spin_CW (speeda), //spin recht
slaap (achteruit); //sleep lang die genoeg voor een 180 draaien
Stop();
omlaag (); //put camera tot track Rugplank
Sleep(1.0);
track_set_minarea (200); //use min kleiner, aangezien we puntige en gonna dichter

while(track_y(backb,0) > =(center_y-140)) {//while het doel is minder dan de y-coördinaat
track_update();
if(track_x(backb,0) < =(center_x-5)) {//if het doel blijft
track_update();
back_right (); //turn links
Sleep(rest);}

anders if(track_x(backb,0) > =(center_x+5)) {//if de doelstelling klopt
track_update();
back_left(); / / sla rechtsaf
Sleep(rest);}

anders if(track_x(backb,0) <(center+5) & & track_x(backb,0) >(center_x-5)) {/ / als het doel is gecentreerd
track_update();
terug (); //go rechte
Sleep(rest);}

}
Stop();
Beep();
gooien (); //shoot
Sleep(1.0);
have_ball = 0; //reminder ik gooide de bal en niet hebt
}
start_b (); //back bal bijhouden
slaap (1.0); //don't iets totdat dit proces sterft
}

ongeldig cconnect() {}
create_connect();
create_full (); de volledige controle van de //for van richel sensoren
create_power_led(0,255);} groene stroom geleid

ongeldig disconnect() {}
Stop (); //stop verplaatsen
create_disconnect();}

ongeldig back_away() {}
Back();
Sleep(Clear);
Stop();}

ongeldig rotate_l() {}
create_spin_CCW(speeda);
Sleep(time);
Stop();}

ongeldig rotate_r() {}
create_spin_CW(speeda);
Sleep(time);
Stop();}

VOID stop() {}
create_drive(0,Straight);}

VOID back() {}
create_drive(back_s,Straight);}

ongeldig ready() {}
set_servo_position (arm, a_down);}

ongeldig check() {}
set_servo_position (cam, track_c);}

ongeldig far() {}
set_servo_position (cam, track_f);}

ongeldig ledge() {}
set_servo_position (arm, gevangen);}

ongeldig throw() {}
int;
voor (een = 50; een > = 30; een-= 1) {//get klaar
set_servo_position(arm, a);}
set_servo_position (arm, schieten);}

ongeldig grab() {}
int;
voor (een = 0; een < = houden; een += 1) {//raise de arm soepel
set_servo_position(arm, a) ;}}

ongeldig down() {}
set_servo_position (cam, track_d);}

ongeldig find() {}
set_servo_position (cam, track_find);}

ongeldig start_a() {}
pida = start_process(avoid());}

ongeldig start_b() {}
pidb = start_process(track_ball());}

ongeldig start_c() {}
pidc = start_process(find_basket());}

VOID kill(int pid) {}
CREATE_BUSY; //wait voor huidige maken proces te voltooien, en voorrang
kill_process(PID);
CREATE_FREE; //i'm gedaan
Stop();}

ongeldig avoid_left() {}
Kill (pidb), //stop alles
Kill(pidc);
richel (); //pick omhoog klauw dus het niet op tafel gepakt doet
back_away (); //back weg
rotate_l (); //rotate uit de buurt van obstakel
klaar (); //put klauw terug naar beneden
if(have_ball) {//if heb ik de bal
start_c();} Start doel tracking
anders if(!have_ball) {//if ik heb niet de bal
start_b();} beginnen met het bijhouden van de bal
}

ongeldig avoid_right() {}
Kill(pidb);
Kill(pidc);
Ledge();
back_away();
rotate_r();
Ready();
if(have_ball) {}
start_c();}
anders if(!have_ball) {}
start_b();}
}

ongeldig back_left() {}
create_drive_direct(back_f,back_sl);}

ongeldig back_right() {}
create_drive_direct(back_sl,back_f);}

Gerelateerde Artikelen

Hoe maak je aangepaste grepen voor uw camera met behulp van sugru

Hoe maak je aangepaste grepen voor uw camera met behulp van sugru

Deze gids zal u tonen hoe te maken van aangepaste tangen voor je camera met behulp van sugru.sugru is een zelf ingestelde rubber die met de hand kan worden gevormd. Het mallen zoals spel-deeg, obligaties aan bijna alles en verandert in een sterke, fl
Hoe maak je Rainbow Loom armbanden of ringen met behulp van de triple diamond patroon

Hoe maak je Rainbow Loom armbanden of ringen met behulp van de triple diamond patroon

Rainbow Loom armbanden gemaakt met de Triple Diamond patroon zijn echt eenvoudig te maken, (in tegenstelling tot de Triple Diamond Ski heuvels). Ik maakte deze een met behulp van de Rainbow Loom 2.0, waarin een veel mooier metalen haak, maar je kunt
Maak een eenvoudige draadloze RF robot met behulp van Arduino!

Maak een eenvoudige draadloze RF robot met behulp van Arduino!

UPDATE: IK HEB JOYSTICK-CONTROLE TOEGEVOEGD AAN DEZE ROBOT. GELIEVE TE VERWIJZEN NAAR DE STAP 7, ALS U WILT BEPALEN UW ROBOT VIA JOYSTICK.HalloDit is mijn eerste instructable en in deze tutorial, I 'm gonna Toon u hoe te bouwen van een eenvoudige dra
Hoe maak je een basis spreker

Hoe maak je een basis spreker

i 'm gonna Toon u hoe maak je een basis spreker aantekenen dat dit is mijn eerste wedstrijd in structuble dus wees aardig.Stap 1: materiales moet u eerst gether de volgende bestemmingspunt: een permanente keramische magneet een pice van kar boord van
Draadloos bedienen een Robot met behulp van de Arduino en RF Modules!

Draadloos bedienen een Robot met behulp van de Arduino en RF Modules!

/*Bewerken van 05/05/2016Hey jongens, ik druk bezig geweest met college en kon niet antwoorden naar commments. De meeste van jullie wilde de code en schema's gedaan een beetje beter dus ik heb het schema op Eagle 7.2.0 gemaakt en geüpload alles op Gi
Controle van uw Robot met behulp van een Wii Nunchuck (en een Arduino)

Controle van uw Robot met behulp van een Wii Nunchuck (en een Arduino)

na het dragen van mezelf spelen van Wii Boksen, ik kreeg aan het denken zou het niet geweldig als ik zou kunnen dit gebruiken om te controleren mijn robot, (op zoek naar mijn linkerhand).Op zoek rond het internet vond ik een schare van mensen die soo
Oprichting van een wandelende robot met behulp van polycaprolactone

Oprichting van een wandelende robot met behulp van polycaprolactone

Video over hoe ik een wandelende robot met behulp van polycaprolactone gemaakt. Polycaprolactone is een interessante kunststof, waardoor u snel maken van prototypes. Het gesmolten bij 60-65 ° C. Voor het smelten van polycaprolactone, gebruikte ik war
Het bouwen van een Robot met behulp van MSP430 Launchpad

Het bouwen van een Robot met behulp van MSP430 Launchpad

In dit Instructable gaan we aan het bouwen van een kleine robot met behulp van MSP430 Launchpad van TI. De robot zal gebruik maken van twee gericht gelijkstroommotoren en differentiële aandrijfsysteem zal tewerkstellen.De intelligentie is voorzien va
Obstakel te vermijden Robot met behulp van IR Module geïnterfacet met een boord van Mediatek LinkIt

Obstakel te vermijden Robot met behulp van IR Module geïnterfacet met een boord van Mediatek LinkIt

In deze Intructable zal u worden kunnen te maken een obstakel vermijden Robot met behulp van IR module met L293D en Mediatek Linkit een boord.Stap 1: vereisten L293D Motor Driver IC.2 IR Sensor Modules.Chassi voor Bot.Mediatek LinkItOne-Board2 100 RP
Autonome mobiele Robot met behulp van ROS clumsybot

Autonome mobiele Robot met behulp van ROS clumsybot

onze binnenshuis autonome mobiele robot met behulp van ROS, Rtabmap, raspberry pi 2, kinect, ubuntu14.04 ltsOnze afstudeerprojectonze binnenshuis autonome mobiele robot met behulp van ROS, Rtabmap, raspberry pi 2, kinect, ubuntu14.04 lts we installer
2-wiel Self Balancing Robot met behulp van de Arduino en MPU6050

2-wiel Self Balancing Robot met behulp van de Arduino en MPU6050

2-wiel Self Balancing Robot met behulp van de Arduino en MPU6050.Arduino als de controller en de sensor MPU6050 gebruiken om te bepalen van het evenwicht. Gewoon een eenvoudige seriële Bluetooth module toevoegen en een Bluetooth seriële Controller AP
Arduino gebaseerde lijn volgeling robot met behulp van Pololu kW-8RC lijn sensor

Arduino gebaseerde lijn volgeling robot met behulp van Pololu kW-8RC lijn sensor

UPDATE FEB 2012: deze gids is featured op de Adafruit bloghttp://www.adafruit.com/blog/2012/02/14/Arduino-based-line-follower-robot/Dit is de Faz3a II, mijn eerste lijn-volgende robot, die hopelijk ook te gebruiken voor het oplossen van de doolhof. I
Doolhof van Oplosser Robot, met behulp van kunstmatige intelligentie met Arduino

Doolhof van Oplosser Robot, met behulp van kunstmatige intelligentie met Arduino

(Als je dit Instructable, vergeet dan niet te stemmen (boven: rechts hoek vlag). Rex, de Robot concurreert op ROBOTICA en sensoren wedstrijden. Heel hartelijk bedankt! ;-)Dit Instructable werd ontwikkeld na mijn laatste project: lijn volgeling Robot
BOUW uw eigen INSECT ROBOT met behulp van de ARDUINO en SERVO

BOUW uw eigen INSECT ROBOT met behulp van de ARDUINO en SERVO

Hey daar, ben ik terug met een meer instructalble. Ik ga je leren hoe te bouwen van een Insect robot met behulp van Arduino en servomotoren. Klinkt cool, toch?. Wat u denkt over het gebruik van deze robot? Vanwege hun compacte formaat, die ze kunnen