2 Load 4 times the UR5 model, plus a plate object on top of them, to feature a simple parallel robot. 3 No optimization, this file is just an example of how to load the models. 6 from os.path
import join
8 from pinocchio
import SE3
9 from pinocchio.robot_wrapper
import RobotWrapper
14 PKG =
'/opt/openrobots/share' 15 URDF = join(PKG,
'ur5_description/urdf/ur5_gripper.urdf')
20 This function load a UR5 robot n a new model, move the basis to placement <M0> 21 and add the corresponding visuals in gepetto viewer with name prefix given by string <name>. 22 It returns the robot wrapper (model,data). 24 robot = RobotWrapper(urdf, [PKG])
25 robot.model.jointPlacements[1] = M0 * robot.model.jointPlacements[1]
26 robot.visual_model.geometryObjects[0].placement = M0 * robot.visual_model.geometryObjects[0].placement
27 robot.visual_data.oMg[0] = M0 * robot.visual_data.oMg[0]
28 robot.initDisplay(loadModel=
True, viewerRootNodeName=
"world/" + name)
34 Mt = SE3(eye(3), np.matrix([.3, 0, 0]).T)
36 robots.append(
loadRobot(SE3(rotate(
'z', np.pi / 2 * i), zero(3)) * Mt,
"robot%d" % i))
39 q0 = np.matrix([np.pi / 4, -np.pi / 4, -np.pi / 2, np.pi / 4, np.pi / 2, 0]).T
44 gepettoViewer = robots[0].viewer.gui
45 w, h, d = 0.25, 0.25, 0.005
46 color = [red, green, blue, transparency] = [1, 1, 0.78, 1.0]
47 gepettoViewer.addBox(
'world/toolplate', w, h, d, color)
48 Mtool = SE3(rotate(
'z', 1.268), np.matrix([0, 0, .77]).T)
49 gepettoViewer.applyConfiguration(
'world/toolplate', se3ToXYZQUAT(Mtool))
50 gepettoViewer.refresh()