ros2_control - humble
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
transmission_interface::FourBarLinkageTransmission Class Reference

Implementation of a four-bar-linkage transmission. More...

#include <four_bar_linkage_transmission.hpp>

Inheritance diagram for transmission_interface::FourBarLinkageTransmission:
Inheritance graph
[legend]
Collaboration diagram for transmission_interface::FourBarLinkageTransmission:
Collaboration graph
[legend]

Public Member Functions

 FourBarLinkageTransmission (const std::vector< double > &actuator_reduction, const std::vector< double > &joint_reduction, const std::vector< double > &joint_offset=std::vector< double >(2, 0.0))
 
void configure (const std::vector< JointHandle > &joint_handles, const std::vector< ActuatorHandle > &actuator_handles) override
 
void actuator_to_joint () override
 Transform variables from actuator to joint space.
 
void joint_to_actuator () override
 Transform variables from joint to actuator space.
 
std::size_t num_actuators () const override
 
std::size_t num_joints () const override
 
const std::vector< double > & get_actuator_reduction () const
 
const std::vector< double > & get_joint_reduction () const
 
const std::vector< double > & get_joint_offset () const
 
std::string get_handles_info () const
 Get human-friendly report of handles.
 

Protected Attributes

std::vector< double > actuator_reduction_
 
std::vector< double > joint_reduction_
 
std::vector< double > joint_offset_
 
std::vector< JointHandlejoint_position_
 
std::vector< JointHandlejoint_velocity_
 
std::vector< JointHandlejoint_effort_
 
std::vector< ActuatorHandleactuator_position_
 
std::vector< ActuatorHandleactuator_velocity_
 
std::vector< ActuatorHandleactuator_effort_
 

Detailed Description

Implementation of a four-bar-linkage transmission.

This transmission relates two actuators and two joints through a mechanism in which the state of the first joint only depends on the first actuator, while the second joint depends on both actuators, as illustrated below. Although the class name makes specific reference to the four-bar-linkage, there are other mechanical layouts that yield the same behavior, such as the remote actuation example also depicted below.

Effort
Velocity
Position
Actuator to joint

\begin{eqnarray*} \tau_{j_1} & = & n_{j_1} n_{a_1} \tau_{a_1} \\ \tau_{j_2} & = & n_{j_2} (n_{a_2} \tau_{a_2} - n_{j_1} n_{a_1} \tau_{a_1}) \end{eqnarray*}

\begin{eqnarray*} \dot{x}_{j_1} & = & \frac{ \dot{x}_{a_1} }{ n_{j_1} n_{a_1} } \\ \dot{x}_{j_2} & = & \frac{ \dot{x}_{a_2} / n_{a_2} - \dot{x}_{a_1} / (n_{j_1} n_{a_1}) }{ n_{j_2} } \end{eqnarray*}

\begin{eqnarray*} x_{j_1} & = & \frac{ x_{a_1} }{ n_{j_1} n_{a_1} } + x_{off_1} \\ x_{j_2} & = & \frac{ x_{a_2} / n_{a_2} - x_{a_1} / (n_{j_1} n_{a_1}) }{ n_{j_2} } + x_{off_2} \end{eqnarray*}

Joint to actuator

\begin{eqnarray*} \tau_{a_1} & = & \tau_{j_1} / (n_{j_1} n_{a_1}) \\ \tau_{a_2} & = & \frac{ \tau_{j_1} + \tau_{j_2} / n_{j_2} }{ n_{a_2} } \end{eqnarray*}

\begin{eqnarray*} \dot{x}_{a_1} & = & n_{j_1} n_{a_1} \dot{x}_{j_1} \\ \dot{x}_{a_2} & = & n_{a_2} (\dot{x}_{j_1} + n_{j_2} \dot{x}_{j_2}) \end{eqnarray*}

\begin{eqnarray*} x_{a_1} & = & n_{j_1} n_{a_1} (x_{j_1} - x_{off_1}) \\ x_{a_2} & = & n_{a_2} \left[(x_{j_1} - x_{off_1}) + n_{j_2} (x_{j_2} - x_{off_2})\right] \end{eqnarray*}

where:

Constructor & Destructor Documentation

◆ FourBarLinkageTransmission()

transmission_interface::FourBarLinkageTransmission::FourBarLinkageTransmission ( const std::vector< double > &  actuator_reduction,
const std::vector< double > &  joint_reduction,
const std::vector< double > &  joint_offset = std::vector<double>(2, 0.0) 
)
inline
Parameters
actuator_reductionReduction ratio of actuators.
joint_reductionReduction ratio of joints.
joint_offsetJoint position offset used in the position mappings.
Precondition
Nonzero actuator reduction values.

Member Function Documentation

◆ actuator_to_joint()

void transmission_interface::FourBarLinkageTransmission::actuator_to_joint ( )
inlineoverridevirtual

Transform variables from actuator to joint space.

Precondition
Actuator and joint vectors must have size 2 and point to valid data. To call this method it is not required that all other data vectors contain valid data, and can even remain empty.

Implements transmission_interface::Transmission.

◆ configure()

void transmission_interface::FourBarLinkageTransmission::configure ( const std::vector< JointHandle > &  joint_handles,
const std::vector< ActuatorHandle > &  actuator_handles 
)
overridevirtual
Parameters
[in]joint_handlesHandles of joint values.
[in]actuator_handlesHandles of actuator values.
Precondition
Handles are valid and matching in size

Implements transmission_interface::Transmission.

◆ joint_to_actuator()

void transmission_interface::FourBarLinkageTransmission::joint_to_actuator ( )
inlineoverridevirtual

Transform variables from joint to actuator space.

Precondition
Actuator and joint vectors must have size 2 and point to valid data. To call this method it is not required that all other data vectors contain valid data, and can even remain empty.

Implements transmission_interface::Transmission.

◆ num_actuators()

std::size_t transmission_interface::FourBarLinkageTransmission::num_actuators ( ) const
inlineoverridevirtual
Returns
Number of actuators managed by transmission, ie. the dimension of the actuator space.

Implements transmission_interface::Transmission.

◆ num_joints()

std::size_t transmission_interface::FourBarLinkageTransmission::num_joints ( ) const
inlineoverridevirtual
Returns
Number of joints managed by transmission, ie. the dimension of the joint space.

Implements transmission_interface::Transmission.


The documentation for this class was generated from the following file: