Go to the documentation of this file. 1 #ifndef AIKIDO_ROBOT_ROBOT_HPP_
2 #define AIKIDO_ROBOT_ROBOT_HPP_
6 #include <unordered_map>
9 #include <dart/collision/CollisionDetector.hpp>
10 #include <dart/collision/CollisionFilter.hpp>
11 #include <dart/dynamics/dynamics.hpp>
51 dart::dynamics::SkeletonPtr skeleton,
52 const std::string name =
"robot",
53 bool addDefaultExecutors =
true);
64 dart::dynamics::ReferentialSkeletonPtr refSkeleton,
66 dart::collision::CollisionDetectorPtr collisionDetector,
67 std::shared_ptr<dart::collision::BodyNodeCollisionFilter> collisionFilter,
68 const std::string name =
"subrobot");
71 virtual ~Robot() =
default;
79 const std::vector<std::pair<std::string, std::string>> bodyNodeList);
88 const std::vector<std::pair<std::string, std::string>> bodyNodeList);
95 virtual void step(
const std::chrono::system_clock::time_point& timepoint);
117 const std::vector<std::string> bodyNames
118 = std::vector<std::string>())
const;
127 dart::dynamics::ReferentialSkeletonPtr refSkeleton,
128 const std::string& name);
143 std::unordered_map<std::string, const Eigen::VectorXd>
144 namedConfigurations);
155 const Eigen::VectorXd& goalConf,
157 const std::shared_ptr<planner::ConfigurationToConfigurationPlanner>&
160 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
166 const Eigen::VectorXd& goalConf,
167 const std::shared_ptr<planner::ConfigurationToConfigurationPlanner>&
170 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
186 const std::string bodyNodeName,
187 const Eigen::Vector3d& offset,
189 const std::shared_ptr<
192 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
198 const std::string bodyNodeName,
199 const Eigen::Vector3d& offset,
200 const std::shared_ptr<
203 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
220 const std::string bodyNodeName,
221 const Eigen::Vector3d& offset,
222 const Eigen::Vector3d& rotation,
224 const std::shared_ptr<
227 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
233 const std::string bodyNodeName,
234 const Eigen::Vector3d& offset,
235 const Eigen::Vector3d& rotation,
236 const std::shared_ptr<
239 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
262 const std::string bodyNodeName,
266 const std::shared_ptr<planner::ConfigurationToConfigurationPlanner>&
269 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
276 const std::string bodyNodeName,
279 const std::shared_ptr<planner::ConfigurationToConfigurationPlanner>&
282 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
356 template <aik
ido::control::ExecutorType T>
358 const std::vector<double>& command,
359 const std::chrono::duration<double>& timeout);
378 bool includeSubrobots =
true,
379 bool includeParents =
false,
380 const std::vector<std::string> excludeSubrobots
381 = std::vector<std::string>());
414 const std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
418 std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
457 std::shared_ptr<dart::collision::BodyNodeCollisionFilter>
462 std::shared_ptr<aikido::planner::TrajectoryPostProcessor>
466 std::unique_ptr<common::RNG>
mRng;
473 = std::unordered_map<std::string, const Eigen::VectorXd>;
485 dart::dynamics::ReferentialSkeletonPtr refSkeleton,
486 const std::string& name);
497 #endif // AIKIDO_ROBOT_ROBOT_HPP_
trajectory::TrajectoryPtr planToOffset(const std::string bodyNodeName, const Eigen::Vector3d &offset, const constraint::TestablePtr &testableConstraint, const std::shared_ptr< planner::dart::ConfigurationToEndEffectorOffsetPlanner > &planner=nullptr, const std::shared_ptr< aikido::planner::TrajectoryPostProcessor > trajPostProcessor=nullptr) const
Plan a specific body node of the robot to a position offset.
std::shared_ptr< aikido::planner::TrajectoryPostProcessor > getDefaultPostProcessor() const
std::unique_ptr< RNG > UniqueRNGPtr
Definition: RNG.hpp:17
std::shared_ptr< MetaSkeletonStateSpace > MetaSkeletonStateSpacePtr
Definition: MetaSkeletonStateSpace.hpp:17
std::shared_ptr< Executor > ExecutorPtr
Definition: Executor.hpp:16
virtual bool activateExecutor(const int id)
Deactivates the current active executor.
aikido::statespace::dart::MetaSkeletonStateSpacePtr mStateSpace
Definition: Robot.hpp:439
void setNamedConfigurations(std::unordered_map< std::string, const Eigen::VectorXd > namedConfigurations)
Sets the list of named configurations.
std::future< int > executeJointCommand(const std::vector< double > &command, const std::chrono::duration< double > &timeout)
Convenience: executes given joint command on the robot.
Definition: Robot-impl.hpp:6
virtual void enforceSelfCollisionPairs(const std::vector< std::pair< std::string, std::string >> bodyNodeList)
Manually remove pairs of body nodes for which collision constraints are enforced.
std::unordered_map< std::string, RobotPtr > mSubRobots
Definition: Robot.hpp:453
Paramters for Vector Field Planner.
Definition: util.hpp:42
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
std::shared_ptr< TSR > TSRPtr
Definition: TSR.hpp:17
Base planner class for ConfigurationToEndEffectorPose planning problem.
Definition: ConfigurationToEndEffectorPosePlanner.hpp:14
virtual void deactivateExecutor()
Deactivates the active executor.
std::shared_ptr< Robot > RobotPtr
Definition: Robot.hpp:35
dart::dynamics::MetaSkeletonPtr getMetaSkeleton()
trajectory::TrajectoryPtr planToConfiguration(const Eigen::VectorXd &goalConf, const constraint::TestablePtr &testableConstraint, const std::shared_ptr< planner::ConfigurationToConfigurationPlanner > &planner=nullptr, const std::shared_ptr< aikido::planner::TrajectoryPostProcessor > trajPostProcessor=nullptr) const
Plan the robot to a specific configuration.
Robot(dart::dynamics::SkeletonPtr skeleton, const std::string name="robot", bool addDefaultExecutors=true)
Construct a new Robot object.
virtual ~Robot()=default
Destructor.
void setRNG(common::UniqueRNGPtr rng)
std::shared_ptr< CollisionFree > CollisionFreePtr
Definition: CollisionFree.hpp:22
dart::dynamics::MetaSkeletonPtr mMetaSkeleton
Definition: Robot.hpp:438
std::shared_ptr< Trajectory > TrajectoryPtr
Definition: Trajectory.hpp:13
constraint::TestablePtr getWorldCollisionConstraint(const std::vector< std::string > bodyNames=std::vector< std::string >()) const
Get the collision constraint between this (sub)robot and selected bodies within its World,...
aikido::planner::WorldPtr mWorld
Definition: Robot.hpp:469
std::set< std::string > mDofs
Definition: Robot.hpp:451
Eigen::VectorXd getNamedConfiguration(const std::string &name) const
Returns a named configuration, or size-0 vector if not found.
aikido::planner::WorldPtr getWorld() const
std::shared_ptr< World > WorldPtr
Definition: World.hpp:14
virtual RobotPtr registerSubRobot(dart::dynamics::ReferentialSkeletonPtr refSkeleton, const std::string &name)
Registers a subset of the joints of the skeleton as a new robot.
util::VectorFieldPlannerParameters mVFParams
Definition: Robot.hpp:489
virtual bool validateSubRobot(dart::dynamics::ReferentialSkeletonPtr refSkeleton, const std::string &name)
Checks validity of subrobot for registration: name should be unique.
void setDefaultPostProcessor(const std::shared_ptr< aikido::planner::TrajectoryPostProcessor > trajPostProcessor)
std::future< void > executeTrajectory(const trajectory::TrajectoryPtr &trajectory)
Convenience: executes given trajectory on the robot.
dart::dynamics::MetaSkeletonPtr getMetaSkeletonClone() const
std::shared_ptr< const ConfigurationRanker > ConstConfigurationRankerPtr
Definition: ConfigurationRanker.hpp:13
int mActiveExecutor
Definition: Robot.hpp:442
void setEnablePostProcessing(bool enable=true)
void setVFParams(util::VectorFieldPlannerParameters params)
Robot * mParentRobot
Definition: Robot.hpp:449
dart::collision::CollisionDetectorPtr mCollisionDetector
Definition: Robot.hpp:456
Base planner class for ConfigurationToEndEffectorOffset planning problem.
Definition: ConfigurationToEndEffectorOffsetPlanner.hpp:14
common::UniqueRNGPtr cloneRNG() const
bool mEnablePostProcessing
Definition: Robot.hpp:461
virtual void cancelAllCommands(bool includeSubrobots=true, bool includeParents=false, const std::vector< std::string > excludeSubrobots=std::vector< std::string >())
Cancels all running commands on this robot.
virtual aikido::control::ExecutorPtr getActiveExecutor()
Retrieves the active executor.
Eigen::VectorXd getCurrentConfiguration() const
ConfigurationMap mNamedConfigurations
Definition: Robot.hpp:474
virtual void clearExecutors()
Deactivates the active executor.
Robot base class for defining basic behaviors common to most robots.
Definition: Robot.hpp:38
std::string mName
Definition: Robot.hpp:437
dart::dynamics::ConstSkeletonPtr getRootSkeleton() const
constraint::TestablePtr combineCollisionConstraint(const constraint::dart::CollisionFreePtr &collisionFree) const
Given a collision constraint, returns it combined with the self-collision constraint of the entire ro...
trajectory::TrajectoryPtr planToPoseOffset(const std::string bodyNodeName, const Eigen::Vector3d &offset, const Eigen::Vector3d &rotation, const constraint::TestablePtr &testableConstraint, const std::shared_ptr< planner::dart::ConfigurationToEndEffectorPosePlanner > &planner=nullptr, const std::shared_ptr< aikido::planner::TrajectoryPostProcessor > trajPostProcessor=nullptr) const
Plan a specific body node of the robot to a pose offset (i.e.
std::vector< aikido::control::ExecutorPtr > mExecutors
Definition: Robot.hpp:444
std::unordered_map< std::string, int > mExecutorsNameMap
Definition: Robot.hpp:446
std::string getName() const
std::unique_ptr< common::RNG > mRng
Definition: Robot.hpp:466
std::unordered_map< std::string, const Eigen::VectorXd > ConfigurationMap
Definition: Robot.hpp:473
ExecutorType
Type of executor Can be used to determine if 2 executors make conflicting demands of individual degre...
Definition: Executor.hpp:35
std::shared_ptr< Testable > TestablePtr
Definition: Testable.hpp:13
virtual void step(const std::chrono::system_clock::time_point &timepoint)
Steps the robot (and underlying executors and subrobots) through time.
constraint::dart::CollisionFreePtr getSelfCollisionConstraint() const
Get the self-collision constraint of the robot.
std::shared_ptr< dart::collision::BodyNodeCollisionFilter > mSelfCollisionFilter
Definition: Robot.hpp:458
void setWorld(aikido::planner::WorldPtr world)
#define AIKIDO_DECLARE_POINTERS(X)
Definition: pointers.hpp:21
util::VectorFieldPlannerParameters getVFParams() const
virtual int registerExecutor(aikido::control::ExecutorPtr executor, std::string desiredName="")
Add an executor to the inactive executors list.
virtual void ignoreSelfCollisionPairs(const std::vector< std::pair< std::string, std::string >> bodyNodeList)
Manually add pairs of body nodes for which collision is ignored Note: adjacent body pairs are already...
trajectory::TrajectoryPtr planToTSR(const std::string bodyNodeName, const constraint::dart::TSRPtr &tsr, const constraint::TestablePtr &testableConstraint, const util::PlanToTSRParameters ¶ms=util::PlanToTSRParameters(), const std::shared_ptr< planner::ConfigurationToConfigurationPlanner > &planner=nullptr, const std::shared_ptr< aikido::planner::TrajectoryPostProcessor > trajPostProcessor=nullptr, const distance::ConstConfigurationRankerPtr &ranker=nullptr) const
Plan a specific body node of the robot to a sample configuraiton within a Task Space Region.
RobotPtr getSubRobotByName(const std::string &name) const
Get existing subrobot pointer.
std::shared_ptr< aikido::planner::TrajectoryPostProcessor > mDefaultPostProcessor
Definition: Robot.hpp:463