Professional Documents
Culture Documents
ROBTICA
ROBTICA
PRCTICA
Programacin de un
Robot Humanoide
Martin Mellado Arteche
Diciembre, 2006
Contenido
1.
2.
3.
4.
5.
6.
7.
8.
9.
A.
B.
Introduccin___________________________________________________ 2
Hardware & Software ___________________________________________ 2
La programacin de los robots Robonova mediante RoboBasic __________ 3
Programacin y ejecucin de un ejemplo sencillo______________________ 5
Programacin de movimientos simples del robot ______________________ 6
Ejercicios prcticos de movimientos del robot_________________________ 7
Programacin de acciones del robot en base a datos sensoriales _________ 8
Control de sensores de proximidad_________________________________ 9
Ejercicios prcticos de navegacin del robot _________________________ 9
Instruction set in RoboBasic _____________________________________ 10
Summary of most significant commands in RoboBasic_________________ 11
DISA UPV
ROBTICA
1. Introduccin
Este guin pretende ser un punto de inicio para realizar trabajos prcticos de programacin de
robots humanoides con el uso del kit de robot humanoide Robonova-1, para introducir este
robot a usuarios y programadores que nunca han tenido un contacto previo con este robot o su
lenguaje de programacin (extensin del BASIC) denominado RoboBasic. En este guin se
describe el robot Robonova y una gua bsica de programacin con el objetivo de poder
empezar a mover el robot. Finalmente, se explica el uso de los sensores infrarrojos acoplados
al robot para desarrollar problemas bsicos de navegacin con el robot.
2. Hardware & Software
El robot Robonova-1 de Hitec es un robot humanoide, completamente articulado, de algo ms
de 30cm de altura que incluye un servomotor digital HSR-8498HB en cada articulacin. La
cinemtica del Robonova se compone de 5 articulaciones por cada pierna y 3 articulaciones
por cada brazo, dando un total de 16 articulaciones. Estos servos se pueden controlar
desarrollando programas en el lenguaje RoboBasic mediante el programa de desarrollo
tambin llamado RoboBasic y cargando el programa objeto generado en el controlador MRC3024 de la tarjeta MiCom mediante un cable serie RS232. La posicin de las articulaciones se
puede definir con instrucciones de programa, de forma que cambiando los ngulos de los
servos, el robot pueda hacer movimientos como andar, correr, bailar, etc.
Los servos se pueden modificar en un rango de grados (de 10 a 190), aunque algunas
articulaciones tienen un rango menos (por ejemplo, los tobillos o las rodillas) por restricciones
fsicas.
Adicionalmente, el controlador puede gobernar sensores (proximidad, inclinacin, ) y los
datos obtenidos con los sensores se pueden evaluar en los programas RoboBasic mientras se
ejecutan en el controlador del robot. Por ejemplo, se pueden escribir programas con una
instruccin condicional if then else que dependa de una variable cuyo valor es la inclinacin
del robot. Segn la posicin del robot, se puede ejecutar una secuencia correcta de
instrucciones para que el robot se levante (segn est tumbado boca arriba o boca abajo).
Todos los Robonovas que se usan en las prcticas incluyen los siguientes sensores instalados:
un sensor infrarrojo de proximidad sensor en su pecho,
un sensor infrarrojo de proximidad en cada uno de sus brazos,
un sensor de inclinacin (tilt) en su espalda,
un led infrarrojo en su cabeza para recibir rdenes del control remoto.
Los Robonova incluyen un control remoto. Los programas del robot pueden obtener
informacin del control remoto (por ejemplo, que botn se ha pulsado) y usar este dato in el
cdigo fuente como si fuera otro sensor. De esta forma, se pueden ejecutar varios programas o
modificar movimientos y acciones del robot segn la accin de un usuario en el control remoto.
Los Robonova se alimentan con una batera recargable de 5 clulas NiMH. En las prcticas se
dispone para cada robot de dos juegos de bateras para poder usar el robot mientras que se
recarga el otro juego de bateras. La recarga competa de una batera dura dos horas, mientras
que una batera completamente cargada suministra aproximadamente una hora de trabajo del
robot. Obviamente, estos tiempos son aproximados y dependen de los movimientos del robot o
de las acciones (por ejemplo, la comunicacin serie consume mucha batera). Por tanto, el
ahorro de batera es muy importante, principalmente al considerar que cuando la batera no
esta completamente cargada, el robot puede trabajar de forma incorrecta.
RoboBasic es un lenguaje de programacin extensin del BASIC diseado para el control de
robots humanoides y exclusivo para los robots Robonova. En RoboBasic se han aadido al
lenguaje general de programacin BASIC comandos necesarios para controlar los robots
Robonova. Para desarrollar programas y cargarlos en el robot, se suministra con los robots
Robonova el programa de desarrollo denominado RoboBasic (v2.5).
DISA UPV
ROBTICA
=============================
GOSUB standard_pose
'================================================
'Main procedure
MAIN:
'''''''YOUR CODE HERE''''''''''
'================================================
'================================================
standard_pose:
MOVE
MOVE
MOVE
MOVE
WAIT
G6A,100,
G6D,100,
G6B,100,
G6C,100,
100
100
100
100
RETURN
'================================================
Al ejecutar por primera vez el programa en un PC, se solicita una configuracin en la que se debe seleccionar el
controlador MR-C3024 Serie y aceptar el resto de pantallas.
DISA UPV
ROBTICA
G6A,1,0,0,1,0,0
G6B,1,1,1,1,1,1
G6C,0,0,0,0,0,0
G6D,0,1,1,0,1,0
Las instrucciones DIR fijan el sentido de rotacin de los servos. Los servos se referencian por
grupos en las instrucciones, de forma que el grupo G6A incluye los servos desde el 0 al 5, el
grupo G6B se compone de los servos desde el 6 al 11, etctera. El 1 significa sentido de
izquierda a derecha (sentido de las agujas del reloj) mientras que el 0 significa el sentido
contrario. Por ejemplo, en la primera instruccin se fijan los servos n 0 y 3 a rotacin normal
mientras que los servos 1, 2, 4 y 5 se fijan a rotacin inversa.
SPEED 5
La instruccin SPEED define la velocidad de los servos mediante un nmero del 1 al 15. Se
debe tener especial cuidado con las velocidades, ya que pueden daar el robot o incluso a una
persona que agarre el robot.
NUNCA SE DEBE USAR UNA VELOCIDAD MAYOR QUE 10
MOTOR G24
Con esta instruccin se indica que se va a trabajar con los servos del 0 al 23, activando estos
servos (los servos que se van a utilizar se deben activar siempre al principio de un programa).
Realmente con el Robonova no se usan 24 servos sino 16, pero esta instruccin es ms simple
que activar de forma individual slo los servos que se usan, lo que se hara con 16
instrucciones de la siguiente forma:
MOTOR
MOTOR
MOTOR
...
MOTOR
0
1
2
22
En una seccin posterior se mostrar cules son los 16 servos del robot que se utilizan.
GOSUB standard_pose
GOSUB sirve para realizar un salto a una subrituna de la que se volver con la instruccin
RETURN. En concreto, la subrutina standard_pose lleva el robot a una posicin estndar
(posicin de firmes).
standard_pose:
MOVE
MOVE
MOVE
MOVE
WAIT
G6A,100,
G6D,100,
G6B,100,
G6C,100,
100
100
100
100
RETURN
La instruccin MOVE mueve los servos a un cierto ngulo. De nuevo se usan grupos para
referenciar a los servos. En el primer MOVE se fijan los ngulos para los seis primeros servos
(del 0 al 5) y as sucesivamente hasta definir 4 grupos, es decir, 24 servos (del 0 al 23).
La instruccin WAIT realizar una espera hasta que todos los servos han alcanzado su posicin
final. En este caso, a la vuelta de la rutina se tendr el robot en su posicin estndar preparado
para que el programa contine la ejecucin.
DISA UPV
ROBTICA
Nota que las palabras reservadas reconocidas por RoboBasic se muestran automticamente
en azul, mostrndose as mismo una lnea de ayuda OUT [Port], [Value] sobre la sintaxis de la
instruccin OUT. As mismo, las palabras reservadas se cambian automticamente a
maysculas al terminar la instruccin. Ahora teclea el siguiente programa tal como aparece en
el guin.
MAIN:
'''''''YOUR CODE HERE''''''''''
OUT 52,1
DELAY 500
OUT 52,0
DELAY 500
GOTOMAIN
'================================================
El programa se puede compilar con el botn Make Object Code o la opcin correspondiente
del men Compile as como con la tecla F2. Compila y observa si se muestra algn error.
Obviamente, la instruccin GOTOMAIN produce un error. Cmbiala a GOTO MAIN y compila
de nuevo hasta que no se detecten errores. Este programa modifica la salida digital del puerto
52 alternndola entre los valores 0 y 1 cada medio segundo, repitiendo el proceso.
Antes de cargar el programa en el robot, slvalo con tu propio nombre en tu directorio
personal.
Verifica que el robot se encuentra conectado al ordenador mediante el cable serie y que el
robot est encendido (interruptor situado a su espalda). Pulsa el botn Download (o la tecla
F6 o la opcin correspondiente del men Compile).
EL ROBOT SE VA A MOVER A LA POSICIN ESTNDAR AL
ENCENDERSE, POR LO QUE HAY QUE TENER CUIDADO CON EL
MISMO PARA EVITAR POSIBLES DAOS O CADAS
Un programa se puede compilar y cargar en el robot a la vez mediante el botn Run All (la
tecla F9 o la opcin correspondiente del men Compile).
Nada ms se carga un programa en el robot, empieza a ejecutarse (esto puede ser peligroso
cuando el robot se mueva). Se dispone de los botones Controller Run Mode y Controller
Stop Mode (o las opciones correspondientes del men Controller) para ejecutar y parar el
programa desde RoboBasic.
DISA UPV
ROBTICA
DISA UPV
ROBTICA
Asegrate de que todos los servos estn otra vez activos (marcado su checkbox).
En la ventana del programa, pon el cursor en la lnea siguiente a la lnea de comentarios YOUR
CODE HERE y pulsa el botn Insert en la ventana de Control de Motores del Robonova. Tiene
que haberse aadido una instruccin MOVE que contiene los ngulos de los servos tal como
se muestra en dicha ventana.
Repite el proceso anterior con los brazos del robot alzados por encima de la cabeza en una
posicin prxima a la vertical (tal como en la figura anterior derecha).
Asegurndote de nuevo de que los servos estn activos, introduce una nueva instruccin
MOVE despus de la anterior.
Con el botn Wait (hay un error en el programa ya que el botn Close pequeo debera ser
Wait) se pueden introducir instrucciones WAIT para forzar la terminacin de los movimientos.
Cierra la ventana de Control de Motores del Robonova y escribe una instruccin DELAY
2000 tras cada movimiento para que se realice una espera de dos segundos.
Para que el programa se repita cclicamente, introduce una instruccin GOTO MAIN,
debiendo quedar el cdigo similar al siguiente:
Para probar el programa, complalo y crgalo en el robot con F9 (si se producen errores,
tendrs que editar el programa).
6. Ejercicios prcticos de movimientos del robot
Tras verificar la ejecucin del ejemplo anterior, en la prctica se indicarn ejercicios a realizar
con movimientos del robot.
Posibles ejercicios a realizar son:
1. Mantener el equilibrio del robot sobre una pierna.
2. Realizar un paso hacia delante.
3. Realizar un paso lateralmente (derecha e izquierda).
4. Realizar un paso hacia atrs.
5. Girar 45 sobre la posicin del robot (derecha e izquierda).
DISA UPV
ROBTICA
#AD port
0
1
2
6
7
El sensor tilt de inclinacin acoplado al robot es un sensor (basado en lquido capacitivo) con
un rango de medidas de 120, una resolucin menor de 0.1 y un tiempo de respuesta menor
de medio segundo. Como se conecta al puerto AD #6, se puede obtener su valor en una
variable de tipo BYTE (rango 0~213), o en una variable de tipo INTEGER (rango 0~855) segn
se muestra en la siguiente figura.
DISA UPV
ROBTICA
EJERCICIO 1:
Programad el robot para que mueva su hombro izquierdo (servo #6) segn la inclinacin
obtenida por el sensor tilt de forma que, independientemente de cunto se incline el robot hacia
delante o hacia atrs, el brazo se mantenga siempre en una posicin vertical.
Implementadlo primero usando una variable BYTE y despus modificadlo para una variable
INTEGER, analizando las diferencias entre ambos casos.
Sugerencias:
Usad la instruccin SERVO para mover el hombro izquierdo (ver apndices).
Los servos se pueden mover solo en un rango de grados desde 10 a 190.
Para el hombro izquierdo, 100 representa tener el brazo vertical hacia abajo, 10 es con el
brazo vertical hacia atrs y 190 es con el brazo vertical hacia adelante.
Un esquema grfico ayuda a realizar la conversin adecuada.
8. Control de sensores de proximidad
Los sensores infrarrojos acoplados al robot se basan en el sensor Sharp GP2D12 con una
rango de distancia medida de 10~80cm segn la siguiente figura. Fuera de este rango no se
garantiza la validez de los valores obtenidos: por ejemplo, para una distancia menor que 10cm,
el sensor devuelve un valor impredecible (es decir, basura). Como los sensores se conectan a
los puertos AD #0 (pecho), AD #1 (brazo izquierdo) y AD #2 (brazo derecho), los valores del
sensor se pueden obtener en variables de tipo INTEGER, dando valores en un rango
aproximado 682~88 (nota el rango decreciente en los valores del sensor) de forma que el valor
682 equivale a 10cm mientras que el valor 88 equivale a 80cm.
EJERCICIO 2:
Programad el robot para que mueva su hombro izquierdo de acuerdo al valor obtenido por el
sensor de proximidad del pecho una vez convertido a centmetros.
Sugerencia:
Por comodidad en el movimiento del robot, reajusta el rango del servo sumando 55 al valor en
centmetros de la distancia: Por ejemplo, para 10cm, el servo 6 debe moverse a valor 65
mientras que para distancias de 80cm se debe ir a valor 135.
DISA UPV
ROBTICA
DISA UPV
ROBTICA
G6C
Assign #12~#17 servos to group C
G6D
Assign #18~#23 servos to group D
G6E
Assign #24~#29 servos to group E
G8A
Assign #0~#7 servos to group A
G8B
Assign #8~#15 servos to group B
G8C
Assign #16~#23 servos to group C
G8D
Assign #24~#31 servos to group D
G12
Assign #0~#11 servos
G16
Assign #0~#15 servos
G24
Assign #0~#23 servos
G32
Assign #0~#31 servos
Command for sound controlling
MUSIC
Play music with PIEZO
Commands for analogical signal processing
AD
Read analogical signal from the AD port
REMOCON
Read a key value from an infrared remote control
Other commands
RND
Create a random number
REMARK or ()
Make a comment in code
set
Description
Addition symbol
Multiplication symbol
Remnant symbol
Numeral symbol
Text symbol
Equal sign or substitution symbol
Inequality symbol
Bit right shift symbol
Arithmetic operators
RoboBasic only supports
outcome will be ignored
=
Equal to
<
Less than
<= Equal or less than
Symbol
/
.
:
??
<
<<
Description
Subtraction symbol
Division symbol
Bit designation symbol
label symbol
Character string symbol
Inequality symbol
Bit left shift symbol
Variable/Constant
Figure type
size
BYTE
1 byte (8bit)
INTEGER
2 byte (16bit)
<>
>
>=
Not equal
Greater than
Equal or greater than
X <> Y
X > Y
X >= Y
Range
0-255
0-65535
Constants:
CONST OFF = 0
Variables:
DIM left_sensor AS BYTE
DISA UPV
ROBTICA
Bit pointing:
A.3 = IN(1)
Read value from port #1 and put this value in third bit of integer
variable A
Line label
A Line label is used for pointing to a location within the program
The label symbol (:) must be attached after the character label
GOTO
GOTO [Line label]
Example:
I = 7
IF I = 6 THEN GOTO L1
'Code
L1: J = 1
'Code
IF ... THEN ...
IF [condition] THEN
[statement when condition is true]
IF [condition1] THEN
[Statement when condition1 is true]
ELSEIF [condition 2] THEN
[Statement when condition2 is true]
ELSE
[Statement when condition 1 and condition2 are false]
ENDIF
FOR ... NEXT
FOR [Loop variable] = [Start] TO [End]
[Loop statement]
NEXT [Loop variable]
GOSUB ... RETURN
GOSUB [line label]
'Code
[line label]:
'Code
RETURN
WAIT
Wait until command (a motion for example) is finished
When one command is executed, the next command will be executed at the same time
without stopping the previous command. If the next command is required to run only
after the current command has finished, then the WAIT command is used
Example:
MOVE 120, 100, 140, 90, 70, 150
WAIT
DISA UPV
ROBTICA
DELAY
Delay the execution of the program for a set time (in milliseconds)
DELAY [Delay time]
IN()
Read digital signal value from port
IN([Pot number])
OUT
Send digital signal to a port
OUT [port number], [output value]
Example:
OUT 52,0
MOTOR
Set the servo to be used
MOTOR [motor number] / [Specifying group]
Example:
MOTOR 0 '#0 servo will be used
MOTOR G6A 'servo group 6A (#0~#5) will be used
MOTOR G6C 'servo group 6C (#12~#17) will be used
MOVE
Operate several servos at the same time
MOVE [group pointing], [motor n angle], ...
The range of the [motor angle] is between 10~190
Examples:
MOVE
MOVE
MOVE
MOVE
DISA UPV
ROBTICA
mrtn.isa.upv.es