Skip to content

Commit

Permalink
final structural changes for major release
Browse files Browse the repository at this point in the history
  • Loading branch information
mxgrey committed Apr 8, 2016
1 parent 870337c commit b44d428
Show file tree
Hide file tree
Showing 25 changed files with 253 additions and 205 deletions.
5 changes: 3 additions & 2 deletions apps/atlasSimbicon/Controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ Controller::Controller(SkeletonPtr _atlasRobot,
// harnessLeftFoot();
// harnessRightFoot();

mInitialState = mAtlasRobot->getState();
mInitialState = mAtlasRobot->getConfiguration(
Skeleton::CONFIG_POSITIONS | Skeleton::CONFIG_VELOCITIES);
}

//==============================================================================
Expand Down Expand Up @@ -303,7 +304,7 @@ void Controller::unharnessRightFoot()
//==============================================================================
void Controller::resetRobot()
{
mAtlasRobot->setState(mInitialState);
mAtlasRobot->setConfiguration(mInitialState);

dtmsg << "Robot is reset." << std::endl;
}
Expand Down
2 changes: 1 addition & 1 deletion apps/atlasSimbicon/Controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ class Controller
dart::constraint::WeldJointConstraintPtr mWeldJointConstraintRightFoot;

/// \brief Initial state of the robot
Eigen::VectorXd mInitialState;
dart::dynamics::Skeleton::Configuration mInitialState;
};

#endif // APPS_ATLASROBOT_CONTROLLER_H_
10 changes: 5 additions & 5 deletions dart/common/Composite.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#ifndef DART_COMMON_COMPOSITE_H_
#define DART_COMMON_COMPOSITE_H_

#include "dart/common/detail/CompositeStateAndProperties.h"
#include "dart/common/detail/CompositeData.h"

namespace dart {
namespace common {
Expand All @@ -62,11 +62,11 @@ class Composite
using AspectMap = std::map< std::type_index, std::unique_ptr<Aspect> >;
using RequiredAspectSet = std::unordered_set<std::type_index>;

template <typename... Data>
using MakeState = detail::MakeCompositeState<Data...>;
template <typename... Aspects>
using MakeState = detail::MakeCompositeState<Aspects...>;

template <typename... Data>
using MakeProperties = detail::MakeCompositeProperties<Data...>;
template <typename... Aspects>
using MakeProperties = detail::MakeCompositeProperties<Aspects...>;

/// Virtual destructor
virtual ~Composite() = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,18 @@ using CompositeState = CompositeData<CompositeStateMap, GetState>;
using CompositeProperties = CompositeData<CompositePropertiesMap, GetProperties>;

//==============================================================================
template <class CompositeType, template<class> class GetData, typename... Args>
template <class CompositeType, template<class> class GetData, typename... Aspects>
class ComposeData
{
public:

ComposeData() = default;

ComposeData(const CompositeType&)
{
// Do nothing
}

virtual ~ComposeData() = default;

void setFrom(const CompositeType&)
Expand Down Expand Up @@ -178,6 +186,7 @@ struct ComposeData<CompositeType, GetData, AspectT, Remainder...> :
enum Delegate_t { Delegate };

using Base = typename GetData<AspectT>::Type;
using Data = typename Base::Data;
using AspectType = typename GetAspect<AspectT>::Type;

template <typename Arg>
Expand All @@ -188,15 +197,51 @@ struct ComposeData<CompositeType, GetData, AspectT, Remainder...> :
typename Base::Data, Arg>::type;
};

template <typename Arg>
struct ConvertIfComposite
{
using Type = typename static_if_else<
std::is_base_of<CompositeType, Arg>::value,
CompositeType, Arg>::type;
};

ComposeData() = default;

virtual ~ComposeData() = default;

template <typename... Args>
ComposeData(Args&&... args)
: ComposeData<CompositeType, GetData, Remainder...>(std::forward<Args>(args)...)
template <typename Arg1, typename... Args>
ComposeData(const Arg1& arg1, const Args&... args)
: ComposeData(
Delegate,
static_cast<const typename ConvertIfData<Arg1>::Type&>(arg1),
args...)
{
// Do nothing
// This constructor delegates
}

/// Grab relevant data out of a composite object
ComposeData(const CompositeType& composite)
: ComposeData<CompositeType, GetData, Remainder...>(composite)
{
_setBaseFrom(composite);
}

template <typename... Aspects>
ComposeData(const ComposeData<CompositeType, GetData, Aspects...>& composite)
: ComposeData(static_cast<const CompositeType&>(composite))
{
// This is a delegating constructor. If we get passed another ComposeData
// object, then we convert it into a composite to ensure that we grab all
// of its aspects.
}

// Dev Note: We must not use the argument 'composite' as a temporary, or else
// it will get deleted when it reaches the last base constructor, preventing
// any higher level constructors from calling _setBaseFrom(~) on it.
ComposeData(CompositeType&& composite)
: ComposeData(static_cast<const CompositeType&>(composite))
{
// This is a delegating constructor
}

operator CompositeType() const
Expand All @@ -209,10 +254,7 @@ struct ComposeData<CompositeType, GetData, AspectT, Remainder...> :

void setFrom(const CompositeType& composite)
{
const Base* data = composite.template get<AspectType>();
if(data)
static_cast<Base&>(*this) = *data;

_setBaseFrom(composite);
ComposeData<CompositeType, GetData, Remainder...>::setFrom(composite);
}

Expand All @@ -222,8 +264,40 @@ struct ComposeData<CompositeType, GetData, AspectT, Remainder...> :
return *this;
}

/// Grab any relevant data and copy it into this composite. Note that there
/// will be NO compilation error, even if there is no relevant data in any of
/// the arguments that get passed in. It will simply ignore all the arguments
/// silently.
template <typename... Args>
void copy(const Args&... args)
{
_findData(args...);
}

protected:

template <typename... Args>
ComposeData(Delegate_t, const Args&... args)
: ComposeData<CompositeType, GetData, Remainder...>(args...)
{
// Pass all the arguments along to the next base class
}

template <typename... Args>
ComposeData(Delegate_t, const Data& arg1, const Args&... args)
: Base(arg1),
ComposeData<CompositeType, GetData, Remainder...>(args...)
{
// Peel off the first argument and then pass along the rest
}

void _setBaseFrom(const CompositeType& composite)
{
const Base* data = composite.template get<AspectType>();
if(data)
static_cast<Base&>(*this) = *data;
}

void _addData(CompositeType& composite) const
{
composite.template create<AspectType>(static_cast<const Base&>(*this));
Expand All @@ -236,27 +310,32 @@ struct ComposeData<CompositeType, GetData, AspectT, Remainder...> :
}

template <typename Arg1, typename... Args>
void _findData(Arg1 arg1, Args&&... args)
void _findData(const Arg1& arg1, const Args&... args)
{
_useIfData(static_cast<const typename ConvertIfData<Arg1>::Type&>(arg1));
_findData(std::forward<Args>(args)...);
_attemptToUse(static_cast<const typename ConvertIfData<Arg1>::Type&>(arg1));
_findData(args...);
}

template <typename Arg>
void _useIfData(Arg)
void _attemptToUse(const Arg&)
{
// Do nothing
}

void _useIfData(const typename Base::Data& data)
void _attemptToUse(const typename Base::Data& data)
{
static_cast<Base&>(*this) = data;
}

void _attemptToUse(const CompositeType& composite)
{
_setBaseFrom(composite);
}
};

//==============================================================================
template <typename... Data>
using MakeCompositeState = ComposeData<CompositeState, GetState, Data...>;
template <typename... Aspects>
using MakeCompositeState = ComposeData<CompositeState, GetState, Aspects...>;

template <typename... Data>
using MakeCompositeProperties =
Expand Down
8 changes: 4 additions & 4 deletions dart/dynamics/BodyNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ void BodyNode::setAspectProperties(const AspectProperties& properties)
//==============================================================================
BodyNode::Properties BodyNode::getBodyNodeProperties() const
{
return mAspectProperties;
return getCompositeProperties();
}

//==============================================================================
Expand Down Expand Up @@ -895,7 +895,7 @@ const Joint* BodyNode::getChildJoint(size_t _index) const
//==============================================================================
ShapeNode* BodyNode::createShapeNode(const ShapePtr& shape)
{
ShapeNode::Properties properties;
ShapeNode::BasicProperties properties;
properties.mShape = shape;

return createShapeNode(properties, true);
Expand All @@ -905,7 +905,7 @@ ShapeNode* BodyNode::createShapeNode(const ShapePtr& shape)
ShapeNode* BodyNode::createShapeNode(const ShapePtr& shape,
const std::string& name)
{
ShapeNode::Properties properties;
ShapeNode::BasicProperties properties;
properties.mShape = shape;
properties.mName = name;

Expand Down Expand Up @@ -973,7 +973,7 @@ void BodyNode::removeAllShapeNodes()
//==============================================================================
EndEffector* BodyNode::createEndEffector(const std::string& _name)
{
EndEffector::Properties properties;
EndEffector::BasicProperties properties;
properties.mName = _name;

return createNode<EndEffector>(properties);
Expand Down
2 changes: 1 addition & 1 deletion dart/dynamics/BodyNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class BodyNode :
using NodePropertiesMap = detail::NodePropertiesMap;

using AspectProperties = detail::BodyNodeAspectProperties;
using Properties = detail::BodyNodeProperties;
using Properties = common::Composite::MakeProperties<BodyNode>;

BodyNode(const BodyNode&) = delete;

Expand Down
29 changes: 4 additions & 25 deletions dart/dynamics/EndEffector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,26 +76,9 @@ bool Support::isActive() const
}

//==============================================================================
EndEffector::Properties::Properties(
const FixedFrame::AspectProperties& fixedFrameProperties,
const UniqueProperties& effectorProperties,
const NameAspect::Properties& name,
const common::Composite::Properties& compositeProperties)
: FixedFrame::AspectProperties(fixedFrameProperties),
UniqueProperties(effectorProperties),
NameAspect::Properties(name),
mCompositeProperties(compositeProperties)
void EndEffector::setProperties(const BasicProperties& properties)
{
// Do nothing
}

//==============================================================================
void EndEffector::setProperties(const Properties& properties)
{
FixedFrame::setAspectProperties(properties);
setAspectProperties(properties);
get<NameAspect>()->setProperties(properties);
setCompositeProperties(properties.mCompositeProperties);
setCompositeProperties(properties);
}

//==============================================================================
Expand All @@ -114,11 +97,7 @@ void EndEffector::setAspectProperties(const AspectProperties& properties)
//==============================================================================
EndEffector::Properties EndEffector::getEndEffectorProperties() const
{
return Properties(
FixedFrame::getAspectProperties(),
getAspectProperties(),
get<NameAspect>()->getProperties(),
getCompositeProperties());
return getCompositeProperties();
}

//==============================================================================
Expand Down Expand Up @@ -177,7 +156,7 @@ void EndEffector::notifyTransformUpdate()
}

//==============================================================================
EndEffector::EndEffector(BodyNode* parent, const Properties& properties)
EndEffector::EndEffector(BodyNode* parent, const BasicProperties& properties)
: Entity(ConstructFrame),
Frame(parent),
FixedFrame(parent, properties.mDefaultTransform),
Expand Down
26 changes: 8 additions & 18 deletions dart/dynamics/EndEffector.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,22 +129,12 @@ class EndEffector final :

using UniqueProperties = detail::EndEffectorProperties;

struct Properties :
FixedFrame::AspectProperties,
UniqueProperties,
NameAspect::Properties
{
Properties(
const FixedFrame::AspectProperties& fixedFrameProperties
= FixedFrame::AspectProperties(),
const UniqueProperties& effectorProperties = UniqueProperties(),
const NameAspect::Properties& name = "EndEffector",
const common::Composite::Properties& compositeProperties =
common::Composite::Properties());

/// The properties of the EndEffector's Aspects
common::Composite::Properties mCompositeProperties;
};
using BasicProperties = common::Composite::MakeProperties<
NameAspect,
FixedFrame,
EndEffector>;

using Properties = common::Composite::Properties;

/// Destructor
virtual ~EndEffector() = default;
Expand All @@ -155,7 +145,7 @@ class EndEffector final :

/// Set the Properties of this EndEffector. If _useNow is true, the current
/// Transform will be set to the new default transform.
void setProperties(const Properties& _properties);
void setProperties(const BasicProperties& _properties);

/// Set the Properties of this EndEffector. If _useNow is true, the current
/// Transform will be set to the new default transform.
Expand Down Expand Up @@ -202,7 +192,7 @@ class EndEffector final :
protected:

/// Constructor used by the Skeleton class
explicit EndEffector(BodyNode* parent, const Properties& properties);
explicit EndEffector(BodyNode* parent, const BasicProperties& properties);

/// Create a clone of this BodyNode. This may only be called by the Skeleton
/// class.
Expand Down
9 changes: 9 additions & 0 deletions dart/dynamics/ShapeFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ ShapeFrame::ShapeFrame(Frame* parent, const Properties& properties)
onShapeUpdated(mShapeUpdatedSignal),
onRelativeTransformUpdated(mRelativeTransformUpdatedSignal)
{
createAspect<Aspect>();
mAmShapeFrame = true;
setProperties(properties);
}
Expand All @@ -278,10 +279,18 @@ ShapeFrame::ShapeFrame(Frame* parent,
onShapeUpdated(mShapeUpdatedSignal),
onRelativeTransformUpdated(mRelativeTransformUpdatedSignal)
{
createAspect<Aspect>();
mAmShapeFrame = true;
setShape(shape);
}

//==============================================================================
ShapeFrame::ShapeFrame(const std::tuple<Frame*, Properties>& args)
: ShapeFrame(std::get<0>(args), std::get<1>(args))
{
// Delegating constructor
}

} // namespace dynamics
} // namespace dart

Loading

0 comments on commit b44d428

Please sign in to comment.