5 from dynamic_graph
import plug
6 from dynamic_graph.sot.core
import (
10 MatrixHomoToPoseQuaternion,
13 from dynamic_graph.sot.core.matrix_util
import matrixToTuple
14 from dynamic_graph.sot.core.meta_tasks_kine
import (
19 from dynamic_graph.sot.dynamic_pinocchio
import DynamicPinocchio
20 from dynamic_graph.tracer_real_time
import TracerRealTime
22 import dynamic_graph.sot_talos_balance.talos.base_estimator_conf
as base_estimator_conf
23 import dynamic_graph.sot_talos_balance.talos.control_manager_conf
as cm_conf
24 import dynamic_graph.sot_talos_balance.talos.ft_calibration_conf
as ft_conf
25 import dynamic_graph.sot_talos_balance.talos.parameter_server_conf
as param_server_conf
27 from dynamic_graph.sot_talos_balance.simple_controller_6d
import SimpleController6d
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)
64 robot.lfToMatrix = PoseRollPitchYawToMatrixHomo(
"lf2m")
65 plug(robot.lfTrajGen.x, robot.lfToMatrix.sin)
70 robot.rfToMatrix = PoseRollPitchYawToMatrixHomo(
"rf2m")
71 plug(robot.rfTrajGen.x, robot.rfToMatrix.sin)
77 robot.waistMix = Mix_of_vector(
"waistMix")
78 robot.waistMix.setSignalNumber(3)
79 robot.waistMix.addSelec(1, 0, 3)
80 robot.waistMix.addSelec(2, 3, 3)
81 robot.waistMix.default.value = [0.0] * 6
82 robot.waistMix.signal(
"sin1").value = [0.0] * 3
83 plug(robot.waistTrajGen.x, robot.waistMix.signal(
"sin2"))
85 robot.waistToMatrix = PoseRollPitchYawToMatrixHomo(
"w2m")
86 plug(robot.waistMix.sout, robot.waistToMatrix.sin)
90 robot.rhoScalar = Component_of_vector(
"rho_scalar")
91 robot.rhoScalar.setIndex(0)
92 plug(robot.rhoTrajGen.x, robot.rhoScalar.sin)
96 wp = DummyWalkingPatternGenerator(
"dummy_wp")
98 wp.omega.value = omega
99 plug(robot.waistToMatrix.sout, wp.waist)
100 plug(robot.lfToMatrix.sout, wp.footLeft)
101 plug(robot.rfToMatrix.sout, wp.footRight)
102 plug(robot.comTrajGen.x, wp.com)
103 plug(robot.comTrajGen.dx, wp.vcom)
104 plug(robot.comTrajGen.ddx, wp.acom)
109 robot.wp.comDes.recompute(0)
110 robot.wp.dcmDes.recompute(0)
111 robot.wp.zmpDes.recompute(0)
120 robot.m2qLF = MatrixHomoToPoseQuaternion(
"m2qLF")
121 plug(robot.dynamic.LF, robot.m2qLF.sin)
122 plug(robot.m2qLF.sout, robot.base_estimator.lf_ref_xyzquat)
123 robot.m2qRF = MatrixHomoToPoseQuaternion(
"m2qRF")
124 plug(robot.dynamic.RF, robot.m2qRF.sin)
125 plug(robot.m2qRF.sout, robot.base_estimator.rf_ref_xyzquat)
130 e2q = EulerToQuat(
"e2q")
131 plug(robot.base_estimator.q, e2q.euler)
135 robot.rdynamic = DynamicPinocchio(
"real_dynamics")
136 robot.rdynamic.setModel(robot.dynamic.model)
137 robot.rdynamic.setData(robot.rdynamic.model.createData())
140 robot.baseselec = Selec_of_vector(
"base_selec")
141 robot.baseselec.selec(0, 6)
142 plug(robot.base_estimator.q, robot.baseselec.sin)
143 plug(robot.baseselec.sout, robot.rdynamic.ffposition)
145 plug(robot.device.state, robot.rdynamic.position)
146 robot.rdynamic.velocity.value = [0.0] * robotDim
147 robot.rdynamic.acceleration.value = [0.0] * robotDim
150 cdc_estimator = DcmEstimator(
"cdc_estimator")
151 cdc_estimator.init(dt, robot_name)
152 plug(robot.e2q.quaternion, cdc_estimator.q)
153 plug(robot.base_estimator.v, cdc_estimator.v)
154 robot.cdc_estimator = cdc_estimator
157 estimator = DummyDcmEstimator(
"dummy")
158 estimator.omega.value = omega
159 estimator.mass.value = 1.0
160 plug(robot.cdc_estimator.c, estimator.com)
161 plug(robot.cdc_estimator.dc, estimator.momenta)
163 robot.estimator = estimator
169 zmp_estimator = SimpleZmpEstimator(
"zmpEst")
170 robot.rdynamic.createOpPoint(
"sole_LF",
"left_sole_link")
171 robot.rdynamic.createOpPoint(
"sole_RF",
"right_sole_link")
172 plug(robot.rdynamic.sole_LF, zmp_estimator.poseLeft)
173 plug(robot.rdynamic.sole_RF, zmp_estimator.poseRight)
174 plug(robot.ftc.left_foot_force_out, zmp_estimator.wrenchLeft)
175 plug(robot.ftc.right_foot_force_out, zmp_estimator.wrenchRight)
177 robot.zmp_estimator = zmp_estimator
181 robot.cm.addCtrlMode(
"sot_input")
182 robot.cm.setCtrlMode(
"all",
"sot_input")
187 robot.taskUpperBody = Task(
"task_upper_body")
188 robot.taskUpperBody.feature = FeaturePosture(
"feature_upper_body")
190 q = list(robot.dynamic.position.value)
191 robot.taskUpperBody.feature.state.value = q
192 robot.taskUpperBody.feature.posture.value = q
195 robot.taskUpperBody.feature.selectDof(18,
True)
196 robot.taskUpperBody.feature.selectDof(19,
True)
197 robot.taskUpperBody.feature.selectDof(20,
True)
198 robot.taskUpperBody.feature.selectDof(21,
True)
199 robot.taskUpperBody.feature.selectDof(22,
True)
200 robot.taskUpperBody.feature.selectDof(23,
True)
201 robot.taskUpperBody.feature.selectDof(24,
True)
202 robot.taskUpperBody.feature.selectDof(25,
True)
203 robot.taskUpperBody.feature.selectDof(26,
True)
204 robot.taskUpperBody.feature.selectDof(27,
True)
205 robot.taskUpperBody.feature.selectDof(28,
True)
206 robot.taskUpperBody.feature.selectDof(29,
True)
207 robot.taskUpperBody.feature.selectDof(30,
True)
208 robot.taskUpperBody.feature.selectDof(31,
True)
209 robot.taskUpperBody.feature.selectDof(32,
True)
210 robot.taskUpperBody.feature.selectDof(33,
True)
211 robot.taskUpperBody.feature.selectDof(34,
True)
212 robot.taskUpperBody.feature.selectDof(35,
True)
213 robot.taskUpperBody.feature.selectDof(36,
True)
214 robot.taskUpperBody.feature.selectDof(37,
True)
216 robot.taskUpperBody.controlGain.value = 100.0
217 robot.taskUpperBody.add(robot.taskUpperBody.feature.name)
218 plug(robot.dynamic.position, robot.taskUpperBody.feature.state)
222 robot.contactLF = MetaTaskKine6d(
223 "contactLF", robot.rdynamic,
"LF", robot.OperationalPointsMap[
"left-ankle"]
225 robot.contactLF.feature.frame(
"desired")
226 robot.contactLF.gain.setConstant(1.0)
227 plug(robot.wp.footLeftDes, robot.contactLF.featureDes.position)
228 locals()[
"contactLF"] = robot.contactLF
230 robot.contactRF = MetaTaskKine6d(
231 "contactRF", robot.rdynamic,
"RF", robot.OperationalPointsMap[
"right-ankle"]
233 robot.contactRF.feature.frame(
"desired")
234 robot.contactRF.gain.setConstant(1.0)
235 plug(robot.wp.footRightDes, robot.contactRF.featureDes.position)
236 locals()[
"contactRF"] = robot.contactRF
245 robot.taskCom = MetaTaskKineCom(robot.rdynamic)
246 plug(robot.wp.comDes, robot.taskCom.featureDes.errorIN)
247 robot.taskCom.task.controlGain.value = 1.0
251 robot.keepWaist = MetaTaskKine6d(
252 "keepWaist", robot.rdynamic,
"WT", robot.OperationalPointsMap[
"waist"]
254 robot.keepWaist.feature.frame(
"desired")
255 robot.keepWaist.gain.setConstant(1.0)
256 plug(robot.wp.waistDes, robot.keepWaist.featureDes.position)
257 robot.keepWaist.feature.selec.value =
"111000"
258 locals()[
"keepWaist"] = robot.keepWaist
261 robot.sot = SOT(
"sot")
262 robot.sot.setSize(robot.dynamic.getDimension())
265 plug(robot.sot.control, robot.cm.ctrl_sot_input)
266 plug(robot.cm.u_safe, robot.device.control)
268 robot.sot.push(robot.taskUpperBody.name)
269 robot.sot.push(robot.contactRF.task.name)
270 robot.sot.push(robot.contactLF.task.name)
272 robot.sot.push(robot.taskCom.task.name)
273 robot.sot.push(robot.keepWaist.task.name)
282 plug(robot.device.velocity, robot.dynamic.velocity)
283 robot.dvdt = Derivator_of_Vector(
"dv_dt")
284 robot.dvdt.dt.value = dt
285 plug(robot.device.velocity, robot.dvdt.sin)
286 plug(robot.dvdt.sout, robot.dynamic.acceleration)
294 robot.publisher, robot.wp,
"comDes", robot=robot, data_type=
"vector"
298 robot.publisher, robot.cdc_estimator,
"c", robot=robot, data_type=
"vector"
301 robot.publisher, robot.cdc_estimator,
"dc", robot=robot, data_type=
"vector"
305 robot.publisher, robot.dynamic,
"com", robot=robot, data_type=
"vector"
309 robot.publisher, robot.estimator,
"dcm", robot=robot, data_type=
"vector"
313 robot.publisher, robot.dynamic,
"zmp", robot=robot, data_type=
"vector"
316 robot.publisher, robot.zmp_estimator,
"zmp", robot=robot, data_type=
"vector"
326 robot.publisher, robot.ftc,
"left_foot_force_out", robot=robot, data_type=
"vector"
329 robot.publisher, robot.ftc,
"right_foot_force_out", robot=robot, data_type=
"vector"
333 robot.publisher, robot.zmp_estimator,
"copRight", robot=robot, data_type=
"vector"
337 robot.publisher, robot.zmp_estimator,
"copLeft", robot=robot, data_type=
"vector"