Skip to content

Commit

Permalink
Add "ChangedWorldPose" to ForwardStep::Output's expected data (#238)
Browse files Browse the repository at this point in the history
Signed-off-by: Ashton Larkin <ashton@openrobotics.org>
  • Loading branch information
adlarkin committed Mar 24, 2021
1 parent 246909b commit 78b8ec0
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 17 deletions.
10 changes: 5 additions & 5 deletions dartsim/src/SimulationFeatures.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,15 @@ void SimulationFeatures::WorldForwardStep(

// TODO(MXG): Parse input
world->step();
this->WriteRequiredData(_h);
this->Write(_h.Get<ChangedWorldPoses>());
// TODO(MXG): Fill in state
}

void SimulationFeatures::Write(WorldPoses &_poses) const
void SimulationFeatures::Write(ChangedWorldPoses &_changedPoses) const
{
// remove link poses from the previous iteration
_poses.entries.clear();
_poses.entries.reserve(this->links.size());
_changedPoses.entries.clear();
_changedPoses.entries.reserve(this->links.size());

std::unordered_map<std::size_t, math::Pose3d> newPoses;

Expand All @@ -88,7 +88,7 @@ void SimulationFeatures::Write(WorldPoses &_poses) const
!iter->second.Pos().Equal(wp.pose.Pos(), 1e-6) ||
!iter->second.Rot().Equal(wp.pose.Rot(), 1e-6))
{
_poses.entries.push_back(wp);
_changedPoses.entries.push_back(wp);
newPoses[id] = wp.pose;
}
else
Expand Down
6 changes: 4 additions & 2 deletions dartsim/src/SimulationFeatures.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <ignition/physics/CanWriteData.hh>
#include <ignition/physics/ForwardStep.hh>
#include <ignition/physics/GetContacts.hh>
#include <ignition/physics/SpecifyData.hh>

#include "Base.hh"

Expand All @@ -39,7 +40,8 @@ struct SimulationFeatureList : FeatureList<
> { };

class SimulationFeatures :
public CanWriteRequiredData<SimulationFeatures, ForwardStep::Output>,
public CanWriteExpectedData<SimulationFeatures,
ExpectData<ChangedWorldPoses>>,
public virtual Base,
public virtual Implements3d<SimulationFeatureList>
{
Expand All @@ -49,7 +51,7 @@ class SimulationFeatures :
ForwardStep::State &_x,
const ForwardStep::Input &_u) override;

public: void Write(WorldPoses &_poses) const;
public: void Write(ChangedWorldPoses &_changedPoses) const;

public: std::vector<ContactInternal> GetContactsFromLastStep(
const Identity &_worldID) const override;
Expand Down
2 changes: 1 addition & 1 deletion dartsim/src/SimulationFeatures_TEST.cc
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ bool StepWorld(const TestWorldPtr &_world, bool _firstTime,
if (_firstTime && (i == 0))
{
EXPECT_FALSE(
output.Get<ignition::physics::WorldPoses>().entries.empty());
output.Get<ignition::physics::ChangedWorldPoses>().entries.empty());
checkedOutput = true;
}
}
Expand Down
11 changes: 10 additions & 1 deletion include/ignition/physics/ForwardStep.hh
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@ namespace ignition
std::string annotation;
};

/// \brief ChangedWorldPoses has the same definition as WorldPoses.
/// This type provides a way to keep track of which poses have changed in a
/// simulation step.
struct ChangedWorldPoses
{
std::vector<WorldPose> entries;
std::string annotation;
};

struct Point
{
ignition::math::Vector3d point;
Expand Down Expand Up @@ -150,7 +159,7 @@ namespace ignition

public: using Output = SpecifyData<
RequireData<WorldPoses>,
ExpectData<Contacts, JointPositions> >;
ExpectData<ChangedWorldPoses, Contacts, JointPositions> >;

public: using State = CompositeData;

Expand Down
10 changes: 5 additions & 5 deletions tpe/plugin/src/SimulationFeatures.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@ void SimulationFeatures::WorldForwardStep(
}
}
world->Step();
this->WriteRequiredData(_h);
this->Write(_h.Get<ChangedWorldPoses>());
}

void SimulationFeatures::Write(WorldPoses &_poses) const
void SimulationFeatures::Write(ChangedWorldPoses &_changedPoses) const
{
// remove link poses from the previous iteration
_poses.entries.clear();
_poses.entries.reserve(this->links.size());
_changedPoses.entries.clear();
_changedPoses.entries.reserve(this->links.size());

std::unordered_map<std::size_t, math::Pose3d> newPoses;

Expand All @@ -90,7 +90,7 @@ void SimulationFeatures::Write(WorldPoses &_poses) const
WorldPose wp;
wp.pose = nextPose;
wp.body = id;
_poses.entries.push_back(wp);
_changedPoses.entries.push_back(wp);
newPoses[id] = nextPose;
}
else
Expand Down
6 changes: 4 additions & 2 deletions tpe/plugin/src/SimulationFeatures.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <ignition/physics/CanWriteData.hh>
#include <ignition/physics/ForwardStep.hh>
#include <ignition/physics/GetContacts.hh>
#include <ignition/physics/SpecifyData.hh>

#include "Base.hh"

Expand All @@ -39,7 +40,8 @@ struct SimulationFeatureList : FeatureList<
> { };

class SimulationFeatures :
public CanWriteRequiredData<SimulationFeatures, ForwardStep::Output>,
public CanWriteExpectedData<SimulationFeatures,
ExpectData<ChangedWorldPoses>>,
public virtual Base,
public virtual Implements3d<SimulationFeatureList>
{
Expand All @@ -49,7 +51,7 @@ class SimulationFeatures :
ForwardStep::State &_x,
const ForwardStep::Input &_u) override;

public: void Write(WorldPoses &_poses) const;
public: void Write(ChangedWorldPoses &_changedPoses) const;

public: std::vector<ContactInternal> GetContactsFromLastStep(
const Identity &_worldID) const override;
Expand Down
2 changes: 1 addition & 1 deletion tpe/plugin/src/SimulationFeatures_TEST.cc
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ bool StepWorld(const TestWorldPtr &_world, bool _firstTime,
if (_firstTime && (i == 0))
{
EXPECT_FALSE(
output.Get<ignition::physics::WorldPoses>().entries.empty());
output.Get<ignition::physics::ChangedWorldPoses>().entries.empty());
checkedOutput = true;
}
}
Expand Down

0 comments on commit 78b8ec0

Please sign in to comment.