Title: Robonova1 Instruction Manual v1.5
1Robonova-1 Instruction Manual v1.5
- Written by Meena Seralathan
2Overview
- 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 RoboBASICs
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.
3What 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 basic sound capabilities
- CD with RoboBASIC, roboRemocon, and roboScript
(all v2.5) for programming the robots 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)?
4What 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
5List of Actions Included with the Robonova-1
- Standard Pose
- Sit
- Bend
- Raise hands
- Left/Right/Front punch
- Tumble forward/backward
- Cartwheel left/right
- Turn left/right
- Step forward/backward/left/right
- Stand up (useful if the robot falls on its back
or its stomach)? - Left/Right kick
- Left/Right hand attack
- Fast walk
- Fly
- Handstand
- Dance
6A Glimpse of RoboBASIC
- Writing Code for a Single Action
7Writing 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, 76, 145, 93, 100, 100
- MOVE G6D,100, 76, 145, 93, 100, 100
- MOVE G6B,100, 30, 80, 100, 100, 100
- MOVE G6C,100, 30, 80, 100, 100, 100
- WAIT
8Writing 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
9Writing 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.
10Writing 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.
11Writing 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 G6A,100, 76, 145, 93, 100, 100
- MOVE G6D,100, 76, 145, 93, 100, 100
- MOVE G6B,100, 30, 80, 100, 100, 100
- MOVE G6C,100, 30, 80, 100, 100, 100
12Writing 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
13Writing 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
14Writing 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.
15A Glimpse of RoboBASIC
- Using Multiple Commands in a Single Program
16Using Multiple Commands in a Single Program
- There are ways to program the Robonova-1 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.
17Programming 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 pose
- MOVE G6A,100, 76, 145, 93, 100, 100
- MOVE G6D,100, 76, 145, 93, 100, 100
- MOVE G6B,100, 30, 80, 100, 100, 100
- MOVE G6C,100, 30, 80, 100, 100, 100
- WAIT
- bend
- SPEED 8
- MOVE G6A, 100, 58, 135, 160, 100, 100
- MOVE G6D, 100, 58, 135, 160, 100, 100
- MOVE G6B, 100, 30, 80, , , ,
- MOVE G6C, 100, 30, 80, , , ,
- WAIT
18Using 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 lt 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 lt 10 THEN
- bend
- SPEED 8
- MOVE G6A, 100, 58, 135, 160, 100, 100
- MOVE G6D, 100, 58, 135, 160, 100, 100
- MOVE G6B, 100, 30, 80, , , ,
- MOVE G6C, 100, 30, 80, , , ,
- WAIT
- standard pose
- MOVE G6A,100, 76, 145, 93, 100, 100
- MOVE G6D,100, 76, 145, 93, 100, 100
- MOVE G6B,100, 30, 80, 100, 100, 100
- MOVE G6C,100, 30, 80, 100, 100, 100
19Reading 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 isnt 1 (A ltgt 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 robots
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 ltgt 1 THEN GOTO MAIN
- SPEED 8
- GOSUB bow_pose
- DELAY 1000
- SPEED 6
- GOSUB standard_pose
-
- GOTO MAIN
20Reading 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
21Things to Note When Reading From a Bluetooth
Device
- The Robonova-1's board works with TTL, not
RS-232. To get bluetooth working you will need a
converter.
22Using the Catch-and-Play Features
23Catch-and-Play
- You can pull up this screen by going to the menu
and clicking Control -gt 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.
Dont forget to add a WAIT command at the end! - You can also use this window to learn more about
servo position values, in case youre interested
in correctly coding these values without having
to use the catch-and-play interface.
24A Deeper Glimpse at RoboBASIC
- Quick Index of RoboBASIC Commands
25General Program Commands
- GOTO function
- GOSUB function
- RETURN
- END
- STOP
- RUN
- WAIT
- DELAY time
- 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
26Commands Related to Variables
- DIM variable AS type
- 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
27For 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
28Supported Logical Expressions
29Digital Signal Commands
- IN port
- OUT port, outputValue
- BYTEIN port
- BYTEOUT port, outputValue
- INKEY port
- STATE port
- PULSE port
- TOGGLE port
- KEYIN ADPort, keys
- Read signal from input port
- Send signal to output port
- Read a byte from input port
- Send a byte to the output port
- Reduce chattering
- Get status of output port
- Send pulse signal to output port
- Reverse status of output port
- Receive input from analog keyboard
30Memory Commands
- PEEK region
- POKE region, byteData
- ROMPEEK region
- ROMPOKE region, byteData
- Read data from controller RAM
- Write data to controller RAM
- Read data from external EEPROM RAM
- Write data to external EEPROM RAM
31LCD Screen Commands
- LCDINIT
- CLS
- LOCATE x,y
- PRINT charString, ASCIInumber
- FORMAT var, type, position
- CSON
- CSOFF
- CONT
- DEC
- HEX
- BIN
- Initialize LCD module
- Clear all characters displayed on LCD
- Set x/y coordinates of the characters displayed
in the LCD - Display letter in LCD
- Set type format of characters on LCD
- Turn cursor in LCD on
- Turn cursor in LCD off
- Set letter contrast
- Send decimal character to LCD (used with FORMAT)?
- Send hexadecimal character to LCD (used with
FORMAT)? - Send binary character to LCD (used with FORMAT)?
32Motor/Servo Commands
- ZERO motor0_neutral... motorN_neutral
- MOTOR motor
- MOTOROFF motor
- MOVE motor0_angle...motorN_angle
- SPEED
- DIR
- PTP
- SERVO
- Set neutral angle of 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 (1-15 3 is initial)?
- Set the direction of the servos
- Turn simultaneous control of servos on/off
- Control a particular servo
33Even More Motor/Servo Commands
- PWM
- FPWM
- HIGHSPEED
- FASTSERVO
- POS
- MOVEPOS
- MOVE24
- MOTORIN
- GETMOTORSET
- INIT
- Set pulse width control for DC motor
- Set pulse width and frequency
- Allow/disable servos to move in fast mode
- Operate servos at maximum speed
- 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)? - Set initial pose
34Last Batch of Motor/Servo Commands
- AIMOTOR
- AIMOTOROFF
- AIMOTORIN
- SETON
- SETOFF
- ALLON
- ALLOFF
- Control motors via an AI motor
- Turn off AI motor
- Read position values from AI motor
- Use in conjunction with other commands to enter
setup mode - Cancel setup mode
- Use in conjunction with other commands to enter
setup mode for all servos - Cancel setup mode for all servos
35Assigning Motor Group Commands
- G6A
- G6B
- G6C
- G6D
- G6E
- G8A
- G8B
- G8C
- G8D
- G12
- G16
- G24
- G32
- Assign servos 0-5 to group A
- Assign servos 6-11 to group B
- Assign servos 12-17 to group C
- Assign servos 18-23 to group D (not available for
original robot)? - Assign servos 24-29 to group E (not available for
original robot)? - Assign servos 0-7 to group A
- Assign servos 8-15 to group B
- Assign servos 16-23 to group C
- Assign servos 24-31 to group D (not available for
original robot)? - Assign servos 0-11
- Assign servos 0-15
- Assign servos 0-23
- Assign servos 0-31 (not available for original
robot)?
36Sound Commands
- SOUND pitch,length
- MUSIC stringOfNotes
- TEMPO value
- 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
37MUSIC Command (More Detail)?
- Scale starts at, C (CDEFGAB)?
- sharp note
- flat note
- ltspacegt, P rest
- gt raise an octave
- lt 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
38MUSIC Command (Even More Detail)?
- Extra notation is placed before the actual note
- Song is written as a string of notes
- MUSIC M4GGAA GGE GGEED
- MUSIC DEFGABgtCD
39External Communication Commands
- ERX baudRate,byteVar,ErrorProcessFunction
- ETX baudRate, byteVar
- AD(ltADPortgt)?
- REMOCON(1)?
- SONAR(ltUltrasoundPortgt)?
- RCIN(ltRCPortgt)?
- GYRODIR group,motorDirection
- GYROSET group,gyroPort
- GYROSENSE group,byteSensitivityValue
- Reads a byte from a RS-232 connection through the
RX port (goes to ErrorProcessFunction if byte is
either not received or is invalid)? - 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 (lower controller port output
ultrasound port, higher controller port input
ultrasound port)? - Reads signal from RC remote control
- Sets direction of motor group when they are
connected to a specified gyro - Assigns gyro to particular set of servos
- Sets sensitivity of servo group to the gyro
40Ultrasound Port Information
- Digital In/Out Controller Port
Port 0
0 Ultra-sonic Port output
Port 1
0 Ultra-sonic Port
input Port 2
1 Ultra-sonic
Port output Port 3
1
Ultra-sonic Port input Port 4
2 Ultra-sonic Port output
Port 5
2 Ultra-sonic Port input
Port 6
3 Ultra-sonic Port output
Port 7
3 Ultra-sonic Port input
Port 8
4 Ultra-sonic Port
output Port 9
4
Ultra-sonic Port input Port 10
5 Ultra-sonic Port output Port
11
5 Ultra-sonic Port input
Port 12
6 Ultra-sonic Port output
Port 13
6 Ultra-sonic Port input
Port 14
7 Ultra-sonic Port output
Port 15
7 Ultra-sonic Port
input Port 16
8 Ultra-sonic
Port output Port 17
8
Ultra-sonic Port input Port 18
9 Ultra-sonic Port output Port
19
9 Ultra-sonic Port input
Port 20
10 Ultra-sonic Port output
Port 21
10 Ultra-sonic Port input
Port 22
11 Ultra-sonic Port
output Port 23
11
Ultra-sonic Port input
41Gyro Port Information
Port 0 (Port 32)
Gyro 1 channel output Port
Port 1 (Port 33)
Gyro 2 channel output Port Port 2
(Port 34) Gyro 3
channel output Port Port 3 (Port 35)
Gyro 4 channel
output Port Port 4 (Port 36)
Gyro 1 channel input Port
Port 5 (Port 37)
Gyro 2 channel input Port
Port 6 (Port 38)
Gyro 3 channel input Port Port 7
(Port 39) Gyro 4
channel input Port
42Baud Rates SupportedAll with 8-bit data, no
parity, 1 stop bit
- 2400
- 4800
- 9600
- 14400
- 19200
- 28800
- 38400
- 57600
- 76800
- 115200
- 230400
43Random Commands
- RND
- REMARK Description
- ON variable GOTO function
- DEVICE Controller
- LIMIT Motor,MinValue,MaxValue
- Get a random byte number
- Another way of commenting code
- Go to a specified section of the code when a
variable is of a certain value (simpler version
of long if/elseif block)? - Set controller that will run the program once
compiled - Set a servos' maximum rotation angle (default
10-190)?
44Using the Robonova-1 with Myro
- The commands on the right are the ones available
in Myro that are specific to the Robonova-1 (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
45Finit