30 auto world = std::make_shared<darts::World>();
32 "package://fetch_description/robots/fetch.urdf",
33 "package://fetch_moveit_config/config/fetch.srdf");
34 auto fetch2 = fetch1->cloneRobot(
"fetch2");
35 fetch2->setDof(2, -1.57);
36 fetch2->setDof(3, radius);
37 fetch2->setDof(4, radius);
42 auto scene = std::make_shared<darts::Structure>(
"object");
44 dart::dynamics::FreeJoint::Properties joint;
46 joint.mT_ParentBodyToJoint.translation() = Eigen::Vector3d(radius, 0, height);
50 world->addRobot(fetch1);
51 world->addRobot(fetch2);
52 world->addStructure(
scene);
59 const auto &touch = [&] {
61 builder.addGroup(
"fetch1",
"arm_with_torso");
62 builder.addGroup(
"fetch2",
"arm_with_torso");
64 builder.setStartConfiguration({
65 0.05, 1.32, 1.40, -0.2, 1.72, 0.0, 1.66, 0.0,
66 0.05, 1.32, 1.40, -0.2, 1.72, 0.0, 1.66, 0.0,
72 goal1_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
73 goal1_spec.
setPose(0.5, 0, height - 0.1,
77 goal2_spec.
setFrame(
"fetch2",
"wrist_roll_link",
"base_link");
78 goal2_spec.
setPose(0.5, 0, height - 0.1,
81 auto goal1_tsr = std::make_shared<darts::TSR>(world, goal1_spec);
82 auto goal2_tsr = std::make_shared<darts::TSR>(world, goal2_spec);
83 auto goal = builder.getGoalTSR({goal1_tsr, goal2_tsr});
84 builder.setGoal(goal);
86 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.info,
true);
88 builder.ss->setPlanner(rrt);
92 goal->options.max_samples = 1;
93 goal->startSampling();
94 ompl::base::PlannerStatus solved = builder.ss->solve(60.0);
100 window.animatePath(builder, builder.getSolutionPath());
105 return solved == ompl::base::PlannerStatus::EXACT_SOLUTION;
111 const auto &lift = [&] {
113 builder.addGroup(
"fetch1",
"arm_with_torso");
114 builder.addGroup(
"fetch2",
"arm_with_torso");
116 builder.setStartConfigurationFromWorld();
119 con1_spec.
setTarget(
"fetch2",
"wrist_roll_link");
120 con1_spec.
setBase(
"fetch1",
"wrist_roll_link");
122 auto con1_tsr = std::make_shared<darts::TSR>(world, con1_spec);
123 builder.addConstraint(con1_tsr);
126 con2_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
133 auto con2_tsr = std::make_shared<darts::TSR>(world, con2_spec);
134 builder.addConstraint(con2_tsr);
136 builder.initialize();
139 goal_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
140 goal_spec.
setPose(0.5, 0, height +
raise,
141 0.707, 0, -0.707, 0);
142 auto goal_tsr = std::make_shared<darts::TSR>(world, goal_spec);
143 auto goal = builder.getGoalTSR(goal_tsr);
144 builder.setGoal(goal);
146 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.info,
true);
148 builder.ss->setPlanner(rrt);
152 goal->options.max_samples = 100;
153 goal->startSampling();
154 ompl::base::PlannerStatus solved = builder.ss->solve(240.0);
155 goal->stopSampling();
160 window.animatePath(builder, builder.getSolutionPath());
165 return solved == ompl::base::PlannerStatus::EXACT_SOLUTION;
171 const auto &lower = [&] {
173 builder.addGroup(
"fetch1",
"arm_with_torso");
174 builder.addGroup(
"fetch2",
"arm_with_torso");
176 builder.setStartConfigurationFromWorld();
179 con1_spec.
setTarget(
"fetch2",
"wrist_roll_link");
180 con1_spec.
setBase(
"fetch1",
"wrist_roll_link");
182 auto con1_tsr = std::make_shared<darts::TSR>(world, con1_spec);
183 builder.addConstraint(con1_tsr);
186 con2_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
193 auto con2_tsr = std::make_shared<darts::TSR>(world, con2_spec);
194 builder.addConstraint(con2_tsr);
196 builder.initialize();
199 goal_spec.
setFrame(
"fetch1",
"wrist_roll_link",
"base_link");
200 goal_spec.
setPose(0.5, 0, height - 0.1,
201 0.707, 0, -0.707, 0);
202 auto goal_tsr = std::make_shared<darts::TSR>(world, goal_spec);
203 auto goal = builder.getGoalTSR(goal_tsr);
204 builder.setGoal(goal);
206 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.info,
true);
208 builder.ss->setPlanner(rrt);
212 goal->options.max_samples = 100;
213 goal->startSampling();
214 ompl::base::PlannerStatus solved = builder.ss->solve(240.0);
215 goal->stopSampling();
220 window.animatePath(builder, builder.getSolutionPath());
225 return solved == ompl::base::PlannerStatus::EXACT_SOLUTION;
231 const auto &tuck = [&] {
233 builder.addGroup(
"fetch1",
"arm_with_torso");
234 builder.addGroup(
"fetch2",
"arm_with_torso");
236 builder.setStartConfigurationFromWorld();
238 builder.initialize();
240 auto goal = builder.getGoalConfiguration({
241 0.05, 1.32, 1.40, -0.2, 1.72, 0.0, 1.66, 0.0,
242 0.05, 1.32, 1.40, -0.2, 1.72, 0.0, 1.66, 0.0,
244 builder.setGoal(goal);
246 auto rrt = std::make_shared<ompl::geometric::RRTConnect>(builder.info,
true);
248 builder.ss->setPlanner(rrt);
252 ompl::base::PlannerStatus solved = builder.ss->solve(60.0);
257 window.animatePath(builder, builder.getSolutionPath());
262 return solved == ompl::base::PlannerStatus::EXACT_SOLUTION;
276 fetch1->reparentFreeFrame(
cube,
"wrist_roll_link");
A helper class to setup common OMPL structures for planning.
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 setNoPosTolerance()
Set no position tolerance at all.
void setYRotTolerance(double bound)
Set the Y orientation tolerance to (-bound, bound).
void setNoZRotTolerance()
Set no orientation tolerance on the Z-axis.
void setXRotTolerance(double bound)
Setting Orientation Tolerances.
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.
#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).
std::shared_ptr< dart::dynamics::BoxShape > makeBox(const Eigen::Ref< const Eigen::Vector3d > &v)
Create a box.
Functions for loading and animating scenes in Blender.