Robonova-1 Instruction Manual v1.0

Download Report

Transcript Robonova-1 Instruction Manual v1.0

Robonova-1 Instruction
Manual v1.0
Written by Meena Seralathan
Under mentor Doug Blank
Overview
• The Robonova-1 is a humanoid robot able to execute a
number of pre-programmed moves, as well as execute
new moves through use of the RoboBASIC programming
language, and the RoboBASIC’s catch-and-play feature,
which allows for real-time recording of servo positions for
even simpler routine coding. While there are also a
program designed for emulating the remote control
(roboRemocon) and a program designed to be a version
of RoboBASIC that is coded more like a script and less
like a program(roboScript), it is generally easier to
program in the RoboBASIC program, and thus it will only
be the RoboBASIC program that will be highlighted in
this presentation.
What the Robonova-1 Comes With
•
•
•
•
•
•
•
16 servos
MR-C3024 controller board
5-cell NiMH rechargeable battery and charger
IR sensor on head for use with included remote control
8 AD ports
PIEZO speaker for sound capabilities
CD with RoboBASIC, roboRemocon, and roboScript (all
v2.5) for programming the robot’s moves; also comes
with code demonstrating various movements the
Robonova-1 can do, such as walking, sitting, and
punching, and an instruction PDF (in English, Japanese,
or Korean)
What the Robonova-1 Can Be
Modified To Have
•
•
•
•
•
•
•
•
•
•
•
•
Up to 8 additional servos
Touch Sensors
Sound Sensors
IR Sensors
Sonar Sensors
Light Sensors
Tilt Sensors
Accelerometer
Gyro
Gripper Hands (to replace hands included with robot)
Camera
Different-colored head/brackets
Examples of Programs Included
with the Robonova-1
•
•
•
•
•
•
•
•
Standard Pose
Sit
Bend
Raise hands
Left punch
Tumble forward
Stand up (useful if the robot falls over)
Turn
A Glimpse of RoboBASIC
Writing Code for a Single Action
Writing Code for a Single Action
• On the right is an
example of what
roboBASIC code looks
like. This code tells the
robot to move to its
standard position. Before
giving a more detailed
explanation of how to
program using this
language, we will explain
what this code block
does.
GETMOTORSET G24, 1, 1, 1, 1, 1, 0,
1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0,
0, 1, 1, 1, 1, 1, 0
SPEED 5
MOTOR G24
MOVE G6A,100,
100
MOVE G6D,100,
100
MOVE G6B,100,
100
MOVE G6C,100,
100
WAIT
76, 145,
93, 100,
76, 145,
93, 100,
30,
80, 100, 100,
30,
80, 100, 100,
Writing Code for a Single Action
•
This command is used to read the
position of a set of servos, and to
then set the servo positions. In
this line, GETMOTORSET reads the
positions of all servos (G24 refers
to all servos under the control of
the board), and then sets each to
the values listed after G24. A “1”
tells the Robonova-1 to keep the
position of the servo as-is, while a
“0” tells the Robonova-1 to change
the servo to its initial position. It is
best to put this at the beginning of
all programs, because it sets the
servos to positions that will ensure
that it starts moving safely.
GETMOTORSET G24, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0,
0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0
Writing Code for a Single Action
• This command is rather
straightforward; it sets the
speed of the servo movement.
The higher the value after
SPEED, the faster the robot will
move. Values can range
between 1 and 20, but it is best
to keep most movements at 10
or lower for stability (any value
higher than 15 is likely to
cause problems with an
unmodded robot). For very fast
movements there is a
HIGHSPEED command, which
will be touched on later.
SPEED 5
Writing Code for a Single Action
• This command turns on
the output port of the
specified servo set (in this
case, all of them). In
other words, it opens the
servo ports so that your
code can talk to the
servos and tell them to
move. If planning on
having all body parts of
the robot move during
your routine, this is a
must-have piece of code
at the beginning of the
file.
MOTOR G24
Writing Code for a Single Action
• These lines are what actually
move the Robonova-1. The
command MOVE is followed by
the set of servos you want to
move (more info about what
G6A, etc mean on the next
slide).
• 100 is the initial value for servo
positions; values above 100
move the servos clockwise,
while values below 100 move
the servos anti-clockwise.
MOVE
MOVE
MOVE
MOVE
G6A,100,
G6D,100,
G6B,100,
G6C,100,
76, 145, 93, 100,
76, 145, 93, 100,
30, 80, 100, 100,
30, 80, 100, 100,
100
100
100
100
Writing Code for a Single Action
• Besides the group
G24, there are 4
subsets of servos that
one can concentrate
on. Each set can
control six servos at a
time.
•
•
•
•
A: Servos 0-5
B: Servos 6-11
C: Servos 12-17
D: Servos 18-23
Writing Code for a Single Action
To the right is a diagram to
show what servo
corresponds to what
number in the motor
group. As you can see:
• Group A mostly controls
the left leg
• Group B mostly controls
the left arm
• Group C mostly controls
the right arm
• Group D mostly controls
the right leg
Writing Code for a Single Action
• Last but not least is the
WAIT command. This
command tells the servos
to wait until every
specified motor set has
finished moving before
going onto whatever code
comes after the
movement. This is
particularly useful if you
plan on having multiple
movements in one
routine.
WAIT
A Glimpse of RoboBASIC
Using Multiple Commands in a
Single Program
Using Multiple Commands in a
Single Program
• There are ways to program the Robonova1 to execute multiple movements in
succession, as well as ways to program it
to loop through commands, or to read
input from the remote control and act
accordingly. Each will be described briefly.
Programming a Chain of
Movements
•
This program will cause the robot
to move to its standard pose, take
a bow, then return to its standard
pose. Putting a quotation mark
before a line is how one
comments out a line of code. As
you can see, having one move
succeed another is as easy as
putting the new servo values after
the previous move.
GETMOTORSET G24, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0
SPEED 5
MOTOR G24
‘standard
MOVE
MOVE
MOVE
MOVE
WAIT
pose
G6A,100,
G6D,100,
G6B,100,
G6C,100,
‘bend
SPEED 8
MOVE G6A,
MOVE G6D,
MOVE G6B,
MOVE G6C,
WAIT
‘standard
MOVE
MOVE
MOVE
MOVE
WAIT
100,
100,
100,
100,
pose
G6A,100,
G6D,100,
G6B,100,
G6C,100,
76, 145, 93, 100,
76, 145, 93, 100,
30, 80, 100, 100,
30, 80, 100, 100,
58,
58,
30,
30,
100
100
100
100
135, 160, 100, 100
135, 160, 100, 100
80, , , ,
80, , , ,
76, 145, 93, 100,
76, 145, 93, 100,
30, 80, 100, 100,
30, 80, 100, 100,
100
100
100
100
Using For Loops, If Statements
•
•
•
•
For loops and if statements are included in
RoboBASIC and are similar to their BASIC
parallels.
For the interval in the for loop one has to
take a predefined variable (in this case, I),
set it to an initial value (0), and choose a
value to increase the initial value to (10).
The end of the for loop is signified by the
NEXT command.
For the if statement, one chooses a
predefined variable with a value (X),
determines the condition of the statement (X
< 10), then gives a command for the
program should that condition be fulfilled. If
statements are then ended by the ENDIF
command.
This is a good time to also point out how to
declare variables in RoboBASIC. The syntax
is basically, DIM (variable letter) AS (variable
type; only bytes and integers are supported).
Assigning variables is rather similar to most
other languages: variable name = value.
DIM I AS INTEGER
DIM X AS INTEGER
X = 2
FOR I = 0 TO 10
IF X < 10 THEN
‘bend
SPEED 8
MOVE G6A,
MOVE G6D,
MOVE G6B,
MOVE G6C,
WAIT
100,
100,
100,
100,
‘standard pose
MOVE G6A,100,
MOVE G6D,100,
MOVE G6B,100,
MOVE G6C,100,
WAIT
ENDIF
X = X + 4
NEXT
58,
58,
30,
30,
135, 160, 100, 100
135, 160, 100, 100
80, , , ,
80, , , ,
76, 145, 93, 100,
76, 145, 93, 100,
30, 80, 100, 100,
30, 80, 100, 100,
100
100
100
100
Reading from the Remote Control
•
RoboBASIC already has commands to
read in values for sensors, and has a
command that specifically reads the
input sent from the remote to the
robot. In this code we are trying to
have the robot bow if the user presses
1 on the remote control pad. A is a
predefined variable that stores the
value coming from the first instance of
REMOCON (in other words, the first
controller to send data to it). If A isn’t 1
(A <> 1), then the code restarts at
the beginning of MAIN (GOTO MAIN);
otherwise, it goes to another function
that defines the bow position, delays
the robot’s movement for a second
(DELAY 1000), then moves the robot
to its standard position and loops back
to the beginning of MAIN.
MAIN:
A = REMOCON(1)
IF A <> 1 THEN GOTO MAIN
SPEED
GOSUB
DELAY
SPEED
GOSUB
8
bow_pose
1000
6
standard_pose
GOTO MAIN
Reading from Serial Device
• This bit of code will read and
store a byte sent over a serial
connection with a baud rate of
57600, and will loop back to
the beginning of
read_bluetooth until it gets
a byte. When it does get a
byte, it stores it in X and then
returns to the part of the code
that called the function.
• ERX (baud rate), (predefined
byte variable), (location in
code to go to if byte is not
read)
read_bluetooth:
ERX 57600, X, read_bluetooth
RETURN
If You’re Using pySerial...
• Sending bytes through the provided serial cable
won’t work. Since the cable’s input and output
ports are the same (generally COM1), the byte
will appear to have been sent, only to have
bounced back before the robot could process
the information.
• Sending a character to the robot using pySerial
(part of the Python programming language
library) will give the robot the binary value of the
character, not its ASCII value. In other words,
ser.write(“C”) is read into the Robonova-1 as
01000011, not as 67.
Using the Catch-and-Play
Features
Via RoboBasic v2.5
Catch-and-Play
•
•
•
You can pull up this screen by going to
the menu and clicking Control -> Servo
Motor Real-Time Control.
To use the catch-and-play feature, you
first unselect all of the servos that you
want to move. This is about the
equivalent of MOTOR. After that, you
move the robot into the position you
want, then make sure that all boxes
are checked again. This is the
equivalent of GETMOTORSET. Finally,
to add the new position to your code,
press the Move Insert button of each
motor group. Don’t forget to add a
WAIT command at the end!
You can also use this window to learn
more about servo position values, in
case you’re interested in correctly
coding these values without having to
use the catch-and-play interface.
A Deeper Glimpse at
RoboBASIC
Quick Index of Our Most Relevant
RoboBASIC Commands
General Program Commands
•
•
•
•
•
•
•
•
•
GOTO
GOSUB
RETURN
END
STOP
RUN
WAIT
DELAY
BREAK
•
•
•
•
•
•
•
•
•
Jumps to a specified part of
program and executes all code
henceforth
Jumps to specified part of
program and executes code until a
RETURN is reached
Returns from a subroutine to the
point where the subroutine was
called
End the program
Stop the program
Run the program continuously
Wait until the program has finished
before moving on
Delay the execution of the next
line of code (value in milliseconds)
Pause the program and switch to
debug mode
Commands Related to Variables
•
•
•
•
DIM ... AS
CONST
INTEGER
BYTE
• Declare a variable as
a type
• Declare a constant
variable
• Used with DIM...AS to
declare an integer
variable
• Used with DIM...AS to
declare a byte
variable
For Loops/If Statements
•
•
•
•
•
•
IF...THEN
ELSEIF...THEN
ELSE
ENDIF
FOR...TO
NEXT
• Start a conditional
statement
• Start a secondary
conditional statement
• Set a default statement
for when no conditions
have been met
• End a set of conditional
statements
• Start a for loop
• End a for loop or iterate
variable to next value
Supported Logical Expressions
•
•
•
•
AND
OR
XOR
NOT
•
•
•
•
•
•
<
>
<=
>=
=
<>
Motor/Servo Commands
•
•
•
•
•
•
•
•
MOTOR
MOTOROFF
MOVE
SPEED
ACCEL
DIR
PTP
SERVO
• Turn on the output port of the
servo
• Turn off the output port of the
servo
• Move a set of servos to
specified positions
• Set the speed of the servos
• Set the acceleration of the
servos
• Set the direction of the servos
• Turn simultaneous control of
servos on/off
• Control a particular servo
Motor/Servo Commands (cont...)
•
•
•
•
•
•
HIGHSPEED
POS
MOVEPOS
MOVE24
MOTORIN
GETMOTORSET
•
•
•
•
Turn the fast servo mode on/off
Set a position for the robot
Move to specified POS
Move all 24 servos at the same
time
• Read in the motor values for
the current position
• Get the current servo values
and determine whether to keep
them or set them to their initial
positions (1 = keep, 0 =
initialize)
Sound Commands
• SOUND
• MUSIC
• TEMPO
• Plays a note based
on inputted
frequency/duration
• Plays a string of notes
based on inputted
note information
• Sets the tempo of the
song/sound
MUSIC Command (More Detail)
• Scale starts at, C
(CDEFGAB)
• # = sharp note
• $ = flat note
• <space>, P = rest
• > = raise an octave
• < = lower an octave
• L = Low Octave
• M = Middle Octave
• H = High Octave
• T = change tempo
•
•
•
•
•
•
•
•
•
•
1 = whole note
2 = half note
3 = dotted half note
4 = quarter note
5 = dotted quarter note
8 = 8th note
9 = dotted 8th note
6 = 16th note
7 = dotted 16th note
0 = 32nd note
MUSIC Command (More Detail)
• Extra notation is
placed before the
actual note
• Song is written as a
string of notes
• MUSIC “M4GGAA
GGE GGEED”
• MUSIC
“DE#FGAB>#CD”
External Communication
Commands
•
•
•
•
•
•
•
•
•
ERX
ETX
AD
REMOCON
SONAR
RCIN
GYRODIR
GYROSET
GYROSENSE
•
•
•
•
•
•
•
•
•
Reads a byte from a RS-232
connection through the RX port
Sends a byte through the TX port
using the RS-232 connection
Reads analog signal from device
connected to specified AD port
Reads signal from remote
control/virtual REMOCON
Reads distance being measured
by the ultrasonic wave port
Reads signal from RC remote
control
Sets direction of gyro
Assigns gyro to particular servo
Sets sensitivity of gyro
Random Commands
•
•
•
•
•
•
RND
ON...GOTO
PEEK
POKE
ROMPEEK
ROMPOKE
• Get a random number
• Go to a specified section of the
code when a variable is of a
certain value
• Read data from the controller
RAM
• Write data to the controller
RAM
• Read data from controller’s
EEPROM RAM
• Write data to controller’s
EEPROM RAM
For more specific commands,
see the RoboBASIC instruction
manual which was included with
the Robonova-1.
Using the Robonova-1 with Myro
• The commands on the
right are the ones
available in Myro that are
specific to the Robonova1 (for actions that are
available to any robot
with a fluke, such as
taking pictures, see the
Myro documentation on
wiki.roboteducation.org).
•
•
•
•
standardPose()
bend()
sit()
step(distance, direction)
– Can step forward,
backward, left, or
right
• turn(angle, direction)
– Can turn left or right
• standUp(direction)
– Can get up from the
front or the back
Finit