4 import matplotlib.pyplot
as plt
6 from dynamic_graph
import plug
7 from dynamic_graph.sot.core
import SOT
8 from dynamic_graph.sot.core.meta_tasks_kine
import MetaTaskKine6d, MetaTaskKineCom
9 from dynamic_graph.tracer_real_time
import TracerRealTime
13 create_com_admittance_controller,
14 create_dummy_dcm_estimator,
20 robot.timeStep = robot.device.getTimeStep()
24 robot.taskCom = MetaTaskKineCom(robot.dynamic)
25 robot.dynamic.com.recompute(0)
26 robot.taskCom.featureDes.errorIN.value = robot.dynamic.com.value
27 robot.taskCom.task.controlGain.value = 10
37 robot.contactLF = MetaTaskKine6d(
38 "contactLF", robot.dynamic,
"LF", robot.OperationalPointsMap[
"left-ankle"]
40 robot.contactLF.feature.frame(
"desired")
41 robot.contactLF.gain.setConstant(100)
42 robot.contactLF.keep()
43 locals()[
"contactLF"] = robot.contactLF
45 robot.contactRF = MetaTaskKine6d(
46 "contactRF", robot.dynamic,
"RF", robot.OperationalPointsMap[
"right-ankle"]
48 robot.contactRF.feature.frame(
"desired")
49 robot.contactRF.gain.setConstant(100)
50 robot.contactRF.keep()
51 locals()[
"contactRF"] = robot.contactRF
53 robot.sot = SOT(
"sot")
54 robot.sot.setSize(robot.dynamic.getDimension())
55 plug(robot.sot.control, robot.device.control)
57 robot.sot.push(robot.contactRF.task.name)
58 robot.sot.push(robot.contactLF.task.name)
59 robot.sot.push(robot.taskCom.task.name)
60 robot.device.control.recompute(0)
63 robot.tracer = TracerRealTime(
"zmp_tracer")
64 robot.tracer.setBufferSize(80 * (2**20))
65 robot.tracer.open(
"/tmp",
"dg_",
".dat")
66 robot.device.after.addSignal(
"{0}.triger".format(robot.tracer.name))
68 addTrace(robot.tracer, robot.dynamic,
"zmp")
69 addTrace(robot.tracer, robot.estimator,
"dcm")
73 plug(robot.com_admittance_control.comRef, robot.taskCom.featureDes.errorIN)
75 os.system(
"rosservice call /start_dynamic_graph")
78 plug(robot.estimator.dcm, robot.com_admittance_control.zmpDes)
80 robot.com_admittance_control.setState(robot.dynamic.com.value, [0.0, 0.0, 0.0])
81 robot.com_admittance_control.Kp.value = [10.0, 10.0, 0.0]
90 zmp_data = np.loadtxt(
"/tmp/dg_" + robot.dynamic.name +
"-zmp.dat")
91 zmpDes_data = np.loadtxt(
"/tmp/dg_" + robot.estimator.name +
"-dcm.dat")
94 plt.plot(zmp_data[:, 1],
"b-")
95 plt.plot(zmpDes_data[:, 1],
"b--")
96 plt.plot(zmp_data[:, 2],
"r-")
97 plt.plot(zmpDes_data[:, 2],
"r--")
98 plt.title(
"ZMP real vs desired")
99 plt.legend([
"Real x",
"Desired x",
"Real y",
"Desired y"])
102 plt.plot(zmp_data[:, 1] - zmpDes_data[:, 1],
"b-")
103 plt.plot(zmp_data[:, 2] - zmpDes_data[:, 2],
"r-")
104 plt.title(
"ZMP error")
105 plt.legend([
"Error on x",
"Error on y"])