5 import pinocchio
as pin
10 Create a 7 DoF robot arm (with spherical joint for shoulder and wrist and revolute joint for elbow) 13 revoluteOnly (default=False): if True, the arm is created with only revolute joints. (Spherical joints are replaced by 3 revolute joints) 16 model: pinocchio model of the robot 17 geom_model: pinocchio geometric model of the robot 23 def set_limit(model, joint_id, pos_absmax, vel_absmax, eff_absmax):
24 idx_q = model.joints[joint_id].idx_q
25 nq = model.joints[joint_id].nq
26 for idx
in range(idx_q, idx_q + nq):
27 model.upperPositionLimit[idx] = pos_absmax
28 model.lowerPositionLimit[idx] = -pos_absmax
30 idx_v = model.joints[joint_id].idx_v
31 nv = model.joints[joint_id].nv
32 for idx
in range(idx_v, idx_v + nv):
33 model.velocityLimit[idx] = vel_absmax
34 model.effortLimit[idx] = eff_absmax
38 geom_model = pin.GeometryModel()
43 color_base = np.array([1.0, 0.1, 0.1, 1.0])
45 geom_model.addGeometryObject(
49 fcl.Box(0.5, 0.5, 0.02),
50 pin.SE3(np.identity(3), np.array([0, 0, -0.01 - geom_radius])),
58 geom_model.addGeometryObject(
62 fcl.Sphere(geom_radius),
72 placement_upper = pin.SE3(np.identity(3), np.array([0, 0, geom_length / 2.0]))
74 id_upper = model.addJoint(
75 id_base, pin.JointModelSpherical(), pin.SE3.Identity(),
"shoulder" 77 set_limit(model, id_upper, pi, 3.0, 100.0)
79 id_upper = model.addJoint(
80 id_base, pin.JointModelRX(), pin.SE3.Identity(),
"shoulderX" 82 set_limit(model, id_upper, pi, 3.0, 100.0)
83 id_upper = model.addJoint(
84 id_upper, pin.JointModelRY(), pin.SE3.Identity(),
"shoulderY" 86 set_limit(model, id_upper, pi, 3.0, 100.0)
87 id_upper = model.addJoint(
88 id_upper, pin.JointModelRZ(), pin.SE3.Identity(),
"shoulderZ" 90 set_limit(model, id_upper, pi, 3.0, 100.0)
91 model.appendBodyToJoint(
93 pin.Inertia.FromCylinder(1.0, geom_radius, geom_length),
97 color_upper = np.array([0.1, 0.8, 0.1, 0.8])
99 geom_model.addGeometryObject(
103 fcl.Sphere(geom_radius),
104 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
112 geom_model.addGeometryObject(
116 fcl.Cylinder(geom_radius, geom_length),
126 placement_lower = pin.SE3(np.identity(3), np.array([0, 0, geom_length / 2.0]))
127 id_lower = model.addJoint(
130 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
133 model.appendBodyToJoint(
135 pin.Inertia.FromCylinder(1.0, geom_radius, geom_length),
138 set_limit(model, id_lower, pi, 3.0, 100.0)
140 color_lower = np.array([0.1, 0.1, 0.8, 0.8])
142 geom_model.addGeometryObject(
146 fcl.Sphere(geom_radius),
147 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
155 geom_model.addGeometryObject(
159 fcl.Cylinder(geom_radius, geom_length),
169 placement_hand = pin.SE3(np.identity(3), np.array([0, 0, geom_length]))
171 id_hand = model.addJoint(
173 pin.JointModelSpherical(),
174 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
177 set_limit(model, id_hand, pi, 3.0, 100.0)
179 id_hand = model.addJoint(
182 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
185 set_limit(model, id_hand, pi, 3.0, 100.0)
186 id_hand = model.addJoint(
187 id_hand, pin.JointModelRY(), pin.SE3.Identity(),
"wristY" 189 set_limit(model, id_hand, pi, 3.0, 100.0)
190 id_hand = model.addJoint(
191 id_hand, pin.JointModelRZ(), pin.SE3.Identity(),
"wristZ" 193 set_limit(model, id_hand, pi, 3.0, 100.0)
194 model.appendBodyToJoint(
195 id_hand, pin.Inertia.FromSphere(1.0, geom_radius), placement_hand
198 color_hand = np.array([0.7, 0.7, 0.7, 0.8])
200 geom_model.addGeometryObject(
204 fcl.Sphere(geom_radius),
205 pin.SE3(np.identity(3), np.array([0, 0, 2 * geom_radius])),
213 geom_model.addGeometryObject(
217 fcl.Cylinder(0.02, 0.1),
218 pin.SE3(np.identity(3), np.array([0.05, 0, 3 * geom_radius])),
226 geom_model.addGeometryObject(
230 fcl.Cylinder(0.02, 0.1),
231 pin.SE3(np.identity(3), np.array([0, 0, 3 * geom_radius])),
239 geom_model.addGeometryObject(
243 fcl.Cylinder(0.02, 0.1),
244 pin.SE3(np.identity(3), np.array([-0.05, 0, 3 * geom_radius])),
252 geom_model.addGeometryObject(
256 fcl.Cylinder(0.02, 0.1),
258 np.array([geom_radius, 0, 2 * geom_radius] + [0, 0.707, 0, 0.707])
273 pin.SE3(np.identity(3), np.array([0, 0, 2 * geom_radius])),
274 pin.FrameType.OP_FRAME,
278 return model, geom_model
def create_7dof_arm(revoluteOnly=False)