VirtualToolCoupler.h
Go to the documentation of this file.
1 // This file is a part of the OpenSurgSim project.
2 // Copyright 2013, SimQuest Solutions Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #ifndef SURGSIM_PHYSICS_VIRTUALTOOLCOUPLER_H
17 #define SURGSIM_PHYSICS_VIRTUALTOOLCOUPLER_H
18 
19 #include <memory>
20 
26 
27 namespace SurgSim
28 {
29 
30 namespace Input
31 {
32 class InputComponent;
33 class OutputComponent;
34 }
35 
36 namespace Physics
37 {
38 
39 class RigidRepresentation;
40 
41 SURGSIM_STATIC_REGISTRATION(VirtualToolCoupler);
42 
47 {
48 public:
51  explicit VirtualToolCoupler(const std::string& name);
52 
54 
56 
58  const std::shared_ptr<SurgSim::Framework::Component> getInput();
59 
62  void setInput(const std::shared_ptr<SurgSim::Framework::Component> input);
63 
65  const std::shared_ptr<SurgSim::Framework::Component> getOutput();
66 
69  void setOutput(const std::shared_ptr<SurgSim::Framework::Component> output);
70 
72  const std::shared_ptr<SurgSim::Framework::Component> getRepresentation();
73 
76  void setRepresentation(const std::shared_ptr<SurgSim::Framework::Component> rigid);
77 
79  const std::string& getPoseName();
80 
83  void setPoseName(const std::string& poseName = SurgSim::DataStructures::Names::POSE);
84 
85  virtual void update(double dt) override;
86 
91  void overrideLinearStiffness(double linearStiffness);
92 
94  double getLinearStiffness();
95 
100  void overrideLinearDamping(double linearDamping);
101 
103  double getLinearDamping();
104 
109  void overrideAngularStiffness(double angularStiffness);
110 
112  double getAngularStiffness();
113 
118  void overrideAngularDamping(double angularDamping);
119 
121  double getAngularDamping();
122 
127  void overrideAttachmentPoint(const SurgSim::Math::Vector3d& attachment);
128 
131  const SurgSim::Math::Vector3d& getAttachmentPoint();
132 
137  void setCalculateInertialTorques(bool calculateInertialTorques);
138 
143  bool getCalculateInertialTorques() const;
144 
145 protected:
146  virtual bool doInitialize() override;
147  virtual bool doWakeUp() override;
148  virtual int getTargetManagerType() const override;
149 
151  virtual SurgSim::DataStructures::DataGroup buildOutputData();
152 
155  void setOptionalLinearStiffness(const SurgSim::DataStructures::OptionalValue<double>& linearStiffness);
156 
159  const SurgSim::DataStructures::OptionalValue<double>& getOptionalLinearStiffness() const;
160 
164  void setOptionalLinearDamping(const SurgSim::DataStructures::OptionalValue<double>& linearDamping);
165 
168  const SurgSim::DataStructures::OptionalValue<double>& getOptionalLinearDamping() const;
169 
173  void setOptionalAngularStiffness(const SurgSim::DataStructures::OptionalValue<double>& angularStiffness);
174 
177  const SurgSim::DataStructures::OptionalValue<double>& getOptionalAngularStiffness() const;
178 
182  void setOptionalAngularDamping(const SurgSim::DataStructures::OptionalValue<double>& angularDamping);
183 
186  const SurgSim::DataStructures::OptionalValue<double>& getOptionalAngularDamping() const;
187 
190  void setOptionalAttachmentPoint(
192 
195  const SurgSim::DataStructures::OptionalValue<SurgSim::Math::Vector3d>& getOptionalAttachmentPoint() const;
196 
199 
202 
205 
208 
211 
214 
216  std::shared_ptr<SurgSim::Input::InputComponent> m_input;
217 
219  std::shared_ptr<SurgSim::Input::OutputComponent> m_output;
220 
221 private:
222  std::shared_ptr<SurgSim::Physics::RigidRepresentation> m_rigid;
224 
227 
230 
233 
236 
239 
242 
245 
249 
263 };
264 
265 }; // Physics
266 
267 }; // SurgSim
268 
269 #endif // SURGSIM_PHYSICS_VIRTUALTOOLCOUPLER_H
Definition: DriveElementFromInputBehavior.cpp:27
int m_linearVelocityIndex
Definition: VirtualToolCoupler.h:253
SurgSim::DataStructures::OptionalValue< double > m_optionalAngularStiffness
User supplied Vtc stiffness parameter in angular mode (in N·m rad-1)
Definition: VirtualToolCoupler.h:204
int m_torqueIndex
Definition: VirtualToolCoupler.h:256
double m_linearStiffness
Used Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:226
int m_inputPoseIndex
Definition: VirtualToolCoupler.h:259
int m_springJacobianIndex
Definition: VirtualToolCoupler.h:260
SurgSim::DataStructures::OptionalValue< double > m_optionalLinearDamping
User supplied Vtc damping parameter in linear mode (in N·s·m-1 or Kg·s-1)
Definition: VirtualToolCoupler.h:201
SURGSIM_STATIC_REGISTRATION(InputComponent)
double m_outputTorqueScaling
Scaling factor for the torques sent to the OutputComponent.
Definition: VirtualToolCoupler.h:241
int m_poseIndex
Definition: VirtualToolCoupler.h:252
double m_angularDamping
Used Vtc damping parameter in angular mode (in N·m·s·rad-1)
Definition: VirtualToolCoupler.h:235
SurgSim::DataStructures::OptionalValue< double > m_optionalAngularDamping
User supplied Vtc damping parameter in angular mode (in N·m·s·rad-1)
Definition: VirtualToolCoupler.h:207
int m_inputLinearVelocityIndex
Definition: VirtualToolCoupler.h:257
string(TOUPPER ${DEVICE}DEVICE_UPPER_CASE) option(BUILD_DEVICE_ $
Definition: CMakeLists.txt:35
#define SURGSIM_CLASSNAME(ClassName)
Declare the class name of a class with the appropriate function header, do not use quotes...
Definition: Macros.h:21
int m_angularVelocityIndex
Definition: VirtualToolCoupler.h:254
int m_inputAngularVelocityIndex
Definition: VirtualToolCoupler.h:258
double m_linearDamping
Used Vtc damping parameter in linear mode (in N·s·m-1 or Kg·s-1)
Definition: VirtualToolCoupler.h:229
std::shared_ptr< SurgSim::Input::OutputComponent > m_output
The output component.
Definition: VirtualToolCoupler.h:219
SurgSim::DataStructures::DataGroup m_outputData
The DataGroup to output.
Definition: VirtualToolCoupler.h:213
std::string m_poseName
Definition: VirtualToolCoupler.h:223
SurgSim::DataStructures::OptionalValue< SurgSim::Math::Vector3d > m_optionalAttachmentPoint
User supplied attachment point.
Definition: VirtualToolCoupler.h:210
A collection of NamedData objects.
Definition: DataGroup.h:66
bool m_calculateInertialTorques
Whether or not the calculated torques will simulate inertia.
Definition: VirtualToolCoupler.h:248
SurgSim::Math::Vector3d m_localAttachmentPoint
The input&#39;s point of attachment in the local frame, i.e., the same frame in which the mass center is ...
Definition: VirtualToolCoupler.h:244
The VirtualToolCoupler couples a rigid object to an input/output device through a spring and damper...
Definition: VirtualToolCoupler.h:46
std::shared_ptr< SurgSim::Input::InputComponent > m_input
The input component.
Definition: VirtualToolCoupler.h:216
Behaviors perform actions.
Definition: Behavior.h:40
SurgSim::DataStructures::OptionalValue< double > m_optionalLinearStiffness
User supplied Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:198
int m_damperJacobianIndex
Definition: VirtualToolCoupler.h:261
std::shared_ptr< SurgSim::Physics::RigidRepresentation > m_rigid
Definition: VirtualToolCoupler.h:222
double m_outputForceScaling
Scaling factor for the forces sent to the OutputComponent.
Definition: VirtualToolCoupler.h:238
Eigen::Matrix< double, 3, 1 > Vector3d
A 3D vector of doubles.
Definition: Vector.h:56
double m_angularStiffness
Used Vtc stiffness parameter in angular mode (in N·m rad-1)
Definition: VirtualToolCoupler.h:232
int m_forceIndex
Definition: VirtualToolCoupler.h:255