dynamics_parallel_linkage Module

Provides types supporting the kinematic analysis of closed-loop, or parallel, linkages. The topology of the mechanism is described by a graph whose vertices are the links and whose edges are the joints. A spanning tree of that graph supplies the transformation path to each link, and the edges excluded from the tree define the loop-closure constraints that must be satisfied by any valid configuration.



Contents


Interfaces

public interface parallel_linkage

  • private function pl_init_containers(lnks, jnts, base, effector, tool) result(rst)

    Initializes a new parallel_linkage object.

    Arguments

    Type IntentOptional Attributes Name
    type(link_container), intent(in), dimension(:) :: lnks

    The collection of links forming the mechanism.

    type(joint), intent(in), dimension(:) :: jnts

    The collection of joints connecting the links.

    integer(kind=int32), intent(in), optional :: base

    The index of the link that is fixed to ground. If not supplied, the first link is used.

    integer(kind=int32), intent(in), optional :: effector

    The index of the link carrying the end-effector. If not supplied, the last link is used.

    real(kind=real64), intent(in), optional :: tool(4,4)

    The transformation matrix relating the end-effector coordinate frame to the body frame of the end-effector link. If not supplied, an identity matrix is used.

    Return Value type(parallel_linkage)

    The resulting parallel_linkage object.

  • private function pl_init_array(lnks, jnts, base, effector, tool) result(rst)

    Initializes a new parallel_linkage object.

    Arguments

    Type IntentOptional Attributes Name
    class(link), intent(in), dimension(:) :: lnks

    The collection of links forming the mechanism.

    type(joint), intent(in), dimension(:) :: jnts

    The collection of joints connecting the links.

    integer(kind=int32), intent(in), optional :: base

    The index of the link that is fixed to ground. If not supplied, the first link is used.

    integer(kind=int32), intent(in), optional :: effector

    The index of the link carrying the end-effector. If not supplied, the last link is used.

    real(kind=real64), intent(in), optional :: tool(4,4)

    The transformation matrix relating the end-effector coordinate frame to the body frame of the end-effector link. If not supplied, an identity matrix is used.

    Return Value type(parallel_linkage)

    The resulting parallel_linkage object.

public interface planar_linkage

  • private function pln_init_containers(lnks, jnts, base, effector, tool) result(rst)

    Initializes a new planar_linkage object.

    Arguments

    Type IntentOptional Attributes Name
    type(link_container), intent(in), dimension(:) :: lnks

    The collection of links forming the mechanism.

    type(joint), intent(in), dimension(:) :: jnts

    The collection of joints connecting the links. Every joint must be usable within a planar mechanism.

    integer(kind=int32), intent(in), optional :: base

    The index of the link that is fixed to ground. If not supplied, the first link is used.

    integer(kind=int32), intent(in), optional :: effector

    The index of the link carrying the end-effector. If not supplied, the last link is used.

    real(kind=real64), intent(in), optional :: tool(4,4)

    The transformation matrix relating the end-effector coordinate frame to the body frame of the end-effector link. If not supplied, an identity matrix is used.

    Return Value type(planar_linkage)

    The resulting planar_linkage object.

  • private function pln_init_array(lnks, jnts, base, effector, tool) result(rst)

    Initializes a new planar_linkage object.

    Arguments

    Type IntentOptional Attributes Name
    class(link), intent(in), dimension(:) :: lnks

    The collection of links forming the mechanism.

    type(joint), intent(in), dimension(:) :: jnts

    The collection of joints connecting the links. Every joint must be usable within a planar mechanism.

    integer(kind=int32), intent(in), optional :: base

    The index of the link that is fixed to ground. If not supplied, the first link is used.

    integer(kind=int32), intent(in), optional :: effector

    The index of the link carrying the end-effector. If not supplied, the last link is used.

    real(kind=real64), intent(in), optional :: tool(4,4)

    The transformation matrix relating the end-effector coordinate frame to the body frame of the end-effector link. If not supplied, an identity matrix is used.

    Return Value type(planar_linkage)

    The resulting planar_linkage object.


Derived Types

type, public ::  kinematic_mechanism

Defines the behavior common to all multi-link mechanisms, including those containing closed kinematic loops. The joint variables of the mechanism are collected into a single array; the variables belonging to each joint appear in the order in which the joints were supplied.

Type-Bound Procedures

procedure , public :: body_transform => km_body_transform Function
procedure , public :: constraint_jacobian => km_constraint_jacobian Function
procedure , public :: constraints => km_constraints Function
procedure , public :: end_effector_transform => km_effector_transform Function
procedure , public :: forward_kinematics => km_forward_kinematics Function
procedure , public :: get_actuated_indices => km_get_actuated_indices Function
procedure , public :: get_actuated_variable_count => km_get_nactuated Function
procedure , public :: get_actuated_variables => km_get_actuated_variables Function
procedure , public :: get_base_link => km_get_base Function
procedure , public :: get_configuration => km_get_configuration Function
procedure , public :: get_constraint_count => km_get_constraint_count Function
procedure , public :: get_degrees_of_freedom => km_get_dof Function
procedure , public :: get_end_effector_link => km_get_effector Function
procedure , public :: get_joint => km_get_joint Function
procedure , public :: get_joint_count => km_get_joint_count Function
procedure , public :: get_joint_variable_index => km_get_variable_index Function
procedure , public :: get_link => km_get_link Function
procedure , public :: get_link_count => km_get_link_count Function
procedure , public :: get_loop_count => km_get_loop_count Function
procedure (mechanism_dimension) , public :: get_space_dimension
procedure , public :: get_tool_frame => km_get_tool Function
procedure , public :: get_variable_count => km_get_variable_count Function
procedure , public :: inverse_kinematics => km_inverse_kinematics Function
procedure , public :: jacobian => km_jacobian Function
procedure , public :: joint_transform => km_joint_transform Function
procedure (mechanism_pose_error) , public :: pose_error
procedure , public :: set_configuration => km_set_configuration Subroutine
procedure , public :: set_tool_frame => km_set_tool Subroutine
procedure , public :: solve_configuration => km_solve_configuration Function

type, public ::  link_container

A container allowing a collection of differing link types to be stored within a single array.

Components

Type Visibility Attributes Name Initial
class(link), public, allocatable :: item

The link object.

type, public, extends(kinematic_mechanism) ::  parallel_linkage

Defines a spatial, closed-loop linkage. Each independent loop within the mechanism contributes six loop-closure constraint equations.

Constructor

private function pl_init_containers (lnks, jnts, base, effector, tool)

Initializes a new parallel_linkage object.

private function pl_init_array (lnks, jnts, base, effector, tool)

Initializes a new parallel_linkage object.

Type-Bound Procedures

procedure , public :: body_transform => km_body_transform Function
procedure , public :: constraint_jacobian => km_constraint_jacobian Function
procedure , public :: constraints => km_constraints Function
procedure , public :: end_effector_transform => km_effector_transform Function
procedure , public :: forward_kinematics => km_forward_kinematics Function
procedure , public :: get_actuated_indices => km_get_actuated_indices Function
procedure , public :: get_actuated_variable_count => km_get_nactuated Function
procedure , public :: get_actuated_variables => km_get_actuated_variables Function
procedure , public :: get_base_link => km_get_base Function
procedure , public :: get_configuration => km_get_configuration Function
procedure , public :: get_constraint_count => km_get_constraint_count Function
procedure , public :: get_degrees_of_freedom => km_get_dof Function
procedure , public :: get_end_effector_link => km_get_effector Function
procedure , public :: get_joint => km_get_joint Function
procedure , public :: get_joint_count => km_get_joint_count Function
procedure , public :: get_joint_variable_index => km_get_variable_index Function
procedure , public :: get_link => km_get_link Function
procedure , public :: get_link_count => km_get_link_count Function
procedure , public :: get_loop_count => km_get_loop_count Function
procedure , public :: get_space_dimension => pl_get_space_dimension Function
procedure , public :: get_tool_frame => km_get_tool Function
procedure , public :: get_variable_count => km_get_variable_count Function
procedure , public :: inverse_kinematics => km_inverse_kinematics Function
procedure , public :: jacobian => km_jacobian Function
procedure , public :: joint_transform => km_joint_transform Function
procedure , public :: pose_error => pl_pose_error Function
procedure , public :: set_configuration => km_set_configuration Subroutine
procedure , public :: set_tool_frame => km_set_tool Subroutine
procedure , public :: solve_configuration => km_solve_configuration Function

type, public, extends(kinematic_mechanism) ::  planar_linkage

Defines a planar, closed-loop linkage operating within the x-y plane. Each independent loop within the mechanism contributes three loop-closure constraint equations, avoiding the redundant equations that arise when a planar mechanism is analyzed in three dimensions.

Read more…

Constructor

private function pln_init_containers (lnks, jnts, base, effector, tool)

Initializes a new planar_linkage object.

private function pln_init_array (lnks, jnts, base, effector, tool)

Initializes a new planar_linkage object.

Type-Bound Procedures

procedure , public :: body_transform => km_body_transform Function
procedure , public :: constraint_jacobian => km_constraint_jacobian Function
procedure , public :: constraints => km_constraints Function
procedure , public :: end_effector_pose => pln_end_effector_pose Function
procedure , public :: end_effector_transform => km_effector_transform Function
procedure , public :: forward_kinematics => km_forward_kinematics Function
procedure , public :: get_actuated_indices => km_get_actuated_indices Function
procedure , public :: get_actuated_variable_count => km_get_nactuated Function
procedure , public :: get_actuated_variables => km_get_actuated_variables Function
procedure , public :: get_base_link => km_get_base Function
procedure , public :: get_configuration => km_get_configuration Function
procedure , public :: get_constraint_count => km_get_constraint_count Function
procedure , public :: get_degrees_of_freedom => km_get_dof Function
procedure , public :: get_end_effector_link => km_get_effector Function
procedure , public :: get_joint => km_get_joint Function
procedure , public :: get_joint_count => km_get_joint_count Function
procedure , public :: get_joint_variable_index => km_get_variable_index Function
procedure , public :: get_link => km_get_link Function
procedure , public :: get_link_count => km_get_link_count Function
procedure , public :: get_loop_count => km_get_loop_count Function
procedure , public :: get_space_dimension => pln_get_space_dimension Function
procedure , public :: get_tool_frame => km_get_tool Function
procedure , public :: get_variable_count => km_get_variable_count Function
procedure , public :: inverse_kinematics => km_inverse_kinematics Function
procedure , public :: jacobian => km_jacobian Function
procedure , public :: joint_transform => km_joint_transform Function
procedure , public :: pose_error => pln_pose_error Function
procedure , public :: set_configuration => km_set_configuration Subroutine
procedure , public :: set_tool_frame => km_set_tool Subroutine
procedure , public :: solve_configuration => km_solve_configuration Function