Control Lego Mindstorms EV3 mediante APIs


En la entrada anterior realice una presentación de Lego Mindstorms EV3. Conectarse con el Lego Mindstorms EV3, para poner mover los motores o recoger información de los sensores desde un lenguaje de programación como C# es posible ;-).

Disponemos de varias librerías, para realizar nuestro propósito. Destaco las dos principales:

LEGO MINDSTORMS EV3 API for .NET

Disponible en GitHub. Disponible un vídeo demostrativo del uso de la misma.
Realizando una evaluación de la misma, las limitaciones principales que encuentro:

  • Incapacidad de enviar comandos secuencialmente sobre el mismo motor. En mi caso con el puerto USB no realiza el await de la ejecución del comando.
  • La conexión Bluetooth no funciona en Windows 10.
  • El desarrollo de la misma se ha detenido de lo que se desprende de la conversaciones mantenidas en el foro.


Adjunto código de ejemplo para mover un motor presente en el puerto B del ordenador en dos direcciones secuencialmente. Tal como se muestra en el vídeo.

        static void Main(string[] args)
        {
            var brick = new Brick(new UsbCommunication());
            try
            {
               await brick.ConnectAsync();
               await brick.DirectCommand.TurnMotorAtPowerForTimeAsync(OutputPort.B, 50, 500, true);
               Thread.Sleep(4000); //El await no funciona
               await brick.DirectCommand.TurnMotorAtPowerForTimeAsync(OutputPort.B, -50, 500, true);
               Thread.Sleep(4000); //El await no funciona
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine("Error: " + ex.Message);
                Console.WriteLine("Press any key to end...");
            }
            finally
            {
               brick.Disconnect();
            }
            Console.ReadKey();
         }

MonoBrick Communication Library

Disponible en la siguiente pagina http://www.monobrick.dk/software/monobrick/.
Las principales ventajas, que aporta respecto a la anterior:

  • Además de NET funciona sobre Mono; con lo que podemos ejecutarla en Linux o Mac OS ademas de Windows.
  • Se muestra activa.
  • Permite modificar el firmware de Mindstorms EV3 y ejecutar directamente el código sobre ella. Más información en http://www.monobrick.dk/software/ev3firmware/.

Adjunto código del mismo ejemplo anterior.

        static void Main(string[] args)
        {
            var ev3 = new Brick<Sensor, Sensor, Sensor, Sensor>("usb");
            try
            {
                ev3.Connection.Open();
                ev3.MotorB.ResetTacho(true);
                ev3.MotorB.On(50, 120, true, true);
                WaitForMotorToStop(ev3);
                ev3.MotorB.On(-50, 120, true);
                WaitForMotorToStop(ev3);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine("Error: " + ex.Message);
                Console.WriteLine("Press any key to end...");

            }
            finally
            {
                ev3.Connection.Close();
            }
            Console.ReadKey();
        }

        static void WaitForMotorToStop(Brick<Sensor, Sensor, Sensor, Sensor> ev3)
        {
            Thread.Sleep(500);
            while (ev3.MotorA.IsRunning()) { Thread.Sleep(50); }
        }

Notas para el uso de la libreria:

  • Compilar para 32 bits (X86).
  • Compilar para Framework 4.0 (No escoger uno superior).
  • Desactivar PInvokeStakeImbalance (Managed Debugging Assitants) en la vista Exception Settings para poder depurar.
Anuncios
Esta entrada fue publicada en Desarrollo, Internet of Things, Visual Studio y etiquetada , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s