sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
test_dcmComControl.py
Go to the documentation of this file.
1 """Test CoM admittance control without using the ZMP, with CoM computed as implemented
2 in reference code."""
3 from time import sleep
4 
5 import matplotlib.pyplot as plt
6 import numpy as np
7 
8 from dynamic_graph.sot_talos_balance.utils.gazebo_utils import apply_force
9 from dynamic_graph.sot_talos_balance.utils.run_test_utils import (
10  evalCommandClient,
11  run_test,
12  runCommandClient,
13 )
14 
15 try:
16  # Python 2
17  input = raw_input # noqa
18 except NameError:
19  pass
20 
21 run_test("appli_dcmComControl.py")
22 
23 sleep(5.0)
24 
25 # Connect CoM reference and reset controllers
26 print("Connect CoM reference")
28  "robot.com_admittance_control.setState(robot.dynamic.com.value,[0.0,0.0,0.0])"
29 )
30 runCommandClient("robot.dcm_control.Ki.value = Ki_dcm")
31 runCommandClient("robot.dcm_control.resetDcmIntegralError()")
33  "plug(robot.dcm_control.ddcomRef,robot.com_admittance_control.ddcomDes)"
34 )
35 
36 sleep(5.0)
37 
38 print("Kick the robot...")
39 apply_force([-1000.0, 0, 0], 0.01)
40 print("... kick!")
41 
42 sleep(5.0)
43 
44 runCommandClient("dump_tracer(robot.tracer)")
45 
46 # --- DISPLAY
47 dcm_data = np.loadtxt(
48  "/tmp/dg_" + evalCommandClient("robot.estimator.name") + "-dcm.dat"
49 )
50 zmp_data = np.loadtxt("/tmp/dg_" + evalCommandClient("robot.dynamic.name") + "-zmp.dat")
51 zmpDes_data = np.loadtxt(
52  "/tmp/dg_" + evalCommandClient("robot.dcm_control.name") + "-zmpRef.dat"
53 )
54 com_data = np.loadtxt("/tmp/dg_" + evalCommandClient("robot.dynamic.name") + "-com.dat")
55 comDes_data = np.loadtxt(
56  "/tmp/dg_" + evalCommandClient("robot.com_admittance_control.name") + "-comRef.dat"
57 )
58 
59 plt.ion()
60 
61 plt.figure()
62 plt.plot(dcm_data[:, 1], "b-")
63 plt.plot(dcm_data[:, 2], "r-")
64 plt.title("DCM")
65 plt.legend(["x", "y"])
66 
67 plt.figure()
68 plt.plot(com_data[:, 1], "b-")
69 plt.plot(comDes_data[:, 1], "b--")
70 plt.plot(com_data[:, 2], "r-")
71 plt.plot(comDes_data[:, 2], "r--")
72 plt.plot(com_data[:, 3], "g-")
73 plt.plot(comDes_data[:, 3], "g--")
74 plt.title("COM real vs desired")
75 plt.legend(["Real x", "Desired x", "Real y", "Desired y", "Real z", "Desired z"])
76 
77 plt.figure()
78 plt.plot(com_data[:, 1], "b-")
79 plt.title("COM real x")
80 plt.figure()
81 plt.plot(comDes_data[:, 1], "b--")
82 plt.title("COM desired x")
83 
84 plt.figure()
85 plt.plot(com_data[:, 2], "r-")
86 plt.title("COM real y")
87 plt.figure()
88 plt.plot(comDes_data[:, 2], "r--")
89 plt.title("COM desired y")
90 
91 plt.figure()
92 plt.plot(com_data[:, 3], "g-")
93 plt.title("COM real z")
94 plt.figure()
95 plt.plot(comDes_data[:, 3], "g--")
96 plt.title("COM desired z")
97 
98 plt.figure()
99 plt.plot(zmp_data[:, 1], "b-")
100 plt.plot(zmpDes_data[:, 1], "b--")
101 plt.plot(zmp_data[:, 2], "r-")
102 plt.plot(zmpDes_data[:, 2], "r--")
103 plt.title("ZMP real vs desired")
104 plt.legend(["Real x", "Desired x", "Real y", "Desired y"])
105 
106 plt.figure()
107 plt.plot(zmp_data[:, 1] - zmpDes_data[:, 1], "b-")
108 plt.plot(zmp_data[:, 2] - zmpDes_data[:, 2], "r-")
109 plt.title("ZMP error")
110 plt.legend(["Error on x", "Error on y"])
111 
112 input("Wait before leaving the simulation")
sot_talos_balance.utils.run_test_utils.runCommandClient
runCommandClient
Definition: run_test_utils.py:23
sot_talos_balance.test.test_dcmComControl.input
input
Definition: test_dcmComControl.py:17
sot_talos_balance.utils.gazebo_utils.apply_force
def apply_force(force, duration, body_name="talos::torso_2_link")
Definition: gazebo_utils.py:21
sot_talos_balance.utils.run_test_utils.evalCommandClient
def evalCommandClient(code)
Definition: run_test_utils.py:49
sot_talos_balance.utils.run_test_utils.run_test
def run_test(appli, verbosity=1, interactive=True)
Definition: run_test_utils.py:83