Aikido
aikido::control::QueuedTrajectoryExecutor Class Reference

Wraps a TrajectoryExecutor to enable queuing trajectories for execution. More...

#include <aikido/control/QueuedTrajectoryExecutor.hpp>

Inheritance diagram for aikido::control::QueuedTrajectoryExecutor:
aikido::control::TrajectoryExecutor

Public Member Functions

 QueuedTrajectoryExecutor (std::shared_ptr< TrajectoryExecutor > executor)
 Constructor. More...
 
virtual ~QueuedTrajectoryExecutor ()
 
void validate (const trajectory::Trajectory *traj) override
 Validate the traj in preparation for execution. More...
 
std::future< void > execute (const trajectory::ConstTrajectoryPtr &traj) override
 Execute trajectory and set future upon completion. More...
 
void step (const std::chrono::system_clock::time_point &timepoint) override
 Step to a point in time. More...
 
void cancel () override
 Cancel the current trajectory, as well as all trajectories currently in the queue. More...
 
- Public Member Functions inherited from aikido::control::TrajectoryExecutor
virtual ~TrajectoryExecutor ()=default
 

Private Attributes

std::shared_ptr< TrajectoryExecutormExecutor
 Underlying TrajectoryExecutor. More...
 
bool mInProgress
 Whether a trajectory is currently being executed. More...
 
std::future< void > mFuture
 Future from wrapped executor. More...
 
std::queue< trajectory::ConstTrajectoryPtrmTrajectoryQueue
 Queue of trajectories. More...
 
std::queue< std::shared_ptr< std::promise< void > > > mPromiseQueue
 Queue of promises made by this to the client. More...
 
std::mutex mMutex
 Manages access to mInProgress, mFuture, mTrajectoryQueue, mPromiseQueue. More...
 

Additional Inherited Members

- Protected Attributes inherited from aikido::control::TrajectoryExecutor
std::set< const trajectory::Trajectory * > mValidatedTrajectories
 Set of trajectories validated by executor. More...
 
std::chrono::system_clock::time_point mExecutionStartTime
 Time of previous call. More...
 

Detailed Description

Wraps a TrajectoryExecutor to enable queuing trajectories for execution.

Constructor & Destructor Documentation

◆ QueuedTrajectoryExecutor()

aikido::control::QueuedTrajectoryExecutor::QueuedTrajectoryExecutor ( std::shared_ptr< TrajectoryExecutor executor)
explicit

Constructor.

Parameters
executorUnderlying TrajectoryExecutor

◆ ~QueuedTrajectoryExecutor()

virtual aikido::control::QueuedTrajectoryExecutor::~QueuedTrajectoryExecutor ( )
virtual

Member Function Documentation

◆ cancel()

void aikido::control::QueuedTrajectoryExecutor::cancel ( )
overridevirtual

Cancel the current trajectory, as well as all trajectories currently in the queue.

Does NOT stop the trajectory that is currently executing if the underlying executor does not support it.

Implements aikido::control::TrajectoryExecutor.

◆ execute()

std::future<void> aikido::control::QueuedTrajectoryExecutor::execute ( const trajectory::ConstTrajectoryPtr traj)
overridevirtual

Execute trajectory and set future upon completion.

If another trajectory is already running, queue the trajectory for later execution. If executing a trajectory terminates in an error, all queued trajectories are canceled.

Parameters
trajTrajectory to be executed or queued.
Returns
future<void> for trajectory execution. If trajectory terminates before completion, future will be set to a runtime_error.
Exceptions
invalid_argumentif traj is invalid.

Implements aikido::control::TrajectoryExecutor.

◆ step()

void aikido::control::QueuedTrajectoryExecutor::step ( const std::chrono::system_clock::time_point &  timepoint)
overridevirtual

Step to a point in time.

Note
timepoint can be a time in the future to enable faster than real-time execution.
Parameters
timepointTime to simulate to

Implements aikido::control::TrajectoryExecutor.

◆ validate()

void aikido::control::QueuedTrajectoryExecutor::validate ( const trajectory::Trajectory traj)
overridevirtual

Validate the traj in preparation for execution.

Parameters
trajTrajectory to be validated

Implements aikido::control::TrajectoryExecutor.

Member Data Documentation

◆ mExecutor

std::shared_ptr<TrajectoryExecutor> aikido::control::QueuedTrajectoryExecutor::mExecutor
private

Underlying TrajectoryExecutor.

◆ mFuture

std::future<void> aikido::control::QueuedTrajectoryExecutor::mFuture
private

Future from wrapped executor.

◆ mInProgress

bool aikido::control::QueuedTrajectoryExecutor::mInProgress
private

Whether a trajectory is currently being executed.

◆ mMutex

std::mutex aikido::control::QueuedTrajectoryExecutor::mMutex
mutableprivate

Manages access to mInProgress, mFuture, mTrajectoryQueue, mPromiseQueue.

◆ mPromiseQueue

std::queue<std::shared_ptr<std::promise<void> > > aikido::control::QueuedTrajectoryExecutor::mPromiseQueue
private

Queue of promises made by this to the client.

◆ mTrajectoryQueue

std::queue<trajectory::ConstTrajectoryPtr> aikido::control::QueuedTrajectoryExecutor::mTrajectoryQueue
private

Queue of trajectories.