21 os <<
"#GFS_COMMENT: " << text << endl;
28 is >> pose.x >> pose.y >> pose.theta;
38 os << setiosflags(ios::fixed) << setprecision(6);
39 os << pose.x <<
" " << pose.y <<
" " << pose.theta <<
" 0 0 0 ";
40 os <<
time <<
" pippo " <<
time << endl;
52 os <<
"NEFF " <<
neff ;
53 os << setiosflags(ios::fixed) << setprecision(6);
54 os <<
" " <<
time <<
" pippo " <<
time << endl;
60 for (
unsigned int i=0; i<
dim; i++){
86 is >> poseEntropy >> trajectoryEntropy >> mapEntropy;
93 os << setiosflags(ios::fixed) << setprecision(6) <<
"ENTROPY " << poseEntropy <<
" " << trajectoryEntropy <<
" " << mapEntropy;
94 os <<
" " <<
time <<
" pippo " <<
time << endl;
99 for (
unsigned int i=0; i<
dim; i++){
107 weights.push_back(w);
113 for (
unsigned int i=0; i<
dim; i++){
116 readings.push_back(r);
127 os <<
"WEIGHT " << weight << endl;
128 os <<
"ROBOTLASER1 ";
131 if ((
dim == 541)||(
dim == 540)) {
138 else if ((
dim == 180)||(
dim == 181)) {
145 else if ((
dim == 360)||(
dim == 361)) {
152 else if ((
dim == 682)||(
dim == 683)) {
156 os <<
" " << 360.0/1024.0/180.0*M_PI;
169 os << setiosflags(ios::fixed) << setprecision(2);
170 for (
unsigned int i=0; i<
dim; i++){
171 os <<
" "<< readings[i] ;
173 os << setiosflags(ios::fixed) << setprecision(6);
177 os <<
" "<< pose.theta;
180 os <<
" "<< pose.theta;
186 os <<
" "<<
time <<
" localhost " <<
time << endl;
191 for (
unsigned int i=0; i<
dim; i++){
194 indexes.push_back(j);
202 istringstream lineStream(buf);
204 lineStream >> recordType;
206 if (recordType==
"LASER_READING"){
210 else if (recordType==
"ODO_UPDATE"){
214 else if (recordType==
"ODOM"){
218 else if (recordType==
"SM_UPDATE"){
222 else if (recordType==
"SIMULATOR_POS"){
226 else if (recordType==
"RESAMPLE"){
230 else if (recordType==
"NEFF"){
234 else if (recordType==
"COMMENT" || recordType==
"#COMMENT"){
238 else if (recordType==
"ENTROPY"){
244 rec->
read(lineStream);
253 unsigned int currentIndex=i;
254 for(RecordList::const_reverse_iterator it=rbegin(); it!=rend(); it++){
257 weight+=scanmatch->
weights[currentIndex];
261 currentIndex=resample->
indexes[currentIndex];
269 unsigned int currentIndex=i;
270 for(RecordList::const_reverse_iterator it(frame); it!=rend(); it++){
273 weight+=scanmatch->
weights[currentIndex];
277 currentIndex=resample->
indexes[currentIndex];
287 const_reverse_iterator it=rbegin();
292 unsigned int dim=scanmatch->
dim;
295 unsigned int best=scanmatch->
dim+1;
296 for (
unsigned i=0; i<
dim; i++){
297 double w=getLogWeight(i);
310 const_reverse_iterator it=rbegin();
317 for (vector<OrientedPoint>::const_iterator it=scanmatch->
poses.begin(); it!=scanmatch->
poses.end(); it++){
318 os <<
"MARKER [color=black; circle=" << it->x*100 <<
"," << it->y*100 <<
",10] 0 pippo 0" << endl;
323 for(RecordList::iterator it=begin(); it!=end(); it++)
329 unsigned int currentIndex=i;
335 for(RecordList::const_reverse_iterator it(frame); it!=rend(); it++){
338 p=scanmatch->
poses[currentIndex];
342 if (laser && !first){
345 rl.push_front(claser);
349 currentIndex=resample->
indexes[currentIndex];
357 unsigned int currentIndex=i;
363 for(RecordList::const_reverse_iterator it=rbegin(); it!=rend(); it++){
378 p=pose->
pose=scanmatch->
poses[currentIndex];
379 w=scanmatch->
weights[currentIndex]-oldWeight;
380 oldWeight=scanmatch->
weights[currentIndex];
390 p=pose->
pose=odometry->
poses[currentIndex];
416 rl.push_front(claser);
421 rl.push_front(ccomment);
426 currentIndex=resample->
indexes[currentIndex];
431 bool computedTransformation=
false;
432 bool truePosFound=
false;
440 for(RecordList::iterator it=rl.begin(); it!=rl.end(); it++){
443 neff=neffr->
neff/(double)sampleSize;
444 started=started ||
dynamic_cast<const LaserRecord*
>(*it)?
true:
false;
445 if (started && ! truePosFound){
450 truePose=tpose->
pose;
455 if (started && truePosFound && ! computedTransformation){
462 computedTransformation=
true;
465 if (computedTransformation){
466 os << setiosflags(ios::fixed) << setprecision(6);
477 double ex=realDelta.
x-trueDelta.
x;
478 double ey=realDelta.
y-trueDelta.
y;
480 eth=atan2(sin(eth), cos(eth));
484 << ex <<
" " << ey <<
" " << eth
485 <<
" " << sqrt(ex*ex+ey*ey) <<
" " << fabs(eth) << endl;
486 totalError+=sqrt(ex*ex+ey*ey);
501 cout <<
"average error" << totalError/count << endl;
unsigned int getBestIdx() const
void printPath(ostream &os, unsigned int i, bool err=false, bool rawodom=false) const
virtual void read(istream &is)
PoseRecord(bool ideal=false)
virtual void read(istream &is)=0
istream & read(istream &is)
virtual void write(ostream &os)
virtual void write(ostream &os)
virtual void read(istream &is)
void resample(std::vector< int > &indexes, const WeightVector &weights, unsigned int nparticles=0)
void printLastParticles(ostream &os) const
orientedpoint< T, A > absoluteDifference(const orientedpoint< T, A > &p1, const orientedpoint< T, A > &p2)
virtual void write(ostream &os)
vector< OrientedPoint > poses
virtual void read(istream &is)
vector< OrientedPoint > poses
double getLogWeight(unsigned int i) const
RecordList computePath(unsigned int i, RecordList::const_iterator frame) const
virtual void write(ostream &os)
virtual void read(istream &is)
virtual void write(ostream &os)
vector< unsigned int > indexes
virtual void read(istream &is)
double max(double a, double b)