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 
96  bool isHapticOutputOnlyWhenColliding() const;
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 
156  const Math::Vector3d& getAttachmentPoint();
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 
180  virtual DataStructures::DataGroup buildOutputData();
181 
184  void setOptionalLinearStiffness(const DataStructures::OptionalValue<double>& linearStiffness);
185 
188  const DataStructures::OptionalValue<double>& getOptionalLinearStiffness() const;
189 
193  void setOptionalLinearDamping(const DataStructures::OptionalValue<double>& linearDamping);
194 
197  const DataStructures::OptionalValue<double>& getOptionalLinearDamping() const;
198 
202  void setOptionalAngularStiffness(const DataStructures::OptionalValue<double>& angularStiffness);
203 
206  const DataStructures::OptionalValue<double>& getOptionalAngularStiffness() const;
207 
211  void setOptionalAngularDamping(const DataStructures::OptionalValue<double>& angularDamping);
212 
215  const DataStructures::OptionalValue<double>& getOptionalAngularDamping() const;
216 
219  void setOptionalAttachmentPoint(const DataStructures::OptionalValue<Math::Vector3d>& attachmentPoint);
220 
223  const DataStructures::OptionalValue<Math::Vector3d>& getOptionalAttachmentPoint() const;
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;
251  std::string m_poseName;
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
DataStructures::DataGroup m_outputData
The DataGroup to output.
Definition: VirtualToolCoupler.h:241
Definition: CompoundShapeToGraphics.cpp:29
std::shared_ptr< Input::OutputComponent > m_output
The output component.
Definition: VirtualToolCoupler.h:247
int m_linearVelocityIndex
Definition: VirtualToolCoupler.h:290
int m_torqueIndex
Definition: VirtualToolCoupler.h:293
double m_linearStiffness
Used Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:254
int m_inputPoseIndex
Definition: VirtualToolCoupler.h:296
int m_springJacobianIndex
Definition: VirtualToolCoupler.h:297
The convenience header that provides the entirety of the logging API.
double m_outputTorqueScaling
Scaling factor for the torques sent to the OutputComponent.
Definition: VirtualToolCoupler.h:269
int m_poseIndex
Definition: VirtualToolCoupler.h:289
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
double m_angularDamping
Used Vtc damping parameter in angular mode (in N·m·s·rad-1)
Definition: VirtualToolCoupler.h:263
int m_inputLinearVelocityIndex
Definition: VirtualToolCoupler.h:294
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:272
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
#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:291
int m_inputAngularVelocityIndex
Definition: VirtualToolCoupler.h:295
double m_linearDamping
Used Vtc damping parameter in linear mode (in N·s·m-1 or Kg·s-1)
Definition: VirtualToolCoupler.h:257
DataStructures::OptionalValue< double > m_optionalLinearStiffness
User supplied Vtc stiffness parameter in linear mode (in N·m-1)
Definition: VirtualToolCoupler.h:226
std::string m_poseName
Definition: VirtualToolCoupler.h:251
A collection of NamedData objects.
Definition: DataGroup.h:68
bool m_calculateInertialTorques
Whether or not the calculated torques will simulate inertia.
Definition: VirtualToolCoupler.h:276
Eigen::Transform< double, 3, Eigen::Isometry > RigidTransform3d
A 3D rigid (isometric) transform, represented as doubles.
Definition: RigidTransform.h:46
The VirtualToolCoupler couples a rigid object to an input/output device through a spring and damper...
Definition: VirtualToolCoupler.h:58
Behaviors perform actions.
Definition: Behavior.h:40
DataStructures::OptionalValue< Math::Vector3d > m_optionalAttachmentPoint
User supplied attachment point.
Definition: VirtualToolCoupler.h:238
int m_damperJacobianIndex
Definition: VirtualToolCoupler.h:298
std::shared_ptr< Input::InputComponent > m_input
The input component.
Definition: VirtualToolCoupler.h:244
double m_outputForceScaling
Scaling factor for the forces sent to the OutputComponent.
Definition: VirtualToolCoupler.h:266
std::shared_ptr< RigidRepresentation > m_rigid
Definition: VirtualToolCoupler.h:250
Math::RigidTransform3d m_previousInputPose
The previous input pose.
Definition: VirtualToolCoupler.h:285
Eigen::Matrix< double, 3, 1 > Vector3d
A 3D vector of doubles.
Definition: Vector.h:57
DataStructures::OptionalValue< double > m_optionalAngularDamping
User supplied Vtc damping parameter in angular mode (in N·m·s·rad-1)
Definition: VirtualToolCoupler.h:235
std::shared_ptr< Framework::Logger > m_logger
The logger.
Definition: VirtualToolCoupler.h:279
double m_angularStiffness
Used Vtc stiffness parameter in angular mode (in N·m rad-1)
Definition: VirtualToolCoupler.h:260
int m_forceIndex
Definition: VirtualToolCoupler.h:292
DataStructures::OptionalValue< double > m_optionalAngularStiffness
User supplied Vtc stiffness parameter in angular mode (in N·m rad-1)
Definition: VirtualToolCoupler.h:232