Search documentation of bb

# BB.Message.Actuator.Command.Trajectory (bb v0.8.0)

View Source

Command an actuator to follow a trajectory defined by waypoints.

A trajectory specifies exact position, velocity, and acceleration at each point in time, enabling smooth coordinated motion.

## Fields

- `waypoints` - List of waypoint maps defining the trajectory
- `repeat` - Number of times to repeat: positive integer or `:forever` (default 1)
- `command_id` - Optional reference for correlating with feedback messages

## Waypoint Structure

Each waypoint is a map with:

- `position` - Position at this waypoint (radians or metres)
- `velocity` - Velocity at this waypoint (rad/s or m/s)
- `acceleration` - Acceleration at this waypoint (rad/s² or m/s²)
- `time_from_start` - Time from trajectory start (milliseconds)

## Examples

    alias BB.Message
    alias BB.Message.Actuator.Command.Trajectory

    waypoints = [
      %{position: 0.0, velocity: 0.0, acceleration: 0.5, time_from_start: 0},
      %{position: 0.1, velocity: 0.3, acceleration: 0.2, time_from_start: 100},
      %{position: 0.3, velocity: 0.4, acceleration: 0.0, time_from_start: 200},
      %{position: 0.5, velocity: 0.3, acceleration: -0.2, time_from_start: 300},
      %{position: 0.6, velocity: 0.0, acceleration: -0.5, time_from_start: 400}
    ]

    {:ok, msg} = Message.new(Trajectory, :shoulder,
      waypoints: waypoints
    )

    # Repeat 5 times
    {:ok, msg} = Message.new(Trajectory, :shoulder,
      waypoints: waypoints,
      repeat: 5
    )

    # Repeat forever (until stopped)
    {:ok, msg} = Message.new(Trajectory, :shoulder,
      waypoints: waypoints,
      repeat: :forever
    )

# Summary

## Types

t()
waypoint()

## Functions

new(frame_id, attrs)

# Types

# t()

    @type t() :: %BB.Message.Actuator.Command.Trajectory{
      command_id: reference() | nil,
      repeat: pos_integer() | :forever,
      waypoints: [waypoint()]
    }

# waypoint()

    @type waypoint() :: %{
      position: float(),
      velocity: float(),
      acceleration: float(),
      time_from_start: non_neg_integer()
    }

# Functions

# new(frame_id, attrs)

    @spec new(
      atom(),
      keyword()
    ) :: {:ok, BB.Message.t()} | {:error, term()}