コード例 #1
0
    def no_collision(self, config):

        pose =  openravepy.quatFromAxisAngle([0, 0, config[2]])
        pose = numpy.append(pose, [config[0], config[1], 0])
        self.robot.SetTransform(pose)
        #IPython.embed()
        collision = self.robot.GetEnv().CheckCollision(self.robot)

        return not collision
コード例 #2
0
ファイル: GraspPlanner.py プロジェクト: nrahnemoon/RA-HW4
    def GetBasePoseForObjectGrasp(self, obj):

        # Load grasp database
        self.gmodel = openravepy.databases.grasping.GraspingModel(self.robot, obj)
        if not self.gmodel.load():
            self.gmodel.autogenerate()

        base_pose = None
        grasp_config = None
       
        ###################################################################
        # TODO: Here you will fill in the function to compute
        #  a base pose and associated grasp config for the 
        #  grasping the bottle
        ###################################################################
        
        self.graspindices = self.gmodel.graspindices
        self.grasps = self.gmodel.grasps
        self.order_grasps()
        self.show_grasp(self.grasps_ordered[0])
        graspTransform = self.gmodel.getGlobalGraspTransform(self.grasps_ordered[0], collisionfree = True)

        irmodel = openravepy.databases.inversereachability.InverseReachabilityModel(robot = self.robot)
        irmodel.load()
        densityfn, samplerfn, bounds = irmodel.computeBaseDistribution(graspTransform)

        poses, jointstate = samplerfn(100)
        self.manip = self.robot.GetActiveManipulator()
        start_pose = self.robot.GetTransform()
        handles = []
        init_config = self.base_planner.planning_env.herb.GetCurrentConfiguration()

        for pose in poses:
            self.robot.SetTransform(pose)
            angle = openravepy.axisAngleFromQuat(pose)
            newpose = numpy.array([pose[4], pose[5], angle[2]])
            node = self.base_planner.planning_env.discrete_env.ConfigurationToNodeId(newpose)
            discrete_pose = self.base_planner.planning_env.discrete_env.NodeIdToConfiguration(node)

            handles.append(self.robot.GetEnv().plot3(points=numpy.array(numpy.append(discrete_pose[:2], [0])), pointsize = 15.0))

            quat = openravepy.quatFromAxisAngle([0, 0, discrete_pose[2]])
            quat = numpy.append(quat, discrete_pose[0])
            quat = numpy.append(quat, discrete_pose[1])
            quat = numpy.append(quat, 0)
            self.robot.SetTransform(quat)

            self.base_planner.planning_env.herb.SetCurrentConfiguration(discrete_pose)
            obs = self.robot.GetEnv().GetBodies()
            table = obs[1]

            grasp_config = self.manip.FindIKSolution(graspTransform, filteroptions = openravepy.IkFilterOptions.CheckEnvCollisions.IgnoreEndEffectorCollisions)
            if not self.robot.GetEnv().CheckCollision(self.robot, table) and not grasp_config == None:
                print grasp_config
                self.base_planner.planning_env.herb.SetCurrentConfiguration(init_config)
                return discrete_pose, grasp_config
コード例 #3
0
def add_drop_table(env, dist_from_robot):
  thickness = 0.1
  legheight = 0.4
  table = object_models.create_table(env, "table", 0.5, 0.5, thickness, 0.1, 0.1, legheight)

  x, y = dist_from_robot
  z = thickness / 2 + legheight
  rot = openravepy.quatFromAxisAngle((0, 0, 0))
  table.SetTransform(openravepy.matrixFromPose(list(rot) + [x, y, z]))
  env.AddKinBody(table)
  return table
コード例 #4
0
ファイル: openrave_body.py プロジェクト: Simon0xzx/tampy
 def base_pose_to_mat(pose):
     # x, y, rot = pose
     assert len(pose) == 3
     x = pose[0]
     y = pose[1]
     rot = pose[2]
     q = quatFromAxisAngle((0, 0, rot)).tolist()
     pos = [x, y, 0]
     # pos = np.vstack((x,y,np.zeros(1)))
     matrix = matrixFromPose(q + pos)
     return matrix
コード例 #5
0
ファイル: openrave_body.py プロジェクト: m-j-mcdonald/tampy
 def base_pose_to_mat(pose):
     # x, y, rot = pose
     assert len(pose) == 3
     x = pose[0]
     y = pose[1]
     rot = pose[2]
     q = quatFromAxisAngle((0, 0, rot)).tolist()
     pos = [x, y, 0]
     # pos = np.vstack((x,y,np.zeros(1)))
     matrix = matrixFromPose(q + pos)
     return matrix
コード例 #6
0
ファイル: drc_walk.py プロジェクト: Hongxiao321321/trajopt-1
def step_forward_request(robot, n_steps, stepping_foot, dx, dy): 
    """
    Sets up the problem to step forward with one foot (stepping_foot)
    Suppose stepping_foot = "r_foot"    
    Then problem constrains r_foot to move by (dx, dy), while the center
    of mass lies above the support polygon of l_foot
    """
    
    
    
    planted_foot = opposite_foot(stepping_foot)
    
    request = request_skeleton(n_steps)
    
    # fixed pose of planted foot
    planted_link = robot.GetLink(planted_foot)
    planted_transform = planted_link.GetTransform()
    planted_xyz, planted_wxyz = xyzQuatFromMatrix(planted_transform)
    
    # final pose of stepping foot
    stepping_link = robot.GetLink(stepping_foot)
    stepping_init_transform = stepping_link.GetTransform()    
    stepping_init_xyz = stepping_init_transform[:3,3]    
    
    z_angle = np.arctan2(dy, dx)
    stepping_final_xyz = stepping_init_xyz + np.array([dx, dy, 0])
    stepping_final_wxyz = rave.quatFromAxisAngle([0,0,1], z_angle)
    
    for i in xrange(1, n_steps):
        request["constraints"].extend([
            {
                "type":"pose",
                "name":"planted_pose",
                "params":{
                    "xyz":list(planted_xyz),
                    "wxyz":list(planted_wxyz),
                    "link":planted_foot,
                    "timestep":i
                }
            },
            {
                "type":"zmp","name":"zmp_%i"%i,
                "params":{"planted_links":[planted_foot], "timestep":i}
            }
        ])
        #if i < n_steps-1:
            #request["constraints"].append({
                #"type":"foot_height",
                #"params":{
                    #"height": .1,
                    #"timestep": i,
                    #"link":stepping_foot}})
        
    request["constraints"].append(
        {
            "type":"pose",
            "name":"step_pose",
            "params":{
                "xyz" : list(stepping_final_xyz),
                "wxyz" : list(stepping_final_wxyz),
                "link" : stepping_foot,
                "timestep":(n_steps-1)
            }
        }
    )
    return request
コード例 #7
0
def quat_from_axis_angle(x_angle, y_angle, z_angle):
    return quatFromAxisAngle(np.array((x_angle, y_angle, z_angle)))
コード例 #8
0
 def angle_pose_to_mat(pose):
     assert len(pose) == 1
     q = quatFromAxisAngle((0, 0, pose)).tolist()
     matrix = matrixFromPose(q + pos)
     return matrix
コード例 #9
0
def step_forward_request(robot, n_steps, stepping_foot, dx, dy): 
    """
    Sets up the problem to step forward with one foot (stepping_foot)
    Suppose stepping_foot = "r_foot"    
    Then problem constrains r_foot to move by (dx, dy), while the center
    of mass lies above the support polygon of l_foot
    """
    
    
    
    planted_foot = opposite_foot(stepping_foot)
    
    request = request_skeleton(n_steps)
    
    # fixed pose of planted foot
    planted_link = robot.GetLink(planted_foot)
    planted_transform = planted_link.GetTransform()
    planted_xyz, planted_wxyz = xyzQuatFromMatrix(planted_transform)
    
    # final pose of stepping foot
    stepping_link = robot.GetLink(stepping_foot)
    stepping_init_transform = stepping_link.GetTransform()    
    stepping_init_xyz = stepping_init_transform[:3,3]    
    
    z_angle = np.arctan2(dy, dx)
    stepping_final_xyz = stepping_init_xyz + np.array([dx, dy, 0])
    stepping_final_wxyz = rave.quatFromAxisAngle([0,0,1], z_angle)
    
    for i in xrange(1, n_steps):
        request["constraints"].extend([
            {
                "type":"pose",
                "name":"planted_pose",
                "params":{
                    "xyz":list(planted_xyz),
                    "wxyz":list(planted_wxyz),
                    "link":planted_foot,
                    "timestep":i
                }
            },
            {
                "type":"zmp","name":"zmp_%i"%i,
                "params":{"planted_links":[planted_foot], "timestep":i}
            }
        ])
        #if i < n_steps-1:
            #request["constraints"].append({
                #"type":"foot_height",
                #"params":{
                    #"height": .1,
                    #"timestep": i,
                    #"link":stepping_foot}})
        
    request["constraints"].append(
        {
            "type":"pose",
            "name":"step_pose",
            "params":{
                "xyz" : list(stepping_final_xyz),
                "wxyz" : list(stepping_final_wxyz),
                "link" : stepping_foot,
                "timestep":(n_steps-1)
            }
        }
    )
    return request
コード例 #10
0
    def GetBasePoseForObjectGrasp(self, obj):

        # Load grasp database
        # change gmodel to sel.gmodel since eval_grasp need it
        self.gmodel = openravepy.databases.grasping.GraspingModel(
            self.robot, obj)
        if not self.gmodel.load():
            self.gmodel.autogenerate()

        basePose = None
        graspConfig = None
        self.graspindices = self.gmodel.graspindices
        self.grasps = self.gmodel.grasps
        self.order_grasps()
        #uncomment orgConfig
        orgConfig = self.base_planner.planning_env.herb.GetCurrentConfiguration(
        )
        # get the highest score grasping pose
        # self.show_grasp(self.grasps_ordered[0]) # visualize solution, seems ok
        #print "top grasping {}".format(self.grasps_ordered[0])
        graspTransform = self.gmodel.getGlobalGraspTransform(
            self.grasps_ordered[0], collisionfree=True)

        irModel = openravepy.databases.inversereachability.InverseReachabilityModel(
            self.robot)
        if not irModel.load():
            irModel.autogenerate()
        loaded = irModel.load()
        print "irModel loaded? {}".format(loaded)
        densityFN, samplerFN, bounds = irModel.computeBaseDistribution(
            graspTransform)
        #print "bounds {}".format(bounds)
        poses, joint = samplerFN(500)
        #print "pose number: {}".format(len(poses))
        #print "pose:  {}".format(poses[0])
        #print "jointstate: {}".format(jointstate[0])
        #angle = openravepy.axisAngleFromQuat(poses[0])
        #print "angle:  {}".format(angle)
        #trans = openravepy.matrixFromPose(poses[0])
        #print "trans:  {}".format(trans)

        for pose in poses:
            #self.robot.SetTransform(pose) # pose format [s, vx, vy, vz, x, y, z]
            angle = openravepy.axisAngleFromQuat(pose)
            continuousPose = copy.deepcopy([pose[4], pose[5], angle[2]
                                            ])  # 2D location with orientation
            #convert continuous pose to discrete pose
            node = self.base_planner.planning_env.discrete_env.ConfigurationToNodeId(
                continuousPose)
            discretePose = self.base_planner.planning_env.discrete_env.NodeIdToConfiguration(
                node)

            basePose = openravepy.quatFromAxisAngle([0, 0, discretePose[2]])
            basePose = numpy.append(basePose,
                                    [discretePose[0], discretePose[1], 0])
            #basePose = numpy.array(discretePose)

            obstacles = self.robot.GetEnv().GetBodies()
            #print('gettransform=',self.robot.GetTransform())
            self.robot.SetTransform(basePose)
            #get grasp joing config from IK
            tableTransform = obstacles[1].GetTransform()
            tablePosition = (tableTransform[0][3], tableTransform[1][3])
            tableDist = la.norm(
                numpy.array([discretePose[0], discretePose[1]]) -
                numpy.array(tablePosition))
            bottleTransform = obstacles[2].GetTransform()
            bottlePosition = (bottleTransform[0][3], bottleTransform[1][3])
            bottleDist = la.norm(
                numpy.array([discretePose[0], discretePose[1]]) -
                numpy.array(bottlePosition))
            #IPython.embed()
            graspConfig = self.manip.FindIKSolution(
                graspTransform,
                filteroptions=openravepy.IkFilterOptions.CheckEnvCollisions)
            #if self.robot.GetEnv().CheckCollision(self.robot, obstacles[1]) != True and graspConfig != None and dist > 0.9 and dist < 1.1:
            if self.robot.GetEnv().CheckCollision(
                    self.robot, obstacles[1]) != True and graspConfig != None:
                print "discretePose:  {}".format(discretePose)
                print "graspConfig:  {}".format(graspConfig)
                print "tableDist:  {}".format(tableDist)
                print "bottleDist:  {}".format(bottleDist)
                #IPython.embed()
                #restore robot position before return
                self.base_planner.planning_env.herb.SetCurrentConfiguration(
                    orgConfig)
                #Peter,change
                return discretePose, graspConfig

        print "Fail to find solution!!!"
        return discretePose, graspConfig
コード例 #11
0
def base_pose_to_mat(pose):
    x, y, rot = pose
    q = openravepy.quatFromAxisAngle((0, 0, rot)).tolist()
    pos = [x, y, 0]
    matrix = openravepy.matrixFromPose(q + pos)
    return matrix
コード例 #12
0
def quat_from_axis_angle(x_angle, y_angle, z_angle):
  return quatFromAxisAngle(np.array((x_angle, y_angle, z_angle)))