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 
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 
152 
156 
160 
165 
169 
174 
178 
183 
187 
192 
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;
223  std::string m_poseName;
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
const SurgSim::DataStructures::OptionalValue< double > & getOptionalAngularDamping() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:453
int m_linearVelocityIndex
Definition: VirtualToolCoupler.h:253
~VirtualToolCoupler()
Definition: VirtualToolCoupler.cpp:91
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
void overrideAngularStiffness(double angularStiffness)
Override the angular stiffness connecting the input device and the physics representation If this val...
Definition: VirtualToolCoupler.cpp:368
int m_springJacobianIndex
Definition: VirtualToolCoupler.h:260
const std::shared_ptr< SurgSim::Framework::Component > getRepresentation()
Definition: VirtualToolCoupler.cpp:115
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
const SurgSim::DataStructures::OptionalValue< double > & getOptionalAngularStiffness() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:442
SURGSIM_CLASSNAME(SurgSim::Physics::VirtualToolCoupler)
const SurgSim::DataStructures::OptionalValue< double > & getOptionalLinearDamping() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:431
bool getCalculateInertialTorques() const
Get whether the calculated torques will simulate inertia.
Definition: VirtualToolCoupler.cpp:475
double getAngularStiffness()
Definition: VirtualToolCoupler.cpp:376
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
void setCalculateInertialTorques(bool calculateInertialTorques)
Enable/disable torques that simulate inertia.
Definition: VirtualToolCoupler.cpp:470
virtual int getTargetManagerType() const override
Specifies which manger will handle this behavior.
Definition: VirtualToolCoupler.cpp:331
int m_angularVelocityIndex
Definition: VirtualToolCoupler.h:254
void setOptionalAttachmentPoint(const SurgSim::DataStructures::OptionalValue< SurgSim::Math::Vector3d > &attachmentPoint)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:458
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
void overrideLinearDamping(double linearDamping)
Override the linear damping connecting the input device and the physics representation If this value ...
Definition: VirtualToolCoupler.cpp:352
std::shared_ptr< SurgSim::Input::OutputComponent > m_output
The output component.
Definition: VirtualToolCoupler.h:219
void overrideLinearStiffness(double linearStiffness)
Override the linear stiffness connecting the input device and the physics representation If this valu...
Definition: VirtualToolCoupler.cpp:336
SurgSim::DataStructures::DataGroup m_outputData
The DataGroup to output.
Definition: VirtualToolCoupler.h:213
double getLinearStiffness()
Definition: VirtualToolCoupler.cpp:344
void setOptionalAngularStiffness(const SurgSim::DataStructures::OptionalValue< double > &angularStiffness)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:436
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
void setOptionalLinearStiffness(const SurgSim::DataStructures::OptionalValue< double > &linearStiffness)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:415
const std::string & getPoseName()
Definition: VirtualToolCoupler.cpp:125
const SurgSim::Math::Vector3d & getAttachmentPoint()
Get the point of attachment on the Representation.
Definition: VirtualToolCoupler.cpp:408
SurgSim::Math::Vector3d m_localAttachmentPoint
The input'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
virtual SurgSim::DataStructures::DataGroup buildOutputData()
Definition: VirtualToolCoupler.cpp:228
void setPoseName(const std::string &poseName=SurgSim::DataStructures::Names::POSE)
Set the name of the pose entry in the input DataGroup.
Definition: VirtualToolCoupler.cpp:130
const SurgSim::DataStructures::OptionalValue< SurgSim::Math::Vector3d > & getOptionalAttachmentPoint() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:465
std::shared_ptr< SurgSim::Input::InputComponent > m_input
The input component.
Definition: VirtualToolCoupler.h:216
void setOptionalLinearDamping(const SurgSim::DataStructures::OptionalValue< double > &linearDamping)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:426
double getLinearDamping()
Definition: VirtualToolCoupler.cpp:360
Behaviors perform actions.
Definition: Behavior.h:40
virtual bool doWakeUp() override
Interface to be implemented by derived classes.
Definition: VirtualToolCoupler.cpp:241
SurgSim::DataStructures::OptionalValue< double > m_optionalLinearStiffness
User supplied Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:198
const std::shared_ptr< SurgSim::Framework::Component > getInput()
Definition: VirtualToolCoupler.cpp:95
int m_damperJacobianIndex
Definition: VirtualToolCoupler.h:261
virtual bool doInitialize() override
Interface to be implemented by derived classes.
Definition: VirtualToolCoupler.cpp:212
std::shared_ptr< SurgSim::Physics::RigidRepresentation > m_rigid
Definition: VirtualToolCoupler.h:222
virtual void update(double dt) override
Update the behavior.
Definition: VirtualToolCoupler.cpp:135
void setRepresentation(const std::shared_ptr< SurgSim::Framework::Component > rigid)
Set the Physics Representation which follows the input.
Definition: VirtualToolCoupler.cpp:120
double m_outputForceScaling
Scaling factor for the forces sent to the OutputComponent.
Definition: VirtualToolCoupler.h:238
void setOptionalAngularDamping(const SurgSim::DataStructures::OptionalValue< double > &angularDamping)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:447
double getAngularDamping()
Definition: VirtualToolCoupler.cpp:392
VirtualToolCoupler(const std::string &name)
Constructor.
Definition: VirtualToolCoupler.cpp:48
const std::shared_ptr< SurgSim::Framework::Component > getOutput()
Definition: VirtualToolCoupler.cpp:105
void setOutput(const std::shared_ptr< SurgSim::Framework::Component > output)
Set the Output Component (if any)
Definition: VirtualToolCoupler.cpp:110
void overrideAngularDamping(double angularDamping)
Override the angular damping connecting the input device and the physics representation If this value...
Definition: VirtualToolCoupler.cpp:384
void setInput(const std::shared_ptr< SurgSim::Framework::Component > input)
Set the Input Component.
Definition: VirtualToolCoupler.cpp:100
Eigen::Matrix< double, 3, 1 > Vector3d
A 3D vector of doubles.
Definition: Vector.h:56
void overrideAttachmentPoint(const SurgSim::Math::Vector3d &attachment)
Override the point of attachment to the Representation If this value is not provided, the point of attachment will be automatically set to the Representation's center of mass.
Definition: VirtualToolCoupler.cpp:400
const SurgSim::DataStructures::OptionalValue< double > & getOptionalLinearStiffness() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:421
SURGSIM_STATIC_REGISTRATION(DeformableCollisionRepresentation)
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