2 Load 4 times the UR5 model, plus a plate object on top of them, to feature a simple
4 No optimization, this file is just an example of how to load the models.
7 from pathlib
import Path
10 from pinocchio
import SE3
11 from pinocchio.robot_wrapper
import RobotWrapper
12 from pinocchio.utils
import eye, rotate, se3ToXYZQUATtuple, urdf, zero
14 PKG = Path(
"/opt/openrobots/share")
15 URDF = 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
23 It returns the robot wrapper (model,data).
25 robot = RobotWrapper(urdf, [PKG])
26 robot.model.jointPlacements[1] = M0 * robot.model.jointPlacements[1]
27 robot.visual_model.geometryObjects[0].placement = (
28 M0 * robot.visual_model.geometryObjects[0].placement
30 robot.visual_data.oMg[0] = M0 * robot.visual_data.oMg[0]
31 robot.initDisplay(loadModel=
True, viewerRootNodeName=
"world/" + name)
37 Mt = SE3(eye(3), np.array([0.3, 0, 0]))
40 loadRobot(SE3(rotate(
"z", np.pi / 2 * i), zero(3)) * Mt,
"robot%d" % i)
44 q0 = np.array([np.pi / 4, -np.pi / 4, -np.pi / 2, np.pi / 4, np.pi / 2, 0])
49 gepettoViewer = robots[0].viewer.gui
50 w, h, d = 0.25, 0.25, 0.005
51 color = [red, green, blue, transparency] = [1, 1, 0.78, 1.0]
52 gepettoViewer.addBox(
"world/toolplate", w, h, d, color)
53 Mtool = SE3(rotate(
"z", 1.268), np.array([0, 0, 0.77]))
54 gepettoViewer.applyConfiguration(
"world/toolplate", se3ToXYZQUATtuple(Mtool))
55 gepettoViewer.refresh()