예제 #1
0
def loadRobot(M0, name):
    '''
    This function load a UR5 robot n a new model, move the basis to placement <M0>
    and add the corresponding visuals in gepetto viewer with name prefix given by string <name>.
    It returns the robot wrapper (model,data).
    '''
    robot = RobotWrapper(urdf, [PKG])
    robot.model.jointPlacements[1] = M0 * robot.model.jointPlacements[1]
    robot.visual_model.geometryObjects[0].placement = M0 * robot.visual_model.geometryObjects[0].placement
    robot.visual_data.oMg[0] = M0 * robot.visual_data.oMg[0]
    robot.initDisplay(loadModel=True, viewerRootNodeName="world/" + name)
    return robot
예제 #2
0
    def loadHRP(self, urdf, pkgs, loadModel):
        '''Internal: load HRP-2 model from URDF.'''
        robot = RobotWrapper(urdf, pkgs, root_joint=se3.JointModelFreeFlyer())
        robot.initDisplay(loadModel=loadModel)
        if 'viewer' not in robot.__dict__: robot.initDisplay()
        for n in robot.visual_model.geometryObjects:
            robot.viewer.gui.setVisibility(robot.viewerNodeNames(n), 'OFF')

        robot.q0 = np.matrix([
            0.,
            0.,
            0.648702,
            0.,
            0.,
            0.,
            1.,  # Free flyer
            0.,
            0.,
            0.,
            0.,  # Chest and head
            0.261799,
            0.17453,
            0.,
            -0.523599,
            0.,
            0.,
            0.1,  # Left arm
            0.261799,
            -0.17453,
            0.,
            -0.523599,
            0.,
            0.,
            0.1,  # Right arm
            0.,
            0.,
            -0.453786,
            0.872665,
            -0.418879,
            0.,  # Left leg
            0.,
            0.,
            -0.453786,
            0.872665,
            -0.418879,
            0.,  # Righ leg
        ]).T

        self.hrpfull = robot
예제 #3
0
class TestFrameBindings(unittest.TestCase):

    v3zero = zero(3)
    v6zero = zero(6)
    v3ones = ones(3)
    m3zero = zero([3, 3])
    m6zero = zero([6, 6])
    m3ones = eye(3)
    m4ones = eye(4)

    current_file = os.path.dirname(os.path.abspath(__file__))
    pinocchio_models_dir = os.path.abspath(
        os.path.join(current_file, '../models/romeo'))
    romeo_model_path = os.path.abspath(
        os.path.join(pinocchio_mdoels_dir, '/urdf/romeo.urdf'))
    hint_list = [pinocchio_models_dir, "wrong/hint"]  # hint list
    robot = RobotWrapper(romeo_model_path, hint_list,
                         se3.JointModelFreeFlyer())

    def test_type_get_set(self):
        f = self.robot.model.frames[5]
        self.assertTrue(f.type == se3.FrameType.JOINT)
        f.type = se3.FrameType.BODY
        self.assertTrue(f.type == se3.FrameType.BODY)

    def test_name_get_set(self):
        f = self.robot.model.frames[5]
        self.assertTrue(f.name == 'LHipYaw')
        f.name = 'new_hip_frame'
        self.assertTrue(f.name == 'new_hip_frame')

    def test_parent_get_set(self):
        f = self.robot.model.frames[5]
        self.assertTrue(f.parent == 2)
        f.parent = 5
        self.assertTrue(f.parent == 5)

    def test_placement_get_set(self):
        m = se3.SE3(self.m3ones, np.array([0, 0, 0], np.double))
        new_m = se3.SE3(rand([3, 3]), rand(3))
        f = self.robot.model.frames[2]
        self.assertTrue(np.allclose(f.placement.homogeneous, m.homogeneous))
        f.placement = new_m
        self.assertTrue(np.allclose(f.placement.homogeneous,
                                    new_m.homogeneous))
class TestGeometryObjectBindings(unittest.TestCase):

    v3zero = zero(3)
    v6zero = zero(6)
    v3ones = ones(3)
    m3zero = zero([3, 3])
    m6zero = zero([6, 6])
    m3ones = eye(3)
    m4ones = eye(4)

    current_file = os.path.dirname(os.path.abspath(__file__))
    pinocchio_models_dir = os.path.abspath(
        os.path.join(current_file, '../models/romeo'))
    romeo_model_path = os.path.abspath(pinocchio_models_dir,
                                       '/urdf/romeo.urdf')
    hint_list = [pinocchio_models_dir, "wrong/hint"]  # hint list
    robot = RobotWrapper(romeo_model_path, hint_list,
                         se3.JointModelFreeFlyer())

    def test_name_get_set(self):
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(col.name == 'LHipPitchLink_0')
        col.name = 'new_collision_name'
        self.assertTrue(col.name == 'new_collision_name')

    def test_parent_get_set(self):
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(col.parentJoint == 4)
        col.parentJoint = 5
        self.assertTrue(col.parentJoint == 5)

    def test_placement_get_set(self):
        m = se3.SE3(self.m3ones, self.v3zero)
        new_m = se3.SE3(rand([3, 3]), rand(3))
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(np.allclose(col.placement.homogeneous, m.homogeneous))
        col.placement = new_m
        self.assertTrue(
            np.allclose(col.placement.homogeneous, new_m.homogeneous))

    def test_meshpath_get(self):
        expected_mesh_path = os.path.join(
            self.pinocchio_models_dir, 'meshes/romeo/collision/LHipPitch.dae')
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(col.meshPath == expected_mesh_path)
예제 #5
0
class TestFrameBindings(unittest.TestCase):

    v3zero = zero(3)
    v6zero = zero(6)
    v3ones = ones(3)
    m3zero = zero([3, 3])
    m6zero = zero([6, 6])
    m3ones = eye(3)
    m4ones = eye(4)

    PKG = '/opt/openrobots/share'
    URDF = join(PKG, 'romeo_description/urdf/romeo.urdf')
    robot = RobotWrapper(URDF, [PKG])

    def test_type_get_set(self):
        f = self.robot.model.frames[5]
        self.assertTrue(f.type == se3.FrameType.JOINT)
        f.type = se3.FrameType.BODY
        self.assertTrue(f.type == se3.FrameType.BODY)

    def test_name_get_set(self):
        f = self.robot.model.frames[5]
        self.assertTrue(f.name == 'LHipYaw')
        f.name = 'new_hip_frame'
        self.assertTrue(f.name == 'new_hip_frame')

    def test_parent_get_set(self):
        f = self.robot.model.frames[5]
        self.assertTrue(f.parent == 2)
        f.parent = 5
        self.assertTrue(f.parent == 5)

    def test_placement_get_set(self):
        m = se3.SE3(self.m3ones, np.array([0, 0, 0], np.double))
        new_m = se3.SE3(rand([3, 3]), rand(3))
        f = self.robot.model.frames[2]
        self.assertTrue(np.allclose(f.placement.homogeneous, m.homogeneous))
        f.placement = new_m
        self.assertTrue(np.allclose(f.placement.homogeneous,
                                    new_m.homogeneous))
예제 #6
0
class TestFrameBindings(unittest.TestCase):

    v3zero = zero(3)
    v6zero = zero(6)
    v3ones = ones(3)
    m3zero = zero([3, 3])
    m6zero = zero([6, 6])
    m3ones = eye(3)
    m4ones = eye(4)

    current_file = os.path.dirname(os.path.abspath(__file__))
    pinocchio_models_dir = os.path.abspath(
        os.path.join(current_file, '../models'))
    romeo_model_path = os.path.abspath(
        os.path.join(current_file, '../models/romeo.urdf'))
    hint_list = [pinocchio_models_dir, "wrong/hint"]  # hint list
    robot = RobotWrapper(romeo_model_path, hint_list,
                         se3.JointModelFreeFlyer())

    def test_name_get_set(self):
        f = self.robot.model.operational_frames[1]
        self.assertTrue(f.name == 'r_sole_joint')
        f.name = 'new_sole_joint'
        self.assertTrue(f.name == 'new_sole_joint')

    def test_parent_get_set(self):
        f = self.robot.model.operational_frames[1]
        self.assertTrue(f.parent == 13)
        f.parent = 5
        self.assertTrue(f.parent == 5)

    def test_placement_get_set(self):
        m = se3.SE3(self.m3ones, np.array([0, 0, -0.0684], np.double))
        new_m = se3.SE3(rand([3, 3]), rand(3))
        f = self.robot.model.operational_frames[1]
        self.assertTrue(np.allclose(f.placement.homogeneous, m.homogeneous))
        f.placement = new_m
        self.assertTrue(np.allclose(f.placement.homogeneous,
                                    new_m.homogeneous))
class TestGeometryObjectBindings(unittest.TestCase):

    v3zero = zero(3)
    v6zero = zero(6)
    v3ones = ones(3)
    m3zero = zero([3,3])
    m6zero = zero([6,6])
    m3ones = eye(3)
    m4ones = eye(4)


    PKG = '/opt/openrobots/share'
    URDF = join(PKG, 'romeo_description/urdf/romeo.urdf')
    robot = RobotWrapper(URDF, [PKG])

    def test_name_get_set(self):
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(col.name == 'LHipPitchLink_0')
        col.name = 'new_collision_name'
        self.assertTrue(col.name == 'new_collision_name')

    def test_parent_get_set(self):
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(col.parentJoint == 4)
        col.parentJoint = 5
        self.assertTrue(col.parentJoint == 5)

    def test_placement_get_set(self):
        m = se3.SE3(self.m3ones, self.v3zero)
        new_m = se3.SE3(rand([3,3]), rand(3))
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(np.allclose(col.placement.homogeneous,m.homogeneous))
        col.placement = new_m
        self.assertTrue(np.allclose(col.placement.homogeneous , new_m.homogeneous))

    def test_meshpath_get(self):
        expected_mesh_path = os.path.join(self.pinocchio_models_dir,'meshes/romeo/collision/LHipPitch.dae')
        col = self.robot.collision_model.geometryObjects[1]
        self.assertTrue(col.meshPath == expected_mesh_path)
예제 #8
0
import pinocchio as se3
from pinocchio.robot_wrapper import RobotWrapper
from pinocchio.utils import *
from time import sleep
from numpy.linalg import inv
import math

pkg = 'models/'
urdf = pkg + 'ur_description/urdf/ur5_gripper.urdf'
                     
robot = RobotWrapper( urdf, [ pkg, ] )
robot.initDisplay( loadModel = True )
if 'viewer' not in robot.__dict__: robot.initDisplay()
gv = robot.viewer.gui

NQ = robot.model.nq
NV = robot.model.nv

### 
### PICK #############################################################
###

# Add a red box
boxID = "world/box"
rgbt =  [ 1.0, 0.2, 0.2, 1.0 ] # red-green-blue-transparency
try:
    gv.addBox( boxID, 0.05, 0.1, 0.1, rgbt ) # id, dim1, dim2, dim3, color
except:
    print "Box already exists in viewer ... skip"

# Place the box at the position ( 0.5, 0.1, 0.2 )
예제 #9
0
    def __init__(self,
                 jiminy_model,
                 use_theoretical_model=False,
                 urdf_rgba=None,
                 robot_index=0,
                 backend=None,
                 window_name='python-pinocchio',
                 scene_name='world'):
        # Backup some user arguments
        self.urdf_path = jiminy_model.urdf_path
        self.scene_name = scene_name
        self.window_name = window_name
        self.use_theoretical_model = use_theoretical_model

        # Extract the right Pinocchio model
        if self.use_theoretical_model:
            self.pinocchio_model = jiminy_model.pinocchio_model_th
            self.pinocchio_data = jiminy_model.pinocchio_data_th
        else:
            self.pinocchio_model = jiminy_model.pinocchio_model
            self.pinocchio_data = jiminy_model.pinocchio_data

        # Select the desired backend
        if backend is None:
            if Viewer.backend is None:
                backend = 'meshcat' if Viewer._is_notebook() else 'gepetto-gui'
            else:
                backend = Viewer.backend

        # Update the backend currently running, if any
        if (Viewer.backend != backend) and \
           (Viewer._backend_obj is not None or \
            Viewer._backend_proc is not None):
            Viewer.close()
            print("Different backend already running. Closing it...")
        Viewer.backend = backend

        # Check if the backend is still available, if any
        if Viewer._backend_obj is not None and Viewer._backend_proc is not None:
            if Viewer._backend_proc.poll() is not None:
                Viewer._backend_obj = None
                Viewer._backend_proc = None

        # Access the current backend or create one if none is available
        try:
            if (Viewer.backend == 'gepetto-gui'):
                if Viewer._backend_obj is None:
                    Viewer._backend_obj, Viewer._backend_proc = \
                        Viewer._get_gepetto_client(True)
                if Viewer._backend_obj is not None:
                    self._client = Viewer._backend_obj.gui
                else:
                    raise RuntimeError("Impossible to open Gepetto-viewer.")
            else:
                from pinocchio.visualize import MeshcatVisualizer
                from pinocchio.shortcuts import createDatas

                if Viewer._backend_obj is None:
                    Viewer._create_meshcat_backend()
                    if Viewer._is_notebook():
                        Viewer.display_jupyter_cell()
                    else:
                        Viewer._backend_obj.open()

                self._client = MeshcatVisualizer(self.pinocchio_model, None,
                                                 None)
                self._client.viewer = Viewer._backend_obj
        except:
            raise RuntimeError("Impossible to load backend.")

        # Create a RobotWrapper
        robot_name = "robot_" + str(robot_index)
        if (Viewer.backend == 'gepetto-gui'):
            Viewer._delete_gepetto_nodes_viewer(scene_name + '/' + robot_name)
            if (urdf_rgba is not None):
                alpha = urdf_rgba[3]
                self.urdf_path = Viewer._get_colorized_urdf(
                    self.urdf_path, urdf_rgba[:3])
            else:
                alpha = 1.0
        collision_model = pin.buildGeomFromUrdf(
            self.pinocchio_model, self.urdf_path,
            os.environ.get('JIMINY_MESH_PATH', []), pin.GeometryType.COLLISION)
        visual_model = pin.buildGeomFromUrdf(
            self.pinocchio_model, self.urdf_path,
            os.environ.get('JIMINY_MESH_PATH', []), pin.GeometryType.VISUAL)
        self._rb = RobotWrapper(model=self.pinocchio_model,
                                collision_model=collision_model,
                                visual_model=visual_model)
        if not self.use_theoretical_model:
            self._rb.data = jiminy_model.pinocchio_data
        self.pinocchio_data = self._rb.data

        # Load robot in the backend viewer
        if (Viewer.backend == 'gepetto-gui'):
            if not scene_name in self._client.getSceneList():
                self._client.createSceneWithFloor(scene_name)
            if not window_name in self._client.getWindowList():
                self._window_id = self._client.createWindow(window_name)
                self._client.addSceneToWindow(scene_name, self._window_id)
                self._client.createGroup(scene_name + '/' + scene_name)
                self._client.addLandmark(scene_name + '/' + scene_name, 0.1)
            else:
                self._window_id = int(
                    np.where([
                        name == window_name
                        for name in self._client.getWindowList()
                    ])[0][0])
            self._rb.initViewer(windowName=window_name,
                                sceneName=scene_name,
                                loadModel=False)
            self._rb.loadViewerModel(robot_name)
            self._client.setFloatProperty(scene_name + '/' + robot_name,
                                          'Transparency', 1 - alpha)
        else:
            self._client.collision_model = collision_model
            self._client.visual_model = visual_model
            self._client.data, self._client.collision_data, self._client.visual_data = \
                createDatas(self.pinocchio_model, collision_model, visual_model)
            self._client.loadViewerModel(rootNodeName=robot_name,
                                         color=urdf_rgba)
            self._rb.viz = self._client
예제 #10
0
        self.Ycrb = Ycrb
        self.Yvx = Yvx

        return R


# -----------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------
# --- UNIT TEST ---
if __name__ == '__main__':
    np.random.seed(0)

    robot = RobotWrapper(
        '/home/nmansard/src/pinocchio/pinocchio/models/romeo/urdf/romeo.urdf',
        [
            '/home/nmansard/src/pinocchio/pinocchio/models/romeo/',
        ], se3.JointModelFreeFlyer())
    q = rand(robot.model.nq)
    q[3:7] /= norm(q[3:7])
    vq = rand(robot.model.nv)

    # --- HESSIAN ---
    # --- HESSIAN ---
    # --- HESSIAN ---
    H = hessian(robot, q)

    # Compute the Hessian matrix H using RNEA, so that acor = v*H*v
    vq1 = vq * 0
    Htrue = np.zeros([6, robot.model.nv, robot.model.nv])
    for joint_i in range(1, robot.model.njoints):
예제 #11
0
        'mass': 1.0,
    },
]
operational_frames = [
    {
        'name': "center",
        'parent': "base",
        'placement': {
            'z': 0.0
        },
    },
]
ball = {'joints': joints, 'operational_frames': operational_frames}
print("test set up")

robot = RobotWrapper(ball)
#robot = RobotWrapper(ball, name='ball', display=None)

print(robot.data.com[0])

robot.data = se3.Data(robot.model)

print(robot.data.com[0])

if not robot.model.check(robot.data):
    print("Python data not consistent with model")

print("Create simple simulator")
sim = consim.build_simple_simulator(1e-3, 8, robot.model, robot.data, 0., 0.,
                                    0., 0., 0., 0.)
예제 #12
0
파일: viewer.py 프로젝트: zeta1999/jiminy
    def __init__(self,
                 robot,
                 use_theoretical_model=False,
                 mesh_root_path=None,
                 urdf_rgba=None,
                 lock=None,
                 backend=None,
                 robot_name="robot",
                 window_name='jiminy',
                 scene_name='world'):
        """
        @brief Constructor.

        @param robot          The jiminy.Robot to display.
        @param use_theoretical_model   Whether to use the theoretical (rigid) model or the flexible model for this robot.
        @param mesh_root_path Optional, path to the folder containing the URDF meshes.
        @param urdf_rgba      Color to use to display this robot (rgba).
-       @param lock           Custom threading.Lock
-                             Optional: Only required for parallel rendering using multiprocessing.
                              It is required since some backends does not support multiple
                              simultaneous connections (e.g. corbasever).
        @param backend        The name of the desired backend to use for rendering.
                              Optional, either 'gepetto-gui' or 'meshcat' ('panda3d' available soon).
        @param robot_name     Unique robot name, to identify each robot in the viewer.
        @param scene_name     Scene name, used only when gepetto-gui is used as backend.
        @param window_name    Window name, used only when gepetto-gui is used as backend.
                              Note that it is not allowed to be equal to the window name.
        """
        # Backup some user arguments
        self.urdf_path = robot.urdf_path
        self.robot_name = robot_name
        self.scene_name = scene_name
        self.window_name = window_name
        self.use_theoretical_model = use_theoretical_model
        self._lock = lock if lock is not None else Viewer._lock

        if self.scene_name == self.window_name:
            raise ValueError(
                "Please, choose a different name for the scene and the window."
            )

        # Extract the right Pinocchio model
        if self.use_theoretical_model:
            self.pinocchio_model = robot.pinocchio_model_th
            self.pinocchio_data = robot.pinocchio_data_th
        else:
            self.pinocchio_model = robot.pinocchio_model
            self.pinocchio_data = robot.pinocchio_data

        # Select the desired backend
        if backend is None:
            if Viewer.backend is None:
                if Viewer._is_notebook() or (not 'gepetto-gui'
                                             in backends_available):
                    backend = 'meshcat'
                else:
                    backend = 'gepetto-gui'
            else:
                backend = Viewer.backend
        else:
            if not backend in backends_available:
                raise ValueError("%s backend not available." % backend)

        # Update the backend currently running, if any
        if (Viewer.backend != backend) and \
           (Viewer._backend_obj is not None or \
            Viewer._backend_proc is not None):
            Viewer.close()
            print("Different backend already running. Closing it...")
        Viewer.backend = backend

        # Check if the backend is still available, if any
        if Viewer._backend_obj is not None and Viewer._backend_proc is not None:
            is_backend_running = True
            if Viewer._backend_proc.poll() is not None:
                is_backend_running = False
            if (Viewer.backend == 'gepetto-gui'):
                from omniORB.CORBA import TRANSIENT as gepetto_server_error
                try:
                    Viewer._backend_obj.gui.refresh()
                except gepetto_server_error:
                    is_backend_running = False
            if not is_backend_running:
                Viewer._backend_obj = None
                Viewer._backend_proc = None
                Viewer._backend_exception = None
        else:
            is_backend_running = False

        # Access the current backend or create one if none is available
        try:
            if (Viewer.backend == 'gepetto-gui'):
                import omniORB

                Viewer._backend_exception = omniORB.CORBA.COMM_FAILURE
                if Viewer._backend_obj is None:
                    Viewer._backend_obj, Viewer._backend_proc = \
                        Viewer._get_gepetto_client(True)
                    is_backend_running = Viewer._backend_proc is None
                if Viewer._backend_obj is not None:
                    self._client = Viewer._backend_obj.gui
                else:
                    raise RuntimeError("Impossible to open Gepetto-viewer.")

                if not scene_name in self._client.getSceneList():
                    self._client.createSceneWithFloor(scene_name)
                if not window_name in self._client.getWindowList():
                    self._window_id = self._client.createWindow(window_name)
                    self._client.addSceneToWindow(scene_name, self._window_id)
                    self._client.createGroup(scene_name + '/' + scene_name)
                    self._client.addLandmark(scene_name + '/' + scene_name,
                                             0.1)
                else:
                    self._window_id = int(
                        np.where([
                            name == window_name
                            for name in self._client.getWindowList()
                        ])[0][0])

                # Set the default camera pose if the viewer is not running before
                if not is_backend_running:
                    self.setCameraTransform(
                        translation=DEFAULT_CAMERA_XYZRPY_OFFSET_GEPETTO[:3],
                        rotation=DEFAULT_CAMERA_XYZRPY_OFFSET_GEPETTO[3:])
            else:
                from pinocchio.visualize import MeshcatVisualizer
                from pinocchio.shortcuts import createDatas

                if Viewer._backend_obj is None:
                    Viewer._create_meshcat_backend()
                    if Viewer._is_notebook():
                        Viewer.display_jupyter_cell()
                    else:
                        Viewer._backend_obj.open()

                self._client = MeshcatVisualizer(self.pinocchio_model, None,
                                                 None)
                self._client.viewer = Viewer._backend_obj
        except:
            raise RuntimeError("Impossible to load backend.")

        # Create a RobotWrapper
        root_path = mesh_root_path if mesh_root_path is not None else os.environ.get(
            'JIMINY_MESH_PATH', [])
        if (Viewer.backend == 'gepetto-gui'):
            Viewer._delete_gepetto_nodes_viewer(scene_name + '/' +
                                                self.robot_name)
            if (urdf_rgba is not None):
                alpha = urdf_rgba[3]
                self.urdf_path = Viewer._get_colorized_urdf(
                    self.urdf_path, urdf_rgba[:3], root_path)
            else:
                alpha = 1.0
        collision_model = pin.buildGeomFromUrdf(self.pinocchio_model,
                                                self.urdf_path, root_path,
                                                pin.GeometryType.COLLISION)
        visual_model = pin.buildGeomFromUrdf(self.pinocchio_model,
                                             self.urdf_path, root_path,
                                             pin.GeometryType.VISUAL)
        self._rb = RobotWrapper(model=self.pinocchio_model,
                                collision_model=collision_model,
                                visual_model=visual_model)
        if not self.use_theoretical_model:
            self._rb.data = robot.pinocchio_data
        self.pinocchio_data = self._rb.data

        # Load robot in the backend viewer
        if (Viewer.backend == 'gepetto-gui'):
            self._rb.initViewer(windowName=window_name,
                                sceneName=scene_name,
                                loadModel=False)
            self._rb.loadViewerModel(self.robot_name)
            self._client.setFloatProperty(scene_name + '/' + self.robot_name,
                                          'Transparency', 1 - alpha)
        else:
            self._client.collision_model = collision_model
            self._client.visual_model = visual_model
            self._client.data, self._client.collision_data, self._client.visual_data = \
                createDatas(self.pinocchio_model, collision_model, visual_model)
            self._client.loadViewerModel(rootNodeName=self.robot_name,
                                         color=urdf_rgba)
            self._rb.viz = self._client
예제 #13
0
import locomote2
from hyq_config import *

from pinocchio.robot_wrapper import RobotWrapper
import pinocchio as se3

from numpy.linalg import norm, pinv, inv

robot = RobotWrapper(urdf_model_path,
                     mesh_dir,
                     root_joint=se3.JointModelFreeFlyer())
model = robot.model
data = robot.data
com_init = robot.com(robot.q0)
com_final = com_init + np.matrix([0.01, 0.0, 0]).transpose()
MASS = robot.data.mass[0]

robot.initDisplay(loadModel=True)
robot.display(q0)

# for generating Time Optimization Problem
nstep = 5
tp = locomote2.TimeoptProblem(nstep)
tp.init_com = com_init
tp.final_com = com_final
tp.mass = MASS

print(com_init)
# Adding each contact sequence
phase = locomote2.TimeoptPhase()
phase.ee_id = locomote2.EndeffectorID.LF
예제 #14
0
    0.872665,
    -0.418879,
    0.,  # Left Leg
    0.,
    0.,
    -0.453786,
    0.872665,
    -0.418879,
    0.  # Right Leg
)

#----------------PINOCCHIO----------------------------#
import pinocchio as se3
from pinocchio.robot_wrapper import RobotWrapper

pinocchioRobot = RobotWrapper(_urdfPath, _urdfDir, se3.JointModelFreeFlyer())
pinocchioRobot.initDisplay(loadModel=True)

#----------------ROBOT - DEVICE AND DYNAMICS----------#
from dynamic_graph.sot.dynamics.humanoid_robot import HumanoidRobot
robot = HumanoidRobot(_robotName, pinocchioRobot.model, pinocchioRobot.data,
                      _initialConfig, _OperationalPointsMap)
#-----------------------------------------------------#

#----------------SOT (SOLVER)-------------------------#
from dynamic_graph.sot.application.velocity.precomputed_tasks import initialize
solver = initialize(robot)
#-----------------------------------------------------#

#----------------PG--------------------------------#
#from dynamic_graph.sot.pattern_generator.walking import initPg, initZMPRef, initWaistCoMTasks, initFeetTask, initPostureTask, pushTasks
예제 #15
0
cross(rand(3), rand(3))  # Cross product of R^3
rotate('x', 0.4)  # Build a rotation matrix of 0.4rad around X.

import pinocchio as se3

R = eye(3)
p = zero(3)
M0 = se3.SE3(R, p)
M = se3.SE3.Random()
M.translation = p
M.rotation = R
v = zero(3)
w = zero(3)
nu0 = se3.Motion(v, w)
nu = se3.Motion.Random()
nu.linear = v
nu.angular = w
f = zero(3)
tau = zero(3)
phi0 = se3.Force(f, tau)
phi = se3.Force.Random()
phi.linear = f
phi.angular = tau

from pinocchio.robot_wrapper import RobotWrapper
from os.path import join

PKG = '/home/alumno04/dev_samir/ros/sawyer_ws/src/'
URDF = join(PKG, '/sawyer_robot/sawyer_description/urdf/model1.urdf')
robot = RobotWrapper(URDF, [PKG])
예제 #16
0
    def __init__(self, name, initialConfig, device=None, tracer=None):
        self.OperationalPointsMap = {
            'left-wrist': 'arm_left_7_joint',
            'right-wrist': 'arm_right_7_joint',
            'left-ankle': 'leg_left_6_joint',
            'right-ankle': 'leg_right_6_joint',
            'gaze': 'head_2_joint',
            'waist': 'root_joint',
            'chest': 'torso_2_joint'
        }

        from rospkg import RosPack
        rospack = RosPack()
        urdfPath = rospack.get_path('talos_data') + "/urdf/talos_reduced.urdf"
        urdfDir = [rospack.get_path('talos_data') + "/../"]

        # Create a wrapper to access the dynamic model provided through an urdf file.
        from pinocchio.robot_wrapper import RobotWrapper
        import pinocchio as se3
        from dynamic_graph.sot.dynamics_pinocchio import fromSotToPinocchio
        pinocchioRobot = RobotWrapper()
        pinocchioRobot.initFromURDF(urdfPath, urdfDir,
                                    se3.JointModelFreeFlyer())
        self.pinocchioModel = pinocchioRobot.model
        self.pinocchioData = pinocchioRobot.data

        AbstractHumanoidRobot.__init__(self, name, tracer)

        self.OperationalPoints.append('waist')
        self.OperationalPoints.append('chest')

        # Create rigid body dynamics model and data (pinocchio)
        self.dynamic = DynamicPinocchio(self.name + "_dynamic")
        self.dynamic.setModel(self.pinocchioModel)
        self.dynamic.setData(self.pinocchioData)
        self.dimension = self.dynamic.getDimension()

        # Initialize device
        self.device = device
        self.timeStep = self.device.getTimeStep()
        self.device.resize(self.dynamic.getDimension())
        # TODO For position limit, we remove the first value to get
        # a vector of the good size because SoT use euler angles and not
        # quaternions...
        self.device.setPositionBounds(
            self.pinocchioModel.lowerPositionLimit.T.tolist()[0][1:],
            self.pinocchioModel.upperPositionLimit.T.tolist()[0][1:])
        self.device.setVelocityBounds(
            (-self.pinocchioModel.velocityLimit).T.tolist()[0],
            self.pinocchioModel.velocityLimit.T.tolist()[0])
        self.device.setTorqueBounds(
            (-self.pinocchioModel.effortLimit).T.tolist()[0],
            self.pinocchioModel.effortLimit.T.tolist()[0])
        self.halfSitting = initialConfig
        self.device.set(self.halfSitting)
        plug(self.device.state, self.dynamic.position)

        self.AdditionalFrames.append(
            ("leftFootForceSensor", self.forceSensorInLeftAnkle,
             self.OperationalPointsMap["left-ankle"]))
        self.AdditionalFrames.append(
            ("rightFootForceSensor", self.forceSensorInRightAnkle,
             self.OperationalPointsMap["right-ankle"]))

        self.dimension = self.dynamic.getDimension()
        self.plugVelocityFromDevice = True
        self.dynamic.displayModel()

        # Initialize velocity derivator if chosen
        if self.enableVelocityDerivator:
            self.velocityDerivator = Derivator_of_Vector('velocityDerivator')
            self.velocityDerivator.dt.value = self.timeStep
            plug(self.device.state, self.velocityDerivator.sin)
            plug(self.velocityDerivator.sout, self.dynamic.velocity)
        else:
            self.dynamic.velocity.value = self.dimension * (0., )

        # Initialize acceleration derivator if chosen
        if self.enableAccelerationDerivator:
            self.accelerationDerivator = \
                Derivator_of_Vector('accelerationDerivator')
            self.accelerationDerivator.dt.value = self.timeStep
            plug(self.velocityDerivator.sout, self.accelerationDerivator.sin)
            plug(self.accelerationDerivator.sout, self.dynamic.acceleration)
        else:
            self.dynamic.acceleration.value = self.dimension * (0., )

        # Create operational points based on operational points map (if provided)
        if self.OperationalPointsMap is not None:
            self.initializeOpPoints()
예제 #17
0
    0.1,  #Right Arm
    0.,
    0.  #Head
)

#-----------------------------------------------------------------------------
#---- ROBOT SPECIFICATIONS----------------------------------------------------
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#---- DYN --------------------------------------------------------------------
#-----------------------------------------------------------------------------
from pinocchio.robot_wrapper import RobotWrapper
import pinocchio as se3
from dynamic_graph.sot.dynamics_pinocchio import fromSotToPinocchio
pinocchioRobot = RobotWrapper(URDFPATH, URDFDIR, se3.JointModelFreeFlyer())
pinocchioRobot.initDisplay(loadModel=DISPLAY)
if DISPLAY:
    pinocchioRobot.display(fromSotToPinocchio(halfSitting))

from dynamic_graph.sot.dynamics_pinocchio.humanoid_robot import HumanoidRobot
robot = HumanoidRobot(robotName, pinocchioRobot.model, pinocchioRobot.data,
                      halfSitting, OperationalPointsMap)

# ------------------------------------------------------------------------------
# ---- Kinematic Stack of Tasks (SoT)  -----------------------------------------
# ------------------------------------------------------------------------------
from dynamic_graph import plug
from dynamic_graph.sot.core import SOT
sot = SOT('sot')
sot.setSize(robot.dynamic.getDimension())
예제 #18
0
MOTOR_INERTIA = 4.59e-6
GEAR_RATIO = 66
DDQ_MAX = np.array([30.0, 60.0])
DDQ_MAX = np.array([10.0, 30.0, 20.0, 20.0, 30.0, 30.0, 30.0])
''' END OF USER PARAMETERS '''

print(
    "Gonna sample %d random joint configuration to compute bounds on the Mass matrix and bias forces"
    % (N_SAMPLING))
np.set_printoptions(precision=2, suppress=True)

# Sample the joint space of the robot
model_path = os.getcwd() + '/../data/baxter'
#robot = RobotWrapper(model_path+'/baxter_description/urdf/baxter_2_dof.urdf', [ model_path, ]);
robot = RobotWrapper(model_path + '/baxter_description/urdf/baxter_1_arm.urdf',
                     [
                         model_path,
                     ])
#model_path = os.getcwd()+'/../data'
#robot = RobotWrapper(model_path+'/pr2_description/urdf/pr2.urdf', [ model_path, ]);
robot.addAllCollisionPairs()
NON_ACTIVE_COLLISION_PAIRS = []
for i in range(len(robot.collision_data.activeCollisionPairs)):
    if (i not in ACTIVE_COLLISION_PAIRS):
        NON_ACTIVE_COLLISION_PAIRS += [i]
robot.deactivateCollisionPairs(NON_ACTIVE_COLLISION_PAIRS)

dcrba = DCRBA(robot)
coriolis = Coriolis(robot)
drnea = DRNEA(robot)

robot.initDisplay(loadModel=True)
예제 #19
0
WITH_UR5 = True
WITH_ROMEO = False

if WITH_UR5:
    from pinocchio.robot_wrapper import RobotWrapper

    path = 'models/'
    urdf = path + '/ur_description/urdf/ur5_gripper.urdf'
    robot = RobotWrapper(urdf, [
        path,
    ])

if WITH_ROMEO:
    from pinocchio.romeo_wrapper import RomeoWrapper

    path = 'models/romeo/'
    urdf = path + 'urdf/romeo.urdf'

    # Explicitly specify that the first joint is a free flyer.
    robot = RomeoWrapper(urdf, [
        path,
    ])  # Load urdf model

robot.initDisplay(loadModel=True)
robot.display(robot.q0)
예제 #20
0
import unittest
import pinocchio as se3
import numpy as np
import os

from pinocchio.robot_wrapper import RobotWrapper

# Warning : the paths are here hard-coded. This file is only here as an example
romeo_model_path = os.path.abspath(
    os.path.join(current_file, '../models/romeo/romeo_description'))
romeo_model_file = romeo_model_path + "/urdf/romeo.urdf"

list_hints = [romeo_model_path, "titi"]
robot = RobotWrapper(romeo_model_file, list_hints, se3.JointModelFreeFlyer())

robot.initDisplay()
robot.loadDisplayModel("world/pinocchio")

q0 = np.matrix([
    0,
    0,
    0.840252,
    0,
    0,
    0,
    1,  # Free flyer
    0,
    0,
    -0.3490658,
    0.6981317,
    -0.3490658,
    0.,  # Right gripper
    0.,
    0.  # Head
)

#-----------------------------------------------------------------------------
#---- ROBOT SPECIFICATIONS----------------------------------------------------
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#---- DYN --------------------------------------------------------------------
#-----------------------------------------------------------------------------
from pinocchio.robot_wrapper import RobotWrapper
import pinocchio as pin
from dynamic_graph.sot.dynamics_pinocchio import fromSotToPinocchio
pinocchioRobot = RobotWrapper(urdfPath, urdfDir, pin.JointModelFreeFlyer())
pinocchioRobot.initDisplay(loadModel=True)
pinocchioRobot.display(fromSotToPinocchio(initialConfig))

from dynamic_graph.sot.dynamics_pinocchio.humanoid_robot import HumanoidRobot
robot = HumanoidRobot(robotName, pinocchioRobot.model, pinocchioRobot.data,
                      initialConfig, OperationalPointsMap)

# ------------------------------------------------------------------------------
# ---- Kinematic Stack of Tasks (SoT)  -----------------------------------------
# ------------------------------------------------------------------------------
from dynamic_graph import plug
from dynamic_graph.sot.core import SOT
sot = SOT('sot')
sot.setSize(robot.dynamic.getDimension())
plug(sot.control, robot.device.control)
RorL = hyst(ForceRZ.A1 - ForceLZ.A1, -200, 200)

#plt.plot(ForceRZ)
#plt.plot(ForceLZ)
#plt.plot(RorL*500)
#plt.show()

urdf = '/opt/openrobots/share/hrp2_14_description/urdf/hrp2_14.urdf'
pkgs = [
    '/opt/openrobots/share',
]

#(self, filename, package_dirs=package_dirs, root_joint=se3.JointModelFreeFlyer())

robot = RobotWrapper(urdf,
                     package_dirs=pkgs,
                     root_joint=se3.JointModelFreeFlyer())
#robot.initDisplay()#loadModel=True)

T = qs.shape[0]
RLEG = qs[:, :6]
LLEG = qs[:, 6:12]
CHEST = qs[:, 12:14]
HEAD = qs[:, 14:16]
RARM = qs[:, 16:23]
LARM = qs[:, 23:]
FF = qs[:, :7] * 0
FF[:, 6] = 1

qs = np.hstack([FF, CHEST, HEAD, LARM, RARM, LLEG, RLEG])
예제 #23
0
# NOTE: this example needs gepetto-gui to be installed
# usage: launch gepetto-gui and then run this test

import unittest
import pinocchio as se3
import numpy as np
import os

from pinocchio.robot_wrapper import RobotWrapper

current_file =  os.path.dirname(os.path.abspath(__file__))
romeo_model_dir = os.path.abspath(os.path.join(current_file, '../../models/romeo'))
romeo_model_path = os.path.abspath(os.path.join(romeo_model_dir, 'romeo_description/urdf/romeo.urdf'))
hint_list = [romeo_model_dir, "wrong/hint"] # hint list
robot = RobotWrapper(romeo_model_path, hint_list, se3.JointModelFreeFlyer())

robot.initDisplay()
robot.loadDisplayModel("pinocchio")

q0 = np.matrix([
    0, 0, 0.840252, 0, 0, 0, 1,  # Free flyer
    0, 0, -0.3490658, 0.6981317, -0.3490658, 0,  # left leg
    0, 0, -0.3490658, 0.6981317, -0.3490658, 0,  # right leg
    0,  # chest
    1.5, 0.6, -0.5, -1.05, -0.4, -0.3, -0.2,  # left arm
    0, 0, 0, 0,  # head
    1.5, -0.6, 0.5, 1.05, -0.4, -0.3, -0.2,  # right arm
]).T

robot.display(q0)