From: Karan V. <kv...@gm...> - 2012-11-07 02:58:14
|
player version 2.1.2 stage version 2.1.1 ubunut 10.04 I have to simulate robot controllers via code simulation i.e. no real robots only stage simulation. I have 100 controllers to test. To test each controller I have to return robot to a fixed starting position, this I achieve using SimulationProxy::SetPose2d() with the pose argument the same as mentioned in the world file. However I notice that after setting the pose the output of Position2dProxy() does not match the robot pose. for n=1:n_max // for all controllers { for t=0:t_max // time bound { read position determine speed as dictated by the controller set speed } reset robot position } the actual c++ code is as follows with reduced n_max and t_max : #include <iostream> #include "libplayerc++/playerc++.h" using namespace PlayerCc; using namespace std; int main(){ PlayerClient robot("localhost", 6666); SimulationProxy sim(&robot); Position2dProxy pp(&robot); SonarProxy sp(&robot); robot.Read(); cout << pp << endl; char robname[] = "robot1"; for(size_t n = 0; n < 2; ++n){ cout << "n :: " << n << endl; for(size_t i = 0; i < 2; ++i){ cout << "i :: " << i << endl; robot.Read(); cout << pp << endl; pp.SetSpeed(0.5, dtor(10)); } cout << "---done---" << endl; cout << pp << endl; cout << "---resetting now---" << endl; sim.SetPose2d(robname, -7, -7, 0); // same pose as mentioned in the world file cout << pp << endl; } return 0; } the terminal output is reproduced below : #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0 0 0 0 0 0 0 <------------- pristine output from pp n :: 0 i :: 0 #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0 0 0 0 0 0 0 i :: 1 #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.05 0 0.0174533 0.5 0 0.174533 0 ---done--- #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.05 0 0.0174533 0.5 0 0.174533 0 ---resetting now--- <------------------ reset command give now #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.05 0 0.0174533 0.5 0 0.174533 0 <------------ BUT no reset occurred n :: 1 i :: 0 #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.05 0 0.0174533 0.5 0 0.174533 0 <-------------------- wrong values which are retained from last time i :: 1 #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.0999924 0.00087262 0.0349066 0.5 0 0.174533 0 ---done--- #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.0999924 0.00087262 0.0349066 0.5 0 0.174533 0 ---resetting now--- #Position2D (4:0) #xpos ypos theta speed sidespeed turn stall 0.0999924 0.00087262 0.0349066 0.5 0 0.174533 0 --------------------------------------------------------------------------------------------------------------------------------- the controllers decide the speed and other parameters depending on the distance travelled and the current position of the robot but due to the fact that position2dproxy does not reflect the correct position of the robot as forced by a setpose2d() I will get wrong answers. |
From: Raf B. <raf...@gm...> - 2012-11-09 14:04:09
|
Hi Karan You might need another robot.Read(); before you print the values after the reset. Also, you might want to reset the odometry after a simulation reset. The Position2dProxy odometry will not be reset when the robot is put in a new location, as is done when the simulation location is reset. Compare this with moving the robot by hand to a new location - the position proxy will not know of this change and thus believe it is still at the last position. Kind regards Raf Berkvens Karan Vidyut wrote: > > #include <iostream> > > #include "libplayerc++/playerc++.h" > > using namespace PlayerCc; > using namespace std; > > int main(){ > PlayerClient robot("localhost", 6666); > SimulationProxy sim(&robot); > Position2dProxy pp(&robot); > SonarProxy sp(&robot); > > robot.Read(); > cout << pp << endl; > char robname[] = "robot1"; > > for(size_t n = 0; n < 2; ++n){ > cout << "n :: " << n << endl; > for(size_t i = 0; i < 2; ++i){ > cout << "i :: " << i << endl; > robot.Read(); > cout << pp << endl; > pp.SetSpeed(0.5, dtor(10)); > } > cout << "---done---" << endl; > > cout << pp << endl; > cout << "---resetting now---" << endl; > sim.SetPose2d(robname, -7, -7, 0); // same pose as mentioned in > the world file > cout << pp << endl; > } > return 0; > } > > > the terminal output is reproduced below : > > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0 0 0 0 0 0 0 <------------- pristine output from pp > > n :: 0 > i :: 0 > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0 0 0 0 0 0 0 > > i :: 1 > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.05 0 0.0174533 0.5 0 0.174533 0 > > ---done--- > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.05 0 0.0174533 0.5 0 0.174533 0 > > ---resetting now--- <------------------ reset command give now > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.05 0 0.0174533 0.5 0 0.174533 0 <------------ BUT no reset occurred > > n :: 1 > i :: 0 > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.05 0 0.0174533 0.5 0 0.174533 0 <-------------------- wrong values > which are retained from last time > > i :: 1 > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.0999924 0.00087262 0.0349066 0.5 0 0.174533 0 > > ---done--- > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.0999924 0.00087262 0.0349066 0.5 0 0.174533 0 > > ---resetting now--- > #Position2D (4:0) > #xpos ypos theta speed sidespeed turn stall > 0.0999924 0.00087262 0.0349066 0.5 0 0.174533 0 > > > --------------------------------------------------------------------------------------------------------------------------------- > > > the controllers decide the speed and other parameters depending on the > distance travelled and the current position of the robot but due to > the fact that position2dproxy does not reflect the correct position of > the robot as forced by a setpose2d() I will get wrong answers. > > ------------------------------------------------------------------------------ > LogMeIn Central: Instant, anywhere, Remote PC access and management. > Stay in control, update software, and manage PCs from one command center > Diagnose problems and improve visibility into emerging IT issues > Automate, monitor and manage. Do more in less time with Central > http://p.sf.net/sfu/logmein12331_d2d > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > -- View this message in context: http://old.nabble.com/reset-robot-position-in-stage-gui-and-position-proxy-reading-mismatch-tp34650281p34660675.html Sent from the playerstage-users mailing list archive at Nabble.com. |