Class FourBarLinkageTransmission

Inheritance Relationships

Base Type

Class Documentation

class FourBarLinkageTransmission : public transmission_interface::Transmission

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.../_images/four_bar_linkage_transmission.png

where:

  • \( x \), \( \dot{x} \) and \( \tau \) are position, velocity and effort variables, respectively.

  • Subindices \( _a \) and \( _j \) are used to represent actuator-space and joint-space variables, respectively.

  • \( x_{off}\) represents the offset between motor and joint zeros, expressed in joint position coordinates. (cf. SimpleTransmission class documentation for a more detailed description of this variable).

  • \( n \) represents a transmission ratio (reducers/amplifiers are depicted as timing belts in the figure). A transmission ratio can take any real value except zero. In particular:

    • If its absolute value is greater than one, it’s a velocity reducer / effort amplifier, while if its absolute value lies in \( (0, 1) \) it’s a velocity amplifier / effort reducer.

    • Negative values represent a direction flip, ie. input and output move in opposite directions.

    • Important: Use transmission ratio signs to match this class’ convention of positive actuator/joint directions with a given mechanical design, as they will in general not match.

Public Functions

inline 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))
Parameters:
  • actuator_reduction – Reduction ratio of actuators.

  • joint_reduction – Reduction ratio of joints.

  • joint_offset – Joint position offset used in the position mappings.

Pre:

Nonzero actuator reduction values.

virtual void configure(const std::vector<JointHandle> &joint_handles, const std::vector<ActuatorHandle> &actuator_handles) override
Parameters:
  • joint_handles[in] Handles of joint values.

  • actuator_handles[in] Handles of actuator values.

Pre:

Handles are valid and matching in size

inline virtual void actuator_to_joint() override

Transform variables from actuator to joint space.

Pre:

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.

inline virtual void joint_to_actuator() override

Transform variables from joint to actuator space.

Pre:

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.

inline virtual std::size_t num_actuators() const override
Returns:

Number of actuators managed by transmission, ie. the dimension of the actuator space.

inline virtual std::size_t num_joints() const override
Returns:

Number of joints managed by transmission, ie. the dimension of the joint space.

inline const std::vector<double> &get_actuator_reduction() const
inline const std::vector<double> &get_joint_reduction() const
inline 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<JointHandle> joint_position_
std::vector<JointHandle> joint_velocity_
std::vector<JointHandle> joint_effort_
std::vector<ActuatorHandle> actuator_position_
std::vector<ActuatorHandle> actuator_velocity_
std::vector<ActuatorHandle> actuator_effort_