コード例 #1
0
ファイル: factory.py プロジェクト: ksyy/agimus-sot
    def buildGrasp(self, g, h, otherGrasp=None):
        gf = self.graphfactory
        if h is None:
            gripper_open = self._buildGripper("open", g, h)
            return {'gripper_open': gripper_open}
        gripper = gf.gripperFrames[g]
        handle = gf.handleFrames[h]

        # get affordance
        try:
            aff = gf.affordances[(g, h)]
            useMeasurementOfObjectPose = aff.useMeasurementOfObjectPose(handle)
            useMeasurementOfGripperPose = aff.useMeasurementOfGripperPose(
                gripper)
        except KeyError:
            useMeasurementOfObjectPose = handle.hasVisualTag
            useMeasurementOfGripperPose = gripper.hasVisualTag

        gripper_close = self._buildGripper("close", g, h)
        pregrasp = PreGrasp(gripper, handle, otherGrasp)
        pregrasp.makeTasks(gf.sotrobot, useMeasurementOfObjectPose,
                           useMeasurementOfGripperPose)

        if not gripper.enabled:
            # TODO If otherGrasp is not None,
            # we should include the grasp function of otherGrasp, not pregrasp function...
            grasp = Manifold()
        else:
            grasp = Grasp(gripper, handle, otherGrasp)
            grasp.makeTasks(gf.sotrobot)
        return {
            'grasp': grasp,
            'pregrasp': pregrasp,
            'gripper_close': gripper_close
        }
コード例 #2
0
ファイル: factory.py プロジェクト: nim65s/sot-hpp
        def __init__(self, tasks, grasps, factory):
            self.name = factory._stateName(grasps)
            self.grasps = grasps
            self.manifold = Manifold()

            objectsAlreadyGrasped = {}

            for ig, ih in enumerate(grasps):
                if ih is not None:
                    # Add task gripper_close
                    self.manifold += tasks.g(factory.grippers[ig],
                                             factory.handles[ih],
                                             'gripper_close')
                    otherGrasp = objectsAlreadyGrasped.get(
                        factory.objectFromHandle[ih])
                    self.manifold += tasks.g(factory.grippers[ig],
                                             factory.handles[ih], 'grasp',
                                             otherGrasp)
                    objectsAlreadyGrasped[
                        factory.objectFromHandle[ih]] = tasks.g(
                            factory.grippers[ig], factory.handles[ih], 'grasp',
                            otherGrasp)
                else:
                    # Add task gripper_open
                    self.manifold += tasks.g(factory.grippers[ig], None,
                                             'gripper_open')
コード例 #3
0
ファイル: factory.py プロジェクト: ksyy/agimus-sot
 def _buildGripper(self, type, gripper, handle):
     key = (type, gripper, handle)
     if self._grippers.has_key(key):
         return self._grippers[key]
     try:
         aff = self.graphfactory.affordances[(gripper, handle)]
     except KeyError:
         # If there are no affordance, do not add a task.
         self._grippers[key] = Manifold()
         return self._grippers[key]
     gf = self.graphfactory
     gripperFrame = gf.gripperFrames[gripper]
     if not gripperFrame.enabled:
         self._grippers[key] = Manifold()
         return self._grippers[key]
     robot = gf.sotrobot
     if aff.controlType[type] == "position":
         ee = EndEffector(
             robot, gripperFrame,
             "p" + type + ("_" + handle if handle is not None else ""))
         ee.makePositionControl(aff.ref["angle_" + type])
         self._grippers[key] = ee
     elif aff.controlType[type] == "torque" or aff.controlType[
             type] == "position_torque":
         ee = EndEffector(
             robot, gripperFrame,
             "pt_" + type + ("_" + handle if handle is not None else ""))
         ee.makeAdmittanceControl(aff,
                                  type,
                                  period=gf.parameters["period"],
                                  simulateTorqueFeedback=gf.parameters.get(
                                      "simulateTorqueFeedback", False))
         if gf.parameters["addTracerToAdmittanceController"]:
             tracer = ee.ac.addTracerRealTime(robot)
             gf.tracers[tracer.name] = tracer
         self._grippers[key] = ee
     else:
         raise NotImplementedError("Control type " + type +
                                   " is not implemented for gripper.")
     return self._grippers[key]
コード例 #4
0
ファイル: factory.py プロジェクト: nim65s/sot-hpp
 def _buildGripper(self, type, gripper, handle):
     try:
         aff = self.graphfactory.affordances[(gripper, handle)]
     except KeyError:
         # If there are no affordance, do not add a task.
         return Manifold()
     gf = self.graphfactory
     robot = gf.sotrobot
     if aff.controlType[type] == "position":
         return EEPosture(robot, gf.gripperFrames[gripper], aff.ref[type])
     else:
         raise NotImplementedError(
             "Only position control is implemented for gripper closure.")
コード例 #5
0
ファイル: supervisor.py プロジェクト: rlefevre1/sot-hpp
 def _manifold (self, idxs):
     if self.grasps.has_key(idxs):
         return self.grasps[idxs]
     if len(idxs) == 1:
         m = Grasp(self.grippers[idxs[0][0]], self.handles[idxs[0][1]])
         m.makeTasks(self.sotrobot)
     elif len(idxs) == 0:
         m = Manifold()
     else:
         subm = self._manifold(idxs[:-1])
         # TODO Find relative
         m = Grasp(self.grippers[idxs[-1][0]], self.handles[idxs[-1][1]])
         m.makeTasks(self.sotrobot)
         m += subm
     self.grasps[idxs] = m
     return m
コード例 #6
0
ファイル: supervisor.py プロジェクト: ksyy/sot-hpp
def _hpTasks(sotrobot):
    return Manifold()