fooling around and missing the bugs

This commit is contained in:
Johannes Reinhardt 2008-07-13 21:51:00 +02:00
parent 55aff84785
commit 303d950e91
2 changed files with 11 additions and 10 deletions

View File

@ -62,22 +62,18 @@ void fit_parameter(telemetry* t1, telemetry* t2, telemetry* t3, map* m){
m->aw = 2*(w2 - w1)/(dt1 + dt2);
}
int dgl(trial* t, vehicle* after, vehicle* before, timestamp deltat){
int dgl(trial* t, vehicle* after, vehicle* before, timestamp h, timestamp deltat){
double a,k,aw;
double wsoll;
vehicle tmp = *before;
vehicle diff;
timestamp dt = 10;
timestamp dt = h;
int i,end=deltat/dt;
struct collcheck collision;
if(deltat < dt)
return 0;
if((deltat/dt)*dt != deltat)
fprintf(stderr,"deltat not a multiple of %d, possibly inaccurate results\n",dt);
/*TODO: find out a,k,aw*/
a = t->map.a;
k = t->map.k;
aw = t->map.aw;
@ -85,12 +81,13 @@ int dgl(trial* t, vehicle* after, vehicle* before, timestamp deltat){
wsoll = turn2w(t,before->turn);
aw *= (before->w > wsoll) ? -1 : 1;
for(i = 0;i<end;i++){
for(i = 0;i<=end;i++){
if(i == end) dt = deltat - (end-1)*dt;
/*calculate derivative*/
diff.x = cos(tmp.dir)*tmp.speed/1000;
diff.y = sin(tmp.dir)*tmp.speed/1000;
diff.speed = fmax(-tmp.speed,a - k*tmp.speed*tmp.speed);
diff.speed = fmax(-tmp.speed,a - k*tmp.speed*tmp.speed*1e-6);
diff.w = (tmp.w == wsoll) ? 0 : aw;
diff.dir = tmp.w;
/*Euler Step*/
@ -98,7 +95,7 @@ int dgl(trial* t, vehicle* after, vehicle* before, timestamp deltat){
tmp.y += dt*diff.y;
tmp.speed += (tmp.speed > 0) ? dt*diff.speed : 0;
tmp.w += dt*diff.w;
tmp.dir = dt*diff.dir;
tmp.dir += dt*diff.dir;
/*check for collisions TODO: optimize*/
collision.x = tmp.x;
@ -111,6 +108,7 @@ int dgl(trial* t, vehicle* after, vehicle* before, timestamp deltat){
}
after->x = tmp.x;
after->y = tmp.y;
after->speed = tmp.speed;

View File

@ -31,8 +31,11 @@ void trial_loop(trial *t) {
}
while (t->alive) {
timestamp step=getcurts(t) + LATENCY - t->sim.tm.ts;
t->sim.tm.vehicle.w = turn2w(t->sim.tm.vehicle.turn);
dgl(t,&t->sim.tm.vehicle,&t->sim.tm.vehicle,getcurts(t) + LATENCY - t->sim.tm.ts);
dgl(t,&t->sim.tm.vehicle,&t->sim.tm.vehicle,step,step);
t->sim.steps++;
// simulate(t, getcurts(t) + LATENCY);
goradar(t);