// Call simulation gomne void MainWindow::on_ButtonGOMNE_clicked() { if (first_simu == false){ QMessageBox::warning(this,"Abort process", "To run the alogrithm at a given time, first you need to run a simulation.\nYou can stop it before the end by holding the STOP button.\nYour current simulation will end."); Simu(2); } QElapsedTimer tgomne; tgomne.start(); RobotTraj(); Init(); par->isinside=0; par->q = ui->BeaconSpinBox->value(); par->nb_beacon = ui->BeaconSpinBox->value(); //cout<<"q"<<par->q<<endl; ui->EpsilonSpinBox->setValue(1); for (uint i=0;i<100;i++){ par->err[i] = 0.2; } ui->ErrSpinBox_1->setValue(par->err[0]); ui->ErrSpinBox_2->setValue(par->err[1]); ui->ErrSpinBox_3->setValue(par->err[2]); ui->ErrSpinBox_4->setValue(par->err[3]); ui->ErrSpinBox_5->setValue(par->err[4]); //epsilon<0.01 check is just to stop the algorithm when it doesnt find a solution to not freeze the window and block the algorithm. while(par->isinside!=1 && par->epsilon_sivia>0.01){ if(par->in_perhaps==0){ par->q--; ui->InterSpinBox->setValue(par->q); Sivia sivia(*R,par); //cout<<"q--"<<endl; } if(par->in_perhaps==1){ par->epsilon_sivia/=2; Sivia sivia(*R,par); ui->EpsilonSpinBox->setValue(par->epsilon_sivia); } } repaint(); if (timeinfo){ QString mess = "Execution time : "; mess.append(QString::number(tgomne.elapsed()));mess.append(" ms"); QMessageBox::information(this,"Info",mess); } ui->InterSpinBox->setValue(par->q); }
void MainWindow::GOMNE_fixed_q() { QElapsedTimer tgomne; tgomne.start(); RobotTraj(); Init(); par->isinside=0; par->nb_beacon = ui->BeaconSpinBox->value(); //cout<<"q"<<par->q<<endl; ui->EpsilonSpinBox->setValue(1); for (uint i=0;i<100;i++){ par->err[i] = 0.2; } ui->ErrSpinBox_1->setValue(par->err[0]); ui->ErrSpinBox_2->setValue(par->err[1]); ui->ErrSpinBox_3->setValue(par->err[2]); ui->ErrSpinBox_4->setValue(par->err[3]); ui->ErrSpinBox_5->setValue(par->err[4]); //epsilon<0.01 check is just to stop the algorithm when it doesnt find a solution to not freeze the window while(par->isinside!=1 && par->epsilon_sivia>0.01){ if(par->in_perhaps==0){ par->q--; ui->InterSpinBox->setValue(par->q); Sivia sivia(*R,par); //cout<<"q--"<<endl; } if(par->in_perhaps==1){ par->epsilon_sivia/=2; Sivia sivia(*R,par); ui->EpsilonSpinBox->setValue(par->epsilon_sivia); } } SLAM(step); repaint(); if (timeinfo){ QString mess = "Execution time : "; mess.append(QString::number(tgomne.elapsed()));mess.append(" ms"); QMessageBox::information(this,"Info",mess); } ui->InterSpinBox->setValue(par->q); }
void MainWindow::on_ZoomReset_clicked() { xmin = -25; xmax = 25; ymin = -25; ymax = 25; repaint(); R = new repere(this,ui->graphicsView,xmin,xmax,ymin,ymax); Sivia sivia(*R,par); repaint(); }
void MainWindow::on_ZoomZone_clicked() { xmin = par->robot_position[0]-5; xmax = par->robot_position[0]+5; ymin = par->robot_position[1]-5; ymax = par->robot_position[1]+5; repaint(); R = new repere(this,ui->graphicsView,xmin,xmax,ymin,ymax); Sivia sivia(*R,par); repaint(); }
void MainWindow::on_Zoomminus_clicked() { xmin *= 2; xmax *= 2; ymin *= 2; ymax *= 2; repaint(); R = new repere(this,ui->graphicsView,xmin,xmax,ymin,ymax); Sivia sivia(*R,par); repaint(); }
void MainWindow::on_ButtonStart_clicked() { Init(); // Build the frame double xmin=-10; double xmax=10; double ymin=-10; double ymax=10; Frame* frame = new Frame(this,ui->graphicsView,xmin,xmax,ymin,ymax); // run SIVIA Sivia sivia(*frame,epsilon); }
// Call SIVIA with the current parameters on the GUI void MainWindow::on_ButtonStartParam_clicked() { QElapsedTimer timer; timer.start(); RobotTraj(); Init(); Sivia sivia(*R,par); R->DrawRobot(par->robot_position[0],par->robot_position[1],par->robot_position[3]); repaint(); if (timeinfo){ QString mess = "Execution time : "; mess.append(QString::number(timer.elapsed()));mess.append(" ms"); QMessageBox::information(this,"Info",mess); } }
// Call simulation 'Soft Constraints' void MainWindow::on_ButtonFindSol_clicked() { if (first_simu == false){ QMessageBox::warning(this,"Abort process", "To run the alogrithm at a given time, first you need to run a simulation.\nYou can stop it before the end by holding the STOP button.\nYour current simulation will end."); Simu(1); } QElapsedTimer timer; timer.start(); RobotTraj(); Init(); ui->EpsilonSpinBox->setValue(0.5); if(ui->BeaconSpinBox->value()!=5) QMessageBox::warning(this,"Attention","This method only works with 5 beacons. Now running simulation with 5 beacons.\n Press Ok to continue..."); ui->BeaconSpinBox->setValue(5); ui->InterSpinBox->setValue(par->nb_beacon); for (uint i=0;i<(sizeof(par->err)/sizeof(*par->err));i++){ par->err[i] = 0.00; } Sivia sivia(*R,par); uint i=0; //double startstep=0.05+floor(10*par->epsilon_sivia)/10-floor(10*par->epsilon_sivia)/20; double startstep=1; double pas = 0.5*(1+par->erroutlier/10); int nstep = 2; int stepctr=0; while(pas>0.05){ int forw=0; int back=0; while(par->isinside==1){ for (uint j=0;j<par->nb_beacon;j++){ par->err[j]=startstep; if(i==j) par->err[j]=startstep-((stepctr+1))*pas; } Sivia sivia(*R,par); stepctr=(stepctr+1)%nstep; if (stepctr==0){ i++; i = i % par->nb_beacon; if(i==0) startstep=startstep-pas; } back++; } // qDebug()<<"err back: "<<"is "<<par->err[0]<<";"<<par->err[1]<<";"<<par->err[2]<<";"<<par->err[3]<<";"<<par->err[4]<<endl; while(par->isinside==0){ for (uint j=0;j<par->nb_beacon;j++){ par->err[j]=startstep; if(i==j) par->err[j]=startstep+((stepctr+1))*pas; } Sivia sivia(*R,par); stepctr=(stepctr+1)%nstep; if (stepctr==0){ i++; i = i % par->nb_beacon; if(i==0) startstep=startstep+pas; } forw++; } //qDebug()<<"par->err for: "<<"is "<<par->err[0]<<";"<<par->err[1]<<";"<<par->err[2]<<";"<<par->err[3]<<";"<<par->err[4]<<endl; if(back>forw) startstep/=0.5; else startstep*=0.5; //cout<<"pas "<<pas<<endl; pas/=2; } ui->ErrSpinBox_1->setValue(par->err[0]); ui->ErrSpinBox_2->setValue(par->err[1]); ui->ErrSpinBox_3->setValue(par->err[2]); ui->ErrSpinBox_4->setValue(par->err[3]); ui->ErrSpinBox_5->setValue(par->err[4]); repaint(); if (timeinfo){ QString mess = "Execution time : "; mess.append(QString::number(timer.elapsed()));mess.append(" ms"); QMessageBox::information(this,"Info",mess); } }