5 from dynamic_graph
import plug
6 from dynamic_graph.ros
import RosPublish, RosSubscribe
7 from dynamic_graph.sot.core
import SOT, FeaturePosture, GainAdaptive, Task
8 from dynamic_graph.sot.core.matrix_util
import matrixToTuple
9 from dynamic_graph.sot.core.meta_tasks_kine
import MetaTaskKine6d
10 from dynamic_graph.tracer_real_time
import TracerRealTime
12 import dynamic_graph.sot_talos_balance.talos.base_estimator_conf
as baseEstimatorConf
13 import dynamic_graph.sot_talos_balance.talos.control_manager_conf
as controlManagerConfig
14 import dynamic_graph.sot_talos_balance.talos.ft_wrist_calibration_conf
as forceConf
15 import dynamic_graph.sot_talos_balance.talos.parameter_server_conf
as paramServerConfig
18 robot.timeStep = robot.device.getTimeStep()
23 endEffector =
"rightWrist"
24 endEffectorWeight = forceConf.handWeight[device]
25 rightOC = forceConf.rightLeverArm
26 leftOC = forceConf.leftLeverArm
30 q = [0.0, 0.0, 1.018213, 0.0, 0.0, 0.0]
31 q += [0.0, 0.0, -0.411354, 0.859395, -0.448041, -0.001708]
32 q += [0.0, 0.0, -0.411354, 0.859395, -0.448041, -0.001708]
34 q += [0.25847, 0.173046, -0.0002, -0.525366, 0.0, 0.0, 0.1, -0.005]
37 q += [-0.0, -0.01, 0.00, -1.58, -0.01, 0.0, 0.0, -0.005]
49 robot.e2q = EulerToQuat(
"e2q")
50 plug(robot.baseEstimator.q, robot.e2q.euler)
53 robot, endEffectorWeight, rightOC, leftOC
56 robot, endEffector,
"EEAdmittance"
60 robot.controlManager.addCtrlMode(
"sot_input")
61 robot.controlManager.setCtrlMode(
"all",
"sot_input")
65 taskRightHand = MetaTaskKine6d(
"rh", robot.dynamic,
"rh",
"arm_right_7_joint")
67 handMgrip[0:3, 3] = (0.1, 0, 0)
68 taskRightHand.opmodif = matrixToTuple(handMgrip)
69 taskRightHand.feature.frame(
"desired")
70 taskRightHand.feature.selec.value =
"111111"
71 taskRightHand.task.setWithDerivative(
True)
72 taskRightHand.task.controlGain.value = 0
73 taskRightHand.feature.position.value = np.eye(4)
74 taskRightHand.feature.velocity.value = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
75 taskRightHand.featureDes.position.value = np.eye(4)
76 plug(robot.controller.dq, taskRightHand.featureDes.velocity)
80 taskWaist = MetaTaskKine6d(
81 "taskWaist", robot.dynamic,
"WT", robot.OperationalPointsMap[
"waist"]
83 taskWaist.feature.frame(
"desired")
84 taskWaist.gain.setConstant(300)
86 taskWaist.feature.selec.value =
"111111"
87 locals()[
"taskWaist"] = taskWaist
91 robot.taskPosture = Task(
"task_posture")
92 robot.taskPosture.controlGain.value = 100.0
93 robot.taskPosture.feature = FeaturePosture(
"feature_posture")
95 q = list(robot.dynamic.position.value)
96 robot.taskPosture.feature.state.value = q
97 robot.taskPosture.feature.posture.value = q
99 robot.taskPosture.feature.selectDof(6,
True)
100 robot.taskPosture.feature.selectDof(7,
True)
101 robot.taskPosture.feature.selectDof(8,
True)
102 robot.taskPosture.feature.selectDof(9,
True)
103 robot.taskPosture.feature.selectDof(10,
True)
104 robot.taskPosture.feature.selectDof(11,
True)
105 robot.taskPosture.feature.selectDof(12,
True)
106 robot.taskPosture.feature.selectDof(13,
True)
107 robot.taskPosture.feature.selectDof(14,
True)
108 robot.taskPosture.feature.selectDof(15,
True)
109 robot.taskPosture.feature.selectDof(16,
True)
110 robot.taskPosture.feature.selectDof(17,
True)
111 robot.taskPosture.feature.selectDof(18,
True)
112 robot.taskPosture.feature.selectDof(19,
True)
114 robot.taskPosture.add(robot.taskPosture.feature.name)
115 plug(robot.dynamic.position, robot.taskPosture.feature.state)
117 robot.sot = SOT(
"sot")
118 robot.sot.setSize(robot.dynamic.getDimension())
121 plug(robot.sot.control, robot.controlManager.ctrl_sot_input)
122 plug(robot.controlManager.u_safe, robot.device.control)
127 robot.sot.push(robot.taskPosture.name)
128 robot.sot.push(taskRightHand.task.name)
129 robot.sot.push(taskWaist.task.name)
135 robot.publisher, robot.controller,
"w_force", robot=robot, data_type=
"vector"
138 robot.publisher, robot.controller,
"force", robot=robot, data_type=
"vector"
140 create_topic(robot.publisher, robot.controller,
"dq", robot=robot, data_type=
"vector")
141 create_topic(robot.publisher, robot.controller,
"w_dq", robot=robot, data_type=
"vector")
143 robot.publisher, robot.controller,
"w_forceDes", robot=robot, data_type=
"vector"
147 robot.forceCalibrator,
154 robot.forceCalibrator,
155 "rightWristForceOut",
161 robot.subscriber = RosSubscribe(
"end_effector_subscriber")
162 robot.subscriber.add(
"vector",
"w_force",
"/sot/controller/w_force")
163 robot.subscriber.add(
"vector",
"force",
"/sot/controller/force")
164 robot.subscriber.add(
"vector",
"dq",
"/sot/controller/dq")
165 robot.subscriber.add(
"vector",
"w_dq",
"/sot/controller/w_dq")
166 robot.subscriber.add(
"vector",
"w_forceDes",
"/sot/controller/w_forceDes")
167 robot.subscriber.add(
168 "vector",
"leftWristForceOut",
"/sot/forceCalibrator/leftWristForceOut"
170 robot.subscriber.add(
171 "vector",
"rightWristForceOut",
"/sot/forceCalibrator/rightWristForceOut"
176 robot.tracer = TracerRealTime(
"force_tracer")
177 robot.tracer.setBufferSize(80 * (2**20))
178 robot.tracer.open(
"/tmp",
"dg_",
".dat")
179 robot.device.after.addSignal(
"{0}.triger".format(robot.tracer.name))
181 addTrace(robot.tracer, robot.controller,
"force")
182 addTrace(robot.tracer, robot.controller,
"w_force")
183 addTrace(robot.tracer, robot.controller,
"w_dq")
184 addTrace(robot.tracer, robot.controller,
"dq")
def create_imu_filters(robot, dt)
def create_base_estimator(robot, dt, conf, robot_name="robot")
def create_ctrl_manager(conf, dt, robot_name="robot")
def create_rospublish(robot, name)
def create_parameter_server(conf, dt, robot_name="robot")
def addTrace(tracer, entity, signalName)
def create_device_filters(robot, dt)
def create_ft_wrist_calibrator(robot, endEffectorWeight, rightOC, leftOC)
def create_topic(rospub, entity, signalName, robot=None, data_type="vector")
def create_end_effector_admittance_controller(robot, endEffector, name)