Skip to content

Commit f0aefc3

Browse files
marip8Levi-Armstrong
authored andcommitted
Added avoid singularity to TrajOpt motion planner utils and default configuration
1 parent 2385815 commit f0aefc3

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

tesseract/tesseract_planning/tesseract_motion_planners/include/tesseract_motion_planners/trajopt/config/trajopt_planner_default_config.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ struct TrajOptPlannerDefaultConfig : public TrajOptPlannerConfig
110110
bool smooth_jerks = true;
111111
/** @brief This default to all ones, but allows you to weight different joints */
112112
Eigen::VectorXd jerk_coeff;
113+
/** @brief If true, applies a cost to avoid kinematic singularities */
114+
bool avoid_singularity = true;
115+
/** @brief Optimization weight associated with kinematic singularity avoidance */
116+
double avoid_singularity_coeff = 5.0;
113117

114118
/** @brief Error function that is set as a constraint for each timestep.
115119
*

tesseract/tesseract_planning/tesseract_motion_planners/include/tesseract_motion_planners/trajopt/config/utils.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ trajopt::TermInfo::Ptr createUserDefinedTermInfo(int n_steps,
114114
sco::MatrixOfVector::func jacobian_function,
115115
const std::string& name = "user_defined");
116116

117+
trajopt::TermInfo::Ptr createAvoidSingularityTermInfo(const int n_steps,
118+
const std::string& link,
119+
const double coeff = 5.0,
120+
const std::string& name = "avoid_singularity");
121+
117122
} // namespace tesseract_motion_planners
118123

119124
#endif // TESSERACT_MOTION_PLANNERS_TRAJOPT_CONFIG_UTILS_H

tesseract/tesseract_planning/tesseract_motion_planners/src/trajopt/config/trajopt_planner_default_config.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,13 @@ std::shared_ptr<trajopt::ProblemConstructionInfo> TrajOptPlannerDefaultConfig::g
258258
}
259259
}
260260

261+
// Avoid singularity
262+
if (avoid_singularity)
263+
{
264+
trajopt::TermInfo::Ptr ti = createAvoidSingularityTermInfo(pci.basic_info.n_steps, link, avoid_singularity_coeff);
265+
pci.cost_infos.push_back(ti);
266+
}
267+
261268
return std::make_shared<trajopt::ProblemConstructionInfo>(pci);
262269
}
263270

tesseract/tesseract_planning/tesseract_motion_planners/src/trajopt/config/utils.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,4 +334,18 @@ trajopt::TermInfo::Ptr createUserDefinedTermInfo(int n_steps,
334334
return ef;
335335
}
336336

337+
trajopt::TermInfo::Ptr
338+
createAvoidSingularityTermInfo(const int n_steps, const std::string& link, const double coeff, const std::string& name)
339+
{
340+
auto as = std::make_shared<trajopt::AvoidSingularityTermInfo>();
341+
as->term_type = trajopt::TT_COST;
342+
as->link = link;
343+
as->first_step = 0;
344+
as->last_step = n_steps - 1;
345+
as->coeffs = std::vector<double>(1, coeff);
346+
as->name = name;
347+
348+
return as;
349+
}
350+
337351
} // namespace tesseract_motion_planners

0 commit comments

Comments
 (0)