Skip to content

Commit

Permalink
HACK BODY NODE FALLS OFF
Browse files Browse the repository at this point in the history
  • Loading branch information
personalrobot committed Jun 7, 2018
1 parent 714c26f commit 40b1207
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 3 deletions.
16 changes: 15 additions & 1 deletion include/aikido/planner/parabolic/ParabolicSmoother.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
#include "aikido/trajectory/Interpolated.hpp"
#include "aikido/trajectory/Spline.hpp"

// HACK!
#include <dart/dart.hpp>

namespace aikido {
namespace planner {
namespace parabolic {
Expand Down Expand Up @@ -181,13 +184,24 @@ class ParabolicSmoother : public aikido::planner::TrajectoryPostProcessor
const aikido::common::RNG& _rng,
const aikido::constraint::TestablePtr& _collisionTestable) override;

// HACK HACK HACK.
std::unique_ptr<aikido::trajectory::Spline> postprocess(
const aikido::trajectory::Spline& _inputTraj,
const aikido::common::RNG& _rng,
const aikido::constraint::TestablePtr& _collisionTestable,
const dart::dynamics::BodyNodePtr& armEnd,
const dart::dynamics::BodyNodePtr& hand);


private:
/// Common logic to do shortcutting and/or blending on the input trajectory
/// as dictated by mEnableShortcut and mEnableBlend.
std::unique_ptr<aikido::trajectory::Spline> handleShortcutOrBlend(
const aikido::trajectory::Spline& _inputTraj,
const aikido::common::RNG& _rng,
const aikido::constraint::TestablePtr& _collisionTestable);
const aikido::constraint::TestablePtr& _collisionTestable,
const dart::dynamics::BodyNodePtr& armEnd = nullptr,
const dart::dynamics::BodyNodePtr& hand = nullptr);

/// Set to the value of \c _feasibilityCheckResolution.
double mFeasibilityCheckResolution;
Expand Down
34 changes: 32 additions & 2 deletions src/planner/parabolic/ParabolicSmoother.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,36 @@ std::unique_ptr<aikido::trajectory::Spline> ParabolicSmoother::postprocess(
return timedTrajectory;
}


//==============================================================================
std::unique_ptr<aikido::trajectory::Spline> ParabolicSmoother::postprocess(
const aikido::trajectory::Spline& _inputTraj,
const aikido::common::RNG& _rng,
const aikido::constraint::TestablePtr& _collisionTestable,
const dart::dynamics::BodyNodePtr& armEnd,
const dart::dynamics::BodyNodePtr& hand
) {
// Get timed trajectory for arm
auto timedTrajectory = computeParabolicTiming(
_inputTraj, mVelocityLimits, mAccelerationLimits);

auto shortcutOrBlendTrajectory
= handleShortcutOrBlend(*timedTrajectory, _rng, _collisionTestable);
if (shortcutOrBlendTrajectory)
return shortcutOrBlendTrajectory;

return timedTrajectory;
}

//==============================================================================
std::unique_ptr<aikido::trajectory::Spline>
ParabolicSmoother::handleShortcutOrBlend(
const aikido::trajectory::Spline& _inputTraj,
const aikido::common::RNG& _rng,
const aikido::constraint::TestablePtr& _collisionTestable)
{
const aikido::constraint::TestablePtr& _collisionTestable,
const dart::dynamics::BodyNodePtr& armEnd,
const dart::dynamics::BodyNodePtr& hand
) {
if (!_collisionTestable)
throw std::invalid_argument(
"_collisionTestable passed to ParabolicSmoother is nullptr.");
Expand Down Expand Up @@ -223,6 +246,13 @@ ParabolicSmoother::handleShortcutOrBlend(
mFeasibilityApproxTolerance);
}


auto endDirection = armEnd->getWorldTransform().linear().col(2).normalized();
auto handDirection = hand->getWorldTransform().linear().col(2).normalized();

if (!endDirection.isApprox(handDirection))
std::cout << "HAND FELL OFF!" << std::endl;

return nullptr;
}

Expand Down

0 comments on commit 40b1207

Please sign in to comment.