Patch applied to trunk. -nate
On Fri, Sep 5, 2008 at 6:56 AM, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > Here is a very simple patch to enable SetOdometry support in the differential > position 2d controller. I needed to change the UpdateChild to use one large > lock instead of two smaller locks because it may be possible for a client to > set the odometry in between the locks and the change would then be lost. It > does not handle current velocity (prevUpdateTime) since I do not know what is > the expected behavior. This may need to be changed. The issue is that a > client could set the odometry just before gazebo is about to update the > model/controller. In this case, the odometry may receive too great of a > change (especially if the robot/model is maintaining a large velocity). > Since I do not have the ability to test this on a real pioneer, I am unsure > what the correct behavior should be. An equivalent fix may be needed in > other controllers but I have not looked. > > Index: server/controllers/position2d/differential/Differential_Position2d.cc > =================================================================== > --- server/controllers/position2d/differential/Differential_Position2d.cc > (revision 7002) > +++ server/controllers/position2d/differential/Differential_Position2d.cc > (working copy) > @@ -158,6 +158,7 @@ > double dr, da; > double stepTime; > + this->myIface->Lock(1); > this->GetPositionCmd(); > wd = **(this->wheelDiamP); > @@ -206,6 +207,7 @@ > }*/ > this->PutPositionData(); > + this->myIface->Unlock(); > } > //////////////////////////////////////////////////////////////////////////////// > @@ -221,9 +223,13 @@ > { > double vr, va; > - if (this->myIface->Lock(1)) > - { > + //if (this->myIface->Lock(1)) > + //{ > + this->odomPose[0] = this->myIface->data->pose.pos.x; > + this->odomPose[1] = this->myIface->data->pose.pos.y; > + this->odomPose[2] = this->myIface->data->pose.yaw; > + > vr = this->myIface->data->cmdVelocity.pos.x; > va = this->myIface->data->cmdVelocity.yaw; > @@ -232,16 +238,16 @@ > this->wheelSpeed[LEFT] = vr + va * **(this->wheelSepP) / 2; > this->wheelSpeed[RIGHT] = vr - va * **(this->wheelSepP) / 2; > - this->myIface->Unlock(); > - } > + //this->myIface->Unlock(); > + //} > } > ////////////////////////////////////////////////////////////////////////////// > // Update the data in the interface > void Differential_Position2d::PutPositionData() > { > - if (this->myIface->Lock(1)) > - { > + //if (this->myIface->Lock(1)) > + //{ > // TODO: Data timestamp > this->myIface->data->head.time = Simulator::Instance()->GetSimTime(); > @@ -255,6 +261,6 @@ > // TODO > this->myIface->data->stall = 0; > - this->myIface->Unlock(); > - } > + //this->myIface->Unlock(); > + //} > } > > > Sandy > -- > [EMAIL PROTECTED] > www.sanfordfreedman.com > > "I have yet to see any problem, however complicated, which, when you looked > at it in the right way, did not become still more complicated." > - Poul Anderson > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Playerstage-gazebo mailing list > Playerstage-gazebo@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo > ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Playerstage-gazebo mailing list Playerstage-gazebo@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-gazebo