trajopt
 All Classes Namespaces Files Functions Variables Typedefs Pages
collision_terms.hpp
1 #pragma once
2 #include "trajopt/common.hpp"
3 #include "trajopt/collision_checker.hpp"
4 #include "sco/modeling.hpp"
5 #include "sco/sco_fwd.hpp"
6 #include "cache.hxx"
7 
8 
9 namespace trajopt {
10 
11 typedef std::map<const OR::KinBody::Link*, int> Link2Int;
12 
13 
15  virtual void CalcDistExpressions(const DblVec& x, vector<AffExpr>& exprs) = 0;
16  virtual void CalcDists(const DblVec& x, DblVec& exprs) = 0;
17  virtual void CalcCollisions(const DblVec& x, vector<Collision>& collisions) = 0;
18  void GetCollisionsCached(const DblVec& x, vector<Collision>&);
19  virtual ~CollisionEvaluator() {}
20  virtual VarVector GetVars()=0;
21 
22  Cache<size_t, vector<Collision>, 3> m_cache;
23 };
24 typedef boost::shared_ptr<CollisionEvaluator> CollisionEvaluatorPtr;
25 
27 public:
28  SingleTimestepCollisionEvaluator(ConfigurationPtr rad, const VarVector& vars);
35  void CalcDistExpressions(const DblVec& x, vector<AffExpr>& exprs);
39  void CalcDists(const DblVec& x, DblVec& exprs);
40  void CalcCollisions(const DblVec& x, vector<Collision>& collisions);
41  VarVector GetVars() {return m_vars;}
42 
43  OR::EnvironmentBasePtr m_env;
44  CollisionCheckerPtr m_cc;
45  ConfigurationPtr m_rad;
46  VarVector m_vars;
47  Link2Int m_link2ind;
48  vector<OR::KinBody::LinkPtr> m_links;
49  short m_filterMask;
50 };
51 
53 public:
54  CastCollisionEvaluator(ConfigurationPtr rad, const VarVector& vars0, const VarVector& vars1);
55  void CalcDistExpressions(const DblVec& x, vector<AffExpr>& exprs);
56  void CalcDists(const DblVec& x, DblVec& exprs);
57  void CalcCollisions(const DblVec& x, vector<Collision>& collisions);
58  VarVector GetVars() {return concat(m_vars0, m_vars1);}
59 
60 
61  // parameters:
62  OR::EnvironmentBasePtr m_env;
63  CollisionCheckerPtr m_cc;
64  ConfigurationPtr m_rad;
65  VarVector m_vars0;
66  VarVector m_vars1;
67  typedef std::map<const OR::KinBody::Link*, int> Link2Int;
68  Link2Int m_link2ind;
69  vector<OR::KinBody::LinkPtr> m_links;
70  short m_filterMask;
71 
72 };
73 
74 
75 class TRAJOPT_API CollisionCost : public Cost, public Plotter {
76 public:
77  /* constructor for single timestep */
78  CollisionCost(double dist_pen, double coeff, ConfigurationPtr rad, const VarVector& vars);
79  /* constructor for cast cost */
80  CollisionCost(double dist_pen, double coeff, ConfigurationPtr rad, const VarVector& vars0, const VarVector& vars1);
81  virtual ConvexObjectivePtr convex(const vector<double>& x, Model* model);
82  virtual double value(const vector<double>&);
83  void Plot(const DblVec& x, OR::EnvironmentBase& env, std::vector<OR::GraphHandlePtr>& handles);
84 private:
85  CollisionEvaluatorPtr m_calc;
86  double m_dist_pen;
87  double m_coeff;
88 };
89 class TRAJOPT_API CollisionConstraint : public IneqConstraint {
90 public:
91  /* constructor for single timestep */
92  CollisionConstraint(double dist_pen, double coeff, ConfigurationPtr rad, const VarVector& vars);
93  /* constructor for cast cost */
94  CollisionConstraint(double dist_pen, double coeff, ConfigurationPtr rad, const VarVector& vars0, const VarVector& vars1);
95  virtual ConvexConstraintsPtr convex(const vector<double>& x, Model* model);
96  virtual DblVec value(const vector<double>&);
97  void Plot(const DblVec& x, OR::EnvironmentBase& env, std::vector<OR::GraphHandlePtr>& handles);
98 private:
99  CollisionEvaluatorPtr m_calc;
100  double m_dist_pen;
101  double m_coeff;
102 };
103 
104 }