Skip to content
LIBRARY
KinematicPTP.md

KinematicPTP

A component emitting a trajectory created by the point_to_point trajectory generator.

The trajectory exhibits piecewise constant acceleration, piecewise linear velocity and piecewise quadratic position curves, subject to maximum velocity and acceleration constraints.

Several axes are planned jointly: all axes accelerate, cruise and decelerate in unison and reach their end position at the same time, tracing a straight line in output space. The axis with the tightest limit saturates it, all other axes stay below theirs, and the duration of the motion is set by the axis that needs the most time.

Usage

MultibodyComponents.KinematicPTP(q0=fill(0.0, nout), q1=fill(1.0, nout), qd_max=fill(1.0, nout), qdd_max=fill(1.0, nout))

Parameters:

NameDescriptionUnitsDefault value
noutNumber of output axes1
q0Initial position for each axisfill(0.0, nout)
q1Final position for each axisfill(1.0, nout)
qd_maxMaximum velocity for each axisfill(1.0, nout)
qdd_maxMaximum acceleration for each axisfill(1.0, nout)

Connectors

  • q - This connector represents a real signal as an output from a component (RealOutput)

  • qd - This connector represents a real signal as an output from a component (RealOutput)

  • qdd - This connector represents a real signal as an output from a component (RealOutput)

Behavior

Dict{MIME{Symbol("text/plain")}, String} with 1 entry: MIME type text/plain => "Error displaying result"

Source

dyad
"""
A component emitting a trajectory created by the `point_to_point` trajectory generator.

The trajectory exhibits piecewise constant acceleration, piecewise linear velocity
and piecewise quadratic position curves, subject to maximum velocity and acceleration
constraints.

Several axes are planned jointly: all axes accelerate, cruise and decelerate in unison and
reach their end position at the same time, tracing a straight line in output space. The axis
with the tightest limit saturates it, all other axes stay below theirs, and the duration of
the motion is set by the axis that needs the most time.
"""
component KinematicPTP
  "Position output for each axis"
  q = [RealOutput() for i in 1:nout] {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 150, "x2": 1060, "y2": 250, "rot": 0}
      },
      "tags": []
    }
  }
  "Velocity output for each axis"
  qd = [RealOutput() for i in 1:nout] {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 450, "x2": 1060, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Acceleration output for each axis"
  qdd = [RealOutput() for i in 1:nout] {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 750, "x2": 1060, "y2": 850, "rot": 0}
      },
      "tags": []
    }
  }
  "Number of output axes"
  structural parameter nout::Integer = 1
  "Initial position for each axis"
  parameter q0::Real[nout] = fill(0.0, nout)
  "Final position for each axis"
  parameter q1::Real[nout] = fill(1.0, nout)
  "Maximum velocity for each axis"
  parameter qd_max::Real[nout] = fill(1.0, nout)
  "Maximum acceleration for each axis"
  parameter qdd_max::Real[nout] = fill(1.0, nout)
  "Trajectory of all axes, planned once: positions, velocities and accelerations"
  structural variable traj::Native[3] = MultibodyComponents.ptp_trajectory(time, q0, q1, qd_max, qdd_max)
relations
  q = traj[1]
  qd = traj[2]
  qdd = traj[3]
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/KinematicPTP.svg"}}}
end
Flattened Source
dyad
"""
A component emitting a trajectory created by the `point_to_point` trajectory generator.

The trajectory exhibits piecewise constant acceleration, piecewise linear velocity
and piecewise quadratic position curves, subject to maximum velocity and acceleration
constraints.

Several axes are planned jointly: all axes accelerate, cruise and decelerate in unison and
reach their end position at the same time, tracing a straight line in output space. The axis
with the tightest limit saturates it, all other axes stay below theirs, and the duration of
the motion is set by the axis that needs the most time.
"""
component KinematicPTP
  "Position output for each axis"
  q = [RealOutput() for i in 1:nout] {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 150, "x2": 1060, "y2": 250, "rot": 0}
      },
      "tags": []
    }
  }
  "Velocity output for each axis"
  qd = [RealOutput() for i in 1:nout] {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 450, "x2": 1060, "y2": 550, "rot": 0}
      },
      "tags": []
    }
  }
  "Acceleration output for each axis"
  qdd = [RealOutput() for i in 1:nout] {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 960, "y1": 750, "x2": 1060, "y2": 850, "rot": 0}
      },
      "tags": []
    }
  }
  "Number of output axes"
  structural parameter nout::Integer = 1
  "Initial position for each axis"
  parameter q0::Real[nout] = fill(0.0, nout)
  "Final position for each axis"
  parameter q1::Real[nout] = fill(1.0, nout)
  "Maximum velocity for each axis"
  parameter qd_max::Real[nout] = fill(1.0, nout)
  "Maximum acceleration for each axis"
  parameter qdd_max::Real[nout] = fill(1.0, nout)
  "Trajectory of all axes, planned once: positions, velocities and accelerations"
  structural variable traj::Native[3] = MultibodyComponents.ptp_trajectory(time, q0, q1, qd_max, qdd_max)
relations
  q = traj[1]
  qd = traj[2]
  qdd = traj[3]
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/KinematicPTP.svg"}}}
end


Test Cases

No test cases defined.

  • Examples

  • Experiments

  • Analyses