Drake
 All Classes Files Functions Variables
Manipulator Class Reference

An abstract class that wraps H(q)vdot + C(q,v,f_ext) = B(q)u. More...

Inheritance diagram for Manipulator:
Collaboration diagram for Manipulator:

Public Member Functions

function Manipulator (num_q, num_u, num_v)
 
virtual function manipulatorDynamics (obj, q, v)
 H(q)vdot + C(q,v,f_ext) = Bu. More...
 
function manipulatorEquations (obj, q, v)
 extract the alternative form of the manipulator equations: H(q)vdot + C(q,v)v + G(q) = B(q)u More...
 
function dynamics (obj, t, x, u)
 Provides the DrakeSystem interface to the manipulatorDynamics. More...
 
function qdotToV (obj, kinsol)
 defines the linear map v = Vq * qdot default relationship is that v = qdot More...
 
function vToqdot (obj, kinsol)
 defines the linear map qdot = Vqinv * v default relationship is that v = qdot More...
 
function output (obj, t, x, u)
 default output is the full state More...
 
function addPositionEqualityConstraint (obj, con, position_ind)
 Adds a position constraint of the form phi(q) = constant which can be enforced directly in the manipulator dynamics. More...
 
function updatePositionEqualityConstraint (obj, id, con, position_ind)
 
function addVelocityEqualityConstraint (obj, con, velocity_ind)
 Adds a velocity constraint of the form psi(q,v) = constant (with dpsidv~=0) which can be enforced directly in the manipulator dynamics. More...
 
function updateVelocityEqualityConstraint (obj, id, con, velocity_ind)
 
function removeAllStateConstraints (obj)
 
function setNumDOF (obj, num)
 
function getNumDOF (obj)
 
function setNumPositions (obj, num_q)
 Guards the num_positions variable to make sure it stays consistent with num_x. More...
 
function getNumPositions (obj)
 
function setNumVelocities (obj, num_v)
 Guards the num_velocities variable to make sure it stays consistent with num_x. More...
 
function getNumVelocities (obj)
 
function positionConstraints (obj, q)
 Implements position constraints of the form phi(q) = 0. More...
 
function velocityConstraints (obj, q, v)
 Implements velocity constraints of the form psi(q,v) = 0 Note: dphidv must not be zero. More...
 
function getNumJointLimitConstraints (obj)
 returns number of constraints imposed by finite joint limits More...
 
function jointLimitConstraints (obj, q)
 constraint function (with derivatives) to implement unilateral constraints imposed by joint limits More...
 
function num_contacts (obj)
 
function getNumContacts (obj)
 
function feedback (sys1, sys2)
 Attempt to produce a new manipulator system if possible. More...
 
function cascade (sys1, sys2)
 Attempt to produce a new manipulator system if possible. More...
 
function extractTrigPolySystem (obj, options)
 Creates a (rational) polynomial system representation of the dynamics. More...
 
function pdcontrol (sys, Kp, Kd, index)
 creates new blocks to implement a PD controller, roughly illustrated by q_d —>[ Kp ]–>(+)–—>[ sys ]----——> yout | - | -——[ Kp,Kd ]<-— More...
 
function getJointLimits (obj)
 Returns lower and upper joint limit vectors. More...
 
function setJointLimits (obj, jl_min, jl_max)
 
function doKinematics (q, v)
 
function parameterEstimation (obj, data, varargin)
 Parameter estimation algorithm for manipulators. More...
 
- Public Member Functions inherited from DrakeSystem
function DrakeSystem (num_xc, num_xd, num_u, num_y, direct_feedthrough_flag, time_invariant_flag)
 Construct a DrakeSystem. More...
 
function getInitialState (obj)
 Return a (potentially random) state double (column) vector of initial conditions. More...
 
function update (obj, t, x, u)
 Placeholder for the update method. More...
 
function zeroCrossings (obj, t, x, u)
 Placeholder for the zeroCrossings method: a method phi = zeroCrossings(t,x,u) which triggers a zero crossing event when phi transitions from positive to negative. More...
 
function getNumContStates (obj)
 Returns the number of continuous states. More...
 
function getNumDiscStates (obj)
 Returns the number of discrete states. More...
 
function getNumInputs (obj)
 Returns the number of inputs to the system. More...
 
function getNumOutputs (obj)
 Returns the number of outputs from the system. More...
 
function getInitialStateWInput (obj, t, x, u)
 Hook in case a system needs to initial state based on current time and/or input. More...
 
function getSampleTime (obj)
 As described at http://www.mathworks.com/help/toolbox/simulink/sfg/f6-58760.html to set multiple sample times, specify one column for each sample time/offset pair. More...
 
function getInputSampleTimes (obj)
 Returns getSampleTime - a DrakeSystem can only have a single same time associated with it. More...
 
function getOutputSampleTimes (obj)
 Returns getSampleTime - a DrakeSystem can only have a single same time associated with it. More...
 
function setSampleTime (obj, ts)
 robust method for setting default sample time More...
 
function isDirectFeedthrough (obj)
 Check if the system is direct feedthrough (e.g., if the output depends on the immediate input) More...
 
function setDirectFeedthrough (obj, tf)
 Set the direct feedthrough flag. More...
 
function getModel (obj)
 Constructs a simulink system block for this system to be used by the simulink engine. More...
 
function findFixedPoint (obj, x0, u0)
 attempts to find a fixed point (xstar,ustar) which also satisfies the constraints, using (x0,u0) as the initial guess. More...
 
function getDefaultInput (obj)
 Define the default initial input so that behavior is well-defined if no controller is specified or if no control messages have been received yet. More...
 
function setNumContStates (obj, num_xc)
 Guards the num_states variable. More...
 
function setNumDiscStates (obj, num_xd)
 Guards the num_states variable. More...
 
function setNumInputs (obj, num_u)
 Guards the num_u variable. More...
 
function setInputLimits (obj, umin, umax)
 Guards the input limits to make sure it stay consistent. More...
 
function setNumOutputs (obj, num_y)
 Guards the number of outputs to make sure it's consistent. More...
 
function getNumZeroCrossings (obj)
 Returns the number of zero crossings. More...
 
function setNumZeroCrossings (obj, num_zcs)
 Guards the number of zero crossings to make sure it's valid. More...
 
function getNumStateConstraints (obj)
 
function getNumUnilateralConstraints (obj)
 
function addStateConstraint (obj, con, xind)
 
function updateStateConstraint (obj, id, con, xind)
 
function displayStateConstraints (obj)
 
function removeAllStateConstraints (obj)
 
function addStateConstraintsToProgram (obj, prog, indices)
 adds state constraints and unilateral constraints to the program on the specified indices. More...
 
function addInputConstraintsToProgram (obj, prog, indices)
 add bounding box constraint todo: consider whether it makes sense to a list of constraints objects instead of just input limits. More...
 
function stateConstraints (obj, x)
 Provides the old interface of a single constraint function which evaluates all of the equality constraints on the state (which should be == 0) More...
 
function linearize (obj, t0, x0, u0)
 Uses the geval engine to linearize the model around the nominal point, at least for the simple case. More...
 
function simulate (obj, varargin)
 
function simulateODE (obj, tspan, x0, options)
 Simulates the system using the ODE45 suite of solvers instead of the simulink solvers. More...
 
function feedback (sys1, sys2)
 Constructs a feedback combination of sys1 and sys2. More...
 
function cascade (sys1, sys2)
 Constructs a cascade combination of sys1 and sys2. More...
 
function extractPolynomialSystem (obj)
 Attempts to symbolically extract the extra structure of a polynomial system from the Drake system Will throw an error if the system is not truly polynomial. More...
 
function extractAffineSystem (obj)
 Attempts to symbolically extract the extra structure of an affine system from the Drake system Will throw an error if the system is not truly affine. More...
 
function extractLinearSystem (obj)
 Attempts to symbolically extract the extra structure of a linear system from the Drake system Will throw an error if the system is not truly linear. More...
 
function makeTrigPolySystem (obj, options)
 deprecated method (due to refactoring): please use extractTrigPolySystem instead More...
 
function systemGradTest (obj, t, x, u, options)
 Compare numerical and analytical derivatives of dynamics,update,and output. More...
 
function extractAffineSystem (obj)
 
function extractTrigPolySystem (sys, options)
 tries to convert the current system into a trig-poly system More...
 
function taylorApprox (sys, varargin)
 performs a taylorApproximation around a point or trajectory usage: taylorApprox(sys,t0,x0,u0,order[,ignores]) or taylorApprox(sys,x0traj,u0traj,order[,ignores]) it returns a polynomial system (or polynomial trajectory system) More...
 
function transverseLQR (obj, xtraj, utraj, Q, R, Qf, transSurf)
 Compute LQR control for transversal system. More...
 
function transverseLQRClosedLoop (obj, xtraj, utraj, Q, R, Vf, transSurf)
 
function tvlqr (obj, xtraj, utraj, Q, R, Qf, options)
 implements the time-varying linear (or affine) quadratic regulator More...
 
- Public Member Functions inherited from DynamicalSystem
function DynamicalSystem ()
 
function inInputFrame (sys, frame)
 Ensures that sys has the specified input frame, by searching for and cascading a coordinate transformation to the existing input if necessary. More...
 
function inStateFrame (sys, frame)
 Ensures that sys has the specified state frame. More...
 
function inOutputFrame (sys, frame)
 Ensures that sys has the specified output frame, by searching for and cascading a coordinate transformation to the existing output if necessary. More...
 
function cascade (sys1, sys2)
 Creates a new system with the output of system 1 connected to the input of system 2. More...
 
function feedback (sys1, sys2)
 Creates a new systems with sys1 and sys2 in a feedback interconnect (with sys1 on the forward path, and sys2 on the return path). More...
 
function parallel (sys1, sys2)
 Creates a new system that takes the inputs to both sys1 and sys2 as a single input (which is "demux"ed and passed independently to the two systems), and outputs the "mux"ed output of the two systems. More...
 
function sampledData (sys, tsin, tsout)
 Creates a new system which is a sampled data (e.g. More...
 
function resolveConstraints (obj, x0, v, constraints)
 attempts to find a x which satisfies the constraints, using x0 as the initial guess. More...
 
function addStateConstraintsToProgram (obj, prog, indices)
 adds state constraints and unilateral constriants to the program on the specified indices. More...
 
function getNumStates (obj)
 Returns the total number of states (discrete + continuous) in the system. More...
 
function getInputSampleTimes (obj)
 Returns the sample time of the input See getSampleTime for more details about sample times. More...
 
function getOutputSampleTimes (obj)
 Returns the sample time of the output See getSampleTime for more details about sample times. More...
 
function isDT (obj)
 Returns true if the system has no states, or has states and only one sample time [a b], with a>0. More...
 
function isCT (obj)
 Returns true if the system has only one sample time [a b], with a==0. More...
 
function isInheritedTime (obj)
 Returns true if the system has only one sample time [a b], with b==-1. More...
 
function isTI (obj)
 Returns true if the system is time-invariant. More...
 
function setTIFlag (obj, bval)
 Sets the time invariant flag. More...
 
function getInputFrame (obj)
 Access the CoordinateFrame object that defines the input to this system. More...
 
function setInputFrame (obj, fr)
 Set the CoordinateFrame object that defines the input of this system. More...
 
function getStateFrame (obj)
 Access the CoordinateFrame object that defines the state of this system. More...
 
function setStateFrame (obj, fr)
 Set the CoordinateFrame object that defines the state of this system. More...
 
function getOutputFrame (obj)
 Access the CoordinateFrame object that defines the output to this system. More...
 
function setOutputFrame (obj, fr)
 Set the CoordinateFrame object that defines the output of this system. More...
 
function getNumStateConstraints (obj)
 Returns the scalar number of state constraints (of the form phi(x)=0) More...
 
function stateConstraints (obj, x)
 defines state equality constraints in the form phi(x)=0 More...
 
function unilateralConstraints (obj, x)
 defines state unilateral constraints in the form phi(x)>=0 More...
 
function getNumUnilateralConstraints (obj)
 Returns the scalar number of state constraints (of the form phi(x)>=0) More...
 
function setSimulinkParam (obj, varargin)
 Sets parameters of the simulink model Syntax setSimulinkParam(obj,param_name,param_value[,param_name,param_value,]) % Se. More...
 
function linearize (obj, t0, x0, u0)
 Linearize the system about an operating point (continuous time) More...
 
function dlinearize (obj, ts, t0, x0, u0)
 Linearize the system about an operating point (discrete time) More...
 
function setParams (obj, p)
 This default setParams method attempts to set class properties of the system according to the coordinate names in the parameter frame. More...
 
function getParams (obj)
 This default getParams method attempts to get class properties of the system according to the coordinate names in the parameter frame. More...
 
function getNumParams (obj)
 
function setParamFrame (obj, fr)
 Set the CoordinateFrame object which describes any system parameters. More...
 
function getParamFrame (obj)
 Returns the CoordinateFrame object which describes any system parameters. More...
 
function setParamLimits (obj, pmin, pmax)
 Set lower and upper bounds on the system parameters. More...
 
function getParamLimits (obj)
 Returns the current lower and upper bounds on the system parameters. More...
 
function parameterEstimation (obj, data, options)
 Estimate parameter values from input-output data. More...
 
function runLCM (obj, x0, options)
 Runs the system as an lcm node. More...
 
function simulate (obj, tspan, x0, options)
 Simulates the dynamical system (using the simulink solvers) More...
 
function tiHinf (obj, x0, u0, Q, R, Bw, gamma)
 Suboptimal state-feedback H-infinity controller for LTI system with bound gamma. More...
 
function tilqr (obj, x0, u0, Q, R, options)
 Computes an LQR controller to stabilize the system around (x0,u0) More...
 
function tilyap (obj, x0, Q)
 Linearizes the system about the state x0 and returns a candidate LyapunovFunction generated by solving the quadratic Lyapunov equation. More...
 
function tvlyap (obj, xtraj, Q, Qf)
 Linearizes the system about the state trajectory xtraj and returns a candidate LyapunovFunction generated by integrating backwards the quadratic differential Lyapunov equation. More...
 

Additional Inherited Members

- Public Attributes inherited from DynamicalSystem
Property warning_manager
 
- Protected Member Functions inherited from DynamicalSystem
function stateIndicesForCombination (sys1, sys2)
 Helper method to figure out the indices of the discrete and continuous states after sys1 and sys2 have been combined into a single system. More...
 
function stateVectorToStructure (obj, xv, mdl)
 Converts the vector state xv to the structure xs for simulink state. More...
 
function stateStructureToVector (obj, xs)
 Converts the simulink state structure representation back to the vector state. More...
 

Detailed Description

An abstract class that wraps H(q)vdot + C(q,v,f_ext) = B(q)u.

Constructor & Destructor Documentation

function Manipulator ( num_q  ,
num_u  ,
num_v   
)
Return values
obj

Member Function Documentation

function addPositionEqualityConstraint ( obj  ,
con  ,
position_ind   
)

Adds a position constraint of the form phi(q) = constant which can be enforced directly in the manipulator dynamics.

This method will also register phi (and it's time derivative) as state constraints for the dynamical system.

Return values
obj
id
function addVelocityEqualityConstraint ( obj  ,
con  ,
velocity_ind   
)

Adds a velocity constraint of the form psi(q,v) = constant (with dpsidv~=0) which can be enforced directly in the manipulator dynamics.

This method will also register psi as a state constraint for the dynamical system.

Return values
obj
id
function cascade ( sys1  ,
sys2   
)

Attempt to produce a new manipulator system if possible.

Return values
sys
function doKinematics ( ,
 
)
Return values
kinsol
function dynamics ( obj  ,
,
,
 
)
virtual

Provides the DrakeSystem interface to the manipulatorDynamics.

Return values
xdot
dxdot

Reimplemented from DrakeSystem.

function extractTrigPolySystem ( obj  ,
options   
)

Creates a (rational) polynomial system representation of the dynamics.

Return values
polysys
function feedback ( sys1  ,
sys2   
)

Attempt to produce a new manipulator system if possible.

Return values
sys
function getJointLimits ( obj  )

Returns lower and upper joint limit vectors.

Return values
jl_min
jl_max
function getNumContacts ( obj  )
Return values
n
function getNumDOF ( obj  )
Return values
n
function getNumJointLimitConstraints ( obj  )

returns number of constraints imposed by finite joint limits

Return values
n
function getNumPositions ( obj  )
Return values
n
function getNumVelocities ( obj  )
Return values
n
function jointLimitConstraints ( obj  ,
 
)

constraint function (with derivatives) to implement unilateral constraints imposed by joint limits

Return values
phi
J
dJ
virtual function manipulatorDynamics ( obj  ,
,
 
)
virtual

H(q)vdot + C(q,v,f_ext) = Bu.

function manipulatorEquations ( obj  ,
,
 
)

extract the alternative form of the manipulator equations: H(q)vdot + C(q,v)v + G(q) = B(q)u

Return values
H
C_times_v
G
B
function num_contacts ( obj  )
function output ( obj  ,
,
,
 
)
virtual

default output is the full state

Return values
y

Reimplemented from DrakeSystem.

Reimplemented in RigidBodyManipulator.

function parameterEstimation ( obj  ,
data  ,
varargin   
)

Parameter estimation algorithm for manipulators.

Attempts to minimize the objective [ | H(q,p)qddot - C(q,qd,p) - B(q,qd,p)*u |_2^2 ] by extracting an affine representation using lumped-parameters and then running least-squares.

Restrictions: H,C,and B must be trig/poly in q,qd and polynomial in p. All params p must be lower bounded (general constraints are not implemented yet, but would be easy if they are affine) so far, I require full-state feedback

Algorithm: Step 1: Extract lumped-parameters Use TrigPoly + spotless to parse H,C,B and extract unique monomial coefficients in p. Step 2: Least-squares estimation of the lumped-parameters (more many candidate unit delays) Insert the data and do linear regression Step 3: Geometric program to back out original parameters.

Parameters
dataan instance of iddata (from the system identification toolbox; see 'help iddata' for more info) containing the data to be used for estimation.
Options:
print_result  determines if the function will print the results 'noprint' = no print, 'printEst' = only print estimated 'printAll' = print estimated and original
model  determines which model to use for estimation 'dynamic' = use dynamic model - requires qdd 'energetic' = use energetic model - doesn't require qdd
method  determines which method to use for estimation 'nonlinprog' = nonlinear least squares (LS) to solve problem 'linprog' = linear LS on lumped params then nonlinear LS to recover original parameters 'simerr' = minimize simulation error 'lsqnonlin' = use MATLAB's built-in nonlinear least squares solver (debugging)
Return values
phat
estimated_delay
function pdcontrol ( sys  ,
Kp  ,
Kd  ,
index   
)

creates new blocks to implement a PD controller, roughly illustrated by q_d —>[ Kp ]–>(+)–—>[ sys ]----——> yout | - | -——[ Kp,Kd ]<-—

when invoked with a single output argument: newsys = pdcontrol(sys,) % then it returns a new system which contains the new closed loop system containing the PD controller and the plant.

when invoked with two output arguments: [pdff,pdfb] = pdcontrol(sys,) % then it return the systems which define the feed-forward path and feedback-path of the PD controller (but not the closed loop system).

Parameters
Kpa num_u x num_u matrix with the position gains
Kda num_u x num_u matrix with the velocity gains
indexa num_u dimensional vector specifying the mapping from q to u. index(i) = j indicates that u(i) actuates q(j).
Default:: 1:num_u

For example, the a 2D floating base (with adds 3 passive joints in positions 1:3)model with four actuated joints in a serial chain might have Kp = diag([10,10,10,10]) Kd = diag([1, 1, 1, 1]) and the default index would automatically be index = 4:7

Return values
varargout
function positionConstraints ( obj  ,
 
)

Implements position constraints of the form phi(q) = 0.

Return values
varargout
function qdotToV ( obj  ,
kinsol   
)

defines the linear map v = Vq * qdot default relationship is that v = qdot

Return values
Vq
dVq
function removeAllStateConstraints ( obj  )
Return values
obj
function setJointLimits ( obj  ,
jl_min  ,
jl_max   
)
Return values
obj
function setNumDOF ( obj  ,
num   
)
Return values
obj
function setNumPositions ( obj  ,
num_q   
)

Guards the num_positions variable to make sure it stays consistent with num_x.

Return values
obj
function setNumVelocities ( obj  ,
num_v   
)

Guards the num_velocities variable to make sure it stays consistent with num_x.

Return values
obj
function updatePositionEqualityConstraint ( obj  ,
id  ,
con  ,
position_ind   
)
Return values
obj
function updateVelocityEqualityConstraint ( obj  ,
id  ,
con  ,
velocity_ind   
)
Return values
obj
function velocityConstraints ( obj  ,
,
 
)

Implements velocity constraints of the form psi(q,v) = 0 Note: dphidv must not be zero.

constraints which depend only on q should be implemented instead as positionConstraints.

Return values
varargout
function vToqdot ( obj  ,
kinsol   
)

defines the linear map qdot = Vqinv * v default relationship is that v = qdot

Return values
VqInv
dVqInv

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