Skip to content
Snippets Groups Projects
Commit 41bfe6e2 authored by Gabriele Buondonno's avatar Gabriele Buondonno
Browse files

reimplemented test_zmpEstimator.py

parent 900e350a
No related branches found
No related tags found
No related merge requests found
...@@ -178,6 +178,7 @@ IF(BUILD_PYTHON_INTERFACE) ...@@ -178,6 +178,7 @@ IF(BUILD_PYTHON_INTERFACE)
python/${SOTTALOSBALANCE_PYNAME}/test/test_ffSubscriber.py python/${SOTTALOSBALANCE_PYNAME}/test/test_ffSubscriber.py
python/${SOTTALOSBALANCE_PYNAME}/test/appli_ffSubscriber.py python/${SOTTALOSBALANCE_PYNAME}/test/appli_ffSubscriber.py
python/${SOTTALOSBALANCE_PYNAME}/test/test_zmpEstimator.py python/${SOTTALOSBALANCE_PYNAME}/test/test_zmpEstimator.py
python/${SOTTALOSBALANCE_PYNAME}/test/appli_zmpEstimator.py
python/${SOTTALOSBALANCE_PYNAME}/test/test_dcmComControl.py python/${SOTTALOSBALANCE_PYNAME}/test/test_dcmComControl.py
python/${SOTTALOSBALANCE_PYNAME}/test/appli_dcmComControl.py python/${SOTTALOSBALANCE_PYNAME}/test/appli_dcmComControl.py
python/${SOTTALOSBALANCE_PYNAME}/test/test_dcmComZmpControl.py python/${SOTTALOSBALANCE_PYNAME}/test/test_dcmComZmpControl.py
......
from sot_talos_balance.create_entities_utils import create_com_trajectory_generator
from sot_talos_balance.create_entities_utils import create_zmp_estimator
from dynamic_graph.sot.core.meta_tasks_kine import MetaTaskKine6d, MetaTaskKineCom, gotoNd
from dynamic_graph import plug
from dynamic_graph.sot.core import SOT
from dynamic_graph.tracer_real_time import TracerRealTime
from sot_talos_balance.create_entities_utils import addTrace, dump_tracer
dt = robot.timeStep;
robot.comTrajGen = create_com_trajectory_generator(dt,robot);
# --- COM
robot.taskCom = MetaTaskKineCom(robot.dynamic)
robot.dynamic.com.recompute(0)
robot.taskCom.featureDes.errorIN.value = robot.dynamic.com.value
robot.taskCom.task.controlGain.value = 10
# --- CONTACTS
#define contactLF and contactRF
robot.contactLF = MetaTaskKine6d('contactLF',robot.dynamic,'LF',robot.OperationalPointsMap['left-ankle'])
robot.contactLF.feature.frame('desired')
robot.contactLF.gain.setConstant(100)
robot.contactLF.keep()
locals()['contactLF'] = robot.contactLF
robot.contactRF = MetaTaskKine6d('contactRF',robot.dynamic,'RF',robot.OperationalPointsMap['right-ankle'])
robot.contactRF.feature.frame('desired')
robot.contactRF.gain.setConstant(100)
robot.contactRF.keep()
locals()['contactRF'] = robot.contactRF
# -- estimator
# -- this NEEDS to be called AFTER the operational points LF and RF are created
robot.zmp_estimator = create_zmp_estimator(robot)
robot.sot = SOT('sot')
robot.sot.setSize(robot.dynamic.getDimension())
plug(robot.sot.control,robot.device.control)
plug(robot.comTrajGen.x, robot.taskCom.featureDes.errorIN)
robot.sot.push(robot.contactRF.task.name)
robot.sot.push(robot.contactLF.task.name)
robot.sot.push(robot.taskCom.task.name)
robot.device.control.recompute(0)
# --- TRACER
robot.tracer = TracerRealTime("zmp_tracer")
robot.tracer.setBufferSize(80*(2**20))
robot.tracer.open('/tmp','dg_','.dat')
robot.device.after.addSignal('{0}.triger'.format(robot.tracer.name))
robot.device.after.addSignal('{0}.zmp'.format(robot.zmp_estimator.name))
robot.device.after.addSignal('{0}.zmp'.format(robot.dynamic.name))
addTrace(robot.tracer, robot.zmp_estimator, 'zmp')
addTrace(robot.tracer, robot.dynamic, 'com')
addTrace(robot.tracer, robot.dynamic, 'zmp')
robot.tracer.start()
from sot_talos_balance.create_entities_utils import create_com_trajectory_generator from sot_talos_balance.utils.run_test_utils import run_test, runCommandClient, evalCommandClient
from sot_talos_balance.create_entities_utils import create_zmp_estimator
from dynamic_graph.sot.core.meta_tasks_kine import MetaTaskKine6d, MetaTaskKineCom, gotoNd
from dynamic_graph.sot.core.matrix_util import matrixToTuple
from dynamic_graph import plug
from dynamic_graph.sot.core import SOT
from numpy import eye
from time import sleep from time import sleep
import os
from dynamic_graph.tracer_real_time import TracerRealTime
from sot_talos_balance.create_entities_utils import addTrace, dump_tracer
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import numpy as np import numpy as np
def main(robot): run_test('appli_zmpEstimator.py')
dt = robot.timeStep;
robot.comTrajGen = create_com_trajectory_generator(dt,robot); sleep(2.0)
runCommandClient('robot.comTrajGen.move(1,-0.025,4.0)')
# --- COM sleep(20.0)
robot.taskCom = MetaTaskKineCom(robot.dynamic) runCommandClient('robot.comTrajGen.startSinusoid(1,0.05,8.0)')
robot.dynamic.com.recompute(0) sleep(20.0)
robot.taskCom.featureDes.errorIN.value = robot.dynamic.com.value
robot.taskCom.task.controlGain.value = 10 runCommandClient('dump_tracer(robot.tracer)')
# --- CONTACTS # --- DISPLAY
#define contactLF and contactRF zmpEst_data = np.loadtxt('/tmp/dg_' + evalCommandClient('robot.zmp_estimator.name') + '-zmp.dat')
robot.contactLF = MetaTaskKine6d('contactLF',robot.dynamic,'LF',robot.OperationalPointsMap['left-ankle']) zmpDyn_data = np.loadtxt('/tmp/dg_' + evalCommandClient('robot.dynamic.name') + '-zmp.dat')
robot.contactLF.feature.frame('desired') com_data = np.loadtxt('/tmp/dg_' + evalCommandClient('robot.dynamic.name') + '-com.dat')
robot.contactLF.gain.setConstant(100)
robot.contactLF.keep() plt.ion()
locals()['contactLF'] = robot.contactLF
plt.figure()
robot.contactRF = MetaTaskKine6d('contactRF',robot.dynamic,'RF',robot.OperationalPointsMap['right-ankle']) plt.plot(zmpEst_data[:,1],'b-')
robot.contactRF.feature.frame('desired') plt.plot(zmpDyn_data[:,1],'b--')
robot.contactRF.gain.setConstant(100) plt.plot(com_data[:,1],'b:')
robot.contactRF.keep() plt.plot(zmpEst_data[:,2],'r-')
locals()['contactRF'] = robot.contactRF plt.plot(zmpDyn_data[:,2],'r--')
plt.plot(com_data[:,2],'r:')
# -- estimator plt.title('ZMP estimate vs dynamic vs CoM (planar)')
# -- this NEEDS to be called AFTER the operational points LF and RF are created plt.legend(['x estimate', 'x dynamic', 'x CoM', 'y estimate', 'y dynamic', 'y CoM'])
robot.zmp_estimator = create_zmp_estimator(robot)
plt.figure()
robot.sot = SOT('sot') plt.plot(com_data[:,1],'b-')
robot.sot.setSize(robot.dynamic.getDimension()) plt.plot(com_data[:,2],'r-')
plug(robot.sot.control,robot.device.control) plt.plot(com_data[:,3],'g-')
plt.title('COM')
robot.sot.push(robot.contactRF.task.name) plt.legend(['x','y','z'])
robot.sot.push(robot.taskCom.task.name)
robot.sot.push(robot.contactLF.task.name) plt.figure()
robot.device.control.recompute(0) plt.plot(zmpDyn_data[:,1],'b-')
plt.plot(zmpDyn_data[:,2],'r-')
# --- TRACER plt.plot(zmpDyn_data[:,3],'g-')
robot.tracer = TracerRealTime("zmp_tracer") plt.title('ZMP dynamic')
robot.tracer.setBufferSize(80*(2**20)) plt.legend(['x','y','z'])
robot.tracer.open('/tmp','dg_','.dat')
robot.device.after.addSignal('{0}.triger'.format(robot.tracer.name)) plt.figure()
robot.device.after.addSignal('{0}.zmp'.format(robot.zmp_estimator.name)) # force recalculation plt.plot(zmpEst_data[:,1],'b-')
plt.plot(zmpEst_data[:,2],'r-')
addTrace(robot.tracer, robot.zmp_estimator, 'zmp') plt.plot(zmpEst_data[:,3],'g-')
addTrace(robot.tracer, robot.dynamic, 'com') plt.title('ZMP estimate')
plt.legend(['x','y','z'])
plug(robot.comTrajGen.x, robot.taskCom.featureDes.errorIN);
raw_input("Wait before leaving the simulation")
robot.tracer.start()
sleep(1.0);
os.system("rosservice call \start_dynamic_graph")
sleep(2.0);
robot.comTrajGen.move(1,-0.025,4.0);
sleep(20.0);
robot.comTrajGen.startSinusoid(1,0.05,8.0);
sleep(5.0);
dump_tracer(robot.tracer)
# --- DISPLAY
zmp_data = np.loadtxt('/tmp/dg_'+robot.zmp_estimator.name+'-zmp.dat')
com_data = np.loadtxt('/tmp/dg_'+robot.dynamic.name+'-com.dat')
plt.figure()
plt.plot(com_data[:,1],'b-')
plt.plot(com_data[:,2],'r-')
plt.plot(com_data[:,3],'g-')
plt.title('COM')
plt.legend(['x','y','z'])
plt.figure()
plt.plot(zmp_data[:,1],'b-')
plt.plot(zmp_data[:,2],'r-')
plt.plot(zmp_data[:,3],'g-')
plt.title('ZMP estimate')
plt.legend(['x','y','z'])
plt.show()
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