Skip to content

Commit 0066949

Browse files
committed
branched robot example
1 parent 2add622 commit 0066949

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/usr/bin/env python
2+
"""
3+
@author Jesse Haviland
4+
"""
5+
6+
import swift
7+
import roboticstoolbox as rp
8+
import spatialmath as sm
9+
import spatialgeometry as sg
10+
import numpy as np
11+
12+
env = swift.Swift()
13+
env.launch(realtime=True)
14+
15+
r = rp.models.YuMi()
16+
env.add(r)
17+
18+
lTep = (
19+
sm.SE3.Tx(0.45)
20+
* sm.SE3.Ty(0.25)
21+
* sm.SE3.Tz(0.3)
22+
* sm.SE3.Rx(np.pi)
23+
* sm.SE3.Rz(np.pi / 2)
24+
)
25+
26+
rTep = (
27+
sm.SE3.Tx(0.45)
28+
* sm.SE3.Ty(-0.3)
29+
* sm.SE3.Tz(0.3)
30+
* sm.SE3.Rx(np.pi)
31+
* sm.SE3.Rz(np.pi / 2)
32+
* sm.SE3.Rx(np.pi / 5)
33+
)
34+
35+
l_target = sg.Sphere(0.01, color=[0.2, 0.4, 0.65, 0.5], base=lTep)
36+
l_target_frame = sg.Axes(0.1, base=lTep)
37+
38+
r_target = sg.Sphere(0.01, color=[0.64, 0.4, 0.2, 0.5], base=rTep)
39+
r_target_frame = sg.Axes(0.1, base=rTep)
40+
41+
env.add(l_target)
42+
env.add(l_target_frame)
43+
env.add(r_target)
44+
env.add(r_target_frame)
45+
46+
47+
l_frame = sg.Axes(0.1)
48+
r_frame = sg.Axes(0.1)
49+
env.add(l_frame)
50+
env.add(r_frame)
51+
52+
l_path, l_n, _ = r.get_path(end=r.grippers[0])
53+
r_path, r_n, _ = r.get_path(end=r.grippers[1])
54+
55+
# Inner list comprehension gets a list jindicies from the links in l_path
56+
# Outer list comprehension removes None's from the list (a None kindex means
57+
# the link is static)
58+
l_jindex = [i for i in [link.jindex for link in l_path] if i]
59+
r_jindex = [i for i in [link.jindex for link in r_path] if i is not None]
60+
61+
arrivedl = False
62+
arrivedr = False
63+
64+
dt = 0.05
65+
66+
gain = np.array([1, 1, 1, 1.6, 1.6, 1.6])
67+
68+
while not arrivedl or not arrivedr:
69+
70+
vl, arrivedl = rp.p_servo(
71+
r.fkine(r.q, end=r.grippers[0]), lTep, gain=gain, threshold=0.001
72+
)
73+
vr, arrivedr = rp.p_servo(
74+
r.fkine(r.q, end=r.grippers[1]), rTep, gain=gain, threshold=0.001
75+
)
76+
77+
r.qd[l_jindex] = np.linalg.pinv(r.jacob0(r.q, end=r.grippers[0])) @ vl
78+
r.qd[r_jindex] = np.linalg.pinv(r.jacob0(r.q, end=r.grippers[1])) @ vr
79+
80+
l_frame.base = r.fkine(r.q, end=r.grippers[0])
81+
r_frame.base = r.fkine(r.q, end=r.grippers[1])
82+
83+
env.step(dt)

0 commit comments

Comments
 (0)