4 #include <ompl/geometric/SimpleSetup.h>
5 #include <ompl/geometric/planners/rrt/RRTConnect.h>
27 int main(
int argc,
char **argv)
36 auto fetch = std::make_shared<FetchRobot>();
40 scene->fromYAMLFile(
"package://robowflex_library/yaml/test_fetch.yml");
45 auto fetch_dart = std::make_shared<darts::Robot>(
fetch);
46 auto fetch_name = fetch_dart->getName();
47 auto scene_dart = std::make_shared<darts::Structure>(
"scene",
scene);
50 auto world = std::make_shared<darts::World>();
51 world->addRobot(fetch_dart);
52 world->addStructure(scene_dart);
54 fetch_dart->setJoint(
"r_gripper_finger_joint", 0.05);
55 fetch_dart->setJoint(
"l_gripper_finger_joint", 0.05);
59 const auto &plan_to_pick = [&]() {
64 start_spec.
setFrame(fetch_name,
"wrist_roll_link",
"base_link");
65 start_spec.
setPose(-0.2, 0.6, 0.92,
77 goal_spec.
setFrame(fetch_name,
"wrist_roll_link",
"base_link");
78 goal_spec.
setPose(0.4, 0.6, 1.32,
81 auto goal_tsr = std::make_shared<darts::TSR>(world, goal_spec);
85 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.
info,
true);
87 builder.
ss->setPlanner(rrt);
91 goal->startSampling();
92 ompl::base::PlannerStatus solved = builder.
ss->solve(60.0);
105 const auto &plan_to_grasp = [&]() {
111 constraint_spec.
setFrame(fetch_name,
"wrist_roll_link",
"base_link");
112 constraint_spec.
setPose(0.4, 0.6, 0.92,
113 0.5, -0.5, 0.5, 0.5);
116 auto constraint_tsr = std::make_shared<darts::TSR>(world, constraint_spec);
121 goal_spec.
setFrame(fetch_name,
"wrist_roll_link",
"base_link");
122 goal_spec.
setPose(0.4, 0.6, 0.92,
123 0.5, -0.5, 0.5, 0.5);
125 auto goal_tsr = std::make_shared<darts::TSR>(world, goal_spec);
129 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.
info,
true);
131 builder.
ss->setPlanner(rrt);
135 goal->startSampling();
136 ompl::base::PlannerStatus solved = builder.
ss->solve(60.0);
137 goal->stopSampling();
149 const auto &plan_to_place = [&]() {
156 goal_spec.
setFrame(fetch_name,
"wrist_roll_link",
"base_link");
157 goal_spec.
setPose(-0.2, 0.6, 0.92,
158 0.5, -0.5, 0.5, 0.5);
160 auto goal_tsr = std::make_shared<darts::TSR>(world, goal_spec);
164 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.
info,
true);
166 builder.
ss->setPlanner(rrt);
170 goal->startSampling();
171 ompl::base::PlannerStatus solved = builder.
ss->solve(60.0);
172 goal->stopSampling();
191 auto *
cube = scene_dart->getFrame(
"Cube3");
192 fetch_dart->reparentFreeFrame(
cube,
"wrist_roll_link");
RAII-pattern for starting up ROS.
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 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 setNoZPosTolerance()
Set no position tolerance on the Z-axis.
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.
A Task Space Region (TSR). TSRs are workspace regions that impose a constraints on a robot....
void initialize()
Initialize this TSR. Creates IK node attached to body node in world.
bool solveWorld()
Solve for a satisfying configuration given the current state of the world.
void useGroup(const std::string &name)
Use the joints in a robot's group. Robot used is the target frame's structure.
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.
int main(int argc, char **argv)
static const std::string GROUP
#define RBX_WARN(fmt,...)
Output a warning logging message.
#define RBX_INFO(fmt,...)
Output a info logging message.
Main namespace. Contains all library classes and functions.
Functions for loading and animating scenes in Blender.