1. MPI_Allgatherv, version 0.5.1

2. inorder to modify "modelupdatefunc" module, add "models" list in GazeboID.cc & .hh, when load model in world.cc, modelprt will be pushback to this list
This commit is contained in:
zhangshuai 2019-07-10 21:35:15 +08:00
parent 6bf9cf2bb2
commit 8c093b02be
3 changed files with 108 additions and 14 deletions

View File

@ -40,7 +40,7 @@
// #include "gazebo/common/Plugin.hh"
// #include "gazebo/common/Events.hh"
// #include "gazebo/common/Exception.hh"
// #include "gazebo/common/Console.hh"
#include "gazebo/common/Console.hh"
// #include "gazebo/common/CommonTypes.hh"
// #include "gazebo/physics/Gripper.hh"
@ -85,7 +85,7 @@ void GazeboID::Load(sdf::ElementPtr _sdf)
while (modelNameElem)
{
modelNames.push_back(modelNameElem->Get<std::string>());
modelIDs.push_back(0); //initial state is 0
modelIDs.push_back(0); //initial state is 0
modelNameElem = modelNameElem->GetNextElement("model_name");
}
}
@ -126,4 +126,17 @@ void GazeboID::Fini()
{
this->modelNames.clear();
this->sdf.reset();
}
//////////////////////////////////////////////////
ModelPtr GazeboID::GetModel(unsigned int _index) const
{
if (_index >= this->models.size())
{
gzerr << "Given model index[" << _index << "] is out of range[0.."
<< this->models.size() << "]\n";
return ModelPtr();
}
return this->models[_index];
}

View File

@ -40,8 +40,8 @@ namespace gazebo
{
namespace physics
{
/// \class Distribution Distribution.hh physics/physics.hh
/// \brief Distribution is used to store information about the distributed simulation.
/// \class GazeboID GazeboID.hh physics/physics.hh
/// \brief GazeboID is used to store information about the distributed simulation.
class GZ_PHYSICS_VISIBLE GazeboID
{
/// \brief Constructor.
@ -53,7 +53,7 @@ public:
public:
virtual ~GazeboID();
/// \brief Load the Distribution.
/// \brief Load the GazeboID.
/// \param[in] _sdf SDF parameters to load from.
public:
void Load(sdf::ElementPtr _sdf);
@ -63,8 +63,8 @@ public:
public:
int GetGazeboID();
/// \brief Get the number of models this Distribution has.
/// \return Number of models associated with this Distribution.
/// \brief Get the number of models this GazeboID has.
/// \return Number of models associated with this GazeboID.
public:
unsigned int GetModelCount();
@ -89,6 +89,14 @@ public:
/// \brief Finialize the gazeboID
public:
void Fini();
/// \brief Get a model based on an index.
/// Get a Model using an index, where index must be greater than zero
/// and less than GazeboID::GetModelCount()
/// \param[in] _index The index of the model [0..GetModelCount)
/// \return A pointer to the Model. NULL if _index is invalid.
public:
ModelPtr GetModel(unsigned int _index) const;
/// \brief The Distribution's current SDF description.
private:
@ -105,6 +113,10 @@ private:
/// \brief Models ID in this gazebo
private:
std::vector<unsigned int> modelIDs;
/// \brief A cached list of models. This is here for performance.
public:
Model_V models;
};
} // namespace physics

View File

@ -1817,8 +1817,39 @@ void World::BuildSceneMsg(msgs::Scene &_scene, BasePtr _entity)
void World::ModelUpdateSingleLoop()
{
// Update all the models
for (unsigned int i = 0; i < this->dataPtr->rootElement->GetChildCount(); i++)
this->dataPtr->rootElement->GetChild(i)->Update();
/// original part
//for (unsigned int i = 0; i < this->dataPtr->rootElement->GetChildCount(); i++)
// this->dataPtr->rootElement->GetChild(i)->Update();
/// original part
// test by zhangshuai 2019.07.09 ----Begin
// for (unsigned int i = 0; i < this->dataPtr->rootElement->GetChildCount(); i++)
// {
// this->dataPtr->rootElement->GetChild(i)->Update();
// std::cout << "GetChildCount() : " << this->dataPtr->rootElement->GetChildCount() << std::endl; //zhangshuai test 2019.07.09
// std::cout << "GetChild(" << i << ") : " << this->dataPtr->rootElement->GetChild(i)->GetName() << std::endl;
// std::cout << "rootElement->GetName() : " << this->dataPtr->rootElement->GetName() << std::endl;
// std::cout << "this->GetModelCount() : " << this->GetModelCount() << std::endl;
// }
// test by zhangshuai 2019.07.09 ----End
// test by zhangshuai 2019.07.10 ----Begin
// for (unsigned int i = 0; i < this->GetModelCount(); i++)
// {
// this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModel(i)->Update();
// this->GetModel(i)->Update();
// std::cout << "this->GetModelCount() : " << this->GetModelCount() << std::endl;
// std::cout << "this->GetModel(i)->GetName() : " << this->GetModel(i)->GetName() << std::endl;
// }
// test by zhangshuai 2019.07.10 ----End
for (unsigned int i = 0; i < this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModelCount(); i++)
{
this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModel(i)->Update();
// this->GetModel(i)->Update();
std::cout << "GetModelCount() : " << this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModelCount() << std::endl;
std::cout << "GetModel(i)->GetName() : " << this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModel(i)->GetName() << std::endl;
}
}
//////////////////////////////////////////////////
@ -1842,17 +1873,52 @@ void World::LoadPlugins()
{
ModelPtr model = boost::static_pointer_cast<Model>(
this->dataPtr->rootElement->GetChild(i));
// Modified by zhangshuai 2019.04.02 ----Begin
if (this->flag == 1)
{
// Judge if the model to load is simulated in this gazebo
for (unsigned int j = 0; j < this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModelCount(); j++)
// for (unsigned int i = 0; i < this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModelCount(); i++)
// {
// if (model->GetName() == this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModelName(i))
// {
// // Original part
// model->LoadPlugins();
// // Original part
// this->distribution->GetGazeboIDPtr(gazeboLocalID)->SetModelID(i, model->GetId());
// }
// }
int tmp_gazebo_count = this->distribution->GetGazeboCount();
for (int tmp_gazebo_id = 0; tmp_gazebo_id < tmp_gazebo_count; tmp_gazebo_id++)
{
if (model->GetName() == this->distribution->GetGazeboIDPtr(gazeboLocalID)->GetModelName(j))
if (this->gazeboLocalID == tmp_gazebo_id)
{
// Original part
model->LoadPlugins();
// Original part
unsigned int tmp_model_count = this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->GetModelCount();
for (unsigned int j = 0; j < tmp_model_count; j++)
{
if (model->GetName() == this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->GetModelName(j))
{
// Original part
model->LoadPlugins();
// Original part
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->SetModelID(j, model->GetId());
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->models.push_back(model);
}
}
}
else
{
unsigned int tmp_model_count = this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->GetModelCount();
for (unsigned int j = 0; j < tmp_model_count; j++)
{
if (model->GetName() == this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->GetModelName(j))
{
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->SetModelID(j, model->GetId());
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->models.push_back(model);
}
}
}
}
}
@ -1860,6 +1926,7 @@ void World::LoadPlugins()
{
model->LoadPlugins();
}
// Modified by zhangshuai 2019.04.02 ----End
// model->LoadPlugins();
}
@ -2404,6 +2471,7 @@ void World::ProcessFactoryMsgs()
model->LoadPlugins();
// Original part
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->SetModelID(i, model->GetId());
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->models.push_back(model); // modified by zhangshuai 2019.07.10
}
}
}
@ -2415,6 +2483,7 @@ void World::ProcessFactoryMsgs()
if (model->GetName() == this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->GetModelName(i))
{
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->SetModelID(i, model->GetId());
this->distribution->GetGazeboIDPtr(tmp_gazebo_id)->models.push_back(model); // modified by zhangshuai 2019.07.10
}
}
}