3 from dynamic_graph.sot_talos_balance.coupled_admittance_controller
import (
4 CoupledAdmittanceController,
6 from dynamic_graph.sot_talos_balance.saturation
import Saturation
7 import dynamic_graph.sot_talos_balance.talos.parameter_server_conf
as param_server_conf
8 import dynamic_graph.sot_talos_balance.talos.control_manager_conf
as cm_conf
9 import dynamic_graph.sot_talos_balance.talos.base_estimator_conf
as base_estimator_conf
10 import dynamic_graph.sot_talos_balance.talos.ft_calibration_conf
as ft_conf
11 from dynamic_graph.sot.core.meta_tasks_kine
import (
16 from dynamic_graph.sot_talos_balance.meta_task_joint
import MetaTaskKineJoint
17 from dynamic_graph.sot.core
import Task, FeaturePosture
18 from dynamic_graph.sot.core.matrix_util
import matrixToTuple
19 from dynamic_graph.sot.core.operator
import Multiply_double_vector
20 from dynamic_graph
import plug
21 from dynamic_graph.sot.core
import SOT
22 from math
import sqrt, pi
25 from dynamic_graph.tracer_real_time
import TracerRealTime
27 from dynamic_graph.sot.dynamic_pinocchio
import DynamicPinocchio
29 cm_conf.CTRL_MAX = 1000.0
31 robot.timeStep = robot.device.getTimeStep()
36 robot.dynamic.com.recompute(0)
37 robotDim = robot.dynamic.getDimension()
38 mass = robot.dynamic.data.mass[0]
39 h = robot.dynamic.com.value[2]
47 robot.dynamic.createOpPoint(
"LF", robot.OperationalPointsMap[
"left-ankle"])
48 robot.dynamic.createOpPoint(
"RF", robot.OperationalPointsMap[
"right-ankle"])
49 robot.dynamic.createOpPoint(
"WT", robot.OperationalPointsMap[
"waist"])
50 robot.dynamic.LF.recompute(0)
51 robot.dynamic.RF.recompute(0)
52 robot.dynamic.WT.recompute(0)
69 robot.lfToMatrix = PoseRollPitchYawToMatrixHomo(
"lf2m")
70 plug(robot.lfTrajGen.x, robot.lfToMatrix.sin)
75 robot.rfToMatrix = PoseRollPitchYawToMatrixHomo(
"rf2m")
76 plug(robot.rfTrajGen.x, robot.rfToMatrix.sin)
82 robot.waistMix = Mix_of_vector(
"waistMix")
83 robot.waistMix.setSignalNumber(3)
84 robot.waistMix.addSelec(1, 0, 3)
85 robot.waistMix.addSelec(2, 3, 3)
86 robot.waistMix.default.value = [0.0] * 6
87 robot.waistMix.signal(
"sin1").value = [0.0] * 3
88 plug(robot.waistTrajGen.x, robot.waistMix.signal(
"sin2"))
90 robot.waistToMatrix = PoseRollPitchYawToMatrixHomo(
"w2m")
91 plug(robot.waistMix.sout, robot.waistToMatrix.sin)
95 robot.rhoScalar = Component_of_vector(
"rho_scalar")
96 robot.rhoScalar.setIndex(0)
97 plug(robot.rhoTrajGen.x, robot.rhoScalar.sin)
101 robot.phaseScalar = Component_of_vector(
"phase_scalar")
102 robot.phaseScalar.setIndex(0)
103 plug(robot.phaseTrajGen.x, robot.phaseScalar.sin)
107 wp = DummyWalkingPatternGenerator(
"dummy_wp")
109 wp.omega.value = omega
110 plug(robot.waistToMatrix.sout, wp.waist)
111 plug(robot.lfToMatrix.sout, wp.footLeft)
112 plug(robot.rfToMatrix.sout, wp.footRight)
113 plug(robot.comTrajGen.x, wp.com)
114 plug(robot.comTrajGen.dx, wp.vcom)
115 plug(robot.comTrajGen.ddx, wp.acom)
120 robot.wp.comDes.recompute(0)
121 robot.wp.dcmDes.recompute(0)
122 robot.wp.zmpDes.recompute(0)
134 rf = SimpleReferenceFrame(
"rf")
136 plug(robot.dynamic.LF, rf.footLeft)
137 plug(robot.dynamic.RF, rf.footRight)
141 stf = StateTransformation(
"stf")
143 plug(robot.rf.referenceFrame, stf.referenceFrame)
144 plug(robot.base_estimator.q, stf.q_in)
145 plug(robot.base_estimator.v, stf.v_in)
149 e2q = EulerToQuat(
"e2q")
150 plug(robot.stf.q, e2q.euler)
154 robot.rdynamic = DynamicPinocchio(
"real_dynamics")
155 robot.rdynamic.setModel(robot.dynamic.model)
156 robot.rdynamic.setData(robot.rdynamic.model.createData())
157 plug(robot.stf.q, robot.rdynamic.position)
158 robot.rdynamic.velocity.value = [0.0] * robotDim
159 robot.rdynamic.acceleration.value = [0.0] * robotDim
162 cdc_estimator = DcmEstimator(
"cdc_estimator")
163 cdc_estimator.init(dt, robot_name)
164 plug(robot.e2q.quaternion, cdc_estimator.q)
165 plug(robot.stf.v, cdc_estimator.v)
166 robot.cdc_estimator = cdc_estimator
169 estimator = DummyDcmEstimator(
"dummy")
170 estimator.omega.value = omega
171 estimator.mass.value = 1.0
172 plug(robot.cdc_estimator.c, estimator.com)
173 plug(robot.cdc_estimator.dc, estimator.momenta)
175 robot.estimator = estimator
181 zmp_estimator = SimpleZmpEstimator(
"zmpEst")
182 robot.rdynamic.createOpPoint(
"sole_LF",
"left_sole_link")
183 robot.rdynamic.createOpPoint(
"sole_RF",
"right_sole_link")
184 plug(robot.rdynamic.sole_LF, zmp_estimator.poseLeft)
185 plug(robot.rdynamic.sole_RF, zmp_estimator.poseRight)
186 plug(robot.ftc.left_foot_force_out, zmp_estimator.wrenchLeft)
187 plug(robot.ftc.right_foot_force_out, zmp_estimator.wrenchRight)
189 robot.zmp_estimator = zmp_estimator
194 Kp_dcm = [5.0, 5.0, 5.0]
195 Ki_dcm = [0.0, 0.0, 0.0]
198 dcm_controller = DcmController(
"dcmCtrl")
200 dcm_controller.Kp.value = Kp_dcm
201 dcm_controller.Ki.value = Ki_dcm
202 dcm_controller.decayFactor.value = gamma_dcm
203 dcm_controller.mass.value = mass
204 dcm_controller.omega.value = omega
206 plug(robot.cdc_estimator.c, dcm_controller.com)
207 plug(robot.estimator.dcm, dcm_controller.dcm)
209 plug(robot.wp.zmpDes, dcm_controller.zmpDes)
210 plug(robot.wp.dcmDes, dcm_controller.dcmDes)
212 dcm_controller.init(dt)
214 robot.dcm_control = dcm_controller
216 Ki_dcm = [1.0, 1.0, 1.0]
219 robot.phaseSwitch = IntIdentity(
"phaseSwitch")
220 robot.phaseSwitch.sin.value = 0
224 plug(robot.e2q.quaternion, distribute.q)
225 plug(robot.dcm_control.wrenchRef, distribute.wrenchDes)
226 plug(robot.rhoScalar.sout, distribute.rho)
227 plug(robot.phaseSwitch.sout, distribute.phase)
228 distribute.init(robot_name)
229 robot.distribute = distribute
243 controller = CoupledAdmittanceController(
"pitchController")
244 controller.kSum.value = kSumPitch
245 controller.kDiff.value = kDiffPitch
248 robot.tauRP = Selec_of_vector(
"tauRP")
249 robot.tauRP.selec(RightPitchJoint, RightPitchJoint + 1)
250 plug(robot.device.ptorque, robot.tauRP.sin)
251 plug(robot.tauRP.sout, controller.tauR)
253 robot.tauDesRP = Selec_of_vector(
"tauDesRP")
254 robot.tauDesRP.selec(4, 5)
255 plug(robot.distribute.ankleWrenchRight, robot.tauDesRP.sin)
257 robot.multRP = Multiply_double_vector(
"multRP")
258 robot.multRP.sin1.value = -1.0
259 plug(robot.tauDesRP.sout, robot.multRP.sin2)
260 plug(robot.multRP.sout, controller.tauDesR)
263 robot.tauLP = Selec_of_vector(
"tauLP")
264 robot.tauLP.selec(LeftPitchJoint, LeftPitchJoint + 1)
265 plug(robot.device.ptorque, robot.tauLP.sin)
266 plug(robot.tauLP.sout, controller.tauL)
268 robot.tauDesLP = Selec_of_vector(
"tauDesLP")
269 robot.tauDesLP.selec(4, 5)
270 plug(robot.distribute.ankleWrenchLeft, robot.tauDesLP.sin)
272 robot.multLP = Multiply_double_vector(
"multLP")
273 robot.multLP.sin1.value = -1.0
274 plug(robot.tauDesLP.sout, robot.multLP.sin2)
275 plug(robot.multLP.sout, controller.tauDesL)
277 robot.pitchController = controller
280 controller = CoupledAdmittanceController(
"rollController")
281 controller.kSum.value = kSumRoll
282 controller.kDiff.value = kDiffRoll
285 robot.tauRR = Selec_of_vector(
"tauRR")
286 robot.tauRR.selec(RightRollJoint, RightRollJoint + 1)
287 plug(robot.device.ptorque, robot.tauRR.sin)
288 plug(robot.tauRR.sout, controller.tauR)
290 robot.tauDesRR = Selec_of_vector(
"tauDesRR")
291 robot.tauDesRR.selec(3, 4)
292 plug(robot.distribute.ankleWrenchRight, robot.tauDesRR.sin)
294 robot.multRR = Multiply_double_vector(
"multRR")
295 robot.multRR.sin1.value = -1.0
296 plug(robot.tauDesRR.sout, robot.multRR.sin2)
297 plug(robot.multRR.sout, controller.tauDesR)
300 robot.tauLR = Selec_of_vector(
"tauLR")
301 robot.tauLR.selec(LeftRollJoint, LeftRollJoint + 1)
302 plug(robot.device.ptorque, robot.tauLR.sin)
303 plug(robot.tauLR.sout, controller.tauL)
305 robot.tauDesLR = Selec_of_vector(
"tauDesLR")
306 robot.tauDesLR.selec(3, 4)
307 plug(robot.distribute.ankleWrenchLeft, robot.tauDesLR.sin)
309 robot.multLR = Multiply_double_vector(
"multLR")
310 robot.multLR.sin1.value = -1.0
311 plug(robot.tauDesLR.sout, robot.multLR.sin2)
312 plug(robot.multLR.sout, controller.tauDesL)
314 robot.rollController = controller
321 robot.qRP = Selec_of_vector(
"qRP")
322 robot.qRP.selec(RightPitchJoint + 6, RightPitchJoint + 7)
323 plug(robot.device.state, robot.qRP.sin)
325 controller = SimpleAdmittanceController(
"rightPitchAnkleController")
326 controller.Kp.value = KpPitch
327 plug(robot.qRP.sout, controller.state)
328 plug(robot.tauRP.sout, controller.tau)
329 plug(robot.multRP.sout, controller.tauDes)
330 controller.init(dt, 1)
331 controller.setPosition([robot.device.state.value[RightPitchJoint + 6]])
332 robot.rightPitchAnkleController = controller
335 robot.qRR = Selec_of_vector(
"qRR")
336 robot.qRR.selec(RightRollJoint + 6, RightRollJoint + 7)
337 plug(robot.device.state, robot.qRR.sin)
339 controller = SimpleAdmittanceController(
"rightRollAnkleController")
340 controller.Kp.value = KpRoll
341 plug(robot.qRR.sout, controller.state)
342 plug(robot.tauRR.sout, controller.tau)
343 plug(robot.multRR.sout, controller.tauDes)
344 controller.init(dt, 1)
345 controller.setPosition([robot.device.state.value[RightRollJoint + 6]])
346 robot.rightRollAnkleController = controller
349 robot.qLP = Selec_of_vector(
"qLP")
350 robot.qLP.selec(LeftPitchJoint + 6, LeftPitchJoint + 7)
351 plug(robot.device.state, robot.qLP.sin)
353 controller = SimpleAdmittanceController(
"leftPitchAnkleController")
354 controller.Kp.value = KpPitch
355 plug(robot.qLP.sout, controller.state)
356 plug(robot.tauLP.sout, controller.tau)
357 plug(robot.multLP.sout, controller.tauDes)
358 controller.init(dt, 1)
359 controller.setPosition([robot.device.state.value[LeftPitchJoint + 6]])
360 robot.leftPitchAnkleController = controller
363 robot.qLR = Selec_of_vector(
"qLR")
364 robot.qLR.selec(LeftRollJoint + 6, LeftRollJoint + 7)
365 plug(robot.device.state, robot.qLR.sin)
367 controller = SimpleAdmittanceController(
"leftRollAnkleController")
368 controller.Kp.value = KpRoll
369 plug(robot.qLR.sout, controller.state)
370 plug(robot.tauLR.sout, controller.tau)
371 plug(robot.multLR.sout, controller.tauDes)
372 controller.init(dt, 1)
373 controller.setPosition([robot.device.state.value[LeftRollJoint + 6]])
374 robot.leftRollAnkleController = controller
377 robot.ajs = AnkleJointSelector(
"ajs")
378 robot.ajs.init(robot.dynamic.getDimension())
380 plug(robot.phaseSwitch.sout, robot.ajs.phase)
382 plug(robot.rightRollAnkleController.dqRef, robot.ajs.rightRollDecoupled)
383 plug(robot.rollController.dqRefR, robot.ajs.rightRollCoupled)
385 plug(robot.rightPitchAnkleController.dqRef, robot.ajs.rightPitchDecoupled)
386 plug(robot.pitchController.dqRefR, robot.ajs.rightPitchCoupled)
388 plug(robot.leftRollAnkleController.dqRef, robot.ajs.leftRollDecoupled)
389 plug(robot.rollController.dqRefL, robot.ajs.leftRollCoupled)
391 plug(robot.leftPitchAnkleController.dqRef, robot.ajs.leftPitchDecoupled)
392 plug(robot.pitchController.dqRefL, robot.ajs.leftPitchCoupled)
395 robot.saturationRP = Saturation(
"saturationRP")
396 plug(robot.qRP.sout, robot.saturationRP.x)
397 plug(robot.ajs.rightPitch, robot.saturationRP.y)
398 robot.saturationRP.k.value = kSat
399 robot.saturationRP.xLim.value = qLimSat
400 robot.saturationRP.yLim.value = dqLimSat
402 robot.taskRP = MetaTaskKineJoint(robot.dynamic, RightPitchJoint + 6)
403 robot.taskRP.task.controlGain.value = 0
404 robot.taskRP.task.setWithDerivative(
True)
405 robot.taskRP.featureDes.errorIN.value = [0.0]
406 plug(robot.saturationRP.yOut, robot.taskRP.featureDes.errordotIN)
407 plug(robot.ajs.selecRight, robot.taskRP.task.controlSelec)
409 robot.saturationRR = Saturation(
"saturationRR")
410 plug(robot.qRR.sout, robot.saturationRR.x)
411 plug(robot.ajs.rightRoll, robot.saturationRR.y)
412 robot.saturationRR.k.value = kSat
413 robot.saturationRR.xLim.value = qLimSat
414 robot.saturationRR.yLim.value = dqLimSat
416 robot.taskRR = MetaTaskKineJoint(robot.dynamic, RightRollJoint + 6)
417 robot.taskRR.task.controlGain.value = 0
418 robot.taskRR.task.setWithDerivative(
True)
419 robot.taskRR.featureDes.errorIN.value = [0.0]
420 plug(robot.saturationRR.yOut, robot.taskRR.featureDes.errordotIN)
421 plug(robot.ajs.selecRight, robot.taskRR.task.controlSelec)
423 robot.saturationLP = Saturation(
"saturationLP")
424 plug(robot.qLP.sout, robot.saturationLP.x)
425 plug(robot.ajs.leftPitch, robot.saturationLP.y)
426 robot.saturationLP.k.value = kSat
427 robot.saturationLP.xLim.value = qLimSat
428 robot.saturationLP.yLim.value = dqLimSat
430 robot.taskLP = MetaTaskKineJoint(robot.dynamic, LeftPitchJoint + 6)
431 robot.taskLP.task.controlGain.value = 0
432 robot.taskLP.task.setWithDerivative(
True)
433 robot.taskLP.featureDes.errorIN.value = [0.0]
434 plug(robot.saturationLP.yOut, robot.taskLP.featureDes.errordotIN)
435 plug(robot.ajs.selecLeft, robot.taskLP.task.controlSelec)
437 robot.saturationLR = Saturation(
"saturationLR")
438 plug(robot.qLR.sout, robot.saturationLR.x)
439 plug(robot.ajs.leftRoll, robot.saturationLR.y)
440 robot.saturationLR.k.value = kSat
441 robot.saturationLR.xLim.value = qLimSat
442 robot.saturationLR.yLim.value = dqLimSat
444 robot.taskLR = MetaTaskKineJoint(robot.dynamic, LeftRollJoint + 6)
445 robot.taskLR.task.controlGain.value = 0
446 robot.taskLR.task.setWithDerivative(
True)
447 robot.taskLR.featureDes.errorIN.value = [0.0]
448 plug(robot.saturationLR.yOut, robot.taskLR.featureDes.errordotIN)
449 plug(robot.ajs.selecLeft, robot.taskLR.task.controlSelec)
453 robot.cm.addCtrlMode(
"sot_input")
454 robot.cm.setCtrlMode(
"all",
"sot_input")
455 robot.cm.addEmergencyStopSIN(
"zmp")
456 robot.cm.addEmergencyStopSIN(
"distribute")
460 robot.taskUpperBody = Task(
"task_upper_body")
461 robot.taskUpperBody.feature = FeaturePosture(
"feature_upper_body")
463 q = list(robot.dynamic.position.value)
464 robot.taskUpperBody.feature.state.value = q
465 robot.taskUpperBody.feature.posture.value = q
467 robot.taskUpperBody.feature.selectDof(18,
True)
468 robot.taskUpperBody.feature.selectDof(19,
True)
469 robot.taskUpperBody.feature.selectDof(20,
True)
470 robot.taskUpperBody.feature.selectDof(21,
True)
471 robot.taskUpperBody.feature.selectDof(22,
True)
472 robot.taskUpperBody.feature.selectDof(23,
True)
473 robot.taskUpperBody.feature.selectDof(24,
True)
474 robot.taskUpperBody.feature.selectDof(25,
True)
475 robot.taskUpperBody.feature.selectDof(26,
True)
476 robot.taskUpperBody.feature.selectDof(27,
True)
477 robot.taskUpperBody.feature.selectDof(28,
True)
478 robot.taskUpperBody.feature.selectDof(29,
True)
479 robot.taskUpperBody.feature.selectDof(30,
True)
480 robot.taskUpperBody.feature.selectDof(31,
True)
481 robot.taskUpperBody.feature.selectDof(32,
True)
482 robot.taskUpperBody.feature.selectDof(33,
True)
483 robot.taskUpperBody.feature.selectDof(34,
True)
484 robot.taskUpperBody.feature.selectDof(35,
True)
485 robot.taskUpperBody.feature.selectDof(36,
True)
486 robot.taskUpperBody.feature.selectDof(37,
True)
488 robot.taskUpperBody.controlGain.value = 100.0
489 robot.taskUpperBody.add(robot.taskUpperBody.feature.name)
490 plug(robot.dynamic.position, robot.taskUpperBody.feature.state)
493 robot.contactLF = MetaTaskKine6d(
494 "contactLF", robot.dynamic,
"LF", robot.OperationalPointsMap[
"left-ankle"]
496 robot.contactLF.feature.frame(
"desired")
497 robot.contactLF.gain.setConstant(300)
498 plug(robot.wp.footLeftDes, robot.contactLF.featureDes.position)
499 locals()[
"contactLF"] = robot.contactLF
501 robot.contactRF = MetaTaskKine6d(
502 "contactRF", robot.dynamic,
"RF", robot.OperationalPointsMap[
"right-ankle"]
504 robot.contactRF.feature.frame(
"desired")
505 robot.contactRF.gain.setConstant(300)
506 plug(robot.wp.footRightDes, robot.contactRF.featureDes.position)
507 locals()[
"contactRF"] = robot.contactRF
510 robot.taskCom = MetaTaskKineCom(robot.dynamic)
511 plug(robot.wp.comDes, robot.taskCom.featureDes.errorIN)
512 robot.taskCom.task.controlGain.value = 10
513 robot.taskCom.feature.selec.value =
"100"
516 robot.keepWaist = MetaTaskKine6d(
517 "keepWaist", robot.dynamic,
"WT", robot.OperationalPointsMap[
"waist"]
519 robot.keepWaist.feature.frame(
"desired")
520 robot.keepWaist.gain.setConstant(300)
521 plug(robot.wp.waistDes, robot.keepWaist.featureDes.position)
522 robot.keepWaist.feature.selec.value =
"111000"
523 locals()[
"keepWaist"] = robot.keepWaist
526 robot.sot = SOT(
"sot")
527 robot.sot.setSize(robot.dynamic.getDimension())
530 plug(robot.sot.control, robot.cm.ctrl_sot_input)
531 plug(robot.cm.u_safe, robot.device.control)
534 robot.sot.push(robot.taskUpperBody.name)
535 robot.sot.push(robot.contactRF.task.name)
536 robot.sot.push(robot.contactLF.task.name)
537 robot.sot.push(robot.taskCom.task.name)
538 robot.sot.push(robot.taskRP.task.name)
539 robot.sot.push(robot.taskRR.task.name)
540 robot.sot.push(robot.taskLP.task.name)
541 robot.sot.push(robot.taskLR.task.name)
542 robot.sot.push(robot.keepWaist.task.name)
545 plug(robot.device.velocity, robot.dynamic.velocity)
546 from dynamic_graph.sot.core
import Derivator_of_Vector
548 robot.dvdt = Derivator_of_Vector(
"dv_dt")
549 robot.dvdt.dt.value = dt
550 plug(robot.device.velocity, robot.dvdt.sin)
551 plug(robot.dvdt.sout, robot.dynamic.acceleration)
559 robot.publisher, robot.wp,
"comDes", robot=robot, data_type=
"vector"
563 robot.publisher, robot.cdc_estimator,
"c", robot=robot, data_type=
"vector"
566 robot.publisher, robot.cdc_estimator,
"dc", robot=robot, data_type=
"vector"
570 robot.publisher, robot.dynamic,
"com", robot=robot, data_type=
"vector"
574 robot.publisher, robot.dcm_control,
"dcmDes", robot=robot, data_type=
"vector"
577 robot.publisher, robot.estimator,
"dcm", robot=robot, data_type=
"vector"
581 robot.publisher, robot.dcm_control,
"zmpDes", robot=robot, data_type=
"vector"
584 robot.publisher, robot.dynamic,
"zmp", robot=robot, data_type=
"vector"
587 robot.publisher, robot.zmp_estimator,
"zmp", robot=robot, data_type=
"vector"
590 robot.publisher, robot.dcm_control,
"zmpRef", robot=robot, data_type=
"vector"
594 robot.publisher, robot.dcm_control,
"wrenchRef", robot=robot, data_type=
"vector"
597 robot.publisher, robot.distribute,
"wrenchLeft", robot=robot, data_type=
"vector"
600 robot.publisher, robot.distribute,
"wrenchRight", robot=robot, data_type=
"vector"
603 robot.publisher, robot.distribute,
"wrenchRef", robot=robot, data_type=
"vector"
607 robot.publisher, robot.ftc,
"left_foot_force_out", robot=robot, data_type=
"vector"
610 robot.publisher, robot.ftc,
"right_foot_force_out", robot=robot, data_type=
"vector"
614 robot.publisher, robot.pitchController,
"tauL", robot=robot, data_type=
"vector"
617 robot.publisher, robot.pitchController,
"tauDesL", robot=robot, data_type=
"vector"
620 robot.publisher, robot.pitchController,
"dqRefL", robot=robot, data_type=
"vector"
623 robot.publisher, robot.pitchController,
"tauR", robot=robot, data_type=
"vector"
626 robot.publisher, robot.pitchController,
"tauDesR", robot=robot, data_type=
"vector"
629 robot.publisher, robot.pitchController,
"dqRefR", robot=robot, data_type=
"vector"
632 robot.publisher, robot.pitchController,
"tauSum", robot=robot, data_type=
"vector"
635 robot.publisher, robot.pitchController,
"tauDiff", robot=robot, data_type=
"vector"
638 robot.publisher, robot.pitchController,
"tauDesSum", robot=robot, data_type=
"vector"
642 robot.pitchController,
649 robot.publisher, robot.rollController,
"tauL", robot=robot, data_type=
"vector"
652 robot.publisher, robot.rollController,
"tauDesL", robot=robot, data_type=
"vector"
655 robot.publisher, robot.rollController,
"dqRefL", robot=robot, data_type=
"vector"
658 robot.publisher, robot.rollController,
"tauR", robot=robot, data_type=
"vector"
661 robot.publisher, robot.rollController,
"tauDesR", robot=robot, data_type=
"vector"
664 robot.publisher, robot.rollController,
"dqRefR", robot=robot, data_type=
"vector"
667 robot.publisher, robot.rollController,
"tauSum", robot=robot, data_type=
"vector"
670 robot.publisher, robot.rollController,
"tauDiff", robot=robot, data_type=
"vector"
673 robot.publisher, robot.rollController,
"tauDesSum", robot=robot, data_type=
"vector"
676 robot.publisher, robot.rollController,
"tauDesDiff", robot=robot, data_type=
"vector"