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 
25 #include "SurgSim/Framework/Log.h"
27 
28 namespace SurgSim
29 {
30 
31 namespace Input
32 {
33 class InputComponent;
34 class OutputComponent;
35 }
36 
37 namespace Physics
38 {
39 
40 class RigidRepresentation;
41 
42 SURGSIM_STATIC_REGISTRATION(VirtualToolCoupler);
43 
59 {
60 public:
63  explicit VirtualToolCoupler(const std::string& name);
64 
66 
68 
70  const std::shared_ptr<Framework::Component> getInput();
71 
77  void setInput(const std::shared_ptr<Framework::Component> input);
78 
80  const std::shared_ptr<Framework::Component> getOutput();
81 
84  void setOutput(const std::shared_ptr<Framework::Component> output);
85 
87  const std::shared_ptr<Framework::Component> getRepresentation();
88 
91  void setRepresentation(const std::shared_ptr<Framework::Component> rigid);
92 
97 
101  void setHapticOutputOnlyWhenColliding(bool haptic);
102 
104  const std::string& getPoseName();
105 
108  void setPoseName(const std::string& poseName = DataStructures::Names::POSE);
109 
110  void update(double dt) override;
111 
116  void overrideLinearStiffness(double linearStiffness);
117 
119  double getLinearStiffness();
120 
125  void overrideLinearDamping(double linearDamping);
126 
128  double getLinearDamping();
129 
134  void overrideAngularStiffness(double angularStiffness);
135 
137  double getAngularStiffness();
138 
143  void overrideAngularDamping(double angularDamping);
144 
146  double getAngularDamping();
147 
152  void overrideAttachmentPoint(const Math::Vector3d& attachment);
153 
157 
162  void setCalculateInertialTorques(bool calculateInertialTorques);
163 
168  bool getCalculateInertialTorques() const;
169 
170  void doRetire() override;
171 
172  void setLocalActive(bool val) override;
173 
174 protected:
175  bool doInitialize() override;
176  bool doWakeUp() override;
177  int getTargetManagerType() const override;
178 
181 
185 
189 
194 
198 
203 
207 
212 
216 
220 
224 
227 
230 
233 
236 
239 
242 
244  std::shared_ptr<Input::InputComponent> m_input;
245 
247  std::shared_ptr<Input::OutputComponent> m_output;
248 
249 private:
250  std::shared_ptr<RigidRepresentation> m_rigid;
252 
255 
258 
261 
264 
267 
270 
273 
277 
279  std::shared_ptr<Framework::Logger> m_logger;
280 
283 
286 
300 };
301 
302 }; // Physics
303 
304 }; // SurgSim
305 
306 #endif // SURGSIM_PHYSICS_VIRTUALTOOLCOUPLER_H
SurgSim::Physics::VirtualToolCoupler::doInitialize
bool doInitialize() override
Interface to be implemented by derived classes.
Definition: VirtualToolCoupler.cpp:282
SurgSim::Physics::VirtualToolCoupler::buildOutputData
virtual DataStructures::DataGroup buildOutputData()
Definition: VirtualToolCoupler.cpp:298
SurgSim::Physics::VirtualToolCoupler::setCalculateInertialTorques
void setCalculateInertialTorques(bool calculateInertialTorques)
Enable/disable torques that simulate inertia.
Definition: VirtualToolCoupler.cpp:542
SurgSim::Physics::VirtualToolCoupler::m_previousInputPose
Math::RigidTransform3d m_previousInputPose
The previous input pose.
Definition: VirtualToolCoupler.h:285
SurgSim::Physics::VirtualToolCoupler::getOptionalLinearDamping
const DataStructures::OptionalValue< double > & getOptionalLinearDamping() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:503
SurgSim::Physics::VirtualToolCoupler::getLinearDamping
double getLinearDamping()
Definition: VirtualToolCoupler.cpp:432
SurgSim::Physics::VirtualToolCoupler::m_output
std::shared_ptr< Input::OutputComponent > m_output
The output component.
Definition: VirtualToolCoupler.h:247
SurgSim::Physics::VirtualToolCoupler::m_linearVelocityIndex
int m_linearVelocityIndex
Definition: VirtualToolCoupler.h:290
SurgSim::Physics::VirtualToolCoupler::~VirtualToolCoupler
~VirtualToolCoupler()
Definition: VirtualToolCoupler.cpp:97
SurgSim::Physics::VirtualToolCoupler::m_outputForceScaling
double m_outputForceScaling
Scaling factor for the forces sent to the OutputComponent.
Definition: VirtualToolCoupler.h:266
SurgSim::Physics::VirtualToolCoupler::isHapticOutputOnlyWhenColliding
bool isHapticOutputOnlyWhenColliding() const
Get whether or not the haptic forces should be provided only during collisions.
Definition: VirtualToolCoupler.cpp:564
SurgSim::Physics::VirtualToolCoupler::m_angularStiffness
double m_angularStiffness
Used Vtc stiffness parameter in angular mode (in N·m rad-1)
Definition: VirtualToolCoupler.h:260
SurgSim::Physics::VirtualToolCoupler::setOptionalAngularDamping
void setOptionalAngularDamping(const DataStructures::OptionalValue< double > &angularDamping)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:519
SurgSim::Physics::VirtualToolCoupler::m_inputLinearVelocityIndex
int m_inputLinearVelocityIndex
Definition: VirtualToolCoupler.h:294
SurgSim::DataStructures::OptionalValue< double >
SurgSim::Physics::VirtualToolCoupler::overrideLinearStiffness
void overrideLinearStiffness(double linearStiffness)
Override the linear stiffness connecting the input device and the physics representation If this valu...
Definition: VirtualToolCoupler.cpp:408
SurgSim::Physics::VirtualToolCoupler::getLinearStiffness
double getLinearStiffness()
Definition: VirtualToolCoupler.cpp:416
SurgSim::Math::RigidTransform3d
Eigen::Transform< double, 3, Eigen::Isometry > RigidTransform3d
A 3D rigid (isometric) transform, represented as doubles.
Definition: RigidTransform.h:46
SurgSim::Physics::VirtualToolCoupler::m_linearDamping
double m_linearDamping
Used Vtc damping parameter in linear mode (in N·s·m-1 or Kg·s-1)
Definition: VirtualToolCoupler.h:257
SurgSim::Physics::VirtualToolCoupler::m_optionalLinearStiffness
DataStructures::OptionalValue< double > m_optionalLinearStiffness
User supplied Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:226
SurgSim::Physics::VirtualToolCoupler::m_calculateInertialTorques
bool m_calculateInertialTorques
Whether or not the calculated torques will simulate inertia.
Definition: VirtualToolCoupler.h:276
SurgSim::Framework::Behavior
Behaviors perform actions.
Definition: Behavior.h:41
SurgSim::Physics::VirtualToolCoupler::getOutput
const std::shared_ptr< Framework::Component > getOutput()
Definition: VirtualToolCoupler.cpp:111
SurgSim::Physics::VirtualToolCoupler::m_forceIndex
int m_forceIndex
Definition: VirtualToolCoupler.h:292
SurgSim::Physics::VirtualToolCoupler::m_optionalAngularDamping
DataStructures::OptionalValue< double > m_optionalAngularDamping
User supplied Vtc damping parameter in angular mode (in N·m·s·rad-1)
Definition: VirtualToolCoupler.h:235
DataGroupBuilder.h
OptionalValue.h
SurgSim::Math::Vector3d
Eigen::Matrix< double, 3, 1 > Vector3d
A 3D vector of doubles.
Definition: Vector.h:57
ObjectFactory.h
SurgSim
Definition: CompoundShapeToGraphics.cpp:30
SurgSim::Physics::VirtualToolCoupler::m_angularDamping
double m_angularDamping
Used Vtc damping parameter in angular mode (in N·m·s·rad-1)
Definition: VirtualToolCoupler.h:263
SurgSim::Physics::VirtualToolCoupler::setLocalActive
void setLocalActive(bool val) override
Set the component's active state.
Definition: VirtualToolCoupler.cpp:558
SurgSim::Physics::VirtualToolCoupler::setRepresentation
void setRepresentation(const std::shared_ptr< Framework::Component > rigid)
Set the Physics Representation which follows the input.
Definition: VirtualToolCoupler.cpp:126
SurgSim::Physics::VirtualToolCoupler::getTargetManagerType
int getTargetManagerType() const override
Specifies which manger will handle this behavior.
Definition: VirtualToolCoupler.cpp:403
SurgSim::Physics::VirtualToolCoupler::m_outputData
DataStructures::DataGroup m_outputData
The DataGroup to output.
Definition: VirtualToolCoupler.h:241
Log.h
The convenience header that provides the entirety of the logging API.
SurgSim::DataStructures::DataGroup
A collection of NamedData objects.
Definition: DataGroup.h:69
SurgSim::Physics::VirtualToolCoupler::setPoseName
void setPoseName(const std::string &poseName=DataStructures::Names::POSE)
Set the name of the pose entry in the input DataGroup.
Definition: VirtualToolCoupler.cpp:136
SurgSim::Physics::VirtualToolCoupler
The VirtualToolCoupler couples a rigid object to an input/output device through a spring and damper.
Definition: VirtualToolCoupler.h:59
SurgSim::Physics::VirtualToolCoupler::m_localAttachmentPoint
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:272
SurgSim::Physics::VirtualToolCoupler::m_optionalLinearDamping
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:229
SurgSim::Physics::VirtualToolCoupler::doWakeUp
bool doWakeUp() override
Interface to be implemented by derived classes.
Definition: VirtualToolCoupler.cpp:311
SurgSim::Physics::VirtualToolCoupler::m_optionalAttachmentPoint
DataStructures::OptionalValue< Math::Vector3d > m_optionalAttachmentPoint
User supplied attachment point.
Definition: VirtualToolCoupler.h:238
SurgSim::Physics::VirtualToolCoupler::m_springJacobianIndex
int m_springJacobianIndex
Definition: VirtualToolCoupler.h:297
SurgSim::Physics::VirtualToolCoupler::getPoseName
const std::string & getPoseName()
Definition: VirtualToolCoupler.cpp:131
SurgSim::Physics::VirtualToolCoupler::m_torqueIndex
int m_torqueIndex
Definition: VirtualToolCoupler.h:293
SurgSim::Physics::VirtualToolCoupler::doRetire
void doRetire() override
Interface to be implemented by derived classes Has a default implementation, does nothing.
Definition: VirtualToolCoupler.cpp:552
SurgSim::Physics::VirtualToolCoupler::getAttachmentPoint
const Math::Vector3d & getAttachmentPoint()
Get the point of attachment on the Representation.
Definition: VirtualToolCoupler.cpp:480
SurgSim::Physics::VirtualToolCoupler::m_damperJacobianIndex
int m_damperJacobianIndex
Definition: VirtualToolCoupler.h:298
SurgSim::Physics::VirtualToolCoupler::update
void update(double dt) override
Update the behavior.
Definition: VirtualToolCoupler.cpp:141
SurgSim::Physics::VirtualToolCoupler::m_poseName
std::string m_poseName
Definition: VirtualToolCoupler.h:251
SurgSim::Physics::VirtualToolCoupler::getOptionalLinearStiffness
const DataStructures::OptionalValue< double > & getOptionalLinearStiffness() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:493
SurgSim::Physics::VirtualToolCoupler::m_input
std::shared_ptr< Input::InputComponent > m_input
The input component.
Definition: VirtualToolCoupler.h:244
SurgSim::Physics::VirtualToolCoupler::m_inputPoseIndex
int m_inputPoseIndex
Definition: VirtualToolCoupler.h:296
SurgSim::Physics::VirtualToolCoupler::setHapticOutputOnlyWhenColliding
void setHapticOutputOnlyWhenColliding(bool haptic)
Set whether or not the haptic forces should be provided only during collisions.
Definition: VirtualToolCoupler.cpp:569
SurgSim::Physics::VirtualToolCoupler::getAngularStiffness
double getAngularStiffness()
Definition: VirtualToolCoupler.cpp:448
SurgSim::Physics::VirtualToolCoupler::getCalculateInertialTorques
bool getCalculateInertialTorques() const
Get whether the calculated torques will simulate inertia.
Definition: VirtualToolCoupler.cpp:547
SurgSim::Physics::VirtualToolCoupler::getOptionalAngularStiffness
const DataStructures::OptionalValue< double > & getOptionalAngularStiffness() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:514
SurgSim::Physics::VirtualToolCoupler::m_outputTorqueScaling
double m_outputTorqueScaling
Scaling factor for the torques sent to the OutputComponent.
Definition: VirtualToolCoupler.h:269
SurgSim::Physics::VirtualToolCoupler::setOptionalLinearDamping
void setOptionalLinearDamping(const DataStructures::OptionalValue< double > &linearDamping)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:498
SurgSim::Physics::VirtualToolCoupler::VirtualToolCoupler
VirtualToolCoupler(const std::string &name)
Constructor.
Definition: VirtualToolCoupler.cpp:49
SurgSim::Physics::VirtualToolCoupler::overrideLinearDamping
void overrideLinearDamping(double linearDamping)
Override the linear damping connecting the input device and the physics representation If this value ...
Definition: VirtualToolCoupler.cpp:424
SurgSim::Physics::VirtualToolCoupler::getInput
const std::shared_ptr< Framework::Component > getInput()
Definition: VirtualToolCoupler.cpp:101
SurgSim::Physics::VirtualToolCoupler::setOptionalAttachmentPoint
void setOptionalAttachmentPoint(const DataStructures::OptionalValue< Math::Vector3d > &attachmentPoint)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:530
SurgSim::Physics::VirtualToolCoupler::m_inputAngularVelocityIndex
int m_inputAngularVelocityIndex
Definition: VirtualToolCoupler.h:295
SurgSim::Physics::VirtualToolCoupler::m_optionalAngularStiffness
DataStructures::OptionalValue< double > m_optionalAngularStiffness
User supplied Vtc stiffness parameter in angular mode (in N·m rad-1)
Definition: VirtualToolCoupler.h:232
SurgSim::Physics::VirtualToolCoupler::getOptionalAttachmentPoint
const DataStructures::OptionalValue< Math::Vector3d > & getOptionalAttachmentPoint() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:537
SurgSim::Physics::VirtualToolCoupler::setOptionalAngularStiffness
void setOptionalAngularStiffness(const DataStructures::OptionalValue< double > &angularStiffness)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:508
SurgSim::Physics::VirtualToolCoupler::setInput
void setInput(const std::shared_ptr< Framework::Component > input)
Set the Input Component.
Definition: VirtualToolCoupler.cpp:106
SurgSim::Physics::VirtualToolCoupler::m_angularVelocityIndex
int m_angularVelocityIndex
Definition: VirtualToolCoupler.h:291
DataGroup.h
SurgSim::Physics::VirtualToolCoupler::setOptionalLinearStiffness
void setOptionalLinearStiffness(const DataStructures::OptionalValue< double > &linearStiffness)
Used for Serialization.
Definition: VirtualToolCoupler.cpp:487
SurgSim::Physics::VirtualToolCoupler::m_rigid
std::shared_ptr< RigidRepresentation > m_rigid
Definition: VirtualToolCoupler.h:250
string
string(TOUPPER ${DEVICE} DEVICE_UPPER_CASE) option(BUILD_DEVICE_$
Definition: CMakeLists.txt:38
SurgSim::Physics::VirtualToolCoupler::getRepresentation
const std::shared_ptr< Framework::Component > getRepresentation()
Definition: VirtualToolCoupler.cpp:121
SurgSim::Physics::VirtualToolCoupler::SURGSIM_CLASSNAME
SURGSIM_CLASSNAME(SurgSim::Physics::VirtualToolCoupler)
Behavior.h
SurgSim::Physics::VirtualToolCoupler::overrideAngularStiffness
void overrideAngularStiffness(double angularStiffness)
Override the angular stiffness connecting the input device and the physics representation If this val...
Definition: VirtualToolCoupler.cpp:440
SurgSim::Physics::VirtualToolCoupler::m_linearStiffness
double m_linearStiffness
Used Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:254
SurgSim::Physics::VirtualToolCoupler::getOptionalAngularDamping
const DataStructures::OptionalValue< double > & getOptionalAngularDamping() const
Used for Serialization.
Definition: VirtualToolCoupler.cpp:525
SurgSim::Physics::VirtualToolCoupler::overrideAttachmentPoint
void overrideAttachmentPoint(const Math::Vector3d &attachment)
Override the point of attachment to the Representation If this value is not provided,...
Definition: VirtualToolCoupler.cpp:472
SurgSim::Physics::VirtualToolCoupler::overrideAngularDamping
void overrideAngularDamping(double angularDamping)
Override the angular damping connecting the input device and the physics representation If this value...
Definition: VirtualToolCoupler.cpp:456
SurgSim::Physics::VirtualToolCoupler::getAngularDamping
double getAngularDamping()
Definition: VirtualToolCoupler.cpp:464
SurgSim::Physics::VirtualToolCoupler::m_logger
std::shared_ptr< Framework::Logger > m_logger
The logger.
Definition: VirtualToolCoupler.h:279
SurgSim::Physics::VirtualToolCoupler::m_poseIndex
int m_poseIndex
Definition: VirtualToolCoupler.h:289
SurgSim::Physics::VirtualToolCoupler::setOutput
void setOutput(const std::shared_ptr< Framework::Component > output)
Set the Output Component (if any)
Definition: VirtualToolCoupler.cpp:116
SurgSim::Physics::VirtualToolCoupler::m_hapticOutputOnlyWhenColliding
bool m_hapticOutputOnlyWhenColliding
Whether or not the VTC sends forces and torques to the output device (if any) only when the tool is c...
Definition: VirtualToolCoupler.h:282