def __init__(self):
        dirname = os.path.dirname(os.path.abspath(__file__))
        mujoco_env.MujocoEnv.__init__(
            self, os.path.join(dirname, "mjc/baxter_orient_left_cts.xml"), 1)
        utils.EzPickle.__init__(self)

        ## mujoco things
        # task space action space

        low = np.array([-1., -1.])
        high = np.array([1., 1.])

        self.action_space = spaces.Box(low, high)

        self.tuck_pose = {
            'left': np.array([-0.08, -1.0, -1.19, 1.94, 0.67, 1.03, -0.50])
        }

        self.start_pose = {
            'left': np.array([-0.21, -0.75, -1.4, 1.61, 0.60, 0.81, -0.52])
        }

        ## starting pose
        self.init_qpos = self.data.qpos.copy().flatten()
        self.init_qpos[1:8] = np.array(self.start_pose["left"]).T

        ## ik setup
        urdf_filename = osp.join(dirname, "urdf", "baxter.urdf")

        with open(urdf_filename) as f:
            urdf = f.read()

        # mode; Speed, Distance, Manipulation1, Manipulation2
        self.ik_solver = TRAC_IK(
            "base",
            "left_gripper",
            urdf,
            0.005,  # default seconds
            1e-5,  # default epsilon
            "Speed")

        self.old_state = np.zeros((9, ))
        self.max_num_steps = 50
        print("INIT DONE!")
    def __init__(self):
        # load in robot kinematic information
        self.baselink = rospy.get_param("blue_hardware/baselink")
        self.endlink = rospy.get_param("blue_hardware/endlink")
        self.posture_target = rospy.get_param("blue_hardware/posture_target")
        urdf = rospy.get_param("/robot_description")

        # set up tf2 for transformation lookups
        self.tf_buffer = tf2_ros.Buffer(
            rospy.Duration(1.0))  # tf buffer length
        tf_listener = tf2_ros.TransformListener(self.tf_buffer)

        # build trac-ik solver
        self.ik = TRAC_IK(self.baselink, self.endlink, urdf, 0.01, 5e-4,
                          "Distance")
        # "Manipulation2")
        # "Manipulation1")

        rospy.Service('inverse_kinematics', InverseKinematics,
                      self.handle_ik_request)
Esempio n. 3
0
from trac_ik_python.trac_ik_wrap import TRAC_IK
import rospy
from numpy.random import random
import time

if __name__ == '__main__':
    # roslaunch pr2_description upload_pr2.launch
    # Needed beforehand
    urdf = rospy.get_param('/robot_description')
    # params of constructor:
    # base_link, tip_link, urdf_string, timeout, epsilon, solve_type="Speed"
    # solve_type can be: Distance, Speed, Manipulation1, Manipulation2
    ik_solver = TRAC_IK(
        "torso_lift_link",
        "r_wrist_roll_link",
        urdf,
        0.005,  # default seconds
        1e-5,  # default epsilon
        "Speed")
    print("Number of joints:")
    print(ik_solver.getNrOfJointsInChain())
    print("Joint names:")
    print(ik_solver.getJointNamesInChain(urdf))
    print("Link names:")
    print(ik_solver.getLinkNamesInChain())

    qinit = [0.] * 7
    x = y = z = 0.0
    rx = ry = rz = 0.0
    rw = 1.0
    bx = by = bz = 0.001
Esempio n. 4
0
def main():
	urdf = rospy.get_param('/robot_description')
	# print("urdf: ", urdf)
	rospy.loginfo('Constructing IK solver...')
	ik_solver = TRAC_IK("link0", "link7", urdf,
						0.005,  # default seconds
						1e-5,  # default epsilon
						"Speed")
	# print("Number of joints:")
	# print(ik_solver.getNrOfJointsInChain())
	# print("Joint names:")
	# print(ik_solver.getJointNamesInChain(urdf))
	# print("Link names:")
	# print(ik_solver.getLinkNamesInChain())

	qinit = [0.] * 7  #Initial status of the joints as seed.
	x = y = z = 0.0
	rx = ry = rz = 0.0
	rw = 1.0
	bx = by = bz = 0.001
	brx = bry = brz = 0.1

	# Generate a set of random coords in the arm workarea approx
	NUM_COORDS = 200
	rand_coords = []
	for _ in range(NUM_COORDS):
		x = random() * 0.5
		y = random() * 0.6 + -0.3
		z = random() * 0.7 + -0.35
		rand_coords.append((x, y, z))

	# Check some random coords with fixed orientation
	avg_time = 0.0
	num_solutions_found = 0
	for x, y, z in rand_coords:
		ini_t = time.time()
		sol = ik_solver.CartToJnt(qinit,
								  x, y, z,
								  rx, ry, rz, rw,
								  bx, by, bz,
								  brx, bry, brz)
		fin_t = time.time()
		call_time = fin_t - ini_t
		# print "IK call took: " + str(call_time)
		avg_time += call_time
		if sol:
			# print "X, Y, Z: " + str( (x, y, z) )
			print "SOL: " + str(sol)
			num_solutions_found += 1
	avg_time = avg_time / NUM_COORDS

	print
	print "Found " + str(num_solutions_found) + " of 200 random coords"
	print "Average IK call time: " + str(avg_time)
	print

# Check if orientation bounds work
	avg_time = 0.0
	num_solutions_found = 0
	brx = bry = brz = 9999.0  # We don't care about orientation
	for x, y, z in rand_coords:
		ini_t = time.time()
		sol = ik_solver.CartToJnt(qinit,
								  x, y, z,
								  rx, ry, rz, rw,
								  bx, by, bz,
								  brx, bry, brz)
		fin_t = time.time()
		call_time = fin_t - ini_t
		# print "IK call took: " + str(call_time)
		avg_time += call_time
		if sol:
			# print "X, Y, Z: " + str( (x, y, z) )
			# print "SOL: " + str(sol)
			num_solutions_found += 1

	avg_time = avg_time / NUM_COORDS
	print
	print "Found " + str(num_solutions_found) + " of 200 random coords ignoring orientation"
	print "Average IK call time: " + str(avg_time)
	print

	# Check if big position and orientation bounds work
	avg_time = 0.0
	num_solutions_found = 0
	bx = by = bz = 9999.0
	brx = bry = brz = 9999.0
	for x, y, z in rand_coords:
		ini_t = time.time()
		sol = ik_solver.CartToJnt(qinit,
								  x, y, z,
								  rx, ry, rz, rw,
								  bx, by, bz,
								  brx, bry, brz)
		fin_t = time.time()
		call_time = fin_t - ini_t
		# print "IK call took: " + str(call_time)
		avg_time += call_time
		if sol:
			# print "X, Y, Z: " + str( (x, y, z) )
			# print "SOL: " + str(sol)
			num_solutions_found += 1

	avg_time = avg_time / NUM_COORDS

	print
	print "Found " + str(num_solutions_found) + " of 200 random coords ignoring everything"
	print "Average IK call time: " + str(avg_time)
	print