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.