Professional Documents
Culture Documents
Proiect
Modelarea si Identificarea
Robotilor Mobili
Studeni:
Miron Marilena
Lazr Mariana
Andrei Drago-Ionu
Facultatea de Automatica,Calculatoare,Inginerie Electrica si Electronica
Triunghi :
#include "Aria.h"
int main(int argc, char **argv)
{ FILE * nume;
nume=fopen("mirm.txt","w");
Aria::init();
ArArgumentParser parser(&argc, argv);
parser.loadDefaultArguments();
ArSimpleConnector simpleConnector(&parser);
ArRobot robot;
ArSonarDevice sonar;
ArAnalogGyro gyro(&robot);
robot.addRangeDevice(&sonar);
// Make a key handler, so that escape will shut down the program
// cleanly
ArKeyHandler keyHandler;
Aria::setKeyHandler(&keyHandler);
robot.attachKeyHandler(&keyHandler);
printf("You may press escape to exit\n");
if (first || gotoPoseAction.haveAchievedGoal())
{
first = false;
goalNum++;
if (goalNum > 3)
goalNum = 1; // start again at goal #1
break;
}
robot.unlock();
ArUtil::sleep(100);
}
Aria::shutdown();
fclose(nume);
return 0;
Cerc:
while (Aria::getRunning())
{
robot.lock();
fprintf(nume,"%f %f %f %f %f \n",robot.getX(),
robot.getY(),robot.getTh(),robot.getVel(),robot.getRotVel());
if (first || gotoPoseAction.haveAchievedGoal())
{
first = false;
goalNum++;
robot.setVel2(600,500);
}
Facultatea de Automatica,Calculatoare,Inginerie Electrica si Electronica
Hexagon :
if (goalNum > 7)
goalNum = 1; // start again at goal #1
if (goalNum == 1)
gotoPoseAction.setGoal(ArPose(0, 0));
else if (goalNum == 2)
gotoPoseAction.setGoal(ArPose(2000, 0));
else if (goalNum == 3)
gotoPoseAction.setGoal(ArPose(3000,2000));
else if (goalNum == 4)
gotoPoseAction.setGoal(ArPose(2000, 4000));
else if (goalNum == 5)
gotoPoseAction.setGoal(ArPose(0,4000));
else if (goalNum == 6)
gotoPoseAction.setGoal(ArPose(-1000,2000));
else if (goalNum == 7)
gotoPoseAction.setGoal(ArPose(0, 0));
Facultatea de Automatica,Calculatoare,Inginerie Electrica si Electronica
OPT :
if (first || gotoPoseAction.haveAchievedGoal())
{
first = false;
goalNum++;
if (goalNum > 4)
goalNum = 1; // start again at goal #1
if(robot.getY()>0)
robot.setVel2(300,200);
else
robot.setVel2(200,300);
robot.runAsync(true);
xd=2000;
yd=0;
if (vcom<60)
{
k=1;
}
if (k==1)
Facultatea de Automatica,Calculatoare,Inginerie Electrica si Electronica
{xd=2000;
yd=2000;
}
if (k==2)
{xd=4000;
yd=2000;
}
dist=sqrt((xd-xrobot)*(xd-xrobot)+(yd-yrobot)*(yd-yrobot))/1000;
fi=atan2(yd-yrobot,xd-xrobot);
vcom=dist*400;
if(vcom>500)
vcom=500;
wcom=-5*(theta-fi);
vleft=vcom-(200*wcom)/4;
vright=vcom+(200*wcom)/4;
robot.setVel2(vright,vleft);
fprintf(nume,"%f %f %f %f %f %f %f %f %f
\n",xd,yd,xrobot,yrobot,theta,vcom,wcom,robot.getVel(),robot.getRotVel());
robot.unlock();
d=(sqrt((xd-xr)*(xd-xr)+(yd-yr)*(yd-yr)))/500;
fi=atan2(yd-yr,xd-xr);
vc=d*v/1000;
if (vc>600)
vc=600;
if(vc<-600)
vc=600;
wc=-k*(tetar-fi);
if(wc<-5) wc=-5;
if(wc>5) wc=5;
vR=vc+l/2*wc;
vL=vc-l/2*wc;
}
Aria::init();
ArArgumentParser parser(&argc, argv);
parser.loadDefaultArguments();
ArSimpleConnector simpleConnector(&parser);
ArRobot robot;
ArSonarDevice sonar;
ArAnalogGyro gyro(&robot);
robot.addRangeDevice(&sonar);
FILE * fisier;
fisier=fopen("mirm2.txt","w");
bool first=true;
int numSonar; //Number of sonar on the robot
int i; //Counter for looping
// Make a key handler, so that escape will shut down the program
// cleanly
ArKeyHandler keyHandler;
Aria::setKeyHandler(&keyHandler);
robot.attachKeyHandler(&keyHandler);
printf("You may press escape to exit\n");
{ robot.lock();
min=3000;
minteta=0;
}
printf("%d %f \n", min, minteta );
}
xr=robot.getX();
yr=robot.getY();
tetar=robot.getTh()*(3.14/180);
xd=10000;yd=5000;
d=(sqrt((xd-xr)*(xd-xr)+(yd-yr)*(yd-yr)))/1000;
fi=atan2(yd-yr,xd-xr);
vc=d*v;
Facultatea de Automatica,Calculatoare,Inginerie Electrica si Electronica
if (vc>600)
vc=600;
if(vc<-600)
vc=600;
wc=-3*(tetar-fi);
if(wc<-5) wc=-5;
if(wc>5) wc=5;
vR=vc+l/2*wc;
vL=vc-l/2*wc;
robot.setVel2(vR,vL);
fclose(fisier);
#include "Aria.h"
#include "Math.h"
double vc=0,wc=0,vr=0,vl=0;
double xd=10000;
double yd=10000;
double L=200;
double k=8;
double k0=4;
double v=600;
double D=0;
double xr=0,yr=0;
double fi=0;
double tetha=0;
int poz=0;
bool first = true;
double d_min;
double Th_sonar;
D=sqrt((xd-xr)*(xd-xr)+(yd-yr)*(yd-yr));
fi=atan2((yd-yr),(xd-xr));
vc=D*v/1000;
if (vc>600)
vc=600;
if(vc<-600)
vc=600;
//wc=-k*(tetha-fi);
wc=-5*(tetha-fi)+1.5*(-Th_sonar)*exp(abs(-Th_sonar));
if(wc<-5) wc=-5;
if(wc>5) wc=5;
vr=vc+L/2*wc;
vl=vc-L/2*wc;
}
// Make a key handler, so that escape will shut down the program
// cleanly
ArKeyHandler keyHandler;
Aria::setKeyHandler(&keyHandler);
robot.attachKeyHandler(&keyHandler);
printf("You may press escape to exit\n");
robot.addAction(&stopAction, 40);
int goalNum = 0;
ArTime start;
start.setToNow();
while (Aria::getRunning())
{
robot.lock();
d_min=3000;
Th_sonar=0.0;
}
}
printf("\n");
xr=robot.getX();
yr=robot.getY();
tetha=double(robot.getTh())*(3.14/180);
date(xd,yd);
robot.setVel2(vr,vl);
printf("%f %f %f %f %f %f %f \n",xr,yr,tetha,Th_sonar,wc,d_min,vc);
Facultatea de Automatica,Calculatoare,Inginerie Electrica si Electronica
robot.unlock();
ArUtil::sleep(100);
}
fclose(casuta);
return 0;
}