robotic-arm 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/robotic-arm.rb +48 -61
- metadata +2 -2
data/lib/robotic-arm.rb
CHANGED
@@ -10,18 +10,22 @@ OFF = 0x00
|
|
10
10
|
class RoboticArm
|
11
11
|
|
12
12
|
attr_reader :led, :wrist, :elbow, :shoulder, :base, :grip
|
13
|
+
attr_reader :light, :gripper # aliases for :led and :grip
|
13
14
|
|
14
15
|
class Component
|
15
16
|
|
16
17
|
def initialize(robot_arm) @ra = robot_arm end
|
17
|
-
|
18
|
+
|
19
|
+
protected
|
18
20
|
|
19
|
-
|
21
|
+
def active?() @active end
|
20
22
|
|
21
|
-
def activate(switch, val, seconds)
|
23
|
+
def activate(switch, val, seconds=0)
|
24
|
+
|
22
25
|
@active = val >= 0
|
23
26
|
@prev_val = val
|
24
27
|
@ra.command(switch, val)
|
28
|
+
|
25
29
|
if seconds > 0 then
|
26
30
|
sleep seconds
|
27
31
|
@ra.command(switch, -(val))
|
@@ -38,13 +42,8 @@ class RoboticArm
|
|
38
42
|
@switch = 2
|
39
43
|
end
|
40
44
|
|
41
|
-
def on(seconds=0)
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
def off(seconds=0)
|
46
|
-
activate(@switch, -0x01, seconds) if on?
|
47
|
-
end
|
45
|
+
def on(seconds=0) activate(@switch, 0x01, seconds) unless on? end
|
46
|
+
def off() activate(@switch, -0x01) if on? end
|
48
47
|
|
49
48
|
alias on? active?
|
50
49
|
end
|
@@ -56,34 +55,25 @@ class RoboticArm
|
|
56
55
|
@switch, @val = 0, OFF
|
57
56
|
end
|
58
57
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
stop
|
63
|
-
end
|
64
|
-
super(switch, val, seconds)
|
65
|
-
end
|
66
|
-
|
67
|
-
def stop()
|
68
|
-
if moving? then
|
69
|
-
@active = false
|
70
|
-
activate(@switch, -(@prev_val))
|
71
|
-
end
|
72
|
-
end
|
58
|
+
protected
|
59
|
+
|
60
|
+
def stop() (@active = false; activate(@switch, -(@prev_val))) if moving? end
|
73
61
|
|
74
62
|
alias moving? active?
|
75
|
-
|
63
|
+
|
64
|
+
def activate(switch, val, seconds=0)
|
65
|
+
(@val = @prev_val; stop) if active?
|
66
|
+
super(switch, val, seconds)
|
67
|
+
end
|
68
|
+
|
76
69
|
end
|
77
70
|
|
78
71
|
class ComponentUpDown < ComponentMoving
|
79
72
|
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
def down(seconds=0)
|
85
|
-
activate(@switch, @downval, seconds)
|
86
|
-
end
|
73
|
+
protected
|
74
|
+
|
75
|
+
def up (seconds=0) activate(@switch, @upval, seconds) end
|
76
|
+
def down(seconds=0) activate(@switch, @downval, seconds) end
|
87
77
|
end
|
88
78
|
|
89
79
|
class Shoulder < ComponentUpDown
|
@@ -117,24 +107,14 @@ class RoboticArm
|
|
117
107
|
@switch = 1
|
118
108
|
end
|
119
109
|
|
120
|
-
def left(seconds=0)
|
121
|
-
|
122
|
-
end
|
123
|
-
|
124
|
-
def right(seconds=0)
|
125
|
-
activate(@switch, @val=0x01, seconds)
|
126
|
-
end
|
110
|
+
def left (seconds=0) activate(@switch, @val=0x02, seconds) end
|
111
|
+
def right(seconds=0) activate(@switch, @val=0x01, seconds) end
|
127
112
|
end
|
128
113
|
|
129
|
-
class
|
130
|
-
|
131
|
-
def open(seconds=0)
|
132
|
-
activate(@switch, @val=0x02, seconds)
|
133
|
-
end
|
114
|
+
class Gripper < ComponentMoving
|
134
115
|
|
135
|
-
def
|
136
|
-
|
137
|
-
end
|
116
|
+
def open (seconds=0) activate(@switch, @val=0x02, seconds) end
|
117
|
+
def close(seconds=0) activate(@switch, @val=0x01, seconds) end
|
138
118
|
end
|
139
119
|
|
140
120
|
|
@@ -144,10 +124,7 @@ class RoboticArm
|
|
144
124
|
usb = LIBUSB::Context.new
|
145
125
|
arm = usb.devices(:idVendor => 0x1267, :idProduct => 0x0000).first
|
146
126
|
|
147
|
-
|
148
|
-
puts "Arm not found!"
|
149
|
-
exit
|
150
|
-
end
|
127
|
+
(puts "Arm not found!"; exit) unless arm
|
151
128
|
|
152
129
|
# Take control of the device
|
153
130
|
@handle = arm.open
|
@@ -158,8 +135,10 @@ class RoboticArm
|
|
158
135
|
@elbow = Elbow.new self
|
159
136
|
@shoulder = Shoulder.new self
|
160
137
|
@base = Base.new self
|
161
|
-
@grip =
|
138
|
+
@grip = Gripper.new self
|
162
139
|
@register = [OFF,OFF,OFF]
|
140
|
+
|
141
|
+
@light, @gripper = @led, @grip #aliases
|
163
142
|
end
|
164
143
|
|
165
144
|
def left(seconds=0) @base.left seconds end
|
@@ -173,15 +152,6 @@ class RoboticArm
|
|
173
152
|
handle_command
|
174
153
|
end
|
175
154
|
|
176
|
-
# Send the signal
|
177
|
-
#
|
178
|
-
def handle_command()
|
179
|
-
|
180
|
-
@handle.control_transfer(:bmRequestType => 0x40, :bRequest => 6, \
|
181
|
-
:wValue => 0x100, :wIndex => 0, :dataOut => @register.pack('CCC'), \
|
182
|
-
:timeout => 1000)
|
183
|
-
end
|
184
|
-
|
185
155
|
# turn off all active signals
|
186
156
|
#
|
187
157
|
def off()
|
@@ -198,6 +168,23 @@ class RoboticArm
|
|
198
168
|
handle_command
|
199
169
|
end
|
200
170
|
|
171
|
+
private
|
172
|
+
|
173
|
+
# Send the signal
|
174
|
+
#
|
175
|
+
def handle_command()
|
176
|
+
|
177
|
+
message = {
|
178
|
+
bmRequestType: 0x40,
|
179
|
+
bRequest: 6,
|
180
|
+
wValue: 0x100,
|
181
|
+
wIndex: 0,
|
182
|
+
dataOut: @register.pack('CCC'),
|
183
|
+
timeout: 1000
|
184
|
+
}
|
185
|
+
@handle.control_transfer message
|
186
|
+
end
|
187
|
+
|
201
188
|
end
|
202
189
|
|
203
190
|
if __FILE__ == $0 then
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: robotic-arm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- James Robertson
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-12-
|
13
|
+
date: 2012-12-19 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: libusb
|