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.parameter_server_conf
as param_server_conf
17 robot.timeStep = robot.device.getTimeStep()
23 robot.dynamic.com.recompute(0)
25 comDes = list(robot.dynamic.com.value)
28 comDes = tuple(comDes)
30 zmpDes = comDes[:2] + (0.0,)
31 ddcomDes = (0.0, 0.0, 0.0)
34 mass = robot.dynamic.data.mass[0]
35 h = robot.dynamic.com.value[2]
49 robot.cdc_estimator = robot.dynamic
52 estimator = DummyDcmEstimator(
"dummy")
53 estimator.omega.value = omega
57 estimator.mass.value = mass
58 plug(robot.cdc_estimator.com, estimator.com)
59 plug(robot.cdc_estimator.momenta, estimator.momenta)
61 robot.estimator = estimator
67 plug(robot.device.forceRLEG, filters.ft_RF_filter.x)
68 plug(robot.device.forceLLEG, filters.ft_LF_filter.x)
69 robot.device_filters = filters
72 zmp_estimator = SimpleZmpEstimator(
"zmpEst")
73 robot.dynamic.createOpPoint(
"sole_LF",
"left_sole_link")
74 robot.dynamic.createOpPoint(
"sole_RF",
"right_sole_link")
75 plug(robot.dynamic.sole_LF, zmp_estimator.poseLeft)
76 plug(robot.dynamic.sole_RF, zmp_estimator.poseRight)
77 plug(robot.device_filters.ft_LF_filter.x_filtered, zmp_estimator.wrenchLeft)
78 plug(robot.device_filters.ft_RF_filter.x_filtered, zmp_estimator.wrenchRight)
82 robot.zmp_estimator = zmp_estimator
87 Kp_dcm = [8.0, 8.0, 8.0]
88 Ki_dcm = [0.0, 0.0, 0.0]
91 dcm_controller = DcmController(
"dcmCtrl")
93 dcm_controller.Kp.value = Kp_dcm
94 dcm_controller.Ki.value = Ki_dcm
95 dcm_controller.decayFactor.value = gamma_dcm
96 dcm_controller.mass.value = mass
97 dcm_controller.omega.value = omega
99 plug(robot.cdc_estimator.com, dcm_controller.com)
100 plug(robot.estimator.dcm, dcm_controller.dcm)
102 dcm_controller.zmpDes.value = zmpDes
103 dcm_controller.dcmDes.value = dcmDes
105 dcm_controller.init(dt)
107 robot.dcm_control = dcm_controller
109 Ki_dcm = [0.0, 0.0, 0.0]
112 Kp_adm = [0.0, 0.0, 0.0]
114 com_admittance_control = ComAdmittanceController(
"comAdmCtrl")
115 com_admittance_control.Kp.value = Kp_adm
116 plug(robot.dynamic.zmp, com_admittance_control.zmp)
117 com_admittance_control.zmpDes.value = (
120 com_admittance_control.ddcomDes.value = ddcomDes
122 com_admittance_control.init(dt)
123 com_admittance_control.setState(comDes, [0.0, 0.0, 0.0])
125 robot.com_admittance_control = com_admittance_control
127 Kp_adm = [8.0, 8.0, 0.0]
132 robot.taskUpperBody = Task(
"task_upper_body")
133 robot.taskUpperBody.feature = FeaturePosture(
"feature_upper_body")
135 q = list(robot.dynamic.position.value)
136 robot.taskUpperBody.feature.state.value = q
137 robot.taskUpperBody.feature.posture.value = q
140 robot.taskUpperBody.feature.selectDof(18,
True)
141 robot.taskUpperBody.feature.selectDof(19,
True)
142 robot.taskUpperBody.feature.selectDof(20,
True)
143 robot.taskUpperBody.feature.selectDof(21,
True)
144 robot.taskUpperBody.feature.selectDof(22,
True)
145 robot.taskUpperBody.feature.selectDof(23,
True)
146 robot.taskUpperBody.feature.selectDof(24,
True)
147 robot.taskUpperBody.feature.selectDof(25,
True)
148 robot.taskUpperBody.feature.selectDof(26,
True)
149 robot.taskUpperBody.feature.selectDof(27,
True)
150 robot.taskUpperBody.feature.selectDof(28,
True)
151 robot.taskUpperBody.feature.selectDof(29,
True)
152 robot.taskUpperBody.feature.selectDof(30,
True)
153 robot.taskUpperBody.feature.selectDof(31,
True)
154 robot.taskUpperBody.feature.selectDof(32,
True)
155 robot.taskUpperBody.feature.selectDof(33,
True)
156 robot.taskUpperBody.feature.selectDof(34,
True)
157 robot.taskUpperBody.feature.selectDof(35,
True)
158 robot.taskUpperBody.feature.selectDof(36,
True)
159 robot.taskUpperBody.feature.selectDof(37,
True)
161 robot.taskUpperBody.controlGain.value = 100.0
162 robot.taskUpperBody.add(robot.taskUpperBody.feature.name)
163 plug(robot.dynamic.position, robot.taskUpperBody.feature.state)
167 robot.contactLF = MetaTaskKine6d(
168 "contactLF", robot.dynamic,
"LF", robot.OperationalPointsMap[
"left-ankle"]
170 robot.contactLF.feature.frame(
"desired")
171 robot.contactLF.gain.setConstant(300)
172 robot.contactLF.keep()
173 locals()[
"contactLF"] = robot.contactLF
175 robot.contactRF = MetaTaskKine6d(
176 "contactRF", robot.dynamic,
"RF", robot.OperationalPointsMap[
"right-ankle"]
178 robot.contactRF.feature.frame(
"desired")
179 robot.contactRF.gain.setConstant(300)
180 robot.contactRF.keep()
181 locals()[
"contactRF"] = robot.contactRF
184 robot.taskCom = MetaTaskKineCom(robot.dynamic)
185 plug(robot.com_admittance_control.comRef, robot.taskCom.featureDes.errorIN)
186 plug(robot.com_admittance_control.dcomRef, robot.taskCom.featureDes.errordotIN)
187 robot.taskCom.task.controlGain.value = 0
188 robot.taskCom.task.setWithDerivative(
True)
191 robot.keepWaist = MetaTaskKine6d(
192 "keepWaist", robot.dynamic,
"WT", robot.OperationalPointsMap[
"waist"]
194 robot.keepWaist.feature.frame(
"desired")
195 robot.keepWaist.gain.setConstant(300)
196 robot.keepWaist.keep()
197 robot.keepWaist.feature.selec.value =
"111000"
198 locals()[
"keepWaist"] = robot.keepWaist
247 robot.sot = SOT(
"sot")
248 robot.sot.setSize(robot.dynamic.getDimension())
249 plug(robot.sot.control, robot.device.control)
251 robot.sot.push(robot.taskUpperBody.name)
252 robot.sot.push(robot.contactRF.task.name)
253 robot.sot.push(robot.contactLF.task.name)
254 robot.sot.push(robot.taskCom.task.name)
255 robot.sot.push(robot.keepWaist.task.name)
257 robot.device.control.recompute(0)
260 plug(robot.device.velocity, robot.dynamic.velocity)
261 robot.dvdt = Derivator_of_Vector(
"dv_dt")
262 robot.dvdt.dt.value = dt
263 plug(robot.device.velocity, robot.dvdt.sin)
264 plug(robot.dvdt.sout, robot.dynamic.acceleration)
271 rospub_signalName =
"{0}_{1}".format(
"fake",
"comDes")
272 topicname =
"/sot/{0}/{1}".format(
"fake",
"comDes")
273 robot.publisher.add(
"vector", rospub_signalName, topicname)
275 robot.dcm_control.dcmDes, robot.publisher.signal(rospub_signalName)
278 rospub_signalName =
"{0}_{1}".format(robot.cdc_estimator.name,
"c")
279 topicname =
"/sot/{0}/{1}".format(robot.cdc_estimator.name,
"c")
280 robot.publisher.add(
"vector", rospub_signalName, topicname)
282 robot.cdc_estimator.com, robot.publisher.signal(rospub_signalName)
288 robot.com_admittance_control,
294 robot.publisher, robot.dynamic,
"com", robot=robot, data_type=
"vector"
298 robot.publisher, robot.dcm_control,
"dcmDes", robot=robot, data_type=
"vector"
301 robot.publisher, robot.estimator,
"dcm", robot=robot, data_type=
"vector"
305 robot.publisher, robot.dcm_control,
"zmpDes", robot=robot, data_type=
"vector"
308 robot.publisher, robot.dynamic,
"zmp", robot=robot, data_type=
"vector"
311 robot.publisher, robot.zmp_estimator,
"zmp", robot=robot, data_type=
"vector"
314 robot.publisher, robot.dcm_control,
"zmpRef", robot=robot, data_type=
"vector"
318 robot.tracer = TracerRealTime(
"zmp_tracer")
319 robot.tracer.setBufferSize(80 * (2**20))
320 robot.tracer.open(
"/tmp",
"dg_",
".dat")
321 robot.device.after.addSignal(
"{0}.triger".format(robot.tracer.name))
323 addTrace(robot.tracer, robot.dcm_control,
"dcmDes")
324 addTrace(robot.tracer, robot.dynamic,
"com")
326 addTrace(robot.tracer, robot.com_admittance_control,
"comRef")
330 addTrace(robot.tracer, robot.estimator,
"dcm")
332 addTrace(robot.tracer, robot.dcm_control,
"zmpDes")
333 addTrace(robot.tracer, robot.zmp_estimator,
"zmp")
334 addTrace(robot.tracer, robot.dcm_control,
"zmpRef")
335 addTrace(robot.tracer, robot.dynamic,
"zmp")
def create_rospublish(robot, name)
def addTrace(tracer, entity, signalName)
def create_topic(rospub, entity, signalName, robot=None, data_type="vector")
def create_butter_lp_filter_Wn_04_N_2(name, dt, size)