Robotic System Servo Control. Presentation of Jeff Allen as a

Download Report

Transcript Robotic System Servo Control. Presentation of Jeff Allen as a

Intelligent Robotics I:
Servo Control
Overview and example of robot
control
Jeff Allen
Robot Recipe
• Sensors
– Artificial (sonar, cameras, temp, light, water,.......you
get the point)
– Human (From a controller perceiving a worthy input)
• Intelligence
– Artificial (computational, search, genetic, NN, cellular
automata, … too name a few)
– Human (a controller intelligence varies in extremes,
and is both time and subject variant)
• Actuators
– Artificial **(this is a requirement)
Robotic System
The world and the boxes
• Sensors
– Can exist solely in
either domain
– Can exist in mix of
both
Sensors Input
Intelligence
Robo world
Robot HW/SW State
Actuators Output
• Intelligence
– Can exist solely in
either domain
– Can exist in mix
• Robot State
– Internal conditions
used to represent
actions
• Actuators
– The method the robot
interacts, injects it’s
will onto the real world
Robotic System: simplification
• Input to
Intelligence
Sensors Input
Intelligence
Robo world
Robot HW/SW State
Actuators Output
– Ignore all outside
possibility as it is
not in the system
• Intelligence to
Robot State to
Output
– Imply state as
part of the
connection
An Abridged Robotic System
Transistions and related factors
• Input to
Intelligence
Sensors Input
Intelligence
Robo world
Actuators Output
– Complexity of
sensor input
– Must travel in
robot world even
if remote
controlled.
• Intelligence to
Actuators
– Must travel in
robot world
Sensor Information Complexity
(Artificial)
• Simple
–
–
–
–
–
–
–
–
Touch
Sonar
IR
Light
Temp
Engine and systems feedback
Radio signal
etc
• Middle to Upper Complexity
–
–
–
–
–
Sonar Arrays/Radar Arrays
LIDAR
Camera(s)
GPS Positioning
Etc
Consequences of increased sensor
information complexity
• Information size
• Processing difficulty
• Usefulness of data may require many
different processes
• Yet another etc….
• All ultimately lead in one way or another to
increased requirements of the robot
system. Which usually means $$$$!
Information Traveling in the Robot
World
• Information and it’s communication must
happen.
If nothing is communicated how can it be a
robot?
• We all know how it is done.
Electrical signals and representations sent to
devices program to respond accordingly.
Some robot system methodologies
• Single autonomous unit
– All onboard system intelligence is onboard. With
remote communications generally limited to system
reprogramming or goal adjustments. Not direct
actuator control.
• Remotely controlled units
– The controlling unit, human or artificial, is located at
another location controlling the unit.
• Mixed units
– Remotely controlled units with certain automated
subsumbtive responses controlled directly. Example
robotic overrides, like your brakes
More about robot system
methodologies
• Single autonomous unit
– Varying complexities based on onboard computational and
sensing abilities as well as actuator device complexities.
– Complexity increases are expensive and can create extremely
difficult systems in situations where onboard requirements are
stretched to limits
– Excellent response times are possible
• Remotely controlled units
– Onboard equipment requirements are lessened with respect to
computational devices. (less expensive)
– Complexity increases due to sensors now increase bandwidth
requirements, but are otherwise less expensive.
– Natural lag in response related to communicated distance as
well as bandwidth
• Mixed units (see all above)
PC remote controlled systems
Today’s example
• Inexpensive.
– PC (look at a Fry’s ad)
– Servo controller board ($10 - $200 on average)
• Potentially Powerful
– Information communicated can be communicated
along multiple channels: usb, serial, firewire, etc..
• Numerous programming languages to choose
from.
• Why do we use them? Look above
Review:
Traveling in the Robot World.
what did we say?
• Information and it’s communication must
happen. If nothing is communicated how
can it be a robot?
• We all know how it is done. In theory.
Practically?
A communicating example:
A PC controlled robot
Communication Channel PC to
Control:
In this case RS232
Our development environment:
Input to PC:
Visual Studio
VB 6.0
Predefined movement scripts / Sensors
Actuator Control:
ASC 16 Board
Communication channel:
PC to RS232 piece
• MS Visual studio provides the MSComm object capable of:
– Transmitting/ receiving / open / close to a comm port using rs232.
The requirement is only that the data be presented in the format it
is to be sent according to receiving device.
• ASC 16 has specific commands for each servo device.
– Each servo is capable of 180 degrees of movement with a precision
of 180/4000 degrees/point, .045 Deg/point
– The ASC16 is capable of simple position commands ,small loop
programs as well as positional feedback (not in this example)
– Commands are given in 1,2, and 3 byte packages
Example goal
• We need something to convert commands
from the PC to appropriate ASC16
commands, a translator.
Requirements
• Each servo device will have a different
range of motion and rarely will move all
180 degree.
• Each device is a separate entity,
interrelations can be calculated but
otherwise do not exist
ASC16 Commands
•
•
•
•
•
•
•
•
•
•
•
•
•
•
ac (81-96 DEC) (51-60 HEX)
Acceleration
am (250 DEC) (FA HEX)
Abort All Motion
at (249 DEC) (F9 HEX)
Abort Triggers
bt (124 DEC) (7C HEX)
Base Time
en (121 DEC) (79 HEX)
Enable Module
f+ (251 DEC) (FB HEX)
Freeze Motion
f- (252 DEC) (FC HEX)
Freeze Motion Off
ASC16 Commands (cont.)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
fp (21-36 DEC) (15-24 HEX)
Flyby Position
iv (112 DEC) (70 HEX)
Invert Servo Coordinates
la (242 DEC) (F2 HEX)
Load All
ld (123 DEC) (7B HEX)
Load Default Position
lm (253 DEC) (FD HEX)
Loop Marker
lp (254 DEC) (FE HEX)
Loop
mk (221-228 DEC) (DD-E4 HEX)
Marker
ASC16 Commands (cont.)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
mr (41-56 DEC) (29-38 HEX)
Move Relative
mk (221-228 DEC) (DD-E4 HEX)
Marker
mr (41-56 DEC) (29-38 HEX)
Move Relative
mv (1-16 DEC) (01-0F HEX)
Move servo absolute
no (0 DEC) (00 HEX)
No Operation
no no no (0,0,0 DEC) (00,00,00 HEX)
Terminate
nv (113 DEC) (71 HEX)
Non-invert Servo Positions
ASC16 Commands (cont.)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
op (110 DEC) (6E HEX)
Output
pg (120 DEC) (78 HEX)
Program Module address
ra (141-148 DEC) (8D-94 HEX)
Read Input as Analog
rd (179 DEC) (63 HEX)
Read Inputs as digital
rp (116 DEC) (74 HEX)
Report Position
rs (117 DEC) (75 HEX)
Report Speed
s+ (245 DEC) (F5 HEX)
Servos On
ASC16 Commands (cont.)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
s- (246 DEC) (F6 HEX)
Servos Off
sa (241 DEC) (F1 HEX)
Save All
sp (61-76 DEC) (3D-4C HEX)
Speed
st (151- 168 DEC) (97 - A8 HEX)
Stop
sv (122 DEC) (7A HEX)
Save Default Servo Position
tl (119 DEC) (77 HEX)
Trigger Level
tm (181-196 DEC) (65-C4 HEX)
Trigger on Motion Completion
tp (201-216 DEC) (C9-D8 HEX)
Trigger on Servo Position
ASC16 Information:
Command Set Example
mv (1-16 DEC) (01-0F HEX) Move servo absolute
Format: mv$ position mv$ = 1-16 for servo 1(mv1) to 16
(mv16)
position = 0-4000
Description: Moves a servo to a new absolute position at
the speed and acceleration rate set for the specified
servo.
Example:
Mnemonic Numeric
mv2 1500 Move servo 2 to position 1500 2, 5, 220
mv10 200 Move servo 10 to position 200 10, 0, 200
Translator specs
• Class (single instance for each servo)
– Provides separate initialization data to exist
within each object
– Separate variable data such as position and
rates are stored with each object
– Functions compute output string based on
object data
- Normalized control
Class local Variable
'local variable(s) to hold property value(s)
Private mvarminRange As Integer 'local copy
Private mvarmaxRange As Integer 'local copy
Private mvarmultiplier As Single 'local copy
Private mvarmark As Integer 'local copy
Private mvarservo As Integer 'local copy
Private mvarposition As Integer 'local copy
Private mvarreverse As Boolean 'local copy
Public outputstring As String
Public value As Integer
Private mvargood As Boolean 'local copy
Why private?
• Private can help guarantee values are
within appropriate ranges. This helps
make sure the system doesn’t get bad
information.
• Provides protection to data from outside.
• It just means a function is must be called
to write data.
ASC16 Information:
Command Set Example
ac (81-96 DEC) (51-60 HEX)
Acceleration
Format: ac$ accel ac$ = 81-96 for servo 1 (ac1) to 16 (ac16)
accel = 1-255
Example:
mnemonic Numeric
tl 2 ‘ set trigger level to suspend processing 119, 2
ac1 5 ‘set acceleration rate for servo 1 to 5cnts/20mS2 81, 0, 5
Accel command for servo object
Public Function Accel(ByVal rate As Integer) As String
Dim locservo
locservo = mvarservo + 80
Accel = Chr$(locserver) & Chr$(rate)
End Function
ASC16 Information:
Command Set Example
mv (1-16 DEC) (01-0F HEX) Move servo absolute
Format: mv$ position mv$ = 1-16 for servo 1(mv1) to 16
(mv16)
position = 0-4000
Description: Moves a servo to a new absolute position at
the speed and acceleration rate set for the specified
servo.
Example:
Mnemonic Numeric
mv2 1500 Move servo 2 to position 1500 2, 5, 220
mv10 200 Move servo 10 to position 200 10, 0, 200
Servo Movement as seen by PC
• Movement are absolute otherwise:
– Increased chance of leaving initialized range
– Must poll often to stay up to date, therefore
increasing communication
Move command
Public Function Move(ByVal pos As Integer) As String
Dim bigmove As Integer
Dim litmove As Integer
Dim overall As Integer
If pos >= 0 And pos <= 255 Then
If mvargood Then
If mvarreverse Then
overall = mvarminRange - (pos * mvarmultiplier)
litmove = (overall Mod 256)
bigmove = ((overall - litmove) / 256)
Else
overall = mvarminRange + (pos * mvarmultiplier)
litmove = overall Mod 256
bigmove = ((overall - (litmove)) / 256)
End If
mvarposition = pos
Move = Chr$(mvarservo) & Chr$(bigmove) & Chr$(litmove)
End If
End If
End Function
Initialization function
Public Sub makenew()
'this is surely ugly as but since cannot use new like .NET
'this will do.
If (mvarservo >= 1) And (mvarservo <= 16) And (mvarmaxRange <= 4000) And (mvarminRange <=
4000) And _
(mvarmaxRange >= 0) And (mvarminRange >= 0) Then
mvargood = True
If mvarmaxRange > mvarminRange Then
mvarreverse = False
mvarmultiplier = (mvarmaxRange - mvarminRange) / 256
Else
mvarreverse = True
mvarmultiplier = (mvarminRange - mvarmaxRange) / 256
End If
End If
mvarposition = 127
End Sub
Using objects
• Create instantiate an object for each servo
device
Dim eyeLr As New asc16stringbuilder
Dim eyeDu As New asc16stringbuilder
Dim neckLR As New asc16stringbuilder
Dim neckDU As New asc16stringbuilder
Dim mouth As New asc16stringbuilder
• Initialize
eyeLr.servo = 1
eyeLr.minRange = 1390
eyeLr.maxRange = 2810
eyeLr.makenew
• Use
MSComm.Output = eyeLr.Move(value) ’value range 0 255
A trivial use example
• Random eye movement
Public Sub LRAnimEye()
Dim randomx As Integer
randomx = Int(10 * Rnd) - 5
randomx = randomx * 15
MSComm.Output = eyeLr.Move(randomx + 127)
End Sub
Questions Discussion
??