Solves motion planning problem using Approximate Inference Control method. More...
#include <bayesian_ik_solver.h>
Public Member Functions | |
void | Instantiate (const BayesianIKSolverInitializer &init) override |
void | Solve (Eigen::MatrixXd &solution) override |
Solves the problem. More... | |
void | SpecifyProblem (PlanningProblemPtr pointer) override |
Binds the solver to a specific problem which must be pre-initalised. More... | |
Public Member Functions inherited from exotica::MotionSolver | |
int | GetNumberOfMaxIterations () |
double | GetPlanningTime () |
PlanningProblemPtr | GetProblem () const |
void | InstantiateBase (const Initializer &init) override |
MotionSolver ()=default | |
std::string | Print (const std::string &prepend) const override |
void | SetNumberOfMaxIterations (int max_iter) |
virtual | ~MotionSolver ()=default |
Public Member Functions inherited from exotica::Object | |
std::string | GetObjectName () |
void | InstantiateObject (const Initializer &init) |
Object () | |
virtual std::string | type () const |
virtual | ~Object () |
Public Member Functions inherited from exotica::InstantiableBase | |
virtual std::vector< Initializer > | GetAllTemplates () const=0 |
InstantiableBase ()=default | |
virtual | ~InstantiableBase ()=default |
Public Member Functions inherited from exotica::Instantiable< BayesianIKSolverInitializer > | |
std::vector< Initializer > | GetAllTemplates () const override |
Initializer | GetInitializerTemplate () override |
const C & | GetParameters () const |
virtual void | Instantiate (const C &init) |
void | InstantiateInternal (const Initializer &init) override |
Protected Member Functions | |
void | InitMessages () |
Initializes message data. More... | |
void | InitTrajectory (const Eigen::VectorXd &q_init) |
Initialise AICO messages from an initial trajectory. More... | |
Private Types | |
enum | SweepMode { FORWARD = 0, SYMMETRIC, LOCAL_GAUSS_NEWTON, LOCAL_GAUSS_NEWTON_DAMPED } |
Private Member Functions | |
double | EvaluateTrajectory (const Eigen::VectorXd &x, bool skip_update=false) |
Computes the cost of the trajectory. More... | |
void | GetTaskCosts () |
Updates the task cost terms . UnconstrainedEndPoseProblem::Update() has to be called before calling this function. More... | |
void | PerhapsUndoStep () |
Reverts back to previous state if the cost of the current state is higher. More... | |
void | RememberOldState () |
Stores the previous state. More... | |
double | Step () |
Compute one step of the AICO algorithm. More... | |
void | UpdateBwdMessage () |
Updates the backward message Updates the mean and covariance of the backward message using: , where and . More... | |
void | UpdateFwdMessage () |
Updates the forward message Updates the mean and covariance of the forward message using: , where and . More... | |
void | UpdateTaskMessage (const Eigen::Ref< const Eigen::VectorXd > &qhat_t, double tolerance, double max_step_size=-1.) |
Updates the task message. More... | |
void | UpdateTimestep (bool update_fwd, bool update_bwd, int max_relocation_iterations, double tolerance, bool force_relocation, double max_step_size=-1.) |
Update messages for given time step. More... | |
void | UpdateTimestepGaussNewton (bool update_fwd, bool update_bwd, int max_relocation_iterations, double tolerance, double max_step_size=-1.) |
Update messages for given time step using the Gauss Newton method. More... | |
Private Attributes | |
Eigen::VectorXd | b |
Belief mean. More... | |
Eigen::VectorXd | b_old |
Belief mean (last most optimal value) More... | |
double | b_step_ = 0.0 |
Squared configuration space step. More... | |
double | b_step_old_ |
int | best_sweep_ = 0 |
int | best_sweep_old_ = 0 |
Eigen::MatrixXd | Binv |
Belief covariance inverse. More... | |
Eigen::MatrixXd | Binv_old |
Belief covariance inverse (last most optimal value) More... | |
Eigen::VectorXd | bwd_msg_v_ |
Backward message initialisation mean. More... | |
Eigen::MatrixXd | bwd_msg_Vinv_ |
Backward message initialisation covariance. More... | |
double | cost_ = 0.0 |
cost of MAP trajectory More... | |
double | cost_old_ = std::numeric_limits<double>::max() |
cost of MAP trajectory (last most optimal value) More... | |
double | cost_prev_ = std::numeric_limits<double>::max() |
previous iteration cost More... | |
double | damping = 0.01 |
Damping. More... | |
double | damping_init_ = 100.0 |
Damping. More... | |
Eigen::VectorXd | damping_reference_ |
Damping reference point. More... | |
double | function_tolerance_ = 1e-5 |
Relative function tolerance/first-order optimality criterion. More... | |
int | iteration_count_ |
Iteration counter. More... | |
int | max_backtrack_iterations_ = 10 |
Max. number of sweeps without improvement before terminating (= line-search) More... | |
double | minimum_step_tolerance_ = 1e-5 |
Update tolerance to stop update of messages if change of maximum coefficient is less than this tolerance. More... | |
UnconstrainedEndPoseProblemPtr | prob_ |
Shared pointer to the planning problem. More... | |
Eigen::VectorXd | q |
Configuration space trajectory. More... | |
Eigen::VectorXd | q_old |
Configuration space trajectory (last most optimal value) More... | |
Eigen::VectorXd | qhat |
Point of linearisation. More... | |
Eigen::VectorXd | qhat_old |
Point of linearisation (last most optimal value) More... | |
Eigen::VectorXd | r |
Task message mean. More... | |
Eigen::MatrixXd | R |
Task message covariance. More... | |
Eigen::VectorXd | r_old |
Task message mean (last most optimal value) More... | |
Eigen::MatrixXd | R_old |
Task message covariance (last most optimal value) More... | |
double | rhat |
Task message point of linearisation. More... | |
double | rhat_old |
Task message point of linearisation (last most optimal value) More... | |
Eigen::VectorXd | s |
Forward message mean. More... | |
Eigen::VectorXd | s_old |
Forward message mean (last most optimal value) More... | |
Eigen::MatrixXd | Sinv |
Forward message covariance inverse. More... | |
Eigen::MatrixXd | Sinv_old |
Forward message covariance inverse (last most optimal value) More... | |
double | step_tolerance_ = 1e-5 |
Relative step tolerance (termination criterion) More... | |
int | sweep_ = 0 |
Sweeps so far. More... | |
bool | sweep_improved_cost_ |
Whether the last sweep improved the cost (for backtrack iterations count) More... | |
int | sweep_mode_ = 0 |
Sweep mode. More... | |
int | update_count_ = 0 |
bool | use_bwd_msg_ = false |
Flag for using backward message initialisation. More... | |
Eigen::VectorXd | v |
Backward message mean. More... | |
Eigen::VectorXd | v_old |
Backward message mean (last most optimal value) More... | |
bool | verbose_ = false |
Eigen::MatrixXd | Vinv |
Backward message covariance inverse. More... | |
Eigen::MatrixXd | Vinv_old |
Backward message covariance inverse (last most optimal value) More... | |
Eigen::MatrixXd | W |
Configuration space weight matrix inverse. More... | |
Eigen::MatrixXd | Winv |
Configuration space weight matrix inverse. More... | |
Additional Inherited Members | |
Public Attributes inherited from exotica::Object | |
bool | debug_ |
std::string | ns_ |
std::string | object_name_ |
Protected Attributes inherited from exotica::MotionSolver | |
int | max_iterations_ |
double | planning_time_ |
PlanningProblemPtr | problem_ |
Protected Attributes inherited from exotica::Instantiable< BayesianIKSolverInitializer > | |
C | parameters_ |
Solves motion planning problem using Approximate Inference Control method.
Definition at line 47 of file bayesian_ik_solver.h.
|
private |
Enumerator | |
---|---|
FORWARD | |
SYMMETRIC | |
LOCAL_GAUSS_NEWTON | |
LOCAL_GAUSS_NEWTON_DAMPED |
Definition at line 123 of file bayesian_ik_solver.h.
|
private |
Computes the cost of the trajectory.
x | Trajecotry. |
Definition at line 348 of file bayesian_ik_solver.cpp.
|
private |
Updates the task cost terms . UnconstrainedEndPoseProblem::Update() has to be called before calling this function.
Definition at line 277 of file bayesian_ik_solver.cpp.
|
protected |
Initializes message data.
q0 | Start configuration |
Definition at line 168 of file bayesian_ik_solver.cpp.
|
protected |
Initialise AICO messages from an initial trajectory.
q_init | Initial trajectory |
Definition at line 197 of file bayesian_ik_solver.cpp.
|
override |
Definition at line 42 of file bayesian_ik_solver.cpp.
|
private |
Reverts back to previous state if the cost of the current state is higher.
Definition at line 433 of file bayesian_ik_solver.cpp.
|
private |
Stores the previous state.
Definition at line 413 of file bayesian_ik_solver.cpp.
|
overridevirtual |
Solves the problem.
solution | Returned end pose solution. |
Implements exotica::MotionSolver.
Definition at line 79 of file bayesian_ik_solver.cpp.
|
overridevirtual |
Binds the solver to a specific problem which must be pre-initalised.
pointer | Shared pointer to the motion planning problem |
Reimplemented from exotica::MotionSolver.
Definition at line 67 of file bayesian_ik_solver.cpp.
|
private |
Compute one step of the AICO algorithm.
Definition at line 364 of file bayesian_ik_solver.cpp.
|
private |
Updates the backward message Updates the mean and covariance of the backward message using: , where and .
Definition at line 240 of file bayesian_ik_solver.cpp.
|
private |
Updates the forward message Updates the mean and covariance of the forward message using: , where and .
Definition at line 231 of file bayesian_ik_solver.cpp.
|
private |
Updates the task message.
qhat_t | Point of linearisation at time step $t$ |
tolerance | Lazy update tolerance (only update the task message if the state changed more than this value) |
max_step_size | If step size >0, cap the motion at this step to the step size. Updates the mean and covariance of the task message using: |
Definition at line 256 of file bayesian_ik_solver.cpp.
|
private |
Update messages for given time step.
t | Time step. |
update_fwd | Update the forward message. |
update_bwd | Update the backward message. |
max_relocation_iterations | Maximum number of relocation while searching for a good linearisation point |
tolerance | Tolerance for for stopping the search. |
force_relocation | Set to true to force relocation even when the result is within tolerance. |
max_step_size | Step size for UpdateTaskMessage. |
Definition at line 299 of file bayesian_ik_solver.cpp.
|
private |
Update messages for given time step using the Gauss Newton method.
t | Time step. |
update_fwd | Update the forward message. |
update_bwd | Update the backward message. |
max_relocation_iterations | Maximum number of relocation while searching for a good linearisation point |
tolerance | Tolerance for for stopping the search. |
max_step_size | Step size for UpdateTaskMessage. First, the messages , and are computed. Then, the belief is updated: where the mean and covariance are updated as follows: . |
Definition at line 340 of file bayesian_ik_solver.cpp.
|
private |
Belief mean.
Definition at line 93 of file bayesian_ik_solver.h.
|
private |
Belief mean (last most optimal value)
Definition at line 105 of file bayesian_ik_solver.h.
|
private |
Squared configuration space step.
Definition at line 114 of file bayesian_ik_solver.h.
|
private |
Definition at line 115 of file bayesian_ik_solver.h.
|
private |
Definition at line 121 of file bayesian_ik_solver.h.
|
private |
Definition at line 122 of file bayesian_ik_solver.h.
|
private |
Belief covariance inverse.
Definition at line 94 of file bayesian_ik_solver.h.
|
private |
Belief covariance inverse (last most optimal value)
Definition at line 106 of file bayesian_ik_solver.h.
|
private |
Backward message initialisation mean.
Definition at line 81 of file bayesian_ik_solver.h.
|
private |
Backward message initialisation covariance.
Definition at line 82 of file bayesian_ik_solver.h.
|
private |
cost of MAP trajectory
Definition at line 111 of file bayesian_ik_solver.h.
|
private |
cost of MAP trajectory (last most optimal value)
Definition at line 112 of file bayesian_ik_solver.h.
|
private |
previous iteration cost
Definition at line 113 of file bayesian_ik_solver.h.
|
private |
Damping.
Definition at line 74 of file bayesian_ik_solver.h.
|
private |
Damping.
Definition at line 75 of file bayesian_ik_solver.h.
|
private |
Damping reference point.
Definition at line 110 of file bayesian_ik_solver.h.
|
private |
Relative function tolerance/first-order optimality criterion.
Definition at line 78 of file bayesian_ik_solver.h.
|
private |
Iteration counter.
Definition at line 84 of file bayesian_ik_solver.h.
|
private |
Max. number of sweeps without improvement before terminating (= line-search)
Definition at line 79 of file bayesian_ik_solver.h.
|
private |
Update tolerance to stop update of messages if change of maximum coefficient is less than this tolerance.
Definition at line 76 of file bayesian_ik_solver.h.
|
private |
Shared pointer to the planning problem.
Definition at line 73 of file bayesian_ik_solver.h.
|
private |
Configuration space trajectory.
Definition at line 95 of file bayesian_ik_solver.h.
|
private |
Configuration space trajectory (last most optimal value)
Definition at line 107 of file bayesian_ik_solver.h.
|
private |
Point of linearisation.
Definition at line 96 of file bayesian_ik_solver.h.
|
private |
Point of linearisation (last most optimal value)
Definition at line 108 of file bayesian_ik_solver.h.
|
private |
Task message mean.
Definition at line 90 of file bayesian_ik_solver.h.
|
private |
Task message covariance.
Definition at line 91 of file bayesian_ik_solver.h.
|
private |
Task message mean (last most optimal value)
Definition at line 102 of file bayesian_ik_solver.h.
|
private |
Task message covariance (last most optimal value)
Definition at line 103 of file bayesian_ik_solver.h.
|
private |
Task message point of linearisation.
Definition at line 92 of file bayesian_ik_solver.h.
|
private |
Task message point of linearisation (last most optimal value)
Definition at line 104 of file bayesian_ik_solver.h.
|
private |
Forward message mean.
Definition at line 86 of file bayesian_ik_solver.h.
|
private |
Forward message mean (last most optimal value)
Definition at line 98 of file bayesian_ik_solver.h.
|
private |
Forward message covariance inverse.
Definition at line 87 of file bayesian_ik_solver.h.
|
private |
Forward message covariance inverse (last most optimal value)
Definition at line 99 of file bayesian_ik_solver.h.
|
private |
Relative step tolerance (termination criterion)
Definition at line 77 of file bayesian_ik_solver.h.
|
private |
Sweeps so far.
Definition at line 120 of file bayesian_ik_solver.h.
|
private |
Whether the last sweep improved the cost (for backtrack iterations count)
Definition at line 83 of file bayesian_ik_solver.h.
|
private |
Sweep mode.
Definition at line 130 of file bayesian_ik_solver.h.
|
private |
Definition at line 131 of file bayesian_ik_solver.h.
|
private |
Flag for using backward message initialisation.
Definition at line 80 of file bayesian_ik_solver.h.
|
private |
Backward message mean.
Definition at line 88 of file bayesian_ik_solver.h.
|
private |
Backward message mean (last most optimal value)
Definition at line 100 of file bayesian_ik_solver.h.
|
private |
Definition at line 133 of file bayesian_ik_solver.h.
|
private |
Backward message covariance inverse.
Definition at line 89 of file bayesian_ik_solver.h.
|
private |
Backward message covariance inverse (last most optimal value)
Definition at line 101 of file bayesian_ik_solver.h.
|
private |
Configuration space weight matrix inverse.
Definition at line 117 of file bayesian_ik_solver.h.
|
private |
Configuration space weight matrix inverse.
Definition at line 118 of file bayesian_ik_solver.h.