MBSVT 1.0
|
Module that manages the constraints. More...
Functions/Subroutines | |
subroutine, public | ADDConstr_UnitEulParam (body) |
Adds an unitary vector constraint to the Euler parameters of one body. It's NOT a user function, it's intended to be called by the solver. | |
subroutine, public | ADDConstr_dot1 (body1, body2, vector1, vector2) |
Adds a dot-1 joint between two bodies or between the ground and one body. | |
subroutine, public | ADDConstr_SpheJoint (body1, body2, point1, point2) |
Adds a sphercal joint between two bodies or between the ground and one body. | |
subroutine, public | ADDConstr_RevJoint (body1, body2, point1, point2, vect1, vect2) |
Adds a revolute joint between two bodies or between the ground and one body. | |
subroutine, public | ADDConstr_TransJoint (body1, body2, point1, point2, vect1x, vect1y, vect2x, vect2y) |
Adds a translational joint between two bodies or between the ground and one body. | |
subroutine, public | ADDConstr_Drive_rgx (body, i_MOTOR) |
Adds a driving constraint to the x-coordinate of the CDM of a body. | |
subroutine, public | ADDConstr_Drive_rgy (body, i_MOTOR) |
Adds a driving constraint to the y-coordinate of the CDM of a body. | |
subroutine, public | ADDConstr_Drive_rgz (body, i_MOTOR) |
Adds a driving constraint to the z-coordinate of the CDM of a body. | |
subroutine, public | ADDConstr_Drive_eu0 (body, i_MOTOR) |
Adds a driving constraint to the 1st Euler parameter of a body. | |
subroutine, public | ADDConstr_Drive_eu1 (body, i_MOTOR) |
Adds a driving constraint to the 2nd Euler parameter of a body. | |
subroutine, public | ADDConstr_Drive_eu2 (body, i_MOTOR) |
Adds a driving constraint to the 3rd Euler parameter of a body. | |
subroutine, public | ADDConstr_Drive_eu3 (body, i_MOTOR) |
Adds a driving constraint to the 4rd Euler parameter of a body. | |
subroutine | ADDConstr_Drive_rgEul (ind, i_MOTOR) |
Adds a driving constraint to any body coordinate. It's NOT a user function, it's intended to be called by other user constraints. | |
subroutine, public | ADDConstr_Drive_dist (body1, body2, point1, point2, i_MOTOR) |
Adds a driving constraint to a distance between two points in two different bodies. | |
subroutine, public | evalconstraints |
Subroutine that evaluates the constraints vector ( ![]() | |
subroutine, public | evaljacobian |
Subroutine that evaluates the jacobian of the constraints vector ( ![]() | |
subroutine, public | evalderjacobianqp |
Subroutine that evaluates the term ![]() | |
subroutine, public | evalderjacobian |
Subroutine that evaluates the term ![]() | |
subroutine, public | evalderderjacobian |
Subroutine that evaluates the term ![]() | |
subroutine, public | evaljacobderjacobianqp |
subroutine, public | evalfit |
subroutine, public | evalfitp |
subroutine, public | evaljacob_jacob (lb) |
subroutine, public | evaljacobT_jacob (lb) |
subroutine, public | CONSTRAINTS_Setup |
Variables | |
INTEGER | nConstr_UnitEulParam = 0 |
INTEGER | nConstr_dot1GB = 0 |
INTEGER | nConstr_dot1 = 0 |
INTEGER | nConstr_SpheJointGB = 0 |
INTEGER | nConstr_SpheJoint = 0 |
INTEGER | nConstr_RevJointGB = 0 |
INTEGER | nConstr_RevJoint = 0 |
INTEGER | nConstr_TransJointGB = 0 |
INTEGER | nConstr_TransJoint = 0 |
INTEGER | nConstr_Drive_rgEul = 0 |
INTEGER | nConstr_Drive_distGB = 0 |
INTEGER | nConstr_Drive_dist = 0 |
TYPE(typeConstr_UnitEulParam), dimension(:), allocatable | Constr_UnitEulParam |
TYPE(typeConstr_dot1), dimension(:), allocatable | Constr_dot1GB |
TYPE(typeConstr_dot1), dimension(:), allocatable | Constr_dot1 |
TYPE(typeConstr_SpheJoint), dimension(:), allocatable | Constr_SpheJointGB |
TYPE(typeConstr_SpheJoint), dimension(:), allocatable | Constr_SpheJoint |
TYPE(typeConstr_RevJoint), dimension(:), allocatable | Constr_RevJointGB |
TYPE(typeConstr_RevJoint), dimension(:), allocatable | Constr_RevJoint |
TYPE(typeConstr_TransJoint), dimension(:), allocatable | Constr_TransJointGB |
TYPE(typeConstr_TransJoint), dimension(:), allocatable | Constr_TransJoint |
TYPE(typeconstr_Drive_rgEul), dimension(:), allocatable | Constr_Drive_rgEul |
TYPE(typeconstr_Drive_Dist), dimension(:), allocatable | Constr_Drive_DistGB |
TYPE(typeconstr_Drive_Dist), dimension(:), allocatable | Constr_Drive_Dist |
Module that manages the constraints.
This module:
1)Authomatically creates the rigid body constraints, associated to the redundant Euler parameters.
2)Add joints to the model (requested by the user), translating them into primitive constraints for each type of joint.
3)Manages the evaluation of the constraints vector, its jacobian matrix and all its associated derivatives.
subroutine,public CONSTRAINTS::ADDConstr_dot1 | ( | INTEGER,intent(in) | body1, |
INTEGER,intent(in) | body2, | ||
real(8),dimension(3),intent(in) | vector1, | ||
real(8),dimension(3),intent(in) | vector2 | ||
) |
Adds a dot-1 joint between two bodies or between the ground and one body.
body1 | first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground. |
body2 | second body involved. It cannot be the ground. |
vector1 | vector in the first body/ground in the body reference frame. |
vector2 | vector in the second body in the body reference frame. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_dist | ( | INTEGER,intent(in) | body1, |
INTEGER,intent(in) | body2, | ||
REAL(8),dimension(3),intent(in) | point1, | ||
REAL(8),dimension(3),intent(in) | point2, | ||
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to a distance between two points in two different bodies.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu3. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_eu0 | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the 1st Euler parameter of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu0. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_eu1 | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the 2nd Euler parameter of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu1. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_eu2 | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the 3rd Euler parameter of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu2. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_eu3 | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the 4rd Euler parameter of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable eu3. |
subroutine CONSTRAINTS::ADDConstr_Drive_rgEul | ( | INTEGER,intent(in) | ind, |
INTEGER,intent(in) | i_MOTOR | ||
) | [private] |
Adds a driving constraint to any body coordinate. It's NOT a user function, it's intended to be called by other user constraints.
ind | index of the coordinate involved. |
i_MOTOR | index of the kinematic actuator. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_rgx | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the x-coordinate of the CDM of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable rgx. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_rgy | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the y-coordinate of the CDM of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable rgy. |
subroutine,public CONSTRAINTS::ADDConstr_Drive_rgz | ( | INTEGER,intent(in) | body, |
INTEGER,intent(in) | i_MOTOR | ||
) |
Adds a driving constraint to the z-coordinate of the CDM of a body.
body | body involved. |
i_MOTOR | index of the kinematic actuator. The user must evaluate the kinematic guidance function and introduce the function and the derivatives in the vectors STATE::pos,STATE::vel, STATE::ace in each time step: STATE::pos(i_MOTOR),STATE::vel(i_MOTOR),STATE::ace(i_MOTOR) contain the kinematic guidance function and its derivatives for the variable rgz. |
subroutine,public CONSTRAINTS::ADDConstr_RevJoint | ( | INTEGER,intent(in) | body1, |
INTEGER,intent(in) | body2, | ||
REAL(8),dimension(3),intent(in) | point1, | ||
REAL(8),dimension(3),intent(in) | point2, | ||
REAL(8),dimension(3),intent(in) | vect1, | ||
REAL(8),dimension(3),intent(in) | vect2 | ||
) |
Adds a revolute joint between two bodies or between the ground and one body.
body1 | first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground. |
body2 | second body involved. It cannot be the ground. |
point1 | point in the first body/ground in the body reference frame. |
point2 | point in the second body in the body reference frame. |
vect1 | vector in the first body/ground in the body reference frame. |
vect2 | vector in the second body in the body reference frame. |
subroutine,public CONSTRAINTS::ADDConstr_SpheJoint | ( | INTEGER,intent(in) | body1, |
INTEGER,intent(in) | body2, | ||
real(8),dimension(3),intent(in) | point1, | ||
real(8),dimension(3),intent(in) | point2 | ||
) |
Adds a sphercal joint between two bodies or between the ground and one body.
body1 | first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground. |
body2 | second body involved. It cannot be the ground. |
point1 | point in the first body/ground in the body reference frame. |
point2 | point in the second body in the body reference frame. |
subroutine,public CONSTRAINTS::ADDConstr_TransJoint | ( | INTEGER,intent(in) | body1, |
INTEGER,intent(in) | body2, | ||
REAL(8),dimension(3),intent(in) | point1, | ||
REAL(8),dimension(3),intent(in) | point2, | ||
REAL(8),dimension(3),intent(in) | vect1x, | ||
REAL(8),dimension(3),intent(in) | vect1y, | ||
REAL(8),dimension(3),intent(in) | vect2x, | ||
REAL(8),dimension(3),intent(in) | vect2y | ||
) |
Adds a translational joint between two bodies or between the ground and one body.
body1 | first body involved. It can be "SOLIDS::ground" if the second body is attached to the ground. |
body2 | second body involved. It cannot be the ground. |
point1 | point in the first body/ground in the body reference frame. |
point2 | point in the second body in the body reference frame. |
vect1y | vector along the tranlating direction in the first body/ground in the body reference frame. |
vect1x | vector perpendicular to vect1y in the first body/ground in the body reference frame. |
vect2y | vector along the tranlating direction in the second body in the body reference frame. |
vect2x | vector perpendicular to vect1y and parallel to vect1x in the second body in the body reference frame. |
subroutine,public CONSTRAINTS::ADDConstr_UnitEulParam | ( | INTEGER,intent(in) | body | ) |
Adds an unitary vector constraint to the Euler parameters of one body. It's NOT a user function, it's intended to be called by the solver.
body | corresponding body |
subroutine,public CONSTRAINTS::CONSTRAINTS_Setup | ( | ) |
subroutine,public CONSTRAINTS::evalconstraints | ( | ) |
Subroutine that evaluates the constraints vector ( ). It's NOT a user function, it's intended to be called by the solver.
subroutine,public CONSTRAINTS::evalderderjacobian | ( | ) |
Subroutine that evaluates the term . It's NOT a user function, it's intended to be called by the solver.
subroutine,public CONSTRAINTS::evalderjacobian | ( | ) |
Subroutine that evaluates the term . It's NOT a user function, it's intended to be called by the solver.
subroutine,public CONSTRAINTS::evalderjacobianqp | ( | ) |
Subroutine that evaluates the term . It's NOT a user function, it's intended to be called by the solver.
subroutine,public CONSTRAINTS::evalfit | ( | ) |
subroutine,public CONSTRAINTS::evalfitp | ( | ) |
subroutine,public CONSTRAINTS::evaljacob_jacob | ( | real(8),dimension(dim),intent(in) | lb | ) |
subroutine,public CONSTRAINTS::evaljacobderjacobianqp | ( | ) |
subroutine,public CONSTRAINTS::evaljacobian | ( | ) |
Subroutine that evaluates the jacobian of the constraints vector ( ). It's NOT a user function, it's intended to be called by the solver.
subroutine,public CONSTRAINTS::evaljacobT_jacob | ( | real(8),dimension(nrt),intent(in) | lb | ) |
TYPE (typeConstr_dot1),dimension(:),allocatable CONSTRAINTS::Constr_dot1 |
TYPE (typeConstr_dot1),dimension(:),allocatable CONSTRAINTS::Constr_dot1GB |
TYPE (typeconstr_Drive_Dist),dimension(:),allocatable CONSTRAINTS::Constr_Drive_Dist |
TYPE (typeconstr_Drive_Dist),dimension(:),allocatable CONSTRAINTS::Constr_Drive_DistGB |
TYPE (typeconstr_Drive_rgEul),dimension(:),allocatable CONSTRAINTS::Constr_Drive_rgEul |
TYPE (typeConstr_RevJoint),dimension(:),allocatable CONSTRAINTS::Constr_RevJoint |
TYPE (typeConstr_RevJoint),dimension(:),allocatable CONSTRAINTS::Constr_RevJointGB |
TYPE (typeConstr_SpheJoint),dimension(:),allocatable CONSTRAINTS::Constr_SpheJoint |
TYPE (typeConstr_SpheJoint),dimension(:),allocatable CONSTRAINTS::Constr_SpheJointGB |
TYPE (typeConstr_TransJoint),dimension(:),allocatable CONSTRAINTS::Constr_TransJoint |
TYPE (typeConstr_TransJoint),dimension(:),allocatable CONSTRAINTS::Constr_TransJointGB |
TYPE (typeConstr_UnitEulParam),dimension(:),allocatable CONSTRAINTS::Constr_UnitEulParam |
INTEGER CONSTRAINTS::nConstr_dot1 = 0 |
INTEGER CONSTRAINTS::nConstr_dot1GB = 0 |
INTEGER CONSTRAINTS::nConstr_Drive_dist = 0 |
INTEGER CONSTRAINTS::nConstr_Drive_distGB = 0 |
INTEGER CONSTRAINTS::nConstr_Drive_rgEul = 0 |
INTEGER CONSTRAINTS::nConstr_RevJoint = 0 |
INTEGER CONSTRAINTS::nConstr_RevJointGB = 0 |
INTEGER CONSTRAINTS::nConstr_SpheJoint = 0 |
INTEGER CONSTRAINTS::nConstr_SpheJointGB = 0 |
INTEGER CONSTRAINTS::nConstr_TransJoint = 0 |
INTEGER CONSTRAINTS::nConstr_TransJointGB = 0 |
INTEGER CONSTRAINTS::nConstr_UnitEulParam = 0 |