5 import pinocchio
as pin
9 """Create a 7 DoF robot arm (with spherical joint for shoulder and wrist and revolute
13 revoluteOnly (default=False): if True, the arm is created with only revolute
14 joints. (Spherical joints are replaced by 3 revolute joints)
18 model: pinocchio model of the robot
19 geom_model: pinocchio geometric model of the robot
26 def set_limit(model, joint_id, pos_absmax, vel_absmax, eff_absmax):
27 idx_q = model.joints[joint_id].idx_q
28 nq = model.joints[joint_id].nq
29 for idx
in range(idx_q, idx_q + nq):
30 model.upperPositionLimit[idx] = pos_absmax
31 model.lowerPositionLimit[idx] = -pos_absmax
33 idx_v = model.joints[joint_id].idx_v
34 nv = model.joints[joint_id].nv
35 for idx
in range(idx_v, idx_v + nv):
36 model.velocityLimit[idx] = vel_absmax
37 model.effortLimit[idx] = eff_absmax
41 geom_model = pin.GeometryModel()
46 color_base = np.array([1.0, 0.1, 0.1, 1.0])
48 geom_model.addGeometryObject(
52 fcl.Box(0.5, 0.5, 0.02),
53 pin.SE3(np.identity(3), np.array([0, 0, -0.01 - geom_radius])),
61 geom_model.addGeometryObject(
65 fcl.Sphere(geom_radius),
75 placement_upper = pin.SE3(np.identity(3), np.array([0, 0, geom_length / 2.0]))
77 id_upper = model.addJoint(
78 id_base, pin.JointModelSpherical(), pin.SE3.Identity(),
"shoulder"
80 set_limit(model, id_upper, pi, 3.0, 100.0)
82 id_upper = model.addJoint(
83 id_base, pin.JointModelRX(), pin.SE3.Identity(),
"shoulderX"
85 set_limit(model, id_upper, pi, 3.0, 100.0)
86 id_upper = model.addJoint(
87 id_upper, pin.JointModelRY(), pin.SE3.Identity(),
"shoulderY"
89 set_limit(model, id_upper, pi, 3.0, 100.0)
90 id_upper = model.addJoint(
91 id_upper, pin.JointModelRZ(), pin.SE3.Identity(),
"shoulderZ"
93 set_limit(model, id_upper, pi, 3.0, 100.0)
94 model.appendBodyToJoint(
96 pin.Inertia.FromCylinder(1.0, geom_radius, geom_length),
100 color_upper = np.array([0.1, 0.8, 0.1, 0.8])
102 geom_model.addGeometryObject(
106 fcl.Sphere(geom_radius),
107 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
115 geom_model.addGeometryObject(
119 fcl.Cylinder(geom_radius, geom_length),
129 placement_lower = pin.SE3(np.identity(3), np.array([0, 0, geom_length / 2.0]))
130 id_lower = model.addJoint(
133 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
136 model.appendBodyToJoint(
138 pin.Inertia.FromCylinder(1.0, geom_radius, geom_length),
141 set_limit(model, id_lower, pi, 3.0, 100.0)
143 color_lower = np.array([0.1, 0.1, 0.8, 0.8])
145 geom_model.addGeometryObject(
149 fcl.Sphere(geom_radius),
150 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
158 geom_model.addGeometryObject(
162 fcl.Cylinder(geom_radius, geom_length),
172 placement_hand = pin.SE3(np.identity(3), np.array([0, 0, geom_length]))
174 id_hand = model.addJoint(
176 pin.JointModelSpherical(),
177 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
180 set_limit(model, id_hand, pi, 3.0, 100.0)
182 id_hand = model.addJoint(
185 pin.SE3(np.identity(3), np.array([0, 0, geom_length])),
188 set_limit(model, id_hand, pi, 3.0, 100.0)
189 id_hand = model.addJoint(
190 id_hand, pin.JointModelRY(), pin.SE3.Identity(),
"wristY"
192 set_limit(model, id_hand, pi, 3.0, 100.0)
193 id_hand = model.addJoint(
194 id_hand, pin.JointModelRZ(), pin.SE3.Identity(),
"wristZ"
196 set_limit(model, id_hand, pi, 3.0, 100.0)
197 model.appendBodyToJoint(
198 id_hand, pin.Inertia.FromSphere(1.0, geom_radius), placement_hand
201 color_hand = np.array([0.7, 0.7, 0.7, 0.8])
203 geom_model.addGeometryObject(
207 fcl.Sphere(geom_radius),
208 pin.SE3(np.identity(3), np.array([0, 0, 2 * geom_radius])),
216 geom_model.addGeometryObject(
220 fcl.Cylinder(0.02, 0.1),
221 pin.SE3(np.identity(3), np.array([0.05, 0, 3 * geom_radius])),
229 geom_model.addGeometryObject(
233 fcl.Cylinder(0.02, 0.1),
234 pin.SE3(np.identity(3), np.array([0, 0, 3 * geom_radius])),
242 geom_model.addGeometryObject(
246 fcl.Cylinder(0.02, 0.1),
247 pin.SE3(np.identity(3), np.array([-0.05, 0, 3 * geom_radius])),
255 geom_model.addGeometryObject(
259 fcl.Cylinder(0.02, 0.1),
261 np.array([geom_radius, 0, 2 * geom_radius, 0, 0.707, 0, 0.707])
276 pin.SE3(np.identity(3), np.array([0, 0, 2 * geom_radius])),
277 pin.FrameType.OP_FRAME,
281 return model, geom_model