armarx::KBMDifferentialIK Namespace Reference

Functions

bool applyProprioceptionLimits (Eigen::Map< memoryx::KBM::Vector > &solution, const memoryx::KBM::Vector &lowerProprioceptionLimits, const memoryx::KBM::Vector &upperProprioceptionLimits)
 apply limits to solution and return true, if solution has been changed = solution was not in limits
 
memoryx::KBM::Vector calculateJointDeltas (const memoryx::KBM::Models::KBM &kbm, const memoryx::KBM::Vector &target, const memoryx::KBM::Vector &position, const memoryx::KBM::Vector &proprioception, float stepSizeFactor, float maxStepSize)
 calculateJointDeltas is in internal function called by solve
 
bool checkProprioceptionLimits (const memoryx::KBM::Vector &solution, const memoryx::KBM::Vector &lowerProprioceptionLimits, const memoryx::KBM::Vector &upperProprioceptionLimits)
 check if solution is within the limits
 
float randomFloat (float LO, float HI)
 randomFloat creates a random float between LO and HI
 
memoryx::KBM::Vector randomProprioception (const memoryx::KBM::Vector &lowerProprioceptionLimits, const memoryx::KBM::Vector &upperProprioceptionLimits)
 Creates a vector of random values between the limits.
 
bool solve (const memoryx::KBM::Models::KBM &kbm, const memoryx::KBM::Vector &targetPosition, const memoryx::KBM::Vector &currentPostion, const memoryx::KBM::Vector &currentProprioception, Eigen::Map< memoryx::KBM::Vector > &solution, float positionTolerance=5.0f, float minimumDelta=0.0f, bool requireImprovment=false, int maxSteps=50, float stepSizeFactor=0.2f, float maxStepSize=FLT_MAX)
 solves the inverse kinematics
 
bool solveMany (const memoryx::KBM::Models::KBM &kbm, const memoryx::KBM::Vector &targetPosition, const memoryx::KBM::Vector &currentPosition, const memoryx::KBM::Vector &currentProprioception, const memoryx::KBM::Vector &lowerProprioceptionLimits, const memoryx::KBM::Vector &upperProprioceptionLimits, Eigen::Map< memoryx::KBM::Vector > &solution, bool applyLimits=true, int maxSolves=25, float positionTolerance=5.0f, float minimumDelta=0.0f, bool requireImprovment=false, int maxSteps=50, float stepSizeFactor=0.2f, float maxStepSize=FLT_MAX)
 KBMDifferentialIK::solveMany runs solve many times.
 

Function Documentation

◆ applyProprioceptionLimits()

bool applyProprioceptionLimits ( Eigen::Map< memoryx::KBM::Vector > & solution,
const memoryx::KBM::Vector & lowerProprioceptionLimits,
const memoryx::KBM::Vector & upperProprioceptionLimits )

apply limits to solution and return true, if solution has been changed = solution was not in limits

◆ calculateJointDeltas()

memoryx::KBM::Vector calculateJointDeltas ( const memoryx::KBM::Models::KBM & kbm,
const memoryx::KBM::Vector & target,
const memoryx::KBM::Vector & position,
const memoryx::KBM::Vector & proprioception,
float stepSizeFactor,
float maxStepSize )

calculateJointDeltas is in internal function called by solve

◆ checkProprioceptionLimits()

bool checkProprioceptionLimits ( const memoryx::KBM::Vector & solution,
const memoryx::KBM::Vector & lowerProprioceptionLimits,
const memoryx::KBM::Vector & upperProprioceptionLimits )

check if solution is within the limits

◆ randomFloat()

float randomFloat ( float LO,
float HI )

randomFloat creates a random float between LO and HI

◆ randomProprioception()

memoryx::KBM::Vector randomProprioception ( const memoryx::KBM::Vector & lowerProprioceptionLimits,
const memoryx::KBM::Vector & upperProprioceptionLimits )

Creates a vector of random values between the limits.

◆ solve()

bool solve ( const memoryx::KBM::Models::KBM & kbm,
const memoryx::KBM::Vector & targetPosition,
const memoryx::KBM::Vector & currentPostion,
const memoryx::KBM::Vector & currentProprioception,
Eigen::Map< memoryx::KBM::Vector > & solution,
float positionTolerance = 5.0f,
float minimumDelta = 0.0f,
bool requireImprovment = false,
int maxSteps = 50,
float stepSizeFactor = 0.2f,
float maxStepSize = FLT_MAX )

solves the inverse kinematics

Parameters
kbmthe learned KBM
targetPositionthe target position
currentPositionthe current position
currentProprioceptionthe current proprioception
solutionwill contain the joint values that solve the inverse kinematics
Returns
true, if a good approximation has been found, false otherwise

◆ solveMany()

bool solveMany ( const memoryx::KBM::Models::KBM & kbm,
const memoryx::KBM::Vector & targetPosition,
const memoryx::KBM::Vector & currentPosition,
const memoryx::KBM::Vector & currentProprioception,
const memoryx::KBM::Vector & lowerProprioceptionLimits,
const memoryx::KBM::Vector & upperProprioceptionLimits,
Eigen::Map< memoryx::KBM::Vector > & solution,
bool applyLimits = true,
int maxSolves = 25,
float positionTolerance = 5.0f,
float minimumDelta = 0.0f,
bool requireImprovment = false,
int maxSteps = 50,
float stepSizeFactor = 0.2f,
float maxStepSize = FLT_MAX )

KBMDifferentialIK::solveMany runs solve many times.

Parameters
kbm
targetPosition
currentProprioception
lowerProprioceptionLimits
upperProprioceptionLimits
solution
maxSolvesmaximum number of times solve() should be called
positionTolerance
minimumDelta
requireImprovment
maxSteps
stepSizeFactor
maxStepSize
Returns