Simbody  3.8
Constraint_Rod.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMBODY_CONSTRAINT_ROD_H_
2 #define SimTK_SIMBODY_CONSTRAINT_ROD_H_
3 
4 /* -------------------------------------------------------------------------- *
5  * Simbody(tm) *
6  * -------------------------------------------------------------------------- *
7  * This is part of the SimTK biosimulation toolkit originating from *
8  * Simbios, the NIH National Center for Physics-Based Simulation of *
9  * Biological Structures at Stanford, funded under the NIH Roadmap for *
10  * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11  * *
12  * Portions copyright (c) 2007-14 Stanford University and the Authors. *
13  * Authors: Michael Sherman *
14  * Contributors: *
15  * *
16  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17  * not use this file except in compliance with the License. You may obtain a *
18  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19  * *
20  * Unless required by applicable law or agreed to in writing, software *
21  * distributed under the License is distributed on an "AS IS" BASIS, *
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23  * See the License for the specific language governing permissions and *
24  * limitations under the License. *
25  * -------------------------------------------------------------------------- */
26 
31 
32 namespace SimTK {
33 
34 //==============================================================================
35 // ROD (CONSTANT DISTANCE) CONSTRAINT
36 //==============================================================================
37 
53 public:
54  // no default constructor
55 
56 //------------------------------------------------------------------------------
93 Rod(MobilizedBody& mobod1, const Vec3& defaultPointOnBody1,
94  MobilizedBody& mobod2, const Vec3& defaultPointOnBody2,
95  Real defaultRodLength);
96 
115 Rod(MobilizedBody& mobod1, MobilizedBody& mobod2,
116  Real defaultRodLength);
117 
120 Rod() {}
121 
125 
129 
134 Rod& setDefaultPointOnBody1(const Vec3& defaultPoint);
139 Rod& setDefaultPointOnBody2(const Vec3& defaultPoint);
144 Rod& setDefaultRodLength(Real defaultRodLength);
145 
162 //------------------------------------------------------------------------------
174  // nothing yet
177 //------------------------------------------------------------------------------
201 const Rod& setPointOnBody1(State& state, const Vec3& p_B1P) const;
208 const Rod& setPointOnBody2(State& state, const Vec3& p_B2Q) const;
213 const Rod& setRodLength(State& state, Real rodLength) const;
219 const Vec3& getPointOnBody1(const State& state) const;
225 const Vec3& getPointOnBody2(const State& state) const;
228 Real getRodLength(const State& state) const;
231 //------------------------------------------------------------------------------
241 
246 
249 
255 Real getMultiplier(const State&) const;
256 
261 Real getRodTension(const State&) const;
262 
269 
276 Real findLengthViolation(const State& state) const;
277 
280 //------------------------------------------------------------------------------
287 MobilizedBodyIndex getBody2MobilizedBodyIndex() const; // hide from Doxygen
293 };
294 
295 } // namespace SimTK
296 
297 #endif // SimTK_SIMBODY_CONSTRAINT_ROD_H_
298 
299 
300 
This defines the base Constraint class and related classes, which are used to specify limitations on ...
#define SimTK_INSERT_DERIVED_HANDLE_DECLARATIONS(DERIVED, DERIVED_IMPL, PARENT)
Definition: PrivateImplementation.h:343
#define SimTK_SIMBODY_EXPORT
Definition: Simbody/include/simbody/internal/common.h:68
This constraint consists of one constraint equation that enforces a constant distance between a point...
Definition: Constraint_Rod.h:52
const Vec3 & getDefaultPointOnBody2() const
Return the default location for the point attached to the second mobilized body, mobod2,...
MobilizedBodyIndex getBody2MobilizedBodyIndex() const
(Obscure) Use getMobilizedBody2() instead.
Rod & setDefaultRodLength(Real defaultRodLength)
Replace the default rod length (distance), replacing whatever value was supplied on construction.
const Rod & setPointOnBody2(State &state, const Vec3 &p_B2Q) const
Modify the location of the point Q on the second body, mobod2, in this state by providing a new vecto...
Real getVelocityError(const State &) const
This is the time derivative of the value returned by getPositionError(); in this case it is the relat...
const Rod & setPointOnBody1(State &state, const Vec3 &p_B1P) const
Modify the location of the point P on the first body, mobod1, in this state by providing a new vector...
Real getPositionError(const State &) const
This is the signed violation of the position constraint, in length units.
Rod & setDefaultPointOnBody1(const Vec3 &defaultPoint)
Replace the default location for the point attached to the first body, mobod1, that was supplied on c...
const MobilizedBody & getMobilizedBody2() const
Return a reference to the second MobilizedBody given in the constructor.
Real findLengthViolation(const State &state) const
Calculate the amount by which this constraint is violated.
UnitVec3 findRodOrientationInG(const State &state) const
Return the instantaneous orientation of the Rod in the Ground frame.
const Vec3 & getPointOnBody2(const State &state) const
Return the position on body 2 of the rod end point Q attached to the second body, mobod2,...
const MobilizedBody & getMobilizedBody1() const
Return a reference to the first MobilizedBody given in the constructor.
Rod & setDefaultPointOnBody2(const Vec3 &defaultPoint)
Replace the default location for the point attached to the second body, mobod2, that was supplied on ...
const Vec3 & getDefaultPointOnBody1() const
Return the default location for the point attached to the first mobilized body, mobod1,...
Real getDefaultRodLength() const
Return the default rod length (distance) as set during construction or by the most recent call to set...
MobilizedBodyIndex getBody1MobilizedBodyIndex() const
(Obscure) Use getMobilizedBody1() instead.
Real getMultiplier(const State &) const
This is the Lagrange multiplier required to enforce the constraint equation generated here.
const Vec3 & getPointOnBody1(const State &state) const
Return the position on body 1 of the rod end point P on the first body, mobod1, as currently set in t...
Real getAccelerationError(const State &) const
This is the time derivative of the value returned by getVelocityError().
Rod(MobilizedBody &mobod1, const Vec3 &defaultPointOnBody1, MobilizedBody &mobod2, const Vec3 &defaultPointOnBody2, Real defaultRodLength)
Construct a Rod (constant distance) constraint as described in the Constraint::Rod class documentatio...
Real getRodLength(const State &state) const
Return the rod length (distance) as currently set in the given state.
Rod()
Default constructor creates an empty handle that can be used to reference any Rod Constraint.
Definition: Constraint_Rod.h:120
Rod(MobilizedBody &mobod1, MobilizedBody &mobod2, Real defaultRodLength)
Construct a Rod (constant distance) constraint as described in the Constraint::Rod class documentatio...
Real getRodTension(const State &) const
This returns the tension in the Rod being used to enforce the constraint.
const Rod & setRodLength(State &state, Real rodLength) const
Modify the rod length (distance) in this state.
This is the base class for all Constraint classes, which is just a handle for the underlying hidden i...
Definition: Constraint.h:67
This is for arrays indexed by mobilized body number within a subsystem (typically the SimbodyMatterSu...
A MobilizedBody is Simbody's fundamental body-and-joint object used to parameterize a system's motion...
Definition: MobilizedBody.h:169
This object is intended to contain all state information for a SimTK::System, except topological info...
Definition: State.h:280
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:607