2 from dynamic_graph
import plug
3 from dynamic_graph.sot.core
import SOT, FeaturePosture, Task
4 from dynamic_graph.sot.core.meta_tasks_kine
import (
9 from dynamic_graph.sot.core.operator
import Selec_of_vector
11 from dynamic_graph.sot_talos_balance.meta_task_joint
import MetaTaskKineJoint
12 from dynamic_graph.sot_talos_balance.simple_admittance_controller
import (
13 SimpleAdmittanceController,
17 N_CONFIG = N_JOINTS + 6
19 robot.timeStep = robot.device.getTimeStep()
20 timeStep = robot.timeStep
31 controller = SimpleAdmittanceController(
"rightPitchAnkleController")
32 controller.Kp.value = Kp
34 robot.stateselecRP = Selec_of_vector(
"stateselecRP")
35 robot.stateselecRP.selec(RightPitchJoint + 6, RightPitchJoint + 7)
36 plug(robot.device.state, robot.stateselecRP.sin)
37 plug(robot.stateselecRP.sout, controller.state)
39 robot.tauselecRP = Selec_of_vector(
"tauselecRP")
40 robot.tauselecRP.selec(RightPitchJoint, RightPitchJoint + 1)
41 plug(robot.device.ptorque, robot.tauselecRP.sin)
42 plug(robot.tauselecRP.sout, controller.tau)
44 controller.tauDes.value = [0.0]
45 controller.init(timeStep, 1)
46 controller.setPosition([robot.device.state.value[RightPitchJoint + 6]])
47 robot.rightPitchAnkleController = controller
49 robot.rightAnklePitchTask = MetaTaskKineJoint(robot.dynamic, RightPitchJoint)
50 robot.rightAnklePitchTask.task.controlGain.value = 0
51 robot.rightAnklePitchTask.task.setWithDerivative(
True)
52 plug(robot.rightPitchAnkleController.qRef, robot.rightAnklePitchTask.featureDes.errorIN)
54 robot.rightPitchAnkleController.dqRef,
55 robot.rightAnklePitchTask.featureDes.errordotIN,
59 controller = SimpleAdmittanceController(
"rightRollAnkleController")
60 controller.Kp.value = Kp
62 robot.stateselecRR = Selec_of_vector(
"stateselecRR")
63 robot.stateselecRR.selec(RightRollJoint + 6, RightRollJoint + 7)
64 plug(robot.device.state, robot.stateselecRR.sin)
65 plug(robot.stateselecRR.sout, controller.state)
67 robot.tauselecRR = Selec_of_vector(
"tauselecRR")
68 robot.tauselecRR.selec(RightRollJoint, RightRollJoint + 1)
69 plug(robot.device.ptorque, robot.tauselecRR.sin)
70 plug(robot.tauselecRR.sout, controller.tau)
72 controller.tauDes.value = [0.0]
73 controller.init(timeStep, 1)
74 controller.setPosition([robot.device.state.value[RightRollJoint + 6]])
75 robot.rightRollAnkleController = controller
77 robot.rightAnkleRollTask = MetaTaskKineJoint(robot.dynamic, RightRollJoint)
78 robot.rightAnkleRollTask.task.controlGain.value = 0
79 robot.rightAnkleRollTask.task.setWithDerivative(
True)
80 plug(robot.rightRollAnkleController.qRef, robot.rightAnkleRollTask.featureDes.errorIN)
82 robot.rightRollAnkleController.dqRef, robot.rightAnkleRollTask.featureDes.errordotIN
86 controller = SimpleAdmittanceController(
"leftPitchAnkleController")
87 controller.Kp.value = Kp
89 robot.stateselecLP = Selec_of_vector(
"stateselecLP")
90 robot.stateselecLP.selec(LeftPitchJoint + 6, LeftPitchJoint + 7)
91 plug(robot.device.state, robot.stateselecLP.sin)
92 plug(robot.stateselecLP.sout, controller.state)
94 robot.tauselecLP = Selec_of_vector(
"tauselecLP")
95 robot.tauselecLP.selec(LeftPitchJoint, LeftPitchJoint + 1)
96 plug(robot.device.ptorque, robot.tauselecLP.sin)
97 plug(robot.tauselecLP.sout, controller.tau)
99 controller.tauDes.value = [0.0]
100 controller.init(timeStep, 1)
101 controller.setPosition([robot.device.state.value[LeftPitchJoint + 6]])
102 robot.leftPitchAnkleController = controller
104 robot.leftAnklePitchTask = MetaTaskKineJoint(robot.dynamic, LeftPitchJoint)
105 robot.leftAnklePitchTask.task.controlGain.value = 0
106 robot.leftAnklePitchTask.task.setWithDerivative(
True)
107 plug(robot.leftPitchAnkleController.qRef, robot.leftAnklePitchTask.featureDes.errorIN)
109 robot.leftPitchAnkleController.dqRef, robot.leftAnklePitchTask.featureDes.errordotIN
113 controller = SimpleAdmittanceController(
"leftRollAnkleController")
114 controller.Kp.value = Kp
116 robot.stateselecLR = Selec_of_vector(
"stateselecLP")
117 robot.stateselecLR.selec(LeftRollJoint + 6, LeftRollJoint + 7)
118 plug(robot.device.state, robot.stateselecLR.sin)
119 plug(robot.stateselecLR.sout, controller.state)
121 robot.tauselecLR = Selec_of_vector(
"tauselecLP")
122 robot.tauselecLR.selec(LeftRollJoint, LeftRollJoint + 1)
123 plug(robot.device.ptorque, robot.tauselecLR.sin)
124 plug(robot.tauselecLR.sout, controller.tau)
126 controller.tauDes.value = [0.0]
127 controller.init(timeStep, 1)
128 controller.setPosition([robot.device.state.value[LeftRollJoint + 6]])
129 robot.leftRollAnkleController = controller
131 robot.leftAnkleRollTask = MetaTaskKineJoint(robot.dynamic, LeftRollJoint)
132 robot.leftAnkleRollTask.task.controlGain.value = 0
133 robot.leftAnkleRollTask.task.setWithDerivative(
True)
134 plug(robot.leftRollAnkleController.qRef, robot.leftAnkleRollTask.featureDes.errorIN)
135 plug(robot.leftRollAnkleController.dqRef, robot.leftAnkleRollTask.featureDes.errordotIN)
139 robot.taskPosture = Task(
"taskPosture")
140 robot.taskPosture.feature = FeaturePosture(
"featurePosture")
142 q = list(robot.dynamic.position.value)
143 robot.taskPosture.feature.state.value = q
144 robot.taskPosture.feature.posture.value = q
146 for i
in range(18, 38):
147 robot.taskPosture.feature.selectDof(i,
True)
149 robot.taskPosture.controlGain.value = 100.0
150 robot.taskPosture.add(robot.taskPosture.feature.name)
151 plug(robot.dynamic.position, robot.taskPosture.feature.state)
155 robot.contactLF = MetaTaskKine6d(
156 "contactLF", robot.dynamic,
"LF", robot.OperationalPointsMap[
"left-ankle"]
158 robot.contactLF.feature.frame(
"desired")
159 robot.contactLF.gain.setConstant(100)
160 robot.contactLF.keep()
161 locals()[
"contactLF"] = robot.contactLF
163 robot.contactRF = MetaTaskKine6d(
164 "contactRF", robot.dynamic,
"RF", robot.OperationalPointsMap[
"right-ankle"]
166 robot.contactRF.feature.frame(
"desired")
167 robot.contactRF.gain.setConstant(100)
168 robot.contactRF.keep()
169 locals()[
"contactRF"] = robot.contactRF
173 robot.sot = SOT(
"sot")
174 robot.sot.setSize(robot.dynamic.getDimension())
175 plug(robot.sot.control, robot.device.control)
177 robot.sot.push(robot.taskPosture.name)
178 robot.sot.push(robot.contactRF.task.name)
179 robot.sot.push(robot.contactLF.task.name)
180 robot.device.control.recompute(0)