From: Geoffrey B. <geo...@ai...> - 2011-03-15 13:56:08
|
On 15/03/11 19:17, Sebastian Rockel wrote: > Hi Matthieu, > > Am 15.03.2011 um 08:56 schrieb Matthieu Rakotojaona: > >> Hello, >> >>> >>> Then, in your .cfg file, you can use multiple stage driver blocks to map the >>> interfaces back to Player. You can do this by creating a driver block for >>> each model name you specified in the world file. For example: >>> >>> simple.cfg >>> ******************************** >>> driver >>> ( >>> name "stage" >>> provides [ "position2d:0" "ranger:0" ] >>> model "r0" >>> ) >>> >>> driver >>> ( >>> name "stage" >>> provides [ "position2d:1" "ranger:1" ] >>> model "r1" >>> ) >>> ****************************** >>> >>> All of the robots will be running in the same Player instance, you can >>> access them individually using the device indices. If you run playerv >>> you'll see a position2d:0 and ranger:0 that correspond with the first robot, >>> and postition2d:1 and ranger:1 that correspond with the second robot. You >>> can access any and all of these interfaces over a network using the Player >>> client libraries, and drivers in other Player servers can also subscribe to >>> them over the network. >> >> I knew about that, it's the basic examples. (Is changing the port the same, >> roughly, as changing the indices?) >> My problem is, I want to run multiple physical robots on multiple computers >> (just like a real life simulation) but have them access to one Stage >> simulation. In your example, all of my robots would be on one Player >> instance, which is not what I want. >> >> For instance, there would be one physical robot interacting with solid >> objects, and I would like to make it interact with another virtual robot >> accessing the environment through a Stage simulation. This simulation >> would have to be the same for both robots, so that I see both of them >> wandering around in the simulation. >> >> Can you see where my problem is ? > > I see what you mean and I am working currently on a similar scenario. > What I have come to is basically having a Stage simulation on some computer with multiple robots. > > Then I have another computer representing a physical robot (which would be the same as another computer representing a simulated robot). > > To update the robots on the network in the Stage simulation I use the Simulation IF of Player. Thus the real (or simulated) pose estimates are updated in one Stage simulation on any computer. (That means setting the pose, e.g. of "robot0", in the simulation via the Simulation interface) > > Of course it is possible to actually run another simulated robot in the Stage simulation interacting then with the "proxies" of the other robots. > > There are prerequisites to this scenario though: > - You need to share the same map to all robots/simulations ("common ground") > - In order to update any Stage "proxy robot" at least the real robots have to localize themselves in the map (needs a localizer, e.g. Players amcl). What you're trying to do is a form of augmented reality. Have a look at the work done by Ian Chen. http://robotics.ece.auckland.ac.nz/index.php?option=com_content&view=article&id=48&Itemid=6 Geoff |