TVM  0.9.4
Contact.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <tvm/api.h>
6 #include <tvm/defs.h>
7 
8 #include <tvm/robot/Frame.h>
9 
10 namespace tvm
11 {
12 
13 namespace robot
14 {
15 
27 class TVM_DLLAPI Contact : public graph::abstract::Node<Contact>
28 {
29 public:
31  struct Id
32  {
34  std::string r1;
36  std::string f1;
38  std::string r2;
40  std::string f2;
44  inline bool operator<(const Id & rhs) const
45  {
46  // clang-format off
47  return r1 < rhs.r1 ||
48  ( r1 == rhs.r1 && f1 < rhs.f1 ) ||
49  ( r1 == rhs.r1 && f1 == rhs.f1 && r2 < rhs.r2 ) ||
50  ( r1 == rhs.r1 && f1 == rhs.f1 && r2 == rhs.r2 && f2 < rhs.f2 ) ||
51  ( r1 == rhs.r1 && f1 == rhs.f1 && r2 == rhs.f2 && f2 == rhs.f2 && ambiguityId < rhs.ambiguityId );
52  // clang-format on
53  }
54  inline bool operator==(const Id & rhs) const
55  { return (r1 == rhs.r1 && f1 == rhs.f1 && r2 == rhs.r2 && f2 == rhs.f2 && ambiguityId == rhs.ambiguityId); }
56  };
57 
59  struct View
60  {
61  const Id & id;
62  const FramePtr & f;
63  const std::vector<sva::PTransformd> & points;
64  };
65 
67  F1Position,
68  F1Jacobian,
69  F1Velocity,
70  F1NormalAcceleration,
71  F2Position,
72  F2Jacobian,
73  F2Velocity,
74  F2NormalAcceleration)
75 
76 
91  Contact(FramePtr f1, FramePtr f2, std::vector<sva::PTransformd> points, int ambiguityId = 0);
92 
94  inline const Frame & f1() const { return *f1_; }
95 
97  inline const Frame & f2() const { return *f2_; }
98 
100  inline const std::vector<sva::PTransformd> & f1Points() const { return f1Points_; }
101 
103  inline const sva::PTransformd & X_f1_f2() const { return X_f1_f2_; }
104 
106  inline const sva::PTransformd & X_f2_f1() const { return X_f2_f1_; }
107 
109  inline const std::vector<sva::PTransformd> & f2Points() const { return f2Points_; }
110 
112  inline const View f1View() const { return {id_, f1_, f1Points_}; };
113 
115  inline const View f2View() const { return {id_, f2_, f2Points_}; };
116 
118  inline const Id & id() const { return id_; }
119 
120 private:
121  FramePtr f1_;
122  FramePtr f2_;
123  sva::PTransformd X_f1_f2_;
124  sva::PTransformd X_f2_f1_;
125  std::vector<sva::PTransformd> f1Points_;
126  std::vector<sva::PTransformd> f2Points_;
127  Id id_;
128 };
129 
130 using ContactPtr = std::shared_ptr<Contact>;
131 } // namespace robot
132 
133 } // namespace tvm
134 
136 std::ostream & operator<<(std::ostream & os, const tvm::robot::Contact::Id & c);
std::ostream & operator<<(std::ostream &os, const tvm::robot::Contact::Id &c)
#define TVM_DLLAPI
Definition: api.h:35
Definition: Node.h:27
Definition: Contact.h:28
const Frame & f2() const
Definition: Contact.h:97
const std::vector< sva::PTransformd > & f1Points() const
Definition: Contact.h:100
const View f1View() const
Definition: Contact.h:112
const sva::PTransformd & X_f2_f1() const
Definition: Contact.h:106
const Id & id() const
Definition: Contact.h:118
const sva::PTransformd & X_f1_f2() const
Definition: Contact.h:103
const View f2View() const
Definition: Contact.h:115
SET_OUTPUTS(Contact, F1Position, F1Jacobian, F1Velocity, F1NormalAcceleration, F2Position, F2Jacobian, F2Velocity, F2NormalAcceleration) Contact(FramePtr f1
const std::vector< sva::PTransformd > & f2Points() const
Definition: Contact.h:109
Definition: Frame.h:32
Definition: probe.h:44
std::shared_ptr< Frame > FramePtr
Definition: Frame.h:99
std::shared_ptr< Contact > ContactPtr
Definition: Contact.h:130
Definition: Clock.h:12
Definition: Contact.h:32
bool operator==(const Id &rhs) const
Definition: Contact.h:54
std::string r2
Definition: Contact.h:38
int ambiguityId
Definition: Contact.h:42
bool operator<(const Id &rhs) const
Definition: Contact.h:44
std::string f2
Definition: Contact.h:40
std::string f1
Definition: Contact.h:36
std::string r1
Definition: Contact.h:34
Definition: Contact.h:60
const FramePtr & f
Definition: Contact.h:62
const Id & id
Definition: Contact.h:61
const std::vector< sva::PTransformd > & points
Definition: Contact.h:63