示例#1
0
def test_getRandPosInBounds():
    test1 = bounds.getRandPosInBounds()
    test2 = bounds.getRandPosInBounds()
    test3 = bounds.getRandPosInBounds()
    test4 = bounds.getRandPosInBounds()
    print(np.around(test1,4))
    print(np.around(test2,4))
    print(np.around(test3,4))
    print(np.around(test4,4))
    print("Test1:", "Passed" if not bounds.outOfBounds(test1) else "Failed")
    print("Test2:", "Passed" if not bounds.outOfBounds(test2) else "Failed")
    print("Test3:", "Passed" if not bounds.outOfBounds(test3) else "Failed")
    print("Test4:", "Passed" if not bounds.outOfBounds(test4) else "Failed")
示例#2
0
def test_PDControl():
    model = load_model_from_path("robot.xml")
    sim = MjSim(model)
    viewer = MjViewer(sim)
    timestep = generatePatternedTrajectories.TIMESTEP
    control_freq = 1/timestep
    total_time = 3
    num_cycles = int(total_time * control_freq)
    qd_init = np.zeros(7)
    plt.ion()
    LW = 1.0
    fig = plt.figure(figsize=(4,15))
    axes = []
    lines = []
    goals = []
    for i in range(7):
        axes.append(fig.add_subplot(7,1,i+1))
        lines.append(axes[i].plot([],[],'b-', lw=LW)[0])
        goals.append(axes[i].plot([],[],'r-', lw=LW)[0])
        axes[i].set_ylim([bounds.LOWER_BOUND[i], bounds.UPPER_BOUND[i]])
        axes[i].set_xlim([0,total_time])
        axes[i].set_ylabel("Angle{}(rad)".format(i), fontsize=8)
        axes[i].set_xlabel("Time(s)", fontsize=8)

    for test in range(5):
        q_init = bounds.getRandPosInBounds()
        q_goal = bounds.getRandPosInBounds()
        for g in range(7):
            goals[g].set_ydata(np.ones(num_cycles) * q_goal[g])
            goals[g].set_xdata(np.linspace(0,3,num_cycles))
        sim.set_state(MjSimState(time=0,qpos=q_init,qvel=qd_init,act=None,udd_state={}))
        sim.step()
        sim_time = 0
        for i in range(num_cycles):
            state = sim.get_state()
            q = state[1]
            qd = state[2]
            sim.data.ctrl[:] = controllers.PDControl(q=q,qd=qd,qgoal=q_goal)
            sim.step()
            viewer.render()
            if i % 70 == 0:
                for a in range(7):
                    lines[a].set_xdata(np.append(lines[a].get_xdata(), sim_time))
                    lines[a].set_ydata(np.append(lines[a].get_ydata(), q[a]))
                fig.canvas.draw()
                fig.canvas.flush_events()
            sim_time += timestep
        for i in range(7):
            lines[i].set_xdata([])
            lines[i].set_ydata([])
        time.sleep(1)
示例#3
0
def test_inverse_kinematics_pos():
    ik = ikpy_panda_kinematics.panda_kinematics()
    print("\nTest 1: First 3 elements of xpos should be the same.")
    pos = np.zeros(7)
    xpos = ik.forward_kinematics(pos)
    R1 = ik.euler_angles_to_rpy_rotation_matrix(xpos[3:6])
    print("xpos:", np.around(xpos,3))

    pos = ik.inverse_kinematics(xpos[0:3], xpos[3:6])
    print("pos: ", np.around(pos,3))

    xpos = ik.forward_kinematics(pos)
    R2 = ik.euler_angles_to_rpy_rotation_matrix(xpos[3:6])
    print("xpos:", np.around(xpos,3))

    print("\nThe 2 following matricies should be the same.")
    print(np.around(R1,3),"\n\n",np.around(R1,3))


    print("\nTest 2: First 3 elements of xpos should be the same.")
    pos = bounds.getRandPosInBounds()
    xpos = ik.forward_kinematics(pos)
    R1 = ik.euler_angles_to_rpy_rotation_matrix(xpos[3:6])
    print("xpos:", np.around(xpos,3))

    pos = ik.inverse_kinematics(xpos[0:3], xpos[3:6])
    print("pos: ", np.around(pos,3))

    xpos = ik.forward_kinematics(pos)
    R2 = ik.euler_angles_to_rpy_rotation_matrix(xpos[3:6])
    print("xpos:", np.around(xpos,3))

    print("\nThe 2 following matricies should be the same.")
    print(np.around(R1,3),"\n\n",np.around(R1,3))
示例#4
0
def test_inverse_kinematics_no_plot():
    panda_kinematics = ikpy_panda_kinematics.panda_kinematics()

    xpos = panda_kinematics.forward_kinematics(np.zeros(7))
    theta = panda_kinematics.inverse_kinematics(xpos[0:3], xpos[3:6])
    print(np.around(xpos,4))
    print(np.around(panda_kinematics.forward_kinematics(theta),4))

    xpos = panda_kinematics.forward_kinematics(np.ones(7))
    theta = panda_kinematics.inverse_kinematics(xpos[0:3], xpos[3:6])
    print(np.around(xpos,4))
    print(np.around(panda_kinematics.forward_kinematics(theta),4))

    xpos = panda_kinematics.forward_kinematics(bounds.getRandPosInBounds())
    theta = panda_kinematics.inverse_kinematics(xpos[0:3], xpos[3:6])
    print(np.around(xpos,4))
    print(np.around(panda_kinematics.forward_kinematics(theta),4))
示例#5
0
def test_inverse_kinematics():
    panda_kinematics = ikpy_panda_kinematics.panda_kinematics()
    model = load_model_from_path("robot.xml")
    sim = MjSim(model)
    viewer = MjViewer(sim)
    timestep = generatePatternedTrajectories.TIMESTEP
    control_freq = 1/timestep
    total_time = 3
    num_cycles = int(total_time * control_freq)
    qd_init = np.zeros(7)
    plt.ion()
    LW = 1.0
    fig = plt.figure(figsize=(4,15))
    axes = []
    lines = []
    goals = []
    min_vals = {'x': -0.5, 'y': -0.5, 'z': 0.2}
    max_vals = {'x': 0.5, 'y': 0.5, 'z': 0.7}
    ylabels = ["x(m)", "y(m)", "z(m)"]
    ylbounds = [min_vals['x'], min_vals['y'], min_vals['z']]
    yubounds = [max_vals['x'], max_vals['y'], max_vals['z']]
    for i in range(3):
        axes.append(fig.add_subplot(3,1,i+1))
        lines.append(axes[i].plot([],[],'b-', lw=LW)[0])
        goals.append(axes[i].plot([],[],'r-', lw=LW)[0])
        axes[i].set_ylim([ylbounds[i], yubounds[i]])
        axes[i].set_xlim([0,total_time])
        axes[i].set_ylabel(ylabels[i], fontsize=8)
        axes[i].set_xlabel("Time(s)", fontsize=8)

    for test in range(5):
        x_target = np.random.rand() * (max_vals['x'] - min_vals['x']) + min_vals['x']
        y_target = np.random.rand() * (max_vals['y'] - min_vals['y']) + min_vals['y']
        z_target = np.random.rand() * (max_vals['z'] - min_vals['z']) + min_vals['z']
        if\
            min_vals['x'] > x_target or max_vals['x'] < x_target or \
            min_vals['y'] > y_target or max_vals['y'] < y_target or \
            min_vals['z'] > z_target or max_vals['z'] < z_target:
            print("Error! 'xpos' out of range!")
            print("x = %.3f\ny = %.3f\nz = %.3f" % (x_target, y_target, z_target))

            print(max_vals['y'] - min_vals['y'])
            return
        # x_target, y_target, z_target = 0.088, -0.0, 0.926
        # roll = np.random.rand() * np.pi - np.pi/2
        # pitch = np.random.rand() * np.pi - np.pi/2
        # yaw = np.random.rand() * np.pi - np.pi/2
        roll = 0
        pitch = 0
        yaw = np.pi
        ee_goal = [x_target, y_target, z_target, roll, pitch, yaw]

        # temp = bounds.getRandPosInBounds()
        # ee_goal = panda_kinematics.forward_kinematics(temp)
        q_init = bounds.getRandPosInBounds()
        q_goal = panda_kinematics.inverse_kinematics(translation=ee_goal[0:3], rpy=ee_goal[3:6], init_qpos=q_init)

        for g in range(3):
            goals[g].set_ydata(np.ones(num_cycles) * ee_goal[g])
            goals[g].set_xdata(np.linspace(0,3,num_cycles))
        sim.set_state(MjSimState(time=0,qpos=q_init,qvel=qd_init,act=None,udd_state={}))
        sim.step()
        sim_time = 0
        for i in range(num_cycles):
            state = sim.get_state()
            q = state[1]
            qd = state[2]
            sim.data.ctrl[:] = controllers.PDControl(q=q,qd=qd,qgoal=q_goal)
            sim.step()
            viewer.render()
            if i % 70 == 0:
                xpos = panda_kinematics.forward_kinematics(q)
                for a in range(3):
                    lines[a].set_xdata(np.append(lines[a].get_xdata(), sim_time))
                    lines[a].set_ydata(np.append(lines[a].get_ydata(), xpos[a]))
                fig.canvas.draw()
                fig.canvas.flush_events()
                print("[q\t]:{}".format(np.around(q,3)))
                print("[qgoal\t]:{}".format(np.around(q_goal,3)))
                print("[qgoal2\t]:{}".format(np.around(panda_kinematics.inverse_kinematics(ee_goal[0:3], ee_goal[3:6]),3)))
                print("[EE\t]:{}".format(np.around(panda_kinematics.forward_kinematics(q),3)))
                print("[EEgoal\t]:{}".format(np.around(ee_goal,3)))
            sim_time += timestep
        # panda_kinematics.plot_stick_figure(q)
        for i in range(3):
            lines[i].set_xdata([])
            lines[i].set_ydata([])
        time.sleep(1)