Source code for concepts.dm.crowhat.impl.franka.fri_crowhat_interface

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : fri_crowhat_interface.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 03/30/2024
#
# This file is part of Project Concepts.
# Distributed under terms of the MIT license.

from typing import Tuple

import numpy as np

from concepts.hw_interface.franka.fri_client import FrankaRemoteClient

from concepts.dm.crow.interfaces.controller_interface import CrowPhysicalControllerInterface
from concepts.dm.crowhat.world.manipulator_interface import RobotArmJointTrajectory, SingleArmControllerInterface

__all__ = ['PandaControllerInterface']


[docs] class PandaControllerInterface(SingleArmControllerInterface):
[docs] def __init__(self, panda_robot: FrankaRemoteClient): super().__init__() self._panda_robot = panda_robot
@property def panda_robot(self) -> FrankaRemoteClient: return self._panda_robot
[docs] def get_qpos(self) -> np.ndarray: return self.panda_robot.get_qpos()
[docs] def get_qvel(self) -> np.ndarray: return self.panda_robot.get_qvel()
[docs] def get_ee_pose(self) -> Tuple[np.ndarray, np.ndarray]: return self.panda_robot.get_ee_pose()
[docs] def move_home(self) -> bool: return self.panda_robot.move_home()
[docs] def move_qpos(self, qpos: np.ndarray, **kwargs) -> None: self.get_update_default_parameters('move_qpos', kwargs) self.panda_robot.move_qpos(qpos, **kwargs)
[docs] def move_qpos_trajectory(self, trajectory: RobotArmJointTrajectory, **kwargs) -> None: self.get_update_default_parameters('move_qpos_trajectory', kwargs) self.panda_robot.move_qpos_trajectory(trajectory, **kwargs)
[docs] def open_gripper(self, **kwargs) -> None: self.get_update_default_parameters('open_gripper', kwargs) self.panda_robot.open_gripper(**kwargs)
[docs] def close_gripper(self, **kwargs) -> None: self.get_update_default_parameters('close_gripper', kwargs) self.panda_robot.close_gripper(**kwargs)
[docs] def grasp(self, width: float = 0.05, force: float = 40, **kwargs) -> None: self.get_update_default_parameters('grasp', kwargs) self.panda_robot.grasp(width, force, **kwargs)
[docs] def move_grasp(self, approaching_trajectory: RobotArmJointTrajectory, width: float = 0.05, force: float = 40, **kwargs) -> None: self.get_update_default_parameters('grasp', kwargs) self.move_qpos_trajectory(approaching_trajectory) self.grasp(width, force)
[docs] def move_place(self, placing_trajectory: RobotArmJointTrajectory, **kwargs) -> None: self.get_update_default_parameters('place', kwargs) self.move_qpos_trajectory(placing_trajectory) self.open_gripper()
[docs] def attach_physical_interface(self, physical_interface: CrowPhysicalControllerInterface): physical_interface.register_controller('move_home', self.move_home) physical_interface.register_controller('move_qpos', self.move_qpos) physical_interface.register_controller('move_qpos_trajectory', self.move_qpos_trajectory) physical_interface.register_controller('open_gripper', self.open_gripper) physical_interface.register_controller('close_gripper', self.close_gripper) physical_interface.register_controller('grasp', self.grasp) physical_interface.register_controller('ctl_grasp', self.move_grasp) physical_interface.register_controller('ctl_place', self.move_place)