Presentation on theme: "Robonova-1 Instruction Manual v1.0 Written by Meena Seralathan Under mentor Doug Blank."— Presentation transcript:
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
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
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 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
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
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.
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 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 ‘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
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, 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 WAIT ENDIF X = X + 4 NEXT
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 8 GOSUB bow_pose DELAY 1000 SPEED 6 GOSUB 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, 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 = 8 th note 9 = dotted 8 th note 6 = 16 th note 7 = dotted 16 th note 0 = 32 nd 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 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