Beispiel #1
0
def run_main():
    fa = FrankaArm()

    fa.reset_pose()
    fa.reset_joints()

    magnetic_calibration = MagneticCalibration()

    fa.apply_effector_forces_torques(45, 0, 0, 0)

    magnetic_calibration.calibrate()
import numpy as np

from frankapy import FrankaArm, SensorDataMessageType
from frankapy import FrankaConstants as FC
from frankapy.proto_utils import sensor_proto2ros_msg, make_sensor_group_msg
from frankapy.proto import JointPositionSensorMessage, ShouldTerminateSensorMessage
from franka_interface_msgs.msg import SensorDataGroup

from frankapy.utils import min_jerk

import rospy

if __name__ == "__main__":
    fa = FrankaArm()
    fa.reset_joints()

    rospy.loginfo('Generating Trajectory')
    joints_0 = fa.get_joints()
    p = fa.get_pose()
    p.translation[2] -= 0.2
    fa.goto_pose(p)
    joints_1 = fa.get_joints()

    T = 5
    dt = 0.02
    ts = np.arange(0, T, dt)
    joints_traj = [min_jerk(joints_1, joints_0, t, T) for t in ts]

    rospy.loginfo('Initializing Sensor Publisher')
    pub = rospy.Publisher(FC.DEFAULT_SENSOR_PUBLISHER_TOPIC,
                          SensorDataGroup,
Beispiel #3
0
    """
    parser = argparse.ArgumentParser()
    parser.add_argument('--pose_dmp_weights_path', '-w', type=str, default='')
    parser.add_argument('--time', '-t', type=float, default=10)
    args = parser.parse_args()

    gains = [2000, 2000, 2000, 1500, 1500, 1000, 1000]  #joint impedances

    # load the dmp weights
    if not args.pose_dmp_weights_path:
        args.pose_dmp_weights_path = './data/dmp/IROS2020_dmp_data_goal_position_weights.pkl'
    pose_dmp_file = open(args.pose_dmp_weights_path, "rb")
    pose_dmp_info = pickle.load(pose_dmp_file)

    print('Starting robot')
    fa = FrankaArm()

    # Reset robot pose and joints
    print('Opening Grippers')
    fa.goto_gripper(0.08, grasp=False)
    print('Reset with pose')
    fa.reset_pose(duration=10)
    print('Reset with joints')
    fa.reset_joints()

    # instantiate object for AR tag detection
    frank = realpeginsert.Robot()

    # get transforms
    tag2worldTF = frank.detect_ar_world_pos(straighten=True,
                                            shape_class=shapes.Circle,
Beispiel #4
0
    logging.getLogger().setLevel(logging.INFO)
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--cfg',
        '-c',
        type=str,
        default=
        '/home/stevenl3/Documents/planorparam/scripts/real_robot/april_tag_pick_place_azure_kinect_cfg.yaml'
    )
    parser.add_argument('--no_grasp', '-ng', action='store_true')
    args = parser.parse_args()
    cfg = YamlConfig(args.cfg)
    T_camera_world = RigidTransform.load(cfg['T_k4a_franka_path'])

    logging.info('Starting robot')
    fa = FrankaArm()
    #    fa.reset_joints()
    #    fa.reset_pose()
    #    fa.open_gripper()

    T_ready_world = fa.get_pose()
    T_ready_world.translation[0] += 0.25
    T_ready_world.translation[2] = 0.4

    #ret = fa.goto_pose(T_ready_world)

    logging.info('Init camera')

    #sensor = get_first_realsense_sensor(cfg['rs']) #original
    sensor = Kinect2SensorFactory.sensor('bridged', cfg)  #Kinect sensor object
if __name__ == "__main__":
    logging.getLogger().setLevel(logging.INFO)
    parser = argparse.ArgumentParser()
    parser.add_argument('--cfg',
                        '-c',
                        type=str,
                        default='cfg/examples/april_tag_pick_place_cfg.yaml')
    parser.add_argument('--no_grasp', '-ng', action='store_true')
    args = parser.parse_args()
    cfg = YamlConfig(args.cfg)
    T_camera_ee = RigidTransform.load(cfg['T_camera_ee_path'])
    T_camera_mount_delta = RigidTransform.load(cfg['T_camera_mount_path'])

    logging.info('Starting robot')
    fa = FrankaArm()
    fa.set_tool_delta_pose(T_camera_mount_delta)
    fa.reset_joints()
    fa.open_gripper()

    T_ready_world = fa.get_pose()
    T_ready_world.translation[0] += 0.25
    T_ready_world.translation[2] = 0.4

    ret = fa.goto_pose(T_ready_world)

    logging.info('Init camera')
    sensor = get_first_realsense_sensor(cfg['rs'])
    sensor.start()

    logging.info('Detecting April Tags')
Beispiel #6
0
import numpy as np
from frankapy import FrankaArm
from autolab_core import RigidTransform

if __name__ == '__main__':

    print('Starting robot')
    fa = FrankaArm()

    fa.reset_pose()

    fa.reset_joints()

    print('Opening Grippers')
    fa.open_gripper()

    # random_position = RigidTransform(rotation=np.array([
    #         [1, 0, 0],
    #         [0, -1, 0],
    #         [0, 0, -1]
    #     ]), translation=np.array([0.3069, 0, 0.2867]),
    # from_frame='franka_tool', to_frame='world')

    # fa.goto_pose_with_cartesian_control(random_position, 10)

    fa.apply_effector_forces_torques(10, 0, 0, 0)
import time
import numpy as np
from frankapy import FrankaArm
fa = FrankaArm()

time.sleep(6)
fa.open_gripper()

Beispiel #8
0
from frankapy import FrankaArm
import numpy as np

fa = FrankaArm()
for i in range(20):
    input("Prepare to move arm")
    fa.apply_effector_forces_torques(3, 0, 0, 0)
    rt = fa.get_pose()
    print(rt)



Beispiel #9
0
from autolab_core import RigidTransform, Point
from frankapy import FrankaArm

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--pose_dmp_weights_file_path', type=str, default='')
    args = parser.parse_args()

    if not args.pose_dmp_weights_file_path:
        args.pose_dmp_weights_file_path = '/home/sony/logs/robot_state_data_0_pose_weights.pkl'

    pose_dmp_file = open(args.pose_dmp_weights_file_path, "rb")
    pose_dmp_info = pickle.load(pose_dmp_file)

    print('Starting robot')
    fa = FrankaArm()

    fa.reset_pose()

    fa.reset_joints()

    print('Opening Grippers')
    fa.open_gripper()

    # random_position = RigidTransform(rotation=np.array([
    #         [1, 0, 0],
    #         [0, -1, 0],
    #         [0, 0, -1]
    #     ]), translation=np.array([0.3069, 0, 0.2867]),
    # from_frame='franka_tool', to_frame='world')
Beispiel #10
0
import argparse
from frankapy import FrankaArm

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--time', '-t', type=float, default=100)
    parser.add_argument('--open_gripper', '-o', action='store_true')
    args = parser.parse_args()

    print('Starting robot')
    fa = FrankaArm()
    if args.open_gripper:
        fa.open_gripper()
    print('Applying 0 force torque control for {}s'.format(args.time))
    fa.run_guide_mode(args.time)
def run_main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--filename', type=str, default=None)
    args = parser.parse_args()

    fa = FrankaArm()

    fa.open_gripper()

    # fa.reset_pose()
    fa.reset_joints(10)

    initial_magnet_position1 = RigidTransform(
        rotation=np.array([[0, -1, 0], [0, 0, 1], [-1, 0, 0]]),
        translation=np.array([0.38592997, 0.10820438, 0.08264024]),
        from_frame='franka_tool',
        to_frame='world')

    initial_magnet_position2 = RigidTransform(
        rotation=np.array([[0, -1, 0], [0, 0, 1], [-1, 0, 0]]),
        translation=np.array([0.38592997, 0.20820438, 0.08264024]),
        from_frame='franka_tool',
        to_frame='world')

    squeeze_position1 = RigidTransform(
        rotation=np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]),
        translation=np.array([0.54900978, 0.20820438, 0.20654183]),
        from_frame='franka_tool',
        to_frame='world')

    squeeze_position2 = RigidTransform(
        rotation=np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]),
        translation=np.array([0.54900978, 0.20820438, 0.15654183]),
        from_frame='franka_tool',
        to_frame='world')

    relative_pos_dist_z = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.0, 0.1]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_pos_dist_y = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.1, 0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_rotation_z = RigidTransform(rotation=np.array([[0, 1, 0],
                                                            [-1, 0, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.0, 0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_neg_rotation_z = RigidTransform(rotation=np.array([[0, -1, 0],
                                                                [1, 0, 0],
                                                                [0, 0, 1]]),
                                             translation=np.array(
                                                 [0.0, 0.0, 0.0]),
                                             from_frame='franka_tool',
                                             to_frame='franka_tool')

    relative_neg_dist_y = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, -0.1,
                                                               0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_neg_dist_z = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.0,
                                                               -0.1]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_pos_dist_x = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([0.075, 0.0, 0.0]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    relative_neg_dist_x = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([-0.03, 0.0, 0.0]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    fa.goto_pose_with_cartesian_control(initial_magnet_position2)

    magnetic_calibration = MagneticCalibration()

    filename = '../calibration/2020-01-14 11-08 E1 2X Board Calibration.npz'
    magnetic_calibration.load_calibration_file(filename)

    # Close the gripper and save corresponding robot state, gripper state, and magnetic state data
    magnetic_calibration.start_recording_data()
    time.sleep(1)
    # fa.goto_pose_delta_with_cartesian_control(relative_x_dist, 10)
    # max width is about 0.080 m

    gripper_step_size = 0.002  # in meters
    num_samples = 30
    noise_level = 13  # uT
    force_threshold = 1.05

    GRIPPER_CONTACT = False

    min_contact = None
    min_gripper_width = None
    global_min = None
    current_force_estimate = 1

    while (GRIPPER_CONTACT == False):

        current_width = magnetic_calibration.get_current_gripper_width()
        print(current_width)
        fa.goto_gripper(current_width - gripper_step_size)

        #magnetic_calibration.get_last_magnetic_data()
        mag_data = magnetic_calibration.get_previous_magnetic_samples(
            num_samples)  # grab last ten samples

        xyz_mag_data = mag_data[:, 6]
        print(xyz_mag_data)
        #slope = np.diff(xyz_mag_data, axis=0)
        #print(slope)
        # asign = np.sign(slope)
        # signchange = ((np.roll(asign, 1) - asign) != 0).astype(int)
        # print(signchange)

        # first make sure the signal changes are large enough to not just be noise jitter
        # then see if there is a signal change in slope - this signifies a contact.
        #if(np.any(abs(np.diff(mag_data)>noise_level))):
        #if(abs(np.sum(np.sign(np.diff(mag_data)))<numSamples) & abs(np.diff(mag_data))>noise_level):

        if global_min is None:
            global_min = np.min(xyz_mag_data, axis=0)

        elif global_min > np.min(xyz_mag_data, axis=0):
            global_min = np.min(xyz_mag_data, axis=0)

        if xyz_mag_data[-1] - global_min > noise_level:
            GRIPPER_CONTACT = True
            min_gripper_width = current_width - 2 * gripper_step_size
            print(min_gripper_width)
            print("Min Magnetic Values: ")
            print(min_contact)

        gripper_step_size -= 0.00003

        # if (np.any(np.logical_and((abs(slope)>noise_level), (slope > 0)))):
        #     # if last value is negative, contact. if last value is positive, release.
        #     # save max value so we can compare current value and strength of grip
        #     GRIPPER_CONTACT = True
        #     min_contact = np.min(xyz_mag_data, axis=0)
        #     min_gripper_width = current_width-gripper_step_size
        #     print(min_gripper_width)
        #     print("Min Magnetic Values: ")
        #     print(min_contact)
        #input("Press enter to continue to next step")

        #magnetic_calibration.close_gripper_magnetic_feedback()

    # current_width = min_gripper_width
    # num_samples = 100

    # while(current_force_estimate < force_threshold):
    #     current_width -= gripper_step_size
    #     print(current_width)
    #     fa.goto_gripper(current_width)

    #     mag_data = magnetic_calibration.get_previous_magnetic_samples(num_samples) # grab last ten samples

    #     z_mag_data = np.max(mag_data[:,6])
    #     print(z_mag_data)

    #     current_force_estimate = global_min / z_mag_data
    #     print(current_force_estimate)

    fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_z)

    current_joints = fa.get_joints()
    current_joints[6] -= math.pi

    fa.goto_joints(list(current_joints))

    current_position = fa.get_pose()

    fa.goto_pose_with_cartesian_control(squeeze_position1)

    fa.goto_pose_with_cartesian_control(squeeze_position2)

    for i in range(3):
        for j in range(i + 1):
            fa.goto_gripper(0.0, force=20)

            fa.goto_gripper(min_gripper_width)
        if i < 2:
            fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_x)

    fa.goto_pose_with_cartesian_control(current_position, 5)

    current_joints = fa.get_joints()
    current_joints[6] += math.pi

    fa.goto_joints(list(current_joints))

    fa.goto_pose_delta_with_cartesian_control(relative_neg_dist_z)

    fa.open_gripper()

    fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    #fa.goto_pose_delta_with_cartesian_control(relative_neg_dist_z)

    magnetic_calibration.stop_recording_data()

    #fa.open_gripper()

    print(magnetic_calibration.magnetic_data[0, :])

    if args.filename is not None:
        magnetic_calibration.saveData(args.filename, min_contact,
                                      min_gripper_width)

    magnetic_calibration.plotData(magnetic_calibration.magnetic_data,
                                  'Raw Data Over Time')
    magnetic_calibration.plotGripperData(
        magnetic_calibration.gripper_state_data, 'Raw Data Over Time')
    magnetic_calibration.plotGripperData(magnetic_calibration.robot_state_data,
                                         'Raw Data Over Time')
Beispiel #12
0
from frankapy import FrankaArm

if __name__ == '__main__':
    fa = FrankaArm()
    fa.reset_joints()
    fa.open_gripper()
Beispiel #13
0
def run_main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--filename', type=str, default=None)
    args = parser.parse_args()

    fa = FrankaArm()

    fa.open_gripper()

    # fa.reset_pose()
    fa.reset_joints(10)

    pipette_rotation = np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]])

    initial_magnet_position1 = RigidTransform(
        rotation=pipette_rotation,
        translation=np.array([0.45683638, 0.06513334, 0.20451204]),
        from_frame='franka_tool',
        to_frame='world')

    initial_magnet_position2 = RigidTransform(
        rotation=pipette_rotation,
        translation=np.array([0.45683638, 0.06513334, 0.15451204]),
        from_frame='franka_tool',
        to_frame='world')

    initial_magnet_position3 = RigidTransform(
        rotation=pipette_rotation,
        translation=np.array([0.45683638, 0.06513334, 0.33451204]),
        from_frame='franka_tool',
        to_frame='world')

    beaker_position1 = RigidTransform(rotation=pipette_rotation,
                                      translation=np.array(
                                          [0.44724006, 0.2870516, 0.33210899]),
                                      from_frame='franka_tool',
                                      to_frame='world')

    beaker_position2 = RigidTransform(rotation=pipette_rotation,
                                      translation=np.array(
                                          [0.44724006, 0.2870516, 0.16210899]),
                                      from_frame='franka_tool',
                                      to_frame='world')

    test_tube_1 = RigidTransform(rotation=pipette_rotation,
                                 translation=np.array(
                                     [0.54359048, 0.17224207, 0.19106597]),
                                 from_frame='franka_tool',
                                 to_frame='world')
    test_tube_2 = RigidTransform(rotation=pipette_rotation,
                                 translation=np.array(
                                     [0.56359048, 0.17224207, 0.19106597]),
                                 from_frame='franka_tool',
                                 to_frame='world')
    test_tube_3 = RigidTransform(rotation=pipette_rotation,
                                 translation=np.array(
                                     [0.58359048, 0.17224207, 0.19106597]),
                                 from_frame='franka_tool',
                                 to_frame='world')

    relative_pos_dist_z = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([0.0, 0.0, 0.175]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    relative_pos_dist_y = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.02,
                                                               0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_rotation_z = RigidTransform(rotation=np.array([[0, 1, 0],
                                                            [-1, 0, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.0, 0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_neg_rotation_z = RigidTransform(rotation=np.array([[0, -1, 0],
                                                                [1, 0, 0],
                                                                [0, 0, 1]]),
                                             translation=np.array(
                                                 [0.0, 0.0, 0.0]),
                                             from_frame='franka_tool',
                                             to_frame='franka_tool')

    relative_neg_dist_y = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, -0.1,
                                                               0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_neg_dist_z = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([0.0, 0.0, -0.175]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    relative_pos_dist_x = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([0.075, 0.0, 0.0]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    relative_neg_dist_x = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([-0.03, 0.0, 0.0]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    fa.goto_pose_with_cartesian_control(initial_magnet_position2)

    magnetic_calibration = MagneticCalibration()

    filename = '../calibration/2020-01-14 11-08 E1 2X Board Calibration.npz'
    magnetic_calibration.load_calibration_file(filename)

    # Close the gripper and save corresponding robot state, gripper state, and magnetic state data
    magnetic_calibration.start_recording_data()
    time.sleep(1)
    # fa.goto_pose_delta_with_cartesian_control(relative_x_dist, 10)
    # max width is about 0.080 m

    gripper_step_size = 0.005  # in meters
    num_samples = 30
    noise_level = 15  # uT
    force_threshold = 1.05

    GRIPPER_CONTACT = False

    min_contact = None
    min_gripper_width = None
    global_max = None
    current_force_estimate = 1

    while (GRIPPER_CONTACT == False):

        current_width = magnetic_calibration.get_current_gripper_width()
        print(current_width)
        fa.goto_gripper(current_width - gripper_step_size)

        #magnetic_calibration.get_last_magnetic_data()
        mag_data = magnetic_calibration.get_previous_magnetic_samples(
            num_samples)  # grab last ten samples

        xyz_mag_data = mag_data[:, 6]
        print(xyz_mag_data)
        #slope = np.diff(xyz_mag_data, axis=0)
        #print(slope)
        # asign = np.sign(slope)
        # signchange = ((np.roll(asign, 1) - asign) != 0).astype(int)
        # print(signchange)

        # first make sure the signal changes are large enough to not just be noise jitter
        # then see if there is a signal change in slope - this signifies a contact.
        #if(np.any(abs(np.diff(mag_data)>noise_level))):
        #if(abs(np.sum(np.sign(np.diff(mag_data)))<numSamples) & abs(np.diff(mag_data))>noise_level):

        if global_max is None:
            global_max = np.max(xyz_mag_data, axis=0)

        elif global_max < np.max(xyz_mag_data, axis=0):
            global_max = np.max(xyz_mag_data, axis=0)

        if global_max - xyz_mag_data[-1] > noise_level:
            GRIPPER_CONTACT = True
            min_gripper_width = current_width
            fa.goto_gripper(min_gripper_width)

            #min_contact = xyz_mag_data[-1]
            print(min_gripper_width)
            print("Global Max: ")
            print(global_max)

        gripper_step_size -= 0.0001

        # if (np.any(np.logical_and((abs(slope)>noise_level), (slope > 0)))):
        #     # if last value is negative, contact. if last value is positive, release.
        #     # save max value so we can compare current value and strength of grip
        #     GRIPPER_CONTACT = True
        #     min_contact = np.min(xyz_mag_data, axis=0)
        #     min_gripper_width = current_width-gripper_step_size
        #     print(min_gripper_width)
        #     print("Min Magnetic Values: ")
        #     print(min_contact)
        #input("Press enter to continue to next step")

        #magnetic_calibration.close_gripper_magnetic_feedback()

    # current_width = min_gripper_width
    # num_samples = 100

    # while(current_force_estimate < force_threshold):
    #     current_width -= gripper_step_size
    #     print(current_width)
    #     fa.goto_gripper(current_width)

    #     mag_data = magnetic_calibration.get_previous_magnetic_samples(num_samples) # grab last ten samples

    #     z_mag_data = np.max(mag_data[:,6])
    #     print(z_mag_data)

    #     current_force_estimate = global_min / z_mag_data
    #     print(current_force_estimate)

    fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_z)

    for i in range(3):

        fa.goto_pose_with_cartesian_control(beaker_position1)

        fa.goto_pose_with_cartesian_control(beaker_position2)

        fa.goto_gripper(0.0, force=20)

        fa.goto_gripper(min_gripper_width)

        fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_z)

        if i == 0:
            force_value = 15
            fa.goto_pose_with_cartesian_control(test_tube_1)
        elif i == 1:
            force_value = 30
            fa.goto_pose_with_cartesian_control(test_tube_2)
        elif i == 2:
            force_value = 50
            fa.goto_pose_with_cartesian_control(test_tube_3)

        force_gripper_width = min_gripper_width

        for j in range(5):

            mag_data = magnetic_calibration.get_previous_magnetic_samples(
                num_samples)
            max_data = np.max(mag_data[:, 6], axis=0)

            current_force_estimate = max_data - force_value
            print("Force Threshold:")
            print(current_force_estimate)
            force_achieved = False
            gripper_step_size = 0.0003

            num_samples = 30

            while (force_achieved == False):

                force_gripper_width -= gripper_step_size

                fa.goto_gripper(force_gripper_width)

                #magnetic_calibration.get_last_magnetic_data()
                mag_data = magnetic_calibration.get_previous_magnetic_samples(
                    num_samples)  # grab last ten samples

                print(np.mean(mag_data[:, 6]))
                #slope = np.diff(xyz_mag_data, axis=0)
                #print(slope)
                # asign = np.sign(slope)
                # signchange = ((np.roll(asign, 1) - asign) != 0).astype(int)
                # print(signchange)

                # first make sure the signal changes are large enough to not just be noise jitter
                # then see if there is a signal change in slope - this signifies a contact.
                #if(np.any(abs(np.diff(mag_data)>noise_level))):
                #if(abs(np.sum(np.sign(np.diff(mag_data)))<numSamples) & abs(np.diff(mag_data))>noise_level):

                if np.mean(mag_data[:, 6]) < current_force_estimate:
                    force_achieved = True

                    print(force_gripper_width)

            if (j < 4):
                fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_y)

        fa.goto_gripper(min_gripper_width)
        fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_z)

    # for i in range(5):

    #     fa.goto_pose_with_cartesian_control(beaker_position1)

    #     fa.goto_pose_with_cartesian_control(beaker_position2)

    #     fa.goto_gripper(0.0, force = 20)

    #     fa.goto_gripper(min_gripper_width)

    #     fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_z)

    #     #fa.goto_gripper(min_gripper_width)

    #     fa.goto_pose_with_cartesian_control(test_tube_1)

    #     fa.goto_gripper(force_gripper_width)

    #     fa.goto_gripper(min_gripper_width)

    fa.goto_pose_with_cartesian_control(beaker_position1)

    fa.goto_pose_with_cartesian_control(beaker_position2)

    fa.goto_gripper(0.0, force=20)

    fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_z)

    fa.goto_gripper(min_gripper_width)

    fa.goto_pose_with_cartesian_control(initial_magnet_position3)

    fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    fa.goto_pose_with_cartesian_control(initial_magnet_position2)

    fa.open_gripper()

    fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    # for i in range(3):
    #     for j in range(i+1):
    #         fa.goto_gripper(0.0, force = 20)

    #         fa.goto_gripper(min_gripper_width)
    #     if i < 2:
    #         fa.goto_pose_delta_with_cartesian_control(relative_pos_dist_x)

    # fa.goto_pose_with_cartesian_control(current_position,5)

    # current_joints = fa.get_joints()
    # current_joints[6] += math.pi

    # fa.goto_joints(list(current_joints))

    # fa.goto_pose_delta_with_cartesian_control(relative_neg_dist_z)

    # fa.open_gripper()

    # fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    #fa.goto_pose_delta_with_cartesian_control(relative_neg_dist_z)

    magnetic_calibration.stop_recording_data()

    #fa.open_gripper()

    print(magnetic_calibration.magnetic_data[0, :])

    if args.filename is not None:
        magnetic_calibration.saveData(args.filename, global_max,
                                      min_gripper_width)

    magnetic_calibration.plotData(magnetic_calibration.magnetic_data,
                                  'Raw Data Over Time')
    magnetic_calibration.plotGripperData(
        magnetic_calibration.gripper_state_data, 'Raw Data Over Time')
    magnetic_calibration.plotGripperData(magnetic_calibration.robot_state_data,
                                         'Raw Data Over Time')
Beispiel #14
0
def run_main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--filename', type=str, default=None)
    args = parser.parse_args()

    fa = FrankaArm(async_cmds=True)

    fa.close_gripper()

    while fa.is_skill_done() == False:
        time.sleep(1)

    # fa.reset_pose()
    # fa.reset_joints()

    drawer_2_z_height = 0.12919677
    drawer_3_z_height = 0.08264024

    drawer_height = drawer_3_z_height

    initial_magnet_position1 = RigidTransform(
        rotation=np.array([[0, -1, 0], [0, 0, 1], [-1, 0, 0]]),
        translation=np.array([0.40926815, 0.20738414, drawer_height]),
        from_frame='franka_tool',
        to_frame='world')

    initial_magnet_position2 = RigidTransform(
        rotation=np.array([[0, -1, 0], [0, 0, 1], [-1, 0, 0]]),
        translation=np.array([0.40926815, 0.23738414, drawer_height]),
        from_frame='franka_tool',
        to_frame='world')

    relative_pos_dist_z = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.0,
                                                               0.08]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_pos_dist_y = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.08,
                                                               0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_rotation_z = RigidTransform(rotation=np.array([[0, 1, 0],
                                                            [-1, 0, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.0, 0.0, 0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_neg_rotation_z = RigidTransform(rotation=np.array([[0, -1, 0],
                                                                [1, 0, 0],
                                                                [0, 0, 1]]),
                                             translation=np.array(
                                                 [0.0, 0.0, 0.0]),
                                             from_frame='franka_tool',
                                             to_frame='franka_tool')

    relative_neg_dist_y = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([0.0, -0.13, 0.0]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    relative_neg_dist_z = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([0.0, 0.0, -0.08]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    relative_pos_dist_x = RigidTransform(rotation=np.array([[1, 0,
                                                             0], [0, 1, 0],
                                                            [0, 0, 1]]),
                                         translation=np.array([0.03, 0.0,
                                                               0.0]),
                                         from_frame='franka_tool',
                                         to_frame='franka_tool')

    relative_neg_dist_x = RigidTransform(
        rotation=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
        translation=np.array([-0.03, 0.0, 0.0]),
        from_frame='franka_tool',
        to_frame='franka_tool')

    fa.goto_pose_with_cartesian_control(initial_magnet_position1)

    while fa.is_skill_done() == False:
        time.sleep(1)

    fa.goto_pose_with_cartesian_control(initial_magnet_position2)

    while fa.is_skill_done() == False:
        time.sleep(1)

    magnetic_calibration = MagneticCalibration()

    filename = '../calibration/2020-01-14 11-08 E1 2X Board Calibration.npz'
    magnetic_calibration.load_calibration_file(filename)

    num_samples = 10
    noise_level = 1  # uT

    #fa.goto_gripper(0.0, force=160)

    # while fa.is_skill_done() == False:
    #     time.sleep(1)

    magnetic_calibration.start_recording_data()
    time.sleep(0.5)

    greater_than_noise = False

    fa.goto_pose_delta_with_cartesian_control(
        relative_pos_dist_y, 5, stop_on_contact_forces=[20, 2, 20, 20, 20, 20])

    while fa.is_skill_done() == False:
        mag_data = magnetic_calibration.get_previous_magnetic_samples(
            num_samples)
        dif_mag_data = np.diff(mag_data[:, 5])
        mean_change = np.mean(dif_mag_data)
        print(mean_change)

        if (abs(mean_change) > noise_level) and not greater_than_noise:
            greater_than_noise = True

        if greater_than_noise and abs(mean_change) < 1:
            print("stopped skill")
            fa.stop_skill()
        time.sleep(0.01)

    # while fa.is_skill_done() == False:
    #     time.sleep(1)

    fa.goto_pose_delta_with_cartesian_control(relative_neg_dist_y, 5)

    while fa.is_skill_done() == False:
        time.sleep(1)

    magnetic_calibration.stop_recording_data()

    #fa.open_gripper()

    while fa.is_skill_done() == False:
        time.sleep(1)

    print(magnetic_calibration.magnetic_data[0, :])

    if args.filename is not None:
        magnetic_calibration.saveData(args.filename)

    magnetic_calibration.plotDataVsRobotState(
        magnetic_calibration.magnetic_data,
        magnetic_calibration.robot_state_data, 'Raw Data Over Distance')
    magnetic_calibration.plotData(magnetic_calibration.magnetic_data,
                                  'Raw Data Over Time')
    magnetic_calibration.plotForceData(magnetic_calibration.force_state_data,
                                       'Raw Data Over Time')
    magnetic_calibration.plotRobotStateData(
        magnetic_calibration.robot_state_data, 'Raw Data Over Time')
Beispiel #15
0
from frankapy import FrankaArm

if __name__ == '__main__':
    print('Starting robot')
    fa = FrankaArm()

    fa.reset_joints()

    pose = fa.get_pose()
    pose.translation[0] = 0.75

    # This should trigger an error
    fa.goto_pose(pose)
    
Beispiel #16
0

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--intrinsics_file_path',
                        type=str,
                        default=AZURE_KINECT_CALIB_DATA)
    parser.add_argument('--transform_file_path',
                        type=str,
                        default=AZURE_KINECT_EXTRINSICS)
    parser.add_argument('--filename', type=str, default=None)
    args = parser.parse_args()

    # rospy.init_node("Test azure kinect calibration")
    print('Starting robot')
    fa = FrankaArm()

    cv_bridge = CvBridge()
    ir_intrinsics = CameraIntrinsics.load(args.intrinsics_file_path)

    kinect2_overhead_to_world_transform = RigidTransform.load(
        args.transform_file_path)

    print('Opening Grippers')
    fa.open_gripper()

    print('Reset with pose')
    fa.reset_pose(10)

    print('Reset with joints')
    fa.reset_joints()
import argparse
from frankapy import FrankaArm

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--time', '-t', type=float, default=100)
    parser.add_argument('--open_gripper', '-o', action='store_true')
    args = parser.parse_args()

    print('Starting robot')
    fa = FrankaArm()
    if args.open_gripper:
        fa.open_gripper()
    fa.selective_guidance_mode(
        args.time,
        use_impedance=True,
        use_ee_frame=True,
        cartesian_impedances=[600.0, 0.0, 0.0, 0.0, 0.0, 0.0])
Beispiel #18
0
from frankapy import FrankaArm
import numpy as np
from autolab_core import RigidTransform

if __name__ == '__main__':

    print('Starting robot')
    fa = FrankaArm()

    xtranslation_3cm = RigidTransform(rotation=np.array([[1, 0, 0], [0, 1, 0],
                                                         [0, 0, 1]]),
                                      translation=np.array([0.03, 0, 0]),
                                      from_frame='franka_tool',
                                      to_frame='world')

    random_position = RigidTransform(
        rotation=np.array([[0.9323473, -0.35858258, 0.04612846],
                           [-0.35996283, -0.93259467, 0.02597504],
                           [0.03370496, -0.04082229, -0.99859775]]),
        translation=np.array([0.39247965, -0.21613652, 0.3882055]),
        from_frame='franka_tool',
        to_frame='world')

    print(fa.get_pose().translation)

    print(fa.get_joints())

    desired_joints_1 = [
        -0.52733715, 0.25603565, 0.47721503, -1.26705864, 0.00600359,
        1.60788199, 0.63019184
    ]
import numpy as np
from autolab_core import RigidTransform

from frankapy import FrankaArm


if __name__ == "__main__":
    fa = FrankaArm()
    
    # reset franka to its home joints
    fa.reset_joints()

    # read functions
    T_ee_world = fa.get_pose()
    print('Translation: {} | Rotation: {}'.format(T_ee_world.translation, T_ee_world.quaternion))

    joints = fa.get_joints()
    print('Joints: {}'.format(joints))

    gripper_width = fa.get_gripper_width()
    print('Gripper width: {}'.format(gripper_width))

    # gripper controls
    print('Closing gripper')
    fa.close_gripper()

    print('Opening gripper to a specified position')
    fa.goto_gripper(0.02)

    print('Opening gripper all the way')
    fa.open_gripper()
Beispiel #20
0
from frankapy import FrankaArm
import numpy as np
from autolab_core import RigidTransform

fa = FrankaArm()
trans, rot = np.load("above_pose.npy")
#fa.close_gripper()
above_position = RigidTransform(rotation=rot,
                                translation=trans,
                                from_frame='franka_tool',
                                to_frame='world')

fa.goto_pose_with_cartesian_control(
    above_position, cartesian_impedances=[3000, 3000, 100, 300, 300, 300])
fa.open_gripper()
input("Add gripper")
fa.close_gripper()
trans, rot = np.load("insert_pose.npy")
insert_position = RigidTransform(rotation=rot,
                                 translation=trans,
                                 from_frame='franka_tool',
                                 to_frame='world')
insert_position.translation[-1] -= 0.01  # manual adjustment

fa.goto_pose_with_cartesian_control(
    insert_position, cartesian_impedances=[20, 20, 2000, 300, 300, 300]
)  #one of these but with impedance control? compliance comes from the matrix so I think that's good enough
Beispiel #21
0
        magnetic_data = calibrated[4:7]-transform_ref[0:3]

        return magnetic_data



if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--intrinsics_file_path', type=str, default=AZURE_KINECT_CALIB_DATA)
    parser.add_argument('--transform_file_path', type=str, default=AZURE_KINECT_EXTRINSICS)
    parser.add_argument('--object', type=str, default=AZURE_KINECT_EXTRINSICS)
    args = parser.parse_args()

    # rospy.init_node("Test azure kinect calibration")
    print('Starting robot')
    fa = FrankaArm()

    cv_bridge = CvBridge()
    ir_intrinsics = CameraIntrinsics.load(args.intrinsics_file_path)

    kinect2_overhead_to_world_transform = RigidTransform.load(args.transform_file_path)


    print('Opening Grippers')
    fa.open_gripper()

    print('Reset with pose')
    fa.reset_pose()

    print('Reset with joints')
    fa.reset_joints()
import numpy as np

from autolab_core import RigidTransform
from frankapy import FrankaArm, SensorDataMessageType
from frankapy import FrankaConstants as FC
from frankapy.proto_utils import sensor_proto2ros_msg, make_sensor_group_msg
from frankapy.proto import PosePositionSensorMessage, ShouldTerminateSensorMessage, CartesianImpedanceSensorMessage
from franka_interface_msgs.msg import SensorDataGroup

from frankapy.utils import min_jerk, min_jerk_weight

import rospy

if __name__ == "__main__":
    fa = FrankaArm()
    fa.reset_joints()

    rospy.loginfo('Generating Trajectory')
    p0 = fa.get_pose()
    p1 = p0.copy()
    T_delta = RigidTransform(translation=np.array([0, 0, 0.2]),
                             rotation=RigidTransform.z_axis_rotation(
                                 np.deg2rad(30)),
                             from_frame=p1.from_frame,
                             to_frame=p1.from_frame)
    p1 = p1 * T_delta
    fa.goto_pose(p1)

    T = 5
    dt = 0.02
    ts = np.arange(0, T, dt)
Beispiel #23
0
    '/path/to/azure_kinect_calibration/calib/azure_kinect_left/kinect2_left_to_world.tf'

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--intrinsics_file_path',
                        type=str,
                        default=AZURE_KINECT_CALIB_DATA)
    parser.add_argument('--transform_file_path',
                        type=str,
                        default=AZURE_KINECT_EXTRINSICS)
    parser.add_argument('--filename', type=str, default=None)
    args = parser.parse_args()

    # rospy.init_node("Test azure kinect calibration")
    print('Starting robot')
    fa = FrankaArm()

    cv_bridge = CvBridge()
    ir_intrinsics = CameraIntrinsics.load(args.intrinsics_file_path)

    kinect2_left_to_world_transform = RigidTransform.load(
        args.transform_file_path)

    # print('Opening Grippers')
    # fa.open_gripper()

    print('Reset with pose')
    fa.reset_pose()

    print('Reset with joints')
    fa.reset_joints()
Beispiel #24
0
import numpy as np

from frankapy import FrankaArm, SensorDataMessageType
from frankapy import FrankaConstants as FC
from frankapy.proto_utils import sensor_proto2ros_msg, make_sensor_group_msg
from frankapy.proto import ForcePositionSensorMessage, ForcePositionControllerSensorMessage
from franka_interface_msgs.msg import SensorDataGroup
from frankapy.utils import transform_to_list, min_jerk

from tqdm import trange

import rospy

if __name__ == "__main__":
    fa = FrankaArm()
    fa.reset_joints()
    fa.close_gripper()

    while True:
        input(
            'Presse [Enter] to enter guide mode and move robot to be on top of a flat surface.'
        )
        fa.run_guide_mode()
        while True:
            inp = input('[r]etry or [c]ontinue? ')
            if inp not in ('r', 'c'):
                print('Please give valid input!')
            else:
                break
        if inp == 'c':
            break
Beispiel #25
0
import GPy as gpy
from autolab_core import RigidTransform, YamlConfig
from visualization import Visualizer3D as vis3d

from perception_utils.apriltags import AprilTagDetector
from perception_utils.realsense import get_first_realsense_sensor
from modelfree import processimgs, vae
from modelfree.ILPolicy import ILPolicy, process_action_data
#from test_module.test_behaviour_cloning import test_behaviour_cloning as get_il_policy
from perception import Kinect2SensorFactory, KinectSensorBridged
from sensor_msgs.msg import Image
from perception.camera_intrinsics import CameraIntrinsics
robot = True
if robot:
    from frankapy import FrankaArm
    fa = FrankaArm()
    import ipdb
    ipdb.set_trace()
else:
    rospy.init_node("fo")


class Robot():
    def __init__(self, visualize=False, setup_pb=True):
        self.contact_threshold = -3.5  # less than is in contact
        self.autoencoder = None
        self.il_policy = None
        self.bridge = cv_bridge.CvBridge()
        self.shape_to_goal_loc = {}
        self.shape_type_to_ids = {Rectangle: (0, 1, 2, 3)}
        self.shape_goal_type_to_ids = {Rectangle: 1}
Beispiel #26
0
import argparse
from frankapy import FrankaArm

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--use_pose', '-u', action='store_true')
    parser.add_argument('--close_gripers', '-c', action='store_true')
    args = parser.parse_args()

    print('Starting robot')
    fa = FrankaArm()

    if args.use_pose:
        print('Reset with pose')
        fa.reset_pose()
    else:
        print('Reset with joints')
        fa.reset_joints()

    if args.close_gripers:
        print('Closing Grippers')
        fa.close_gripper()
    else:
        print('Opening Grippers')
        fa.open_gripper()
def wait_for_enter():
    if sys.version_info[0] < 3:
        raw_input('Press Enter to continue:')
    else:
        input('Press Enter to continue:')


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--time', '-t', type=float, default=10)
    parser.add_argument('--open_gripper', '-o', action='store_true')
    args = parser.parse_args()

    print('Starting robot')
    fa = FrankaArm()
    if args.open_gripper:
        fa.open_gripper()

    print(
        'Be very careful!! Make sure the robot can safely move to HOME JOINTS Position.'
    )
    wait_for_enter()

    fa.reset_joints()
    print('Using default joint impedances to move back and forth.')
    wait_for_enter()
    fa.goto_joints(FC.READY_JOINTS,
                   joint_impedances=FC.DEFAULT_JOINT_IMPEDANCES)
    fa.goto_joints(FC.HOME_JOINTS)
    print('Now using different joint impedances to move back and forth.')
Beispiel #28
0
        translation=np.array([0.52567046, 0.28332678, 0.37527456]),
        from_frame='franka_tool', to_frame='world')
    fa.goto_pose_with_cartesian_control(desired_tool_pose,
                                        duration=duration,
                                        cartesian_impedances=gains)

    if open_gripper:
        fa.open_gripper()


if __name__ == '__main__':
    # Examples and for collecting robot poses
    # Everything is hard coded :/
    
    print('Starting robot')
    fa = FrankaArm()
    go2start(fa)
    dw = DoorWorld()
    print(fa.get_pose())
    print(fa.get_joints())

    input("Press enter to continue")
    go2door(fa, close_gripper=True, use_planner = True, world=dw)
    fa.close_gripper()

    res = turn_knob(fa, use_planner = True, world = dw)
    if res == "expected_model_failure" or res == "model_deviation":
        gains1 = [1000,1000,1000,1,1,1]
        dmp_info2 = "/home/stevenl3/misc_backups/robot_data_door_turn2_position_weights.pkl"
        fa.execute_position_dmp(dmp_info2, duration=10,
            skill_desc='position_dmp', cartesian_impedance=gains1)
Beispiel #29
0
import numpy as np
import math
import rospy
import argparse
import pickle
from autolab_core import RigidTransform, Point
from frankapy import FrankaArm

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--pose_dmp_weights_file_path', '-f', type=str)
    args = parser.parse_args()

    print('Starting robot')
    fa = FrankaArm()

    pose_dmp_file = open(args.pose_dmp_weights_file_path, "rb")
    pose_dmp_info = pickle.load(pose_dmp_file)

    fa.execute_pose_dmp(pose_dmp_info, duration=4.2)
Beispiel #30
0
import argparse
from frankapy import FrankaArm

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--time', '-t', type=float, default=100)
    parser.add_argument('--open_gripper', '-o', action='store_true')
    args = parser.parse_args()

    print('Starting robot')
    fa = FrankaArm()
    if args.open_gripper:
        fa.open_gripper()
    print('Applying 0 force torque control for {}s'.format(args.time))
    fa.apply_effector_forces_torques(args.time, 0, 0, 0)