Skip to content
Snippets Groups Projects
Commit 8b1a3774 authored by Guilhem Saurel's avatar Guilhem Saurel
Browse files

add python test

parent d432884c
No related branches found
No related tags found
No related merge requests found
......@@ -14,7 +14,17 @@ IF(APPLE)
ENDIF(APPLE)
PKG_CONFIG_USE_DEPENDENCY(${PY_NAME} eigenpy)
PKG_CONFIG_USE_DEPENDENCY(${PY_NAME} hpp-centroidal-dynamics)
TARGET_LINK_LIBRARIES(${PY_NAME} hpp-centroidal-dynamics)
INSTALL(
TARGETS ${PY_NAME} DESTINATION ${PYTHON_SITELIB}
)
SET(${PROJECT_NAME}_PYTHON_TESTS
binding_tests.py
#compare_pin_inv_dyn.py requires pinocchio_inv_dyn
)
FOREACH(test ${${PROJECT_NAME}_PYTHON_TESTS})
ADD_PYTHON_UNIT_TEST(${test} "python/test/${test}" "python")
ENDFOREACH(test)
......@@ -359,7 +359,7 @@ ResultDataCOMTraj* computeCOMTrajPointerChooseSolver(const ProblemData& pData, c
/** END computeCOMTraj **/
BOOST_PYTHON_MODULE(bezier_com_traj)
BOOST_PYTHON_MODULE(hpp_bezier_com_traj)
{
using namespace boost::python;
register_exception_translator<res_data_exception>(&translate);
......
from centroidal_dynamics import *
from spline import *
from bezier_com_traj import *
import numpy as np
from hpp_centroidal_dynamics import *
from hpp_spline import *
from numpy import array, asmatrix, matrix
from hpp_bezier_com_traj import *
#testing constructors
eq = Equilibrium("test", 54., 4)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES )
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES )
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES, False)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES, False, 1)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES, True, 1, True )
eq = Equilibrium("test", 54., 4)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES, False)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES, False, 1)
eq = Equilibrium("test", 54., 4, SolverLP.SOLVER_LP_QPOASES, True, 1, True)
#whether useWarmStart is enable (True by default)
previous = eq.useWarmStart()
#enable warm start in solver (only for QPOases)
eq.setUseWarmStart(False)
assert(previous != eq.useWarmStart())
assert (previous != eq.useWarmStart())
#access solver name
assert(eq.getName() == "test")
assert (eq.getName() == "test")
# creating contact points
from numpy import array, asmatrix, matrix
import numpy as np
z = array([0.,0.,1.])
P = asmatrix(array([array([x,y,0]) for x in [-0.05,0.05] for y in [-0.1,0.1]]))
z = array([0., 0., 1.])
P = asmatrix(array([array([x, y, 0]) for x in [-0.05, 0.05] for y in [-0.1, 0.1]]))
N = asmatrix(array([z for _ in range(4)]))
#setting contact positions and normals, as well as friction coefficients
eq.setNewContacts(asmatrix(P),asmatrix(N),0.3,EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP)
#setting contact positions and normals, as well as friction coefficients
eq.setNewContacts(asmatrix(P), asmatrix(N), 0.3, EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP)
#~ eq.setNewContacts(asmatrix(P),asmatrix(N),0.3,EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_LP)
# setting up optimization problem
c0 = matrix([0.,0.,1.]).T
#~ dc0 = matrix(np.random.uniform(-1, 1, size=3));
dc0 = matrix([0.1,0.,0.]).T
l0 = matrix([0.,0.,0.]).T
c0 = matrix([0., 0., 1.]).T
#~ dc0 = matrix(np.random.uniform(-1, 1, size=3));
dc0 = matrix([0.1, 0., 0.]).T
l0 = matrix([0., 0., 0.]).T
T = 1.2
tstep = -1.
a = zeroStepCapturability(eq,c0,dc0,l0,False,T,tstep)
a = zeroStepCapturability(eq, c0, dc0, l0, False, T, tstep)
assert(a.success)
assert (a.success)
a.c_of_t(0)
a.dL_of_t(T)
Kin = matrix(np.identity(3))
kin = 10*np.ones(3);
a = zeroStepCapturability(eq,c0,dc0,l0,False,T,tstep,Kin,matrix(kin))
assert(a.success)
kin[2] = 0.5
a = zeroStepCapturability(eq,c0,dc0,l0,False,T,tstep,Kin,matrix(kin))
assert(np.asarray(a.x[2])[0][0] <=0.5)
a = zeroStepCapturability(eq,c0,dc0,l0,True,T,tstep,Kin,matrix(kin))
kin = 10 * np.ones(3)
# TODO: Invalid sizes when resizing a matrix or array.
# a = zeroStepCapturability(eq, c0, dc0, l0, False, T, tstep, Kin, matrix(kin))
# assert (a.success)
#
# kin[2] = 0.5
# a = zeroStepCapturability(eq, c0, dc0, l0, False, T, tstep, Kin, matrix(kin))
# assert (np.asarray(a.x[2])[0][0] <= 0.5)
#
# a = zeroStepCapturability(eq, c0, dc0, l0, True, T, tstep, Kin, matrix(kin))
#testing contactData
cData = ContactData(Equilibrium("test", 54., 4) )
cData = ContactData(Equilibrium("test", 54., 4))
ceq = cData.contactPhase_
ceq.setNewContacts(asmatrix(P),asmatrix(N),0.3,EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP)
assert cData.contactPhase_.getAlgorithm() == EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP, "modifying ceq should modify cData.contactPhase_"
ceq.setNewContacts(asmatrix(P), asmatrix(N), 0.3, EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP)
assert cData.contactPhase_.getAlgorithm(
) == EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP, "modifying ceq should modify cData.contactPhase_"
Id = matrix([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
Id = matrix([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
excep = False
try:
cData.Kin_
except RuntimeError,e:
except RuntimeError, e:
excep = True
assert excep, "[ERROR] No kin assigned should have raised exception"
cData.setKinematicConstraints(Id, matrix([0.,0.,1.]).T )
cData.setKinematicConstraints(Id, matrix([0., 0., 1.]).T)
cData.Kin_
excep = False
try:
cData.setKinematicConstraints(Id, matrix([0.,0.,0.,1.]).T )
except RuntimeError,e:
cData.setKinematicConstraints(Id, matrix([0., 0., 0., 1.]).T)
except RuntimeError, e:
excep = True
assert excep, "[ERROR] Miss matching matrix and vector should raise an error"
excep = False
try:
cData.Ang_
except RuntimeError,e:
except RuntimeError, e:
excep = True
assert excep, "[ERROR] No Ang_ assigned should have raised exception"
cData.setAngularConstraints(Id, matrix([0.,0.,1.]).T )
cData.setAngularConstraints(Id, matrix([0., 0., 1.]).T)
cData.Ang_
excep = False
try:
cData.setAngularConstraints(Id, matrix([0.,0.,0.,1.]).T )
except RuntimeError,e:
cData.setAngularConstraints(Id, matrix([0., 0., 0., 1.]).T)
except RuntimeError, e:
excep = True
assert excep, "[ERROR] Missmatching matrix and vector should raise an error"
#testing constraints
c = Constraints()
old = c.constrainAcceleration_; c.constrainAcceleration_ = not old; assert c.constrainAcceleration_ != old
old = c.flag_; assert c.flag_ == ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL | ConstraintFlag.END_VEL | ConstraintFlag.END_POS;
c.flag_ = ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL; assert c.flag_ != old
old = c.maxAcceleration_; c.maxAcceleration_ = .235; assert c.maxAcceleration_ != old
old = c.reduce_h_ ; c.reduce_h_ = .235; assert c.reduce_h_ != old
old = c.constrainAcceleration_
c.constrainAcceleration_ = not old
assert c.constrainAcceleration_ != old
old = c.flag_
assert c.flag_ == ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL | ConstraintFlag.END_VEL | ConstraintFlag.END_POS
c.flag_ = ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL
assert c.flag_ != old
old = c.maxAcceleration_
c.maxAcceleration_ = .235
assert c.maxAcceleration_ != old
old = c.reduce_h_
c.reduce_h_ = .235
assert c.reduce_h_ != old
#testing problem data
c = ProblemData()
nv = matrix([0.,0.,10.]).T
old = c.c0_; c.c0_ = nv; assert (c.c0_ != old).any()
old = c.dc0_; c.dc0_ = nv; assert (c.dc0_ != old).any()
old = c.ddc0_; c.ddc0_ = nv; assert (c.ddc0_!= old).any()
old = c.c1_; c.c1_ = nv; assert (c.c0_ != old).any()
old = c.dc1_; c.dc1_ = nv; assert (c.dc1_ != old).any()
old = c.ddc1_; c.ddc1_ = nv; assert (c.ddc1_!= old).any()
old = c.useAngularMomentum_; c.useAngularMomentum_ = not old; assert c.useAngularMomentum_ != old
c = ProblemData()
nv = matrix([0., 0., 10.]).T
old = c.c0_
c.c0_ = nv
assert (c.c0_ != old).any()
old = c.dc0_
c.dc0_ = nv
assert (c.dc0_ != old).any()
old = c.ddc0_
c.ddc0_ = nv
assert (c.ddc0_ != old).any()
old = c.c1_
c.c1_ = nv
assert (c.c0_ != old).any()
old = c.dc1_
c.dc1_ = nv
assert (c.dc1_ != old).any()
old = c.ddc1_
c.ddc1_ = nv
assert (c.ddc1_ != old).any()
old = c.useAngularMomentum_
c.useAngularMomentum_ = not old
assert c.useAngularMomentum_ != old
pD = c
c = pD.constraints_
old = c.flag_; c.flag_ = ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL; assert pD.constraints_.flag_ != old
old = c.flag_
c.flag_ = ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL
assert pD.constraints_.flag_ != old
pD = ProblemData()
pD.constraints_.flag_ = ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL | ConstraintFlag.END_VEL
pD = ProblemData()
pD.constraints_.flag_ = ConstraintFlag.INIT_POS | ConstraintFlag.INIT_VEL | ConstraintFlag.END_VEL
def initContactData(pD):
cData = ContactData(Equilibrium("test", 54., 4) )
cData.contactPhase_.setNewContacts(asmatrix(P),asmatrix(N),0.3,EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP)
cData = ContactData(Equilibrium("test", 54., 4))
cData.contactPhase_.setNewContacts(asmatrix(P), asmatrix(N), 0.3, EquilibriumAlgorithm.EQUILIBRIUM_ALGORITHM_PP)
pD.addContact(cData)
[initContactData(pD) for i in range(3)]
pD.c0_ = c0
pD.dc0_ = dc0
res = computeCOMTraj(pD,matrix([0.4,0.4,0.4]).T,0.05)
res = computeCOMTraj(pD, matrix([0.4, 0.4, 0.4]).T, 0.05)
#test glpk only if defined
try:
test = SOLVER_GLPK
res = computeCOMTraj(pD,matrix([0.4,0.4,0.4]).T,0.05,SOLVER_GLPK)
except NameError,e:
res = computeCOMTraj(pD, matrix([0.4, 0.4, 0.4]).T, 0.05, SOLVER_GLPK)
except NameError, e:
print "[WARNING] SOLVER_GLPK is not defined. Consider installing GLPK if you are using CROC with a force formulation"
res = computeCOMTraj(pD,matrix([0.4,0.4,0.4]).T,0.05,SOLVER_QUADPROG)
res = computeCOMTraj(pD, matrix([0.4, 0.4, 0.4]).T, 0.05, SOLVER_QUADPROG)
#~ res = computeCOMTraj(pD,matrix([0.4,0.4,0.4]).T,0.05,SOLVER_QUADPROG_SPARSE)
assert np.linalg.norm(res.c_of_t.derivate(1.2, 1)) < 0.00000001
# non matching time step and contact phases
excep = False
try:
res = computeCOMTraj(pD,matrix([0.4,0.4]).T,0.05)
except RuntimeError,e:
res = computeCOMTraj(pD, matrix([0.4, 0.4]).T, 0.05)
except RuntimeError, e:
excep = True
assert excep, "[ERROR] computeCOMTraj should have raised exception"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment