sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
test_comAdmittance.py
Go to the documentation of this file.
1 import os
2 from time import sleep
3 
4 import matplotlib.pyplot as plt
5 import numpy as np
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
10 
12  addTrace,
13  create_com_admittance_controller,
14  create_dummy_dcm_estimator,
15  dump_tracer,
16 )
17 
18 
19 def main(robot):
20  robot.timeStep = robot.device.getTimeStep()
21  dt = robot.timeStep
22 
23  # --- COM
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
28 
29  robot.estimator = create_dummy_dcm_estimator(robot)
30 
31  # --- Admittance controller
32  Kp = [0.0, 0.0, 0.0]
33  robot.com_admittance_control = create_com_admittance_controller(Kp, dt, robot)
34 
35  # --- CONTACTS
36  # define contactLF and contactRF
37  robot.contactLF = MetaTaskKine6d(
38  "contactLF", robot.dynamic, "LF", robot.OperationalPointsMap["left-ankle"]
39  )
40  robot.contactLF.feature.frame("desired")
41  robot.contactLF.gain.setConstant(100)
42  robot.contactLF.keep()
43  locals()["contactLF"] = robot.contactLF
44 
45  robot.contactRF = MetaTaskKine6d(
46  "contactRF", robot.dynamic, "RF", robot.OperationalPointsMap["right-ankle"]
47  )
48  robot.contactRF.feature.frame("desired")
49  robot.contactRF.gain.setConstant(100)
50  robot.contactRF.keep()
51  locals()["contactRF"] = robot.contactRF
52 
53  robot.sot = SOT("sot")
54  robot.sot.setSize(robot.dynamic.getDimension())
55  plug(robot.sot.control, robot.device.control)
56 
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)
61 
62  # --- TRACER
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))
67 
68  addTrace(robot.tracer, robot.dynamic, "zmp")
69  addTrace(robot.tracer, robot.estimator, "dcm")
70 
71  # SIMULATION
72 
73  plug(robot.com_admittance_control.comRef, robot.taskCom.featureDes.errorIN)
74  sleep(1.0)
75  os.system("rosservice call /start_dynamic_graph")
76  sleep(2.0)
77 
78  plug(robot.estimator.dcm, robot.com_admittance_control.zmpDes)
79 
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]
82 
83  robot.tracer.start()
84 
85  sleep(5.0)
86 
87  dump_tracer(robot.tracer)
88 
89  # --- DISPLAY
90  zmp_data = np.loadtxt("/tmp/dg_" + robot.dynamic.name + "-zmp.dat")
91  zmpDes_data = np.loadtxt("/tmp/dg_" + robot.estimator.name + "-dcm.dat")
92 
93  plt.figure()
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"])
100 
101  plt.figure()
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"])
106 
107  plt.show()
create_entities_utils
sot_talos_balance.create_entities_utils.create_com_admittance_controller
def create_com_admittance_controller(Kp, dt, robot)
Definition: create_entities_utils.py:503
sot_talos_balance.create_entities_utils.addTrace
def addTrace(tracer, entity, signalName)
Definition: create_entities_utils.py:402
sot_talos_balance.create_entities_utils.create_dummy_dcm_estimator
def create_dummy_dcm_estimator(robot)
Definition: create_entities_utils.py:468
sot_talos_balance.test.test_comAdmittance.main
def main(robot)
Definition: test_comAdmittance.py:19
sot_talos_balance.create_entities_utils.dump_tracer
def dump_tracer(tracer)
Definition: create_entities_utils.py:438