Aikido
ConcreteRobot.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_ROBOT_CONCRETEROBOT_HPP_
2 #define AIKIDO_ROBOT_CONCRETEROBOT_HPP_
3 
4 #include <chrono>
5 #include <string>
6 #include <unordered_map>
7 
8 #include <Eigen/Core>
9 #include <dart/dart.hpp>
10 
12 #include "aikido/common/RNG.hpp"
19 #include "aikido/robot/Robot.hpp"
20 #include "aikido/robot/util.hpp"
23 
24 namespace aikido {
25 namespace robot {
26 
28 
29 class ConcreteRobot : public Robot
30 {
31 public:
32  // Expose base class functions
35 
45  const std::string& name,
46  dart::dynamics::MetaSkeletonPtr metaSkeleton,
47  bool simulation,
49  aikido::control::TrajectoryExecutorPtr trajectoryExecutor,
50  dart::collision::CollisionDetectorPtr collisionDetector,
51  std::shared_ptr<dart::collision::BodyNodeCollisionFilter>
52  selfCollisionFilter);
53 
54  virtual ~ConcreteRobot() = default;
55 
56  // Documentation inherited.
57  virtual aikido::trajectory::UniqueSplinePtr smoothPath(
58  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
60  const constraint::TestablePtr& constraint) override;
61 
62  // Documentation inherited.
63  virtual aikido::trajectory::UniqueSplinePtr retimePath(
64  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
65  const aikido::trajectory::Trajectory* path) override;
66 
67  // Documentation inherited.
68  virtual std::unique_ptr<aikido::trajectory::Spline> retimePathWithKunz(
69  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
71  double maxDeviation,
72  double timestep) override;
73 
74  // Documentation inherited.
75  virtual std::future<void> executeTrajectory(
76  const trajectory::TrajectoryPtr& trajectory) const override;
77 
78  // Documentation inherited.
79  virtual boost::optional<Eigen::VectorXd> getNamedConfiguration(
80  const std::string& name) const override;
81 
82  // Documentation inherited.
83  virtual void setNamedConfigurations(
84  std::unordered_map<std::string, const Eigen::VectorXd>
85  namedConfigurations) override;
86 
87  // Documentation inherited.
88  virtual std::string getName() const override;
89 
90  // Documentation inherited.
91  virtual dart::dynamics::ConstMetaSkeletonPtr getMetaSkeleton() const override;
92 
93  // Documentation inherited.
95  getStateSpace() const override;
96 
97  // Documentation inherited.
98  virtual void setRoot(Robot* robot) override;
99 
100  // Documentation inherited.
101  virtual void step(
102  const std::chrono::system_clock::time_point& timepoint) override;
103 
104  // Documentation inherited.
105  virtual aikido::constraint::dart::CollisionFreePtr getSelfCollisionConstraint(
107  const dart::dynamics::MetaSkeletonPtr& metaSkeleton) const override;
108 
109  // Documentation inherited.
110  virtual aikido::constraint::TestablePtr getFullCollisionConstraint(
112  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
113  const constraint::dart::CollisionFreePtr& collisionFree) const override;
114 
115  // Get a smoothing post postprocessor that respects velocity and acceleration
116  // limits, as well as the passed constraint.
118  std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
119  getTrajectoryPostProcessor(
120  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
121  bool enableShortcut,
122  bool enableBlend,
123  double shortcutTimelimit,
124  double blendRadius,
125  int blendIterations,
126  double feasibilityCheckResolution,
127  double feasibilityApproxTolerance) const;
128 
140  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
141  const aikido::statespace::StateSpace::State* goalState,
142  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
143  double timelimit);
144 
157  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
158  const Eigen::VectorXd& goal,
159  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
160  double timelimit);
161 
173  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
174  const std::vector<aikido::statespace::StateSpace::State*>& goalStates,
175  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
176  double timelimit);
177 
189  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
190  const std::vector<Eigen::VectorXd>& goals,
191  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
192  double timelimit);
193 
209  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
210  const dart::dynamics::BodyNodePtr& bodyNode,
212  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
213  double timelimit,
214  std::size_t maxNumTrials,
215  const distance::ConstConfigurationRankerPtr& ranker = nullptr);
216 
231  const dart::dynamics::MetaSkeletonPtr& metaSkeleton,
232  const dart::dynamics::BodyNodePtr& bodyNode,
233  const aikido::constraint::dart::TSRPtr& goalTsr,
234  const aikido::constraint::dart::TSRPtr& constraintTsr,
235  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
236  double timelimit);
237 
243  aikido::trajectory::TrajectoryPtr planToNamedConfiguration(
244  const std::string& name,
245  const aikido::constraint::dart::CollisionFreePtr& collisionFree,
246  double timelimit);
247 
251  void setCRRTPlannerParameters(
252  const util::CRRTPlannerParameters& crrtParameters);
253 
258  Eigen::VectorXd getVelocityLimits(
259  const dart::dynamics::MetaSkeleton& metaSkeleton) const;
260 
265  Eigen::VectorXd getAccelerationLimits(
266  const dart::dynamics::MetaSkeleton& metaSkeleton) const;
267 
268 private:
269  // Named Configurations are read from a YAML file
270  using ConfigurationMap
271  = std::unordered_map<std::string, const Eigen::VectorXd>;
272 
273  std::unique_ptr<aikido::common::RNG> cloneRNG();
274 
278 
280  std::string mName;
281 
283  dart::dynamics::MetaSkeletonPtr mMetaSkeleton;
285 
287  dart::dynamics::SkeletonPtr mParentSkeleton;
288 
290  // bool mSimulation;
291  // TODO(JS): Disabled since not used in this class
292 
293  std::unique_ptr<common::RNG> mRng;
294 
295  std::shared_ptr<control::TrajectoryExecutor> mTrajectoryExecutor;
296 
297  // double mCollisionResolution;
298  // TODO(JS): Disabled since not used in this class
299 
302 
303  ::dart::collision::CollisionDetectorPtr mCollisionDetector;
304  std::shared_ptr<dart::collision::BodyNodeCollisionFilter>
306 
308 };
309 
310 } // namespace robot
311 } // namespace aikido
312 
313 #endif // AIKIDO_ROBOT_CONCRETEROBOT_HPP_
aikido::statespace::dart::ConstMetaSkeletonStateSpacePtr
std::shared_ptr< const MetaSkeletonStateSpace > ConstMetaSkeletonStateSpacePtr
Definition: MetaSkeletonStateSpace.hpp:17
aikido::common::UniqueRNGPtr
std::unique_ptr< RNG > UniqueRNGPtr
Definition: RNG.hpp:17
aikido::robot::Robot::getMetaSkeleton
virtual dart::dynamics::ConstMetaSkeletonPtr getMetaSkeleton() const =0
aikido::robot::ConcreteRobot::ConfigurationMap
std::unordered_map< std::string, const Eigen::VectorXd > ConfigurationMap
Definition: ConcreteRobot.hpp:271
aikido::statespace::dart::MetaSkeletonStateSpacePtr
std::shared_ptr< MetaSkeletonStateSpace > MetaSkeletonStateSpacePtr
Definition: MetaSkeletonStateSpace.hpp:17
aikido::robot::ConcreteRobot
Definition: ConcreteRobot.hpp:29
RNG.hpp
ConfigurationRanker.hpp
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::robot::ConcreteRobot::mCollisionDetector
::dart::collision::CollisionDetectorPtr mCollisionDetector
Definition: ConcreteRobot.hpp:303
aikido::robot::ConcreteRobot::mName
std::string mName
Name of this robot.
Definition: ConcreteRobot.hpp:280
aikido::robot::util::planToConfiguration
trajectory::TrajectoryPtr planToConfiguration(const statespace::dart::MetaSkeletonStateSpacePtr &space, const dart::dynamics::MetaSkeletonPtr &metaSkeleton, const statespace::StateSpace::State *goalState, const constraint::TestablePtr &collisionTestable, common::RNG *rng, double timelimit)
Plan the robot to a specific configuration.
aikido::constraint::dart::TSRPtr
std::shared_ptr< TSR > TSRPtr
Definition: TSR.hpp:17
aikido::robot::util::planToTSR
trajectory::TrajectoryPtr planToTSR(const statespace::dart::MetaSkeletonStateSpacePtr &space, const dart::dynamics::MetaSkeletonPtr &metaSkeleton, const dart::dynamics::BodyNodePtr &bodyNode, const constraint::dart::TSRPtr &tsr, const constraint::TestablePtr &collisionTestable, common::RNG *rng, double timelimit, std::size_t maxNumTrials, const distance::ConstConfigurationRankerPtr &ranker=nullptr)
Plan the configuration of the metakeleton such that the specified bodynode is set to a sample in TSR.
TSR.hpp
util.hpp
aikido::robot::util::planToConfigurations
trajectory::TrajectoryPtr planToConfigurations(const statespace::dart::MetaSkeletonStateSpacePtr &space, const dart::dynamics::MetaSkeletonPtr &metaSkeleton, const std::vector< statespace::StateSpace::State * > &goalStates, const constraint::TestablePtr &collisionTestable, common::RNG *rng, double timelimit)
Plan the robot to a set of configurations.
aikido::robot::ConcreteRobot::mNamedConfigurations
ConfigurationMap mNamedConfigurations
Commonly used configurations.
Definition: ConcreteRobot.hpp:301
aikido::constraint::dart::CollisionFreePtr
std::shared_ptr< CollisionFree > CollisionFreePtr
Definition: CollisionFree.hpp:22
aikido::trajectory::TrajectoryPtr
std::shared_ptr< Trajectory > TrajectoryPtr
Definition: Trajectory.hpp:13
aikido::robot::ConcreteRobot::mCRRTParameters
util::CRRTPlannerParameters mCRRTParameters
Definition: ConcreteRobot.hpp:307
ParabolicSmoother.hpp
aikido::robot::util::CRRTPlannerParameters
Definition: util.hpp:63
CollisionFree.hpp
aikido::robot::ConcreteRobot::mMetaSkeleton
dart::dynamics::MetaSkeletonPtr mMetaSkeleton
MetaSkeleton of this robot.
Definition: ConcreteRobot.hpp:283
aikido::distance::ConstConfigurationRankerPtr
std::shared_ptr< const ConfigurationRanker > ConstConfigurationRankerPtr
Definition: ConfigurationRanker.hpp:13
aikido::robot::ConcreteRobot::mRng
std::unique_ptr< common::RNG > mRng
True if running in simulation mode.
Definition: ConcreteRobot.hpp:293
aikido::robot::ConcreteRobot::mStateSpace
statespace::dart::MetaSkeletonStateSpacePtr mStateSpace
Definition: ConcreteRobot.hpp:284
Trajectory.hpp
aikido::robot::util::planToTSRwithTrajectoryConstraint
trajectory::InterpolatedPtr planToTSRwithTrajectoryConstraint(const statespace::dart::MetaSkeletonStateSpacePtr &space, const dart::dynamics::MetaSkeletonPtr &metaSkeleton, const dart::dynamics::BodyNodePtr &bodyNode, const constraint::dart::TSRPtr &goalTsr, const constraint::dart::TSRPtr &constraintTsr, const constraint::TestablePtr &collisionTestable, double timelimit, const CRRTPlannerParameters &crrtParameters=CRRTPlannerParameters())
Returns a Trajectory that moves the configuration of the metakeleton such that the specified bodynode...
aikido::robot::ConcreteRobot::mTrajectoryExecutor
std::shared_ptr< control::TrajectoryExecutor > mTrajectoryExecutor
Definition: ConcreteRobot.hpp:295
Robot.hpp
aikido::control::TrajectoryExecutorPtr
std::shared_ptr< TrajectoryExecutor > TrajectoryExecutorPtr
Definition: TrajectoryExecutor.hpp:14
aikido::trajectory::UniqueSplinePtr
std::unique_ptr< Spline > UniqueSplinePtr
Definition: Spline.hpp:10
MetaSkeletonStateSpace.hpp
aikido::robot::ConcreteRobot::mRootRobot
Robot * mRootRobot
If this robot belongs to another (Composite)Robot, mRootRobot is the topmost robot containing this ro...
Definition: ConcreteRobot.hpp:277
aikido::robot::Robot
Robot interface for defining basic behaviors of a robot.
Definition: Robot.hpp:26
ParabolicTimer.hpp
aikido::robot::ConcreteRobot::mSelfCollisionFilter
std::shared_ptr< dart::collision::BodyNodeCollisionFilter > mSelfCollisionFilter
Definition: ConcreteRobot.hpp:305
ExecutorThread.hpp
aikido::statespace::StateSpace::State
Definition: StateSpace.hpp:167
aikido::constraint::TestablePtr
std::shared_ptr< Testable > TestablePtr
Definition: Testable.hpp:13
aikido::robot::ConcreteRobot::mParentSkeleton
dart::dynamics::SkeletonPtr mParentSkeleton
Skeleton containing mRobot.
Definition: ConcreteRobot.hpp:287
TrajectoryExecutor.hpp
AIKIDO_DECLARE_POINTERS
#define AIKIDO_DECLARE_POINTERS(X)
Definition: pointers.hpp:21
aikido::trajectory::Trajectory
Time-parameterized path in a StateSpace.
Definition: Trajectory.hpp:20
aikido::robot::Robot::getStateSpace
virtual aikido::statespace::dart::ConstMetaSkeletonStateSpacePtr getStateSpace() const =0