4 from dynamic_graph
import plug
5 from dynamic_graph.sot.core
import SOT, Derivator_of_Vector, FeaturePosture, Task
6 from dynamic_graph.sot.core.matrix_util
import matrixToTuple
7 from dynamic_graph.sot.core.meta_tasks_kine
import (
12 from dynamic_graph.tracer_real_time
import TracerRealTime
14 import dynamic_graph.sot_talos_balance.talos.base_estimator_conf
as base_estimator_conf
15 import dynamic_graph.sot_talos_balance.talos.control_manager_conf
as cm_conf
16 import dynamic_graph.sot_talos_balance.talos.ft_calibration_conf
as ft_conf
17 import dynamic_graph.sot_talos_balance.talos.parameter_server_conf
as param_server_conf
20 robot.timeStep = robot.device.getTimeStep()
28 robot.dynamic.com.recompute(0)
29 comDes = robot.dynamic.com.value
39 zmpDes = comDes[:2] + (0.0,)
42 ddcomDes = (0.0, 0.0, 0.0)
46 robotDim = robot.dynamic.getDimension()
47 mass = robot.dynamic.data.mass[0]
48 h = robot.dynamic.com.value[2]
64 e2q = EulerToQuat(
"e2q")
65 plug(robot.base_estimator.q, e2q.euler)
69 cdc_estimator = DcmEstimator(
"cdc_estimator")
70 cdc_estimator.init(dt, robot_name)
71 plug(robot.e2q.quaternion, cdc_estimator.q)
72 plug(robot.base_estimator.v, cdc_estimator.v)
73 robot.cdc_estimator = cdc_estimator
78 estimator = DummyDcmEstimator(
"dummy")
79 estimator.omega.value = omega
80 estimator.mass.value = mass
81 plug(robot.dynamic.com, estimator.com)
82 plug(robot.dynamic.momenta, estimator.momenta)
84 robot.estimator = estimator
87 estimatorDc = DummyDcmEstimator(
"dcest")
88 estimatorDc.omega.value = 1.0
89 estimatorDc.mass.value = mass
90 estimatorDc.com.value = (0.0, 0.0, 0.0)
91 plug(robot.dynamic.momenta, estimatorDc.momenta)
93 robot.estimatorDc = estimatorDc
107 zmp_estimator = SimpleZmpEstimator(
"zmpEst")
108 robot.dynamic.createOpPoint(
"sole_LF",
"left_sole_link")
109 robot.dynamic.createOpPoint(
"sole_RF",
"right_sole_link")
110 plug(robot.dynamic.sole_LF, zmp_estimator.poseLeft)
111 plug(robot.dynamic.sole_RF, zmp_estimator.poseRight)
112 plug(robot.ftc.left_foot_force_out, zmp_estimator.wrenchLeft)
113 plug(robot.ftc.right_foot_force_out, zmp_estimator.wrenchRight)
115 robot.zmp_estimator = zmp_estimator
120 Kp_dcm = [5.0, 5.0, 5.0]
121 Ki_dcm = [0.0, 0.0, 0.0]
124 dcm_controller = DcmController(
"dcmCtrl")
126 dcm_controller.Kp.value = Kp_dcm
127 dcm_controller.Ki.value = Ki_dcm
128 dcm_controller.decayFactor.value = gamma_dcm
129 dcm_controller.mass.value = mass
130 dcm_controller.omega.value = omega
132 plug(robot.dynamic.com, dcm_controller.com)
133 plug(robot.estimator.dcm, dcm_controller.dcm)
135 dcm_controller.zmpDes.value = zmpDes
136 dcm_controller.dcmDes.value = dcmDes
138 dcm_controller.init(dt)
140 robot.dcm_control = dcm_controller
142 Ki_dcm = [1.0, 1.0, 1.0]
145 Kp_adm = [0.0, 0.0, 0.0]
147 com_admittance_control = ComAdmittanceController(
"comAdmCtrl")
148 com_admittance_control.Kp.value = Kp_adm
149 plug(robot.zmp_estimator.zmp, com_admittance_control.zmp)
150 com_admittance_control.zmpDes.value = (
153 com_admittance_control.ddcomDes.value = ddcomDes
155 com_admittance_control.init(dt)
156 com_admittance_control.setState(comDes, [0.0, 0.0, 0.0])
158 robot.com_admittance_control = com_admittance_control
160 Kp_adm = [20.0, 10.0, 0.0]
164 robot.cm.addCtrlMode(
"sot_input")
165 robot.cm.setCtrlMode(
"all",
"sot_input")
166 robot.cm.addEmergencyStopSIN(
"zmp")
171 robot.taskUpperBody = Task(
"task_upper_body")
172 robot.taskUpperBody.feature = FeaturePosture(
"feature_upper_body")
174 q = list(robot.dynamic.position.value)
175 robot.taskUpperBody.feature.state.value = q
176 robot.taskUpperBody.feature.posture.value = q
179 robot.taskUpperBody.feature.selectDof(18,
True)
180 robot.taskUpperBody.feature.selectDof(19,
True)
181 robot.taskUpperBody.feature.selectDof(20,
True)
182 robot.taskUpperBody.feature.selectDof(21,
True)
183 robot.taskUpperBody.feature.selectDof(22,
True)
184 robot.taskUpperBody.feature.selectDof(23,
True)
185 robot.taskUpperBody.feature.selectDof(24,
True)
186 robot.taskUpperBody.feature.selectDof(25,
True)
187 robot.taskUpperBody.feature.selectDof(26,
True)
188 robot.taskUpperBody.feature.selectDof(27,
True)
189 robot.taskUpperBody.feature.selectDof(28,
True)
190 robot.taskUpperBody.feature.selectDof(29,
True)
191 robot.taskUpperBody.feature.selectDof(30,
True)
192 robot.taskUpperBody.feature.selectDof(31,
True)
193 robot.taskUpperBody.feature.selectDof(32,
True)
194 robot.taskUpperBody.feature.selectDof(33,
True)
195 robot.taskUpperBody.feature.selectDof(34,
True)
196 robot.taskUpperBody.feature.selectDof(35,
True)
197 robot.taskUpperBody.feature.selectDof(36,
True)
198 robot.taskUpperBody.feature.selectDof(37,
True)
200 robot.taskUpperBody.controlGain.value = 100.0
201 robot.taskUpperBody.add(robot.taskUpperBody.feature.name)
202 plug(robot.dynamic.position, robot.taskUpperBody.feature.state)
206 robot.contactLF = MetaTaskKine6d(
207 "contactLF", robot.dynamic,
"LF", robot.OperationalPointsMap[
"left-ankle"]
209 robot.contactLF.feature.frame(
"desired")
210 robot.contactLF.gain.setConstant(300)
211 robot.contactLF.keep()
212 locals()[
"contactLF"] = robot.contactLF
214 robot.contactRF = MetaTaskKine6d(
215 "contactRF", robot.dynamic,
"RF", robot.OperationalPointsMap[
"right-ankle"]
217 robot.contactRF.feature.frame(
"desired")
218 robot.contactRF.gain.setConstant(300)
219 robot.contactRF.keep()
220 locals()[
"contactRF"] = robot.contactRF
223 robot.taskCom = MetaTaskKineCom(robot.dynamic)
224 plug(robot.com_admittance_control.comRef, robot.taskCom.featureDes.errorIN)
225 plug(robot.com_admittance_control.dcomRef, robot.taskCom.featureDes.errordotIN)
226 robot.taskCom.task.controlGain.value = 0
227 robot.taskCom.task.setWithDerivative(
True)
230 robot.keepWaist = MetaTaskKine6d(
231 "keepWaist", robot.dynamic,
"WT", robot.OperationalPointsMap[
"waist"]
233 robot.keepWaist.feature.frame(
"desired")
234 robot.keepWaist.gain.setConstant(300)
235 robot.keepWaist.keep()
236 robot.keepWaist.feature.selec.value =
"111000"
237 locals()[
"keepWaist"] = robot.keepWaist
286 robot.sot = SOT(
"sot")
287 robot.sot.setSize(robot.dynamic.getDimension())
290 plug(robot.sot.control, robot.cm.ctrl_sot_input)
291 plug(robot.cm.u_safe, robot.device.control)
293 robot.sot.push(robot.taskUpperBody.name)
294 robot.sot.push(robot.contactRF.task.name)
295 robot.sot.push(robot.contactLF.task.name)
296 robot.sot.push(robot.taskCom.task.name)
297 robot.sot.push(robot.keepWaist.task.name)
299 robot.device.control.recompute(0)
302 plug(robot.device.velocity, robot.dynamic.velocity)
303 robot.dvdt = Derivator_of_Vector(
"dv_dt")
304 robot.dvdt.dt.value = dt
305 plug(robot.device.velocity, robot.dvdt.sin)
306 plug(robot.dvdt.sout, robot.dynamic.acceleration)
313 rospub_signalName =
"{0}_{1}".format(
"fake",
"comDes")
314 topicname =
"/sot/{0}/{1}".format(
"fake",
"comDes")
315 robot.publisher.add(
"vector", rospub_signalName, topicname)
317 robot.dcm_control.dcmDes, robot.publisher.signal(rospub_signalName)
321 robot.publisher, robot.cdc_estimator,
"c", robot=robot, data_type=
"vector"
324 robot.publisher, robot.cdc_estimator,
"dc", robot=robot, data_type=
"vector"
329 robot.com_admittance_control,
335 robot.publisher, robot.dynamic,
"com", robot=robot, data_type=
"vector"
339 robot.publisher, robot.dcm_control,
"dcmDes", robot=robot, data_type=
"vector"
342 robot.publisher, robot.estimator,
"dcm", robot=robot, data_type=
"vector"
346 robot.publisher, robot.estimatorDc,
"dcm", robot=robot, data_type=
"vector"
350 robot.publisher, robot.dcm_control,
"zmpDes", robot=robot, data_type=
"vector"
353 robot.publisher, robot.dynamic,
"zmp", robot=robot, data_type=
"vector"
356 robot.publisher, robot.zmp_estimator,
"zmp", robot=robot, data_type=
"vector"
359 robot.publisher, robot.dcm_control,
"zmpRef", robot=robot, data_type=
"vector"
369 robot.publisher, robot.ftc,
"left_foot_force_out", robot=robot, data_type=
"vector"
372 robot.publisher, robot.ftc,
"right_foot_force_out", robot=robot, data_type=
"vector"
376 robot.tracer = TracerRealTime(
"zmp_tracer")
377 robot.tracer.setBufferSize(80 * (2**20))
378 robot.tracer.open(
"/tmp",
"dg_",
".dat")
379 robot.device.after.addSignal(
"{0}.triger".format(robot.tracer.name))
381 addTrace(robot.tracer, robot.dcm_control,
"dcmDes")
382 addTrace(robot.tracer, robot.cdc_estimator,
"c")
383 addTrace(robot.tracer, robot.com_admittance_control,
"comRef")
384 addTrace(robot.tracer, robot.dynamic,
"com")
387 addTrace(robot.tracer, robot.estimator,
"dcm")
389 addTrace(robot.tracer, robot.dcm_control,
"zmpDes")
390 addTrace(robot.tracer, robot.zmp_estimator,
"zmp")
391 addTrace(robot.tracer, robot.dcm_control,
"zmpRef")
392 addTrace(robot.tracer, robot.dynamic,
"zmp")