예제 #1
0
    def prepare_kin_dyn(self):
        robot_description = rospy.get_param("/robot_description")
        flag, self.tree = kdl_parser.treeFromParam(robot_description)

        chain = self.tree.getChain(self.base_link, self.rl_link)
        self.fk_bl = kdl.ChainFkSolverPos_recursive(chain)
        self.jac_bl = kdl.ChainJntToJacSolver(chain)

        chain = self.tree.getChain(self.base_link, self.rr_link)
        self.fk_br = kdl.ChainFkSolverPos_recursive(chain)
        self.jac_br = kdl.ChainJntToJacSolver(chain)

        chain = self.tree.getChain(self.base_link, self.fl_link)
        self.fk_fl = kdl.ChainFkSolverPos_recursive(chain)
        self.jac_fl = kdl.ChainJntToJacSolver(chain)

        chain = self.tree.getChain(self.base_link, self.fr_link)
        self.fk_fr = kdl.ChainFkSolverPos_recursive(chain)
        self.jac_fr = kdl.ChainJntToJacSolver(chain)

        # convention front_left, front_front, back_right, back_left
        self.jac_list = [self.jac_fl, self.jac_fr, self.jac_bl, self.jac_br]
        self.fk_list = [self.fk_fl, self.fk_fr, self.fk_bl, self.fk_br]

        joints = kdl.JntArray(3)
        joints[0] = 0
        joints[1] = 0
        joints[2] = 0
        frame = kdl.Frame()
        jk_list = self.fk_list
예제 #2
0
    def _init_real_consts(self):
        """
        Initialize constants.
        """
        self._home_position = self.cfgs.ARM.HOME_POSITION

        robot_description = self.cfgs.ROBOT_DESCRIPTION
        urdf_string = rospy.get_param(robot_description)
        self._num_ik_solver = trac_ik.IK(self.cfgs.ARM.ROBOT_BASE_FRAME,
                                         self.cfgs.ARM.ROBOT_EE_FRAME,
                                         urdf_string=urdf_string)
        _, urdf_tree = treeFromParam(robot_description)
        base_frame = self.cfgs.ARM.ROBOT_BASE_FRAME
        ee_frame = self.cfgs.ARM.ROBOT_EE_FRAME
        self._urdf_chain = urdf_tree.getChain(base_frame,
                                              ee_frame)
        self.arm_jnt_names = self._get_kdl_joint_names()
        self.arm_link_names = self._get_kdl_link_names()
        self.arm_dof = len(self.arm_jnt_names)

        self._jac_solver = kdl.ChainJntToJacSolver(self._urdf_chain)
        self._fk_solver_pos = kdl.ChainFkSolverPos_recursive(self._urdf_chain)
        self._fk_solver_vel = kdl.ChainFkSolverVel_recursive(self._urdf_chain)

        self.ee_link = self.cfgs.ARM.ROBOT_EE_FRAME
예제 #3
0
파일: core.py 프로젝트: yongwww/pyrobot
    def __init__(self,
                 configs,
                 moveit_planner='ESTkConfigDefault',
                 analytical_ik=None,
                 use_moveit=True):
        """
        Constructor for Arm parent class.

        :param configs: configurations for arm
        :param moveit_planner: moveit planner type
        :param analytical_ik: customized analytical ik class
                              if you have one, None otherwise
        :param use_moveit: use moveit or not, default is True

        :type configs: YACS CfgNode
        :type moveit_planner: string
        :type analytical_ik: None or an Analytical ik class
        :type use_moveit: bool
        """
        self.configs = configs
        self.moveit_planner = moveit_planner
        self.moveit_group = None
        self.scene = None
        self.use_moveit = use_moveit

        self.joint_state_lock = threading.RLock()
        self.tf_listener = tf.TransformListener()
        if self.use_moveit:
            self._init_moveit()
        robot_description = self.configs.ARM.ARM_ROBOT_DSP_PARAM_NAME
        urdf_string = rospy.get_param(robot_description)
        self.num_ik_solver = trac_ik.IK(configs.ARM.ARM_BASE_FRAME,
                                        configs.ARM.EE_FRAME,
                                        urdf_string=urdf_string)
        if analytical_ik is not None:
            self.ana_ik_solver = analytical_ik(configs.ARM.ARM_BASE_FRAME,
                                               configs.ARM.EE_FRAME)

        _, self.urdf_tree = treeFromParam(robot_description)
        self.urdf_chain = self.urdf_tree.getChain(configs.ARM.ARM_BASE_FRAME,
                                                  configs.ARM.EE_FRAME)
        self.arm_joint_names = self._get_kdl_joint_names()
        self.arm_link_names = self._get_kdl_link_names()
        self.arm_dof = len(self.arm_joint_names)

        self.jac_solver = kdl.ChainJntToJacSolver(self.urdf_chain)
        self.fk_solver_pos = kdl.ChainFkSolverPos_recursive(self.urdf_chain)
        self.fk_solver_vel = kdl.ChainFkSolverVel_recursive(self.urdf_chain)

        # Subscribers
        self._joint_angles = dict()
        self._joint_velocities = dict()
        self._joint_efforts = dict()
        rospy.Subscriber(configs.ARM.ROSTOPIC_JOINT_STATES, JointState,
                         self._callback_joint_states)

        # Publishers
        self.joint_pub = None
        self._setup_joint_pub()
예제 #4
0
    def __init__(self):

        self.base_link = 'base_link'
        self.ee_link = 'ee_link'
        flag, self.tree = kdl_parser.treeFromParam('/robot_description')
        self.chain = self.tree.getChain(self.base_link, self.ee_link)
        self.num_joints = self.tree.getNrOfJoints()
        self.vel_ik_solver = kdl.ChainIkSolverVel_pinv(self.chain)
        self.pos_fk_solver = kdl.ChainFkSolverPos_recursive(self.chain)
        self.pos_ik_solver = kdl.ChainIkSolverPos_LMA(self.chain)

        self.cam_model = image_geometry.PinholeCameraModel()

        self.joint_state = kdl.JntArrayVel(self.num_joints)
        self.joint_names = [
            'shoulder_pan_joint', 'shoulder_lift_joint', 'elbow_joint',
            'wrist_1_joint', 'wrist_2_joint', 'wrist_3_joint'
        ]

        rospy.init_node('ur_eef_vel_controller')
        rospy.Subscriber('/joint_states', JointState, self.arm_joint_state_cb)
        rospy.Subscriber('/rdda_interface/joint_states', JointState,
                         self.finger_joint_state_cb)
        self.joint_vel_cmd_pub = rospy.Publisher(
            '/joint_group_vel_controller/command',
            Float64MultiArray,
            queue_size=10)
        self.joint_pos_cmd_pub = rospy.Publisher(
            '/scaled_pos_traj_controller/command',
            JointTrajectory,
            queue_size=10)
        self.speed_scaling_pub = rospy.Publisher('/speed_scaling_factor',
                                                 Float64,
                                                 queue_size=10)

        self.switch_controller_cli = rospy.ServiceProxy(
            '/controller_manager/switch_controller', SwitchController)
        self.joint_pos_cli = actionlib.SimpleActionClient(
            '/scaled_pos_joint_traj_controller/follow_joint_trajectory',
            FollowJointTrajectoryAction)

        cam_info = rospy.wait_for_message('/camera/depth/camera_info',
                                          CameraInfo,
                                          timeout=10)
        self.cam_model.fromCameraInfo(cam_info)

        self.bridge = CvBridge()  # allows conversion from depth image to array
        self.tf_listener = tf.TransformListener()
        self.image_offset = 100
        self.pos_ctrler_running = False
        rospy.sleep(0.5)
예제 #5
0
    def _setup(self):
        # load in ros parameters
        self.baselink = rospy.get_param("sawyer/baselink")
        self.endlink = rospy.get_param("sawyer/endlink")
        flag, self.tree = kdl_parser.treeFromParam("/robot_description")

        self.joint_names = rospy.get_param("named_poses/right/joint_names")
        print self.joint_names

        # build kinematic chain and fk and jacobian solvers
        chain_ee = self.tree.getChain(self.baselink, self.endlink)
        self.fk_ee = kdl.ChainFkSolverPos_recursive(chain_ee)
        self.jac_ee = kdl.ChainJntToJacSolver(chain_ee)

        # building robot joint state
        self.num_joints = chain_ee.getNrOfJoints()
        self.joints = kdl.JntArray(self.num_joints)
예제 #6
0
def urdf_load(urdfString,
              startJoint,
              endJoint,
              full_joint_list,
              fixed_ee_joint=None,
              Debug=False):
    '''
    Takes in a urdf file and parses that into different object representations of the robot arm

    :param urdfString: (string) file path to the urdf file.  example: < 'mico.urdf' >
    :param startJoint: (string) name of the starting joint in the chain
    :param endJoint: (string) name of the final joint in the chain
        NOTE: this is the final ROTATING joint in the chain, for a fixed joint on the end effector, add this as the fixed joint!
    :param fixed_ee_joint (string) name of the fixed joint after end joint in the chain.  This is read in just to get a final
        displacement on the chain, i.e. usually just to add in an extra displacement offset for the end effector
    :return: returns the robot parsed object from urdf_parser, Mike's "arm" version of the robot arm, as well as the kdl tree
    '''

    if urdfString == '':
        urdf_robot = URDF.from_parameter_server()
        (ok, kdl_tree) = pyurdf.treeFromParam('/robot_description')
    else:
        urdf_robot = URDF.from_xml_file(urdfString)
        (ok, kdl_tree) = pyurdf.treeFromFile(urdfString)

    if not (startJoint == '' or endJoint == ''):
        chain = kdl_tree.getChain(startJoint, endJoint)
    if full_joint_list == ():
        arm, arm_c = convertToArm(urdf_robot,
                                  startJoint,
                                  endJoint,
                                  fixed_ee_joint,
                                  Debug=Debug)
    else:
        arm, arm_c = convertToArmJointList(urdf_robot,
                                           full_joint_list,
                                           fixed_ee_joint,
                                           Debug=Debug)

    if Debug:
        o = open('out', 'w')
        o.write(str(urdf_robot))

    return urdf_robot, arm, arm_c, kdl_tree
예제 #7
0
    def _init_kinematics(self):
        # Ros-Params
        base_link = rospy.get_param("pyrobot/base_link")
        gripper_link = rospy.get_param("pyrobot/gripper_link")
        robot_description = rospy.get_param("pyrobot/robot_description")

        urdf_string = rospy.get_param(robot_description)
        self.num_ik_solver = trac_ik.IK(base_link,
                                        gripper_link,
                                        urdf_string=urdf_string)

        _, self.urdf_tree = treeFromParam(robot_description)
        self.urdf_chain = self.urdf_tree.getChain(base_link, gripper_link)
        self.arm_joint_names = self._get_kdl_joint_names()
        self.arm_link_names = self._get_kdl_link_names()
        self.arm_dof = len(self.arm_joint_names)

        self.jac_solver = kdl.ChainJntToJacSolver(self.urdf_chain)
        self.fk_solver_pos = kdl.ChainFkSolverPos_recursive(self.urdf_chain)
        self.fk_solver_vel = kdl.ChainFkSolverVel_recursive(self.urdf_chain)
 def _get_chain(self):
     success, tree = treeFromParam('/robot_description')
     if not success:
         return
     chain = tree.getChain(self.root, self.tip)
     return chain
예제 #9
0
        rospy.logerr("Missing base_link")
        exit()

    if not rospy.has_param("~eef"):
        rospy.logerr("Missing eef")
        exit()

    if not rospy.has_param("~max_trials"):
        rospy.logerr("Missing max_trials")
        exit()

    base_link = rospy.get_param("~base_link")
    eef = rospy.get_param("~eef")
    max_trials = rospy.get_param("~max_trials")

    tree = urdf.treeFromParam("/robot_description")

    if not tree[0]:
        rospy.logerr("Missing /robot_description")
        exit()

    chain = tree[1].getChain(base_link, eef)
    jac_solver = kdl.ChainJntToJacSolver(chain)
    q = kdl.JntArray(chain.getNrOfJoints())
    J = kdl.Jacobian(chain.getNrOfJoints())

    rospy.loginfo("Initialized test_kdl_py")
    init_time = rospy.Time.now()
    for i in range(max_trials):
        for j in range(chain.getNrOfJoints()):
            q[j] = random.uniform(-math.pi, math.pi)