sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
appli_dcmComZmpControl.py
Go to the documentation of this file.
1 # flake8: noqa
2 from dynamic_graph import plug
3 from dynamic_graph.sot.core import SOT
4 from dynamic_graph.sot.core.matrix_util import matrixToTuple
5 from dynamic_graph.sot.core.meta_tasks_kine import (
6  MetaTaskKine6d,
7  MetaTaskKineCom,
8  gotoNd,
9 )
10 from dynamic_graph.tracer_real_time import TracerRealTime
11 
13 
14 robot.timeStep = robot.device.getTimeStep()
15 dt = robot.timeStep
16 
17 # --- Dummy estimator
18 robot.estimator = create_dummy_dcm_estimator(robot)
19 
20 # --- DCM controller
21 Kp_dcm = [500.0, 500.0, 500.0]
22 Ki_dcm = [1.0, 1.0, 0.0] # to be set later
23 robot.dcm_control = create_dcm_com_controller(
24  Kp_dcm, [0.0] * 3, dt, robot, robot.estimator.dcm
25 )
26 
27 # --- Admittance controller
28 Kp_adm = [20.0, 10.0, 0.0] # to be set later
29 robot.com_admittance_control = create_com_admittance_controller([0.0] * 3, dt, robot)
30 
31 # --- CONTACTS
32 # define contactLF and contactRF
33 robot.contactLF = MetaTaskKine6d(
34  "contactLF", robot.dynamic, "LF", robot.OperationalPointsMap["left-ankle"]
35 )
36 robot.contactLF.feature.frame("desired")
37 robot.contactLF.gain.setConstant(300)
38 robot.contactLF.keep()
39 locals()["contactLF"] = robot.contactLF
40 
41 robot.contactRF = MetaTaskKine6d(
42  "contactRF", robot.dynamic, "RF", robot.OperationalPointsMap["right-ankle"]
43 )
44 robot.contactRF.feature.frame("desired")
45 robot.contactRF.gain.setConstant(300)
46 robot.contactRF.keep()
47 locals()["contactRF"] = robot.contactRF
48 
49 # --- COM
50 robot.taskCom = MetaTaskKineCom(robot.dynamic)
51 robot.dynamic.com.recompute(0)
52 plug(robot.com_admittance_control.comRef, robot.taskCom.featureDes.errorIN)
53 plug(robot.com_admittance_control.dcomRef, robot.taskCom.featureDes.errordotIN)
54 robot.taskCom.task.controlGain.value = 0
55 robot.taskCom.task.setWithDerivative(True)
56 
57 robot.sot = SOT("sot")
58 robot.sot.setSize(robot.dynamic.getDimension())
59 plug(robot.sot.control, robot.device.control)
60 
61 robot.sot.push(robot.contactRF.task.name)
62 robot.sot.push(robot.contactLF.task.name)
63 robot.sot.push(robot.taskCom.task.name)
64 robot.device.control.recompute(0)
65 
66 # --- TRACER
67 robot.tracer = TracerRealTime("zmp_tracer")
68 robot.tracer.setBufferSize(80 * (2**20))
69 robot.tracer.open("/tmp", "dg_", ".dat")
70 robot.device.after.addSignal("{0}.triger".format(robot.tracer.name))
71 robot.device.after.addSignal("{0}.zmpRef".format(robot.dcm_control.name))
72 robot.device.after.addSignal("{0}.zmp".format(robot.dynamic.name)) # why needed?
73 robot.device.after.addSignal(
74  "{0}.comRef".format(robot.com_admittance_control.name)
75 ) # why needed?
76 
77 addTrace(robot.tracer, robot.dynamic, "zmp")
78 addTrace(robot.tracer, robot.dcm_control, "zmpRef")
79 addTrace(robot.tracer, robot.estimator, "dcm")
80 addTrace(robot.tracer, robot.dynamic, "com")
81 addTrace(robot.tracer, robot.com_admittance_control, "comRef")
82 
83 # SIMULATION
84 
85 robot.tracer.start()
sot_talos_balance.create_entities_utils.create_dcm_com_controller
def create_dcm_com_controller(Kp, Ki, dt, robot, dcmSignal)
Definition: create_entities_utils.py:544
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