16 #include <ompl/geometric/SimpleSetup.h>
17 #include <ompl/geometric/planners/rrt/RRTConnect.h>
26 auto world = std::make_shared<darts::World>();
28 "package://fetch_description/robots/fetch.urdf",
29 "package://fetch_moveit_config/config/fetch.srdf");
30 auto fetch2 = fetch1->cloneRobot(
"fetch2");
33 world->addRobot(fetch1);
34 world->addRobot(fetch2);
41 const auto &touch = [&] {
43 builder.
addGroup(
"fetch1",
"arm_with_torso");
44 builder.
addGroup(
"fetch2",
"arm_with_torso");
47 0.05, 1.32, 1.40, -0.2, 1.72, 0.0, 1.66, 0.0,
48 0.05, 1.32, 1.40, -0.2, 1.72, 0.0, 1.66, 0.0,
53 goal1_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
54 goal1_spec.
setPose(0.4, 0.3, 0.92,
59 goal2_spec.
setFrame(
"fetch2",
"wrist_roll_link",
"base_link");
60 goal2_spec.
setPose(0.4, -0.3, 0.92,
63 auto goal1_tsr = std::make_shared<darts::TSR>(world, goal1_spec);
64 auto goal2_tsr = std::make_shared<darts::TSR>(world, goal2_spec);
66 auto goal = builder.
getGoalTSR({goal1_tsr, goal2_tsr});
69 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.
info,
true);
71 builder.
ss->setPlanner(rrt);
75 goal->startSampling();
76 ompl::base::PlannerStatus solved = builder.
ss->solve(30.0);
90 const auto &dance = [&] {
92 builder.
addGroup(
"fetch1",
"arm_with_torso");
93 builder.
addGroup(
"fetch2",
"arm_with_torso");
97 constraint_spec.
setTarget(
"fetch2",
"wrist_roll_link");
98 constraint_spec.
setBase(
"fetch1",
"wrist_roll_link");
100 auto constraint_tsr = std::make_shared<darts::TSR>(world, constraint_spec);
107 goal_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
108 goal_spec.
setPose(0.6, 0.3, 0.42,
110 auto goal_tsr = std::make_shared<darts::TSR>(world, goal_spec);
114 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.
info,
true);
116 builder.
ss->setPlanner(rrt);
120 goal->startSampling();
121 ompl::base::PlannerStatus solved = builder.
ss->solve(30.0);
122 goal->stopSampling();
141 auto solved = touch();
A helper class to setup common OMPL structures for planning.
void setGoal(const ompl::base::GoalPtr &goal)
Set the goal for the problem.
void setStartConfigurationFromWorld()
Set the start configuration from the current state of the world.
void addConstraint(const TSRPtr &tsr)
Adds a TSR as a path constraint to the problem.
void setup()
Calls setup routines on OMPL structures. Call after all setup is done and builder is initialized.
void setStartConfiguration(const Eigen::Ref< const Eigen::VectorXd > &q)
Set the start configuration from a configuration.
void initialize()
Initialize OMPL structures. Only call this once all constraints, groups, and other parameters have be...
ompl::base::SpaceInformationPtr info
Actual Space Information.
TSRGoalPtr getGoalTSR(const TSRPtr &tsr)
Set a TSR as the goal for the planning problem (will create a TSRGoal)
ompl::geometric::PathGeometric getSolutionPath(bool simplify=true, bool interpolate=true) const
Get the solution path from a successful plan.
ompl::geometric::SimpleSetupPtr ss
Simple Setup.
void addGroup(const std::string &robot, const std::string &name, std::size_t cyclic=0)
Add a robot's planning group to the controlled DoF in the state space.
The specification of a TSR.
void setTarget(const std::string &structure, const std::string &frame)
Setting TSR Frame.
void setBase(const std::string &structure, const std::string &frame)
Set the base frame.
void setPose(const RobotPose &other)
Set the pose of the TSR.
void setFrame(const std::string &structure, const std::string &target, const std::string &base=magic::ROOT_FRAME)
Set the base and target frame.
void setPoseFromWorld(const WorldPtr &world)
Set the pose of the TSR for the desired frame in a provided world. Uses world's current configuration...
Open Scene Graph GUI for DART visualization.
void run(std::function< void()> thread={})
Run the GUI. Blocks.
void animatePath(const StateSpacePtr &space, const ompl::geometric::PathGeometric &path, std::size_t times=1, double fps=60, bool block=true)
Animate a motion plan using the world.
#define RBX_WARN(fmt,...)
Output a warning logging message.
#define RBX_INFO(fmt,...)
Output a info logging message.
RobotPtr loadMoveItRobot(const std::string &name, const std::string &urdf, const std::string &srdf)
Load a robot from a URDF and SRDF (i.e., a MoveIt enabled robot).
Main namespace. Contains all library classes and functions.