Tetrix: Mantis

mantis lateralEn este nuevo artículo sobre TETRIX (el anterior fue TETRIX: Primeras Impresiones) quiero centrarme en la experiencia de construcción con este nuevo tipo de pieza, que no tiene demasiado en común con la pieza a la que LEGO nos tiene acostumbrados. Aunque los elementos estructurales son muy ligeros (están hechos de aluminio), debemos tener en cuenta que la electrónica de estos modelos es muy pesada, entre otros motivos porque requiere de una batería adicional.

Primero quiero centrarme en los ejes, en este caso ya no se trata de ejes en forma de cruz, son ejes cilíndricos. Para poder hacer uso de estos ejes debemos utilizar un axle hub o soporte para eje, un elemento de sujeción que mantiene el eje fijo en una postura y está dotado de 4 agujeros para tornillos.

eje-hub

Haciendo uso de estos 4 agujeros podremos unir nuestro eje con otras piezas.

eje-rueda

Las uniones entre elementos estructurales se realiza mediante tornillos y tuercas, lo que supone un inmenso cambio con respecto a la facilidad de unión de las piezas Technic mediante pines. Sin embargo, puede ser que simplemente necesitemos un periodo de adaptación.

Después de esta breve introducción, vamos a centrarnos en la construcción de un modelo básico que vendría a ser como un tribot de gran tamaño: la mantis. Este modelo tiene dos motores 12V para tracción y un servo adicional para controlar los movimientos de las patas delanteras. Además hace uso de las ruedas omnidireccionales que harán las veces de la rueda loca que monta el tribot en su parte posterior.

Vamos a ver algunas imágenes del proceso de construcción.

Esta es la base

base

El lateral

lateral

Base ensamblada

base 2

Detalle de la parte trasera

Detalle trasera

Modelo completo

mantis lateral

Es un modelo bastante grande y muy pesado cuyo tiempo de construcción se aleja bastante de los 30 minutos (teóricos) para construir el tribot. Para ser más concretos se tardaron 2 horas en terminar este primer robot de TETRIX. Puede también que parte de esa demora se deba a la adaptación al nuevo tipo de pieza. Aunque la verdad es que mientras lo estás montando lo único que piensas es en terminar y en verlo funcionar, ya que impresiona mucho. Más en vivo que en foto.

Programación del robot TETRIX

Para controlar los elementos de TETRIX hacemos uso del NXT, pero ahora tenemos electrónica nueva, con lo que no podremos programarlo de la forma habitual, necesitaremos hacer uso de las nuevas herramientas de programación adaptadas a este sistema.

Podéis descargar el bloque para NXT-G (descarga TETRIX), aunque este bloque sólo nos permite controlar los motores 12V que conectamos al Mindstorms a través del controlador HiTechnic, no nos permite controlar los servos.

Bloque

Así que, si queremos hacer uso de todas las posibilidades de control, tendremos que programarlo con RobotC, que en su versión 2.x ya incluye soporte para TETRIX.

Para poder hacer uso de la plataforma TETRIX en RobotC, lo primero que debemos hacer es configurar el programa, para ello tendremos que ir a:

Robot-> Platform Type -> LEGO Mindstorms NXT+TETRIX

RobotC

Una vez hecho esto tendremos que configurar los motores/servos/controladores, para ello RobotC tiene una herramienta que nos permite configurarlo gráficamente incluyendo directamente el código en nuestro programa.

Robot-> Motors and Sensors Setup

RobotC_2

Y nos abrirá esta ventana

RobotC_3

Aquí tendremos que configurar el puerto del controlador, los motores que tenemos conectados y los servos. Al aceptar la configuración, aparecerá en pantalla un código como este:


#pragma config(Hubs,S1,HTMotor,HTServo,none, none)
#pragma config(Sensor,S4,sonic,sensorSONAR)
#pragma config(Motor,mtr_S1_C1_1,motorD,tmotorNormal,openLoop)
#pragma config(Motor,mtr_S1_C1_2,motorE,tmotorNormal,openLoop,reversed)
#pragma config(Servo,srvo_S1_C2_1,servo1,tServoNormal)
/*!Code automatically generated by 'ROBOTC' configuration wizard!*/

NOTA: Atención a la nomenclatura necesaria para declarar los motores y sensores, aunque RobotC escriba el código por nosotros, no está de más saber qué hace.

mtr_S1_C1_2

  • Indicamos en tipo de elemento: mtr -> motor
  • Puerto de sensores del NXT donde está conectado el controlador : S1 -> puerto de sensor 1
  • Controlador al que se conecta el motor: C1 -> controlador de motores 1
  • Dónde está conectado el motor al controlador: 2 -> puerto 2 del controlador

    Los controladores de motores HiTehcnic controlan 2 motores 12V DC y tienen entrada para 2 encoders. además tienen 2 entradas/salidas para la batería.

    srvo_S1_C2_1

  • Indicamos en tipo de elemento: srvo -> servo
  • Puerto de sensores del NXT donde está conectado el controlador : S1 -> puerto de sensor 1
  • Controlador al que se conecta el motor: C2 -> controlador 2, si ambos controladores está conectados al mismo puerto de sensor del NXT, es porque uno de ellos C1 se conecta directamente al puerto y el otro C2 está conectado a través de C1.
  • Dónde está conectado el servo al controlador: 1 -> canal 1 del controlador.

    Los controladores de servos HiTechnic tienen 6 canales para servos y 2 entradas/salidas para la batería.

    Una vez hecho esto ya podremos escribir el programa propiamente dicho. El ejemplo de programa que tenemos a continuación hace de nuestra mantis un Bump&Go algo más sofisticado, ya que no necesita chocar con los objetos, basta con que se encuentren a poca distancia de su sensor ultrasónico.

    Para ser más exactos, cuando detecta un objeto a menos de 30 cm se para y lo amenaza haciendo subir y bajar sus patas delanteras hasta 3 veces, si el objeto se retira antes de completar el ciclo de 3 amenazas el robot seguirá su camino. Si por el contrario, el objeto no se aparta, la mantis dará la vuelta y seguirá avanzando hasta detectar otro obstáculo.

    Aquí tenéis el código de este programa.


    #pragma config(Hubs,S1,HTMotor,HTServo,none,none)
    #pragma config(Sensor,S4,sonic,sensorSONAR)
    #pragma config(Motor,mtr_S1_C1_1,motorD,tmotorNormal,openLoop)
    #pragma config(Motor,mtr_S1_C1_2,motorE,tmotorNormal,openLoop,reversed)
    #pragma config(Servo, srvo_S1_C2_1, servo1, tServoNormal)
    /*!Code automatically generated by 'ROBOTC' configuration wizard!*/
    task main()
    {
    int delta = 4;
    int flag=0;
    while (true) //Bucle infinito
    {
    while (flag<=1) // flag que controla cuantas veces repetimos el movimiento { while(SensorValue[sonic]>30) //Mientras que la distancia sea menor que 30 cm
    {
    motor[motorD]=40; // Avanzamos en línea recta
    motor[motorE]=40;
    }
    motor[motorD]=0; // Paramos los motores
    motor[motorE]=0;
    wait1Msec(1000); // Esperamos 1 segundo
    servoChangeRate[servo1] = delta;// servoChangeRate =nº de posiciones por actualización
    if(ServoValue[servo1] < 80) //Si no hemos llegado a los 80º, nos movemos hasta alcanzarlos { while(ServoValue[servo1] < 80) { servo[servo1] = 80; } } wait1Msec(1000); // Espera 1 segundo if(ServoValue[servo1] >= 80) // Si hemos llegado a los 80º...
    {
    while(ServoValue[servo1] > 0)
    {
    servo[servo1] = 0; // ... nos movemos hasta 0
    }
    }
    flag=flag+1; // flag nos permite controlar el nº de veces que repetimos
    } // el movimiento del servo
    motor[motorD]=20; // Giramos
    motor[motorE]=-20;
    wait1Msec(1000); // Esperamos 1 segundo
    motor[motorD]=0; // Paramos los motores
    motor[motorE]=0;
    flag=0; // Reseteamos el valor de flag y como es un bucle infinito
    } // nos movemos de nuevo en busca de otro objetivo
    }

    Y para que lo veáis en funcionamiento, un pequeño vídeo.

  • Comments are closed.