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. 8 from pinocchio
import SE3
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). 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)
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)
50 gepettoViewer.refresh()
Eigen::Matrix3d rotate(const std::string &axis, const double ang)