libmove3d-planners
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros Groups Pages
CollisionPoint.hpp
1 /*
2  * CollisionPoint.h
3  * BioMove3D
4  *
5  * Created by Jim Mainprice on 07/06/10.
6  * Copyright 2010 LAAS/CNRS. All rights reserved.
7  *
8  */
9 
10 #ifndef COLLISION_POINT_HPP_
11 #define COLLISION_POINT_HPP_
12 
13 #include <vector>
14 
15 
16 #include <Eigen/Core>
17 #include <Eigen/Geometry>
18 #include <algorithm>
19 
20 #include "planner/TrajectoryOptim/Chomp/chompUtils.hpp"
21 
23 {
24 public:
25  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
26 
27  BoundingCylinder(const Eigen::Vector3d& p1, const Eigen::Vector3d& p2, double radius) :
28  m_p1(p1), m_p2(p2), m_radius(radius)
29  {}
30 
31  BoundingCylinder(const Eigen::Vector3d& vect1, const Eigen::Vector3d& vect2,
32  const Eigen::Vector3d& vect5, const Eigen::Vector3d& vect6);
33 
34  double getLength() { return ( m_p1 - m_p2 ).norm(); }
35  double getRadius() { return m_radius; }
36 
37  Eigen::Vector3d& getPoint1() { return m_p1; }
38  Eigen::Vector3d& getPoint2() { return m_p2; }
39 
40  void draw( const Eigen::Affine3d& T );
41 
42 private:
43  Eigen::Vector3d m_p1;
44  Eigen::Vector3d m_p2;
45  double m_radius;
46 };
47 
49 {
50 public:
51  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
52 
53  CollisionPoint(const std::vector<int>& parent_joints, double radius, double clearance, int segment_number, const Eigen::Vector3d& position);
54 
55  CollisionPoint(const CollisionPoint &point, const std::vector<int>& parent_joints);
56 
57  virtual ~CollisionPoint();
58 
59  bool isParentJoint(int joint) const;
60  double getRadius() const;
61  double getVolume() const;
62  double getClearance() const;
63  double getInvClearance() const;
64  int getSegmentNumber() const;
65 
66  const Eigen::Vector3d& getPosition() const;
67 
68  const std::vector<int>& getParentJoints() const
69  {
70  return m_parent_joints;
71  }
72 
73  void getTransformedPosition(std::vector<Eigen::Affine3d>& segment_frames, Eigen::Vector3d& position) const;
74  void getTransformedPosition(std::vector<std::vector<double> >& segment_frames, Eigen::Vector3d& position) const;
75 
76  void getJacobian(std::vector</*Eigen::Map<*/Eigen::Vector3d> /*>*/& joint_pos,
77  std::vector</*Eigen::Map<*/Eigen::Vector3d> /*>*/& joint_axis,
78  /*Eigen::Map<*/Eigen::Vector3d/*>*/& collision_point_pos,
79  Eigen::MatrixXd& jacobian,
80  const std::vector<int>& group_joint_to_move3d_joint_index) const;
81 
82  void draw(const Eigen::Affine3d& T, bool yellow=true) const;
83 
86 private:
87  std::vector<int> m_parent_joints;
88  double m_radius;
89  double m_volume;
90  double m_clearance;
91  double m_inv_clearance;
92  int m_segment_number;
93  Eigen::Vector3d m_position;
94 };
95 
96 inline bool CollisionPoint::isParentJoint(int joint) const
97 {
98  return(find(m_parent_joints.begin(),
99  m_parent_joints.end(), joint) != m_parent_joints.end());
100 }
101 
102 inline double CollisionPoint::getRadius() const
103 {
104  return m_radius;
105 }
106 
107 inline double CollisionPoint::getVolume() const
108 {
109  return m_volume;
110 }
111 
112 inline double CollisionPoint::getClearance() const
113 {
114  return m_clearance;
115 }
116 
117 inline double CollisionPoint::getInvClearance() const
118 {
119  return m_inv_clearance;
120 }
121 
122 inline int CollisionPoint::getSegmentNumber() const
123 {
124  return m_segment_number;
125 }
126 
127 inline const Eigen::Vector3d& CollisionPoint::getPosition() const
128 {
129  return m_position;
130 }
131 
132 inline void CollisionPoint::getTransformedPosition(std::vector<Eigen::Affine3d>& segment_frames,
133  Eigen::Vector3d& position) const
134 {
135  position = segment_frames[m_segment_number] * m_position;
136 }
137 
138 inline void CollisionPoint::getTransformedPosition(std::vector<std::vector<double> >& segment_frames,
139  Eigen::Vector3d& position) const
140 {
141  Eigen::Affine3d T;
142  stdVectorToEigenTransform( segment_frames[m_segment_number], T );
143  position = T*m_position;
144 }
145 
146 
147 
148 #endif /* COLLISION_POINT_HPP */
Definition: CollisionPoint.hpp:22
Definition: CollisionPoint.hpp:48
bool m_is_colliding
Collision point in collision.
Definition: CollisionPoint.hpp:84