PositionProxy::Theta() occasionally returns inaccurate data

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

PositionProxy::Theta() occasionally returns inaccurate data

Adam Ray
I am running multiple robots in Stage 1.6.2 and Player 1.6.4

The PositionProxy occasionally returns false data for theta due to what
seems to be a timing problem.  The problem can be reduced by changing
the interval_sim and interval_real times in the .world file and slowing
the simulation down.

I move my robots (with my control program, not manually), stop the
robots, perform a robot.Read(), and print out information using both the
PostionProxy::theta data and the PositionProxy::Theta() method.  The
theta data and Theta() method give the same information but they are
both false (based on looking at the way the robots are actually pointed
in the simulator).  Xpos and Ypos are accurate, but not theta (also, it
is never off by the same amount).

I assume it is a timing problem, because when I speed up the simulation
by decreasing interval_real, the problem happens constantly even with
only one robot.  Alternatively, as I increase the number of robots in
operation, if I double the interval_real time with the addition of each
robot, the problem stops happening.  This is an undesirable fix because
when I run an experiment with 10 robots, a 10 minute simulation actually
may take an hour and a half.

I am trying to find any other ways to get the theta pose from another
source.  I see that the truth() device does not work in Stage 1.6, and I
also see in the stg_driver.cc file that only SimulationProxy::SetPose2D
is available in Stage and not GetPose2D.  Is there any other way to get
the theta pose from another source (from the actual simulation) since
the Player Server seems to be giving false data?

Another potential cause is that maybe I'm sending a SetSpeed.turnrate
command that is too large.  Is there a limit on the turnrate that Player
can keep track of?  A limit that might decrease as more robots are added
and the processing time is bogged down?  I am careful to never send a
turnrate above 400 degrees/sec (p.s. I use the DTOR() command to change
my degrees/sec command to radians/sec).

Any answers/ideas are greatly appreciated,

adam


-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Playerstage-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/playerstage-users
Reply | Threaded
Open this post in threaded view
|

Re: PositionProxy::Theta() occasionally returns inaccurate data

Brian Gerkey
Can you provide a small test case that demonstrates this problem?  
E.g., a .world, .cfg, and *simple* client program?

Offhand, I would suggest turning the robots more slowly.  It could be  
that the simulator is not dealing well with 400 deg/sec rotations.

     brian.


On Sep 30, 2005, at 4:59 PM, Adam Ray wrote:

> I am running multiple robots in Stage 1.6.2 and Player 1.6.4
>
> The PositionProxy occasionally returns false data for theta due to  
> what
> seems to be a timing problem.  The problem can be reduced by changing
> the interval_sim and interval_real times in the .world file and  
> slowing
> the simulation down.
>
> I move my robots (with my control program, not manually), stop the
> robots, perform a robot.Read(), and print out information using  
> both the
> PostionProxy::theta data and the PositionProxy::Theta() method.  The
> theta data and Theta() method give the same information but they are
> both false (based on looking at the way the robots are actually  
> pointed
> in the simulator).  Xpos and Ypos are accurate, but not theta  
> (also, it
> is never off by the same amount).
>
> I assume it is a timing problem, because when I speed up the  
> simulation
> by decreasing interval_real, the problem happens constantly even with
> only one robot.  Alternatively, as I increase the number of robots in
> operation, if I double the interval_real time with the addition of  
> each
> robot, the problem stops happening.  This is an undesirable fix  
> because
> when I run an experiment with 10 robots, a 10 minute simulation  
> actually
> may take an hour and a half.
>
> I am trying to find any other ways to get the theta pose from another
> source.  I see that the truth() device does not work in Stage 1.6,  
> and I
> also see in the stg_driver.cc file that only  
> SimulationProxy::SetPose2D
> is available in Stage and not GetPose2D.  Is there any other way to  
> get
> the theta pose from another source (from the actual simulation) since
> the Player Server seems to be giving false data?
>
> Another potential cause is that maybe I'm sending a SetSpeed.turnrate
> command that is too large.  Is there a limit on the turnrate that  
> Player
> can keep track of?  A limit that might decrease as more robots are  
> added
> and the processing time is bogged down?  I am careful to never send a
> turnrate above 400 degrees/sec (p.s. I use the DTOR() command to  
> change
> my degrees/sec command to radians/sec).
>
> Any answers/ideas are greatly appreciated,
>
> adam
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by:
> Power Architecture Resource Center: Free content, downloads,  
> discussions,
> and more. http://solutions.newsforge.com/ibmarch.tmpl
> _______________________________________________
> Playerstage-users mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/playerstage-users
>



-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Playerstage-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/playerstage-users