6 import dynamic_graph.sot_talos_balance.talos.base_estimator_conf 
as base_estimator_conf
 
    7 import dynamic_graph.sot_talos_balance.talos.control_manager_conf 
as cm_conf
 
    8 import dynamic_graph.sot_talos_balance.talos.ft_calibration_conf 
as ft_conf
 
    9 import dynamic_graph.sot_talos_balance.talos.parameter_server_conf 
as param_server_conf
 
   10 from dynamic_graph 
import plug
 
   11 from dynamic_graph.sot.core 
import (
 
   15     MatrixHomoToPoseQuaternion,
 
   18 from dynamic_graph.sot.core.matrix_util 
import matrixToTuple
 
   19 from dynamic_graph.sot.core.meta_tasks_kine 
import (
 
   24 from dynamic_graph.sot.dynamics_pinocchio 
import DynamicPinocchio
 
   25 from dynamic_graph.tracer_real_time 
import TracerRealTime
 
   26 from rospkg 
import RosPack
 
   29 robot.timeStep = robot.device.getTimeStep()
 
   34 robot.dynamic.com.recompute(0)
 
   35 robotDim = robot.dynamic.getDimension()
 
   36 mass = robot.dynamic.data.mass[0]
 
   37 h = robot.dynamic.com.value[2]
 
   45 robot.dynamic.createOpPoint(
"LF", robot.OperationalPointsMap[
"left-ankle"])
 
   46 robot.dynamic.createOpPoint(
"RF", robot.OperationalPointsMap[
"right-ankle"])
 
   47 robot.dynamic.createOpPoint(
"WT", robot.OperationalPointsMap[
"waist"])
 
   48 robot.dynamic.LF.recompute(0)
 
   49 robot.dynamic.RF.recompute(0)
 
   50 robot.dynamic.WT.recompute(0)
 
   55 if test_folder 
is not None:
 
   56     if sot_talos_balance_folder:
 
   57         from rospkg 
import RosPack
 
   61         folder = rospack.get_path(
"sot-talos-balance") + 
"/data/" + test_folder
 
   70 robot.triggerTrajGen = BooleanIdentity(
"triggerTrajGen")
 
   71 robot.triggerTrajGen.sin.value = 0
 
   75 robot.comTrajGen.x.recompute(0)  
 
   76 plug(robot.triggerTrajGen.sout, robot.comTrajGen.trigger)
 
   80 robot.lfTrajGen.x.recompute(0)  
 
   82 robot.lfToMatrix = PoseRollPitchYawToMatrixHomo(
"lf2m")
 
   83 plug(robot.lfTrajGen.x, robot.lfToMatrix.sin)
 
   84 plug(robot.triggerTrajGen.sout, robot.lfTrajGen.trigger)
 
   88 robot.rfTrajGen.x.recompute(0)  
 
   90 robot.rfToMatrix = PoseRollPitchYawToMatrixHomo(
"rf2m")
 
   91 plug(robot.rfTrajGen.x, robot.rfToMatrix.sin)
 
   92 plug(robot.triggerTrajGen.sout, robot.rfTrajGen.trigger)
 
   96 robot.zmpTrajGen.x.recompute(0)  
 
   97 plug(robot.triggerTrajGen.sout, robot.zmpTrajGen.trigger)
 
  101 robot.waistTrajGen.x.recompute(0)  
 
  103 robot.waistMix = Mix_of_vector(
"waistMix")
 
  104 robot.waistMix.setSignalNumber(3)
 
  105 robot.waistMix.addSelec(1, 0, 3)
 
  106 robot.waistMix.addSelec(2, 3, 3)
 
  107 robot.waistMix.default.value = [0.0] * 6
 
  108 robot.waistMix.signal(
"sin1").value = [0.0] * 3
 
  109 plug(robot.waistTrajGen.x, robot.waistMix.signal(
"sin2"))
 
  111 robot.waistToMatrix = PoseRollPitchYawToMatrixHomo(
"w2m")
 
  112 plug(robot.waistMix.sout, robot.waistToMatrix.sin)
 
  113 plug(robot.triggerTrajGen.sout, robot.waistTrajGen.trigger)
 
  116 if folder 
is not None:
 
  117     robot.comTrajGen.playTrajectoryFile(folder + 
"CoM.dat")
 
  118     robot.lfTrajGen.playTrajectoryFile(folder + 
"LeftFoot.dat")
 
  119     robot.rfTrajGen.playTrajectoryFile(folder + 
"RightFoot.dat")
 
  121     robot.waistTrajGen.playTrajectoryFile(folder + 
"WaistOrientation.dat")
 
  125 wp = DummyWalkingPatternGenerator(
"dummy_wp")
 
  127 wp.omega.value = omega
 
  128 plug(robot.waistToMatrix.sout, wp.waist)
 
  129 plug(robot.lfToMatrix.sout, wp.footLeft)
 
  130 plug(robot.rfToMatrix.sout, wp.footRight)
 
  131 plug(robot.comTrajGen.x, wp.com)
 
  132 plug(robot.comTrajGen.dx, wp.vcom)
 
  133 plug(robot.comTrajGen.ddx, wp.acom)
 
  140 robot.wp.comDes.recompute(0)
 
  141 robot.wp.dcmDes.recompute(0)
 
  142 robot.wp.zmpDes.recompute(0)
 
  151 robot.m2qLF = MatrixHomoToPoseQuaternion(
"m2qLF")
 
  152 plug(robot.dynamic.LF, robot.m2qLF.sin)
 
  153 plug(robot.m2qLF.sout, robot.base_estimator.lf_ref_xyzquat)
 
  154 robot.m2qRF = MatrixHomoToPoseQuaternion(
"m2qRF")
 
  155 plug(robot.dynamic.RF, robot.m2qRF.sin)
 
  156 plug(robot.m2qRF.sout, robot.base_estimator.rf_ref_xyzquat)
 
  163 robot.taskUpperBody = Task(
"task_upper_body")
 
  164 robot.taskUpperBody.feature = FeaturePosture(
"feature_upper_body")
 
  166 q = list(robot.dynamic.position.value)
 
  167 robot.taskUpperBody.feature.state.value = q
 
  168 robot.taskUpperBody.feature.posture.value = q
 
  170 robotDim = robot.dynamic.getDimension()  
 
  171 for i 
in range(18, robotDim):
 
  172     robot.taskUpperBody.feature.selectDof(i, 
True)
 
  174 robot.taskUpperBody.controlGain.value = 100.0
 
  175 robot.taskUpperBody.add(robot.taskUpperBody.feature.name)
 
  176 plug(robot.dynamic.position, robot.taskUpperBody.feature.state)
 
  180 robot.contactLF = MetaTaskKine6d(
 
  181     "contactLF", robot.dynamic, 
"LF", robot.OperationalPointsMap[
"left-ankle"]
 
  183 robot.contactLF.feature.frame(
"desired")
 
  184 robot.contactLF.gain.setConstant(300)
 
  185 plug(robot.wp.footLeftDes, robot.contactLF.featureDes.position)  
 
  186 locals()[
"contactLF"] = robot.contactLF
 
  188 robot.contactRF = MetaTaskKine6d(
 
  189     "contactRF", robot.dynamic, 
"RF", robot.OperationalPointsMap[
"right-ankle"]
 
  191 robot.contactRF.feature.frame(
"desired")
 
  192 robot.contactRF.gain.setConstant(300)
 
  193 plug(robot.wp.footRightDes, robot.contactRF.featureDes.position)  
 
  194 locals()[
"contactRF"] = robot.contactRF
 
  197 robot.taskCom = MetaTaskKineCom(robot.dynamic)
 
  198 plug(robot.wp.comDes, robot.taskCom.featureDes.errorIN)
 
  199 robot.taskCom.task.controlGain.value = 100.0
 
  202 robot.keepWaist = MetaTaskKine6d(
 
  203     "keepWaist", robot.dynamic, 
"WT", robot.OperationalPointsMap[
"waist"]
 
  205 robot.keepWaist.feature.frame(
"desired")
 
  206 robot.keepWaist.gain.setConstant(300)
 
  207 plug(robot.wp.waistDes, robot.keepWaist.featureDes.position)
 
  208 robot.keepWaist.feature.selec.value = 
"111000" 
  209 locals()[
"keepWaist"] = robot.keepWaist
 
  212 robot.sot = SOT(
"sot")
 
  213 robot.sot.setSize(robot.dynamic.getDimension())
 
  216 plug(robot.sot.control, robot.device.control)
 
  218 robot.sot.push(robot.taskUpperBody.name)
 
  219 robot.sot.push(robot.contactRF.task.name)
 
  220 robot.sot.push(robot.contactLF.task.name)
 
  221 robot.sot.push(robot.taskCom.task.name)
 
  222 robot.sot.push(robot.keepWaist.task.name)
 
  225 plug(robot.device.velocity, robot.dynamic.velocity)
 
  226 robot.dvdt = Derivator_of_Vector(
"dv_dt")
 
  227 robot.dvdt.dt.value = dt
 
  228 plug(robot.device.velocity, robot.dvdt.sin)
 
  229 plug(robot.dvdt.sout, robot.dynamic.acceleration)
 
  236 create_topic(robot.publisher, robot.device, 
"state", robot=robot, data_type=
"vector")
 
  238     robot.publisher, robot.base_estimator, 
"q", robot=robot, data_type=
"vector" 
  241     robot.publisher, robot.imu_filters, 
"imu_quat", robot=robot, data_type=
"vector" 
  245     robot.publisher, robot.base_estimator, 
"w_lf", robot=robot, data_type=
"double" 
  248     robot.publisher, robot.base_estimator, 
"w_rf", robot=robot, data_type=
"double" 
  252     robot.base_estimator,
 
  259     robot.base_estimator,
 
  266     robot.publisher, robot.device, 
"forceLLEG", robot=robot, data_type=
"vector" 
  270     robot.device_filters.ft_LF_filter,
 
  277     robot.publisher, robot.device, 
"forceRLEG", robot=robot, data_type=
"vector" 
  281     robot.device_filters.ft_RF_filter,
 
  288     robot.publisher, robot.base_estimator, 
"lf_xyzquat", robot=robot, data_type=
"vector" 
  291     robot.publisher, robot.base_estimator, 
"rf_xyzquat", robot=robot, data_type=
"vector"