Title: Diseo e implementacin de movimientos en el Sony Aibo ESR7
1Diseño e implementación de movimientos en el Sony
Aibo ESR-7
- Carlos Ramos
- Carlos Rivera
2Diseño de movimientos
- Cada movimiento debe cumplir las siguientes
características - La primera y la última posición en el movimiento
debe ser idéntica a la posición de inicio y final
del ciclo de caminata o muy parecida a dicha
posición. - Debe ser breve a fin de evitar pérdida de
información visual. - No debe comprometer la integridad del robot.
3Diseño de movimientos
MEdit for ERS-7.1.0.7
Permite observar el efecto de cambio en los
actuadores Permite animar una secuencia de
posiciones No simula condiciones físicas.
4Implementación de movimientos en el robot
EK2006 - Exportación de los movimientos al
archivo MOTION7.ODA
El archivo mtn debe ser integrado al objeto
MOTION7.ODA
El identificador del movimiento debe declararse
en MONETCMD.CFG
5Implementación de movimientos en el robot
EK2007 Definición de movimientos en EKMotion
Objeto heredado de EK2006
Contenido del archivo stub.cfg de EKMotion
6EKMoves.h
7EKMotion.cc Push
8EKMotion.cc - MoveToPos
9EKMotion.cc - Kickb
10EKMotion.cc MoveHeadKick
void EKMotionMoveHeadKick(int n)
double jointValueNUMBER_HEAD_JOINTS
switch (n) case 1 for (int i 0 ilt4
i) jointValuei (EK_POSiPI)/180 break
case 4 for (int i 0 ilt4
i) jointValuei (KICK_101_02iPI)/180
break case 5 for (int i 0 ilt4
i) jointValuei (KICK_101_03iPI)/180
break case 6 for (int i 0 ilt4
i) jointValuei (KICK_101_04iPI)/180
break SetHeadJoints(jointValue) return
11EKMotion.cc MoveLegsKick
void EKMotionMoveLegsKick(int n)
static double leg_jointsNUM_LEG_JOINT
switch (n) case 1 for (int i 0 ilt12
i) leg_jointsi (EK_POSi4PI)/180 bre
ak case 4 for (int i 0 ilt12
i) leg_jointsi (KICK_101_02i4PI)/180
break case 5 for (int i 0 ilt12
i) leg_jointsi (KICK_101_03i4PI)/180
break case 6 for (int i 0 ilt12
i) leg_jointsi (KICK_101_04i4PI)/180
break
SetLegJoints(leg_joints) return
12EKMotion.cc SetJoint
Int EKMotionSetHeadJoints(double x)
for (int i 0 i lt NUMBER_HEAD_JOINTS
i) SetJoint(HEAD_JOINT_INDEXi, xi)
return 1 Int EKMotionSetLegJoints(double
x) for (int i 0 i lt
NUMBER_LEG_JOINTS i) SetJoint(LEG_JOINT_INDEX
i, xi) return 1 Void
EKMotionSetJoint(int index, double val)
if ((index gt 0) (index lt NUMBER_JOINTS))
joint_valuesindex
int(1e6val) send_joint_valuesindex true
send_joints true
13EKMotion.cc - SendJointCommandVector
14Caminata
- Control de los ángulos de las articulaciones.
- 3 articulaciones
- Rotator. Pata entera en eje horizontal de
izquierda a derecha. - Abductor. Rota la pata fuera del cuerpo.
- Knee. Flexiona la parte inferior de la pata.
- Caminata tipo trote
- Patas diagonalmente opuestas dan un paso al mismo
tiempo. - Un par da un paso al frente mientras que el otro
par se mantiene en el suelo. - Luego se van alternando.
15Caminata
- Para que el Aibo se mueva en línea recta el pie
debe moverse en una curva en el aire. - Media elipse.
Los 12 parámetros definen la manera de caminar
del Aibo El locus frontal (tres parámetros
alto, x, y). El locus trasero (tres
parámetros alto, x, y). El largo del
locus. El multiplicador de skew en el plano
x-y del locus (para girar). La altura de la
parte frontal del cuerpo. La altura de la parte
trasera del cuerpo. El tiempo que toma cada pie
para moverse en el locus. La fracción de tiempo
que pasa cada pie en el suelo.
Figure. Locus elíptico del pie del Aibo.
16Caminata
- Desde EKMain se envía la estructura EKMotionData.
- Para que el robot camine command tiene que ser
igual a 0 y x, y y ang_walk definen la
caminata.
- En EKMotion el servicio ReceiveAction atiende el
envío de la estructura desde EKMain y procesa la
información arrancando el módulo Push en
EKMotion.cc
17Caminata
- Como ya se dijo, en EKMotion, el servicio
ReceiveAction atiende el envió de la estructura
desde EKMain y procesa la información arrancando
el modulo Push en EKMotion.cc. - Esta función a su vez invoca a la función
WalkLegs.
- Si xWalk es menor que 0 entonces se mueve a la
izquierda en caso contrario a la derecha. - Si yWalk es negativo entonces se mueve hacia
atrás en caso contrario hacia el frente. - El parámetro aWalk rige la rotación. Si el valor
es mayo que cero entonces rota a la izquierda en
caso contrario rota a la derecha.
18(No Transcript)