Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

miércoles, 15 de noviembre de 2017

Entrega de menciones honoríficas a participantes del curso de ROBI




los estudiantes de 4-1 reciben mención honorífica por su participación en el curso de ROBI ofrecido los dias 8 y 15 de Noviembre. Los instructores fueron los estudiantes Angel Gabriel Caviedes Joya de 11-3 y Emmanuel David Angarita Quintanilla de 9-1, acompañados de todo el equipo de robótica URDI.

lunes, 30 de enero de 2017

Niños de Quinto y Sexto grado en Competencia con Robi

Los niños y niñas de quinto y sexto grado del Instituto Técnico Nacional de Comercio participaron en competencia con Robi Seguidor de Línea y Sumo. Esta competencia fue citada por URDI, equipo de robótica de la institución. La competencia se celebró el 28 de Enero de 2017.

El equipo URDI ofreció Certificado de Participación a los 34 niños y realizó premiación para Primero y Segundo Puesto en las dos categorías : Robi Seguidor de Línea y Sumo.






Visita nuestro facebook, allí subimos las fotos de este evento.

domingo, 29 de enero de 2017

Curso de Robi realizado el 21 y 28 de enero de 2017

U.R.D.I., la Unidad Robótica de Instenalco organizó los días 21 y 28 de enero un curso de 8 horas para los estudiantes de quinto y sexto grado de la institución en el que mediante el uso de Robi se les enseñó a los niños las bases de la programación.

Participaron un total de 34 niños, los cuales también aprendieron a programar a Robi en retos como seguidor de linea y sumo.







lunes, 23 de enero de 2017

sumo de robi

Sumo es una modalidad de competencia de robots muy famosa en todo el mundo y de mucha estrategia, el juego se da entre dos robots, ambos se colocan en un circulo con fondo negro y borde blanco, el objetivo es sacar al otro robot del circulo empujándolo.

La pista siempre es la misma en toda competencia, lo que varia es el tamaño de esta:


Son tres rondas, el primero en ganar dos gana el partido, cada ronda es de tres minutos, si ningún robot ha salido después de los tres minutos, la competencia es empate, si después de tres rondas los jugadores siguen empatados se puede hacer una ronda de desempate.

el procedimiento para empezar es simple: se colocan ambos robots en el ring y se encienden al mismo tiempo, en la programación se debe incluir que no empiecen sino hasta cinco segundos después de encendidos.

En cada ronda los robots empiezan en una posición distinta: frente a frente. cola con cola, o posición de piscis:
frente a frente
cola con cola
"piscis"
El concepto para hacer el programa es muy parecido al seguidor de linea, solo que en vez de usar sensores de linea se utilizan los sensores de obstáculo: cuando haya algo al frente avanza, si esta a un lado, gira en esa dirección y avanza. También hay que pensar en lo que el robot hará cuando toque la linea, suponiendo que la tocará de frente haremos que retroceda, esta es la manera más básica de programar a un robi con sumo:



Si te fijas bien en el código notaras una diferencia fundamental con el código del seguidor de linea: cuando no se detecta nada el robot no puede simplemente quedarse quieto ya que seria susceptible a que lo ataquen, entonces en el código anterior, por ejemplo, el robi estará dando vueltas sobre su eje para buscar a su oponente. Según decidamos que va a hacer el robot encontramos que hay dos categorías: los radares y los trotamundos.

Los radares son robots que rotan sobre su propio eje buscando a su oponente por la pista, el de el ejemplo seria clasificado como un radar, un radar que gire muy rápido no alcanzará a detectar nada, pero si gira a la velocidad adecuada siempre terminarán por encontrar a su oponente.

Los trotamundos son robots que avanzan sin rumbo fijo y rebotan en el borde del tablero, avanzando por toda la pista hasta que se da la casualidad de que el robot oponente queda sobre ellos, lo malo es que podrían ser empujados por detrás y ellos mismos se ayudarían a salir de la pista.

También existen posiciones intermedias entre los dos tipos de robot sumo, que son los que dan vueltas en círculos o cerca del borde.

Algunos diseños más sofisticados de el código de "escape de la linea" involucran todos los sensores y le dan una respuesta distinta a cada sensor dada su ubicación en el robot.

Hay otro aspecto que debes tener en cuenta cuando quieras definir las velocidades y es la regla de oro para los motores:

"El torque y la velocidad son inversamente proporcionales en un motor"

Dicho más fácil: si quieres tener fuerza de empuje deberás sacrificar velocidad y si quieres velocidad deberás sacrificar fuerza de empuje, no puedes tener mucho de ambos: entonces mientras más lento andes, con más fuerza irás. Administrando fuerza y velocidad podras crear el robot ganador.

La práctica hace al maestro.

Seguidor de linea y seguidor de linea con obstáculos de robi

Hola, en esta ocasión vamos a estaremos hablando sobre el reto de "seguidor de linea", y veremos como se programa en robi.

El reto de "seguidor de linea" se ve mucho en las competencias escolares de robótica y consiste en que el robot siga una linea negra (de 1,6 cm de grosor) que esta pegada sobre un tablero o una lona blanca. Cada organizador diseña su propia pista de seguidor de linea, así que siempre son distintas.

Quien logre transitar por todo el circuito en el menor tiempo posible, sin salirse de la pista será quien gane este reto. La dificultad de la pista puede variar si tiene curvas cerradas o intersecciones. En otras modalidades dos robots se persiguen entre sí hasta que uno alcanza al otro.

Puedes ver un ejemplo de pista y descargarlo para robisoft aquí.

Para la programación usaremos los sensores de linea interiores, lo primero a tener en cuenta es que trabajaremos con un ciclo infinito (una vez acabado el programa volverá a empezar), para que el estado del robot se este actualizando indefinidamete.

En el código deberemos hacer que robi ande recto cuando este centrado sobre la linea y que si se sale por un lado corrija su trayectoria. Sabemos que mientras robi este centrado sobre la linea ambos sensores centrales percibirán "negro", pero si robi se desvía unos pocos milímetros solo uno de los sensores percibirá "negro" y el otro "blanco", usaremos esto para saber cuando y por cual lado se desvia el robot.

diagrama: seguidor de linea robi

Depende de cada pista que tan cerrada debe ser la curva, lo mejor es ir probando hasta que el movimiento del robot sea lo más fluido posible, una buena combinación para empezar a probar es 100-60.

Los errores más comunes que pueden presentarse son:

El robot simplemente no se mueve: El programa no se cargo con éxito o no se colocó un ciclo infinito.

El robot cabecea: Las curvas se están dando demasiado cerradas o se programó que una llanta se detuviera en las curvas.

Hay otra modalidad de competencia en la que el robot debe atravesar un circuito y al mismo tiempo esquivar obstáculos que están en la pista, para esto bastará con agregarle al código anterior una condición en la que cuando el sensor de obstáculos frontal perciba que hay algo se ejecute una secuencia de esquivado, hay muchas maneras de esquivar un obstáculo, pero según la pista hay que determinar si es más conveniente esquivar por la derecha o por la izquierda, aquí está la forma más básica de esquivar un obstáculo: 


Ten en cuenta que esta secuencia debe ir después de el código de seguidor de linea básico y no dentro de una condición del sensor de linea.

En este ejemplo el robot una vez detecta el obstáculo, apunta a la derecha, y luego avanza dando curva la izquierda, una vez toca linea el programa salta hasta las condiciones de seguidor de linea y todo sigue normal.

El único dato necesario para diseñar el programa de esquivado es el diámetro del obstáculo, ya que casi siempre los obstáculos se ubican sobre partes rectas, mientras más cerca pase el robot del obstáculo sin tocarlo y más fluido sea su movimiento mejor.

La práctica hace al maestro.

lunes, 21 de noviembre de 2016

Curso de C++ V: La Liberería Math.h

dime, que yo no sé güey

Como ya vimos anteriormente, al incluir librerías en el programa podremos tener acceso a nuevas funciones, la libreria "math.h" como es de suponer es una libreria que nos permitirá usar funciones metemáticas.

Las funciones más importantes se muestran en la siguiente lista:

Potenciación y radicación:

    pow(x,y)
        eleva un numero "x" a una potencia "y"

    sqrt(x)
        calcula la raíz cuadrada de un número "x"

    cbrt(x)
        calcula la raíz cúbica de un número "x"

    hypot(x,y)
        calcula la hipotenusa de un triangulo rectángulo de catetos "x" e "y"

Funciones trigonométricas:

    cos(x)
        Extrae el valor del coseno de un ángulo "x" dado en radianes (el resultado estará entre -1 y 1)

    acos(x)
        Calcula el valor en radianes de un ángulo con coseno "x" (x entre -1 y 1)

    sin(x)
        Extrae el valor del seno de un ángulo "x" dado en radianes (el resultado estará entre -1 y 1)

    asin(x)
        Calcula el valor en radianes de un ángulo con seno "x" (x entre -1 y 1)

    tan(x)
        Extrae el valor de la tangente de un ángulo "x" dado en radianes 

    atan(x)
        Calcula el valor en radianes de un ángulo con tangente "x"

Otras funciones:

    fmax(x,y)
        retorna el mayor valor entre "x" e "y"

    fmin(x,y)
        retorna el menor valor entre "x" e "y"

    fdim(x,y)
        retorna el resultado de x-y si es un valor positivo

Funciones de redondeo:

    round(x)
        Redondea "x" al número entero más cercano

    ceil(x)
        Redondea "x" al número entero mayor que "x" más cercano

    floor(x)
        Redondea "x" al número entero menor que "x" más cercano

    trunc(x)
        Elimina la parte decimal de "x"

    abs(x)
        Retorna el valor absoluto de "x" (valor positivo)

Aquí se muestran los resultados que darian las funciones de redondeo a algunos números:

        valor   round   floor   ceil    trunc

         2.3     2.0     2.0     3.0     2.0
         3.8     4.0     3.0     4.0     3.0
         5.5     6.0     5.0     6.0     5.0
        -2.3    -2.0    -3.0    -2.0    -2.0
        -3.8    -4.0    -4.0    -3.0    -3.0
        -5.5    -6.0    -6.0    -5.0    -5.0

ah, pos ahora sí güey


Tarea supersencilla:
Escribir un programa que permita calcular la hipotenusa de un triangulo sin utilizar la función hypot

miércoles, 12 de octubre de 2016

Curso de C++ IV: Operaciones matemáticas básicas

en nuestro código de C++ podemos utilizar números y operaciones con estos,  al escribir un número este se teñirá de morado:



No tendremos ningún problema en realizar las cuatro operaciones básicas:

suma, utilizando "+"        
 ej: 2+5 = 7

resta, utilizando "-"
 ej: 1-78 = -77

multiplicación, utilizando "*"
 ej: 3*9 = 27

división, utilizando "/"
 ej: 40/5 = 8

también existe una quinta operación que resulta muy útil y nos da el valor del residuo de una división:
     
residuo, utilizando "%"
 ej: 10%3 = 1

Para utilizar la radicación y la potenciación deberemos incluir a la libreria math.h

raíz cuadrada, utilizando "sqrt": sqrt(x), devueve la raíz cuadrada de "x"
 ej: sqrt(36) = 6

raíz cúbica, utilizando "cbrt": cbrt(x), devueve la raíz cúbica de "x"
 ej: cbrt(216) = 6

potenciación, utilizando "pow": pow(x,y), eleva a "x" a la "y" potencia
 ej: pow(5,3) = 125


Por defecto las operaciones se realizarán en el siguiente orden:

1. potenciación y radicación
2. multiplicación y división
3. suma y resta

Si queremos que las operaciones se ejecuten en un orden distinto deberemos utilizar paréntesis, los paréntesis se desarrollan primero, si hay paréntesis dentro de paréntesis se ejecutarán de adentro hacia afuera, podemos hacer operaciones tan complejas como queramos, ejemplo:

cout<<6+3<<endl;
cout<<(4*5)-(20/4)<<endl;
cout<<3*(10%5)<<endl;
cout<<(23-5)*(34%3+2)/(23*(3%2))<<endl;
cout<<pow(cbrt(216),sqrt(36))<<endl;

También podemos hacer operaciones con variables, ya sean pre-definidas en el programa, definidas por el usuario, definidas por otras operaciones, etc.

Si lo deseamos tambien podemos definir el valor de las variables mediante operaciones, o almacenar resultados dentro de vaiables usando "=", ejemplo, este es un programa que te muestra distintas operaciones resultado de operar la suma de "a" y "b" con la resta de "c" y "d":

float a,b,c,d,e,f;

cout<<"introduce dos numeros para sumarlos y obtener a:\n";
cin>>c;
cin>>d;
a=c+d;
cout<<"a= "<<a<<endl;

cout<<"introduce dos numeros para restarlos y obtener b:\n";
cin>>e;
cin>>f;
b=e-f;
cout<<"b= "<<b<<endl<<endl;

cout<<"a*b= "<<a*b<<endl;
cout<<"a/b= "<<a/b<<endl;
cout<<"b/a= "<<b/a<<endl<<endl;

Facilísimo, no?, ya sabes como hacer las operaciones básicas en C++, en otro articulo podrás ver como ejecutar las funciones trigonométricas. Y la tarea supersencilla de hoy es...

Haz un programa en el que ingreses el precio de un producto y este te devuelva el precio del producto más el iva (16% del valor del producto).

Haz un programa que resuelva reglas de tres simples al escribir tres de los valores, ej: "5 conejos se comen una arroba de zanahorias en 10 minutos, cuanto tiempo se demorarán 10 conejos?".


Suerte!!!

martes, 11 de octubre de 2016

Que es una variable?

En la segunda sesión del curso de C++ mencionamos este termino, y puede que no haya quedado muy claro, en este artículo explicaremos que significa el término "variable" en programación.

Todos sabemos que toda la información que ingresamos en nuestro computador va a parar en alguna unidad de almacenamiento de este como por ejemplo el disco duro:

Una variable es un espacio físico de la unidad de almacenamiento, que puede almacenar información, por ejemplo un número, y al que se le asigna cualquier nombre para ser identificada



por ejemplo, definimos una nueva variable, le damos por nombre "A" y le asignamos como valor una unidad "1", este valor identificado con este nombre es lo que se denomina variable se almacenará en algún lugar de la memoria. Existen un par de reglas para nombrar a las variables: que empiece con una letra o raya piso ( _ ), que no contenga espacios y que no exista otra variable, función o comando con ese nombre. Dependiendo de la información que se almacene en la variable esta recibe distintos nombres, las variables pueden ser de tipo (número) entero, decimal, caracter, digital, etc., cada tipo de variable lleva un nombre distinto, por ejemplo el tipo de variable entero se denomina "int".

Al momento de definir una variable siempre escribes que tipo de variable es, seguido del nombre que le asignes y por último opcionalmente le puedes asignar un valor, si no le asignas ningún valor de todos modos los valores de las variables se pueden modificar en el programa cuando quieras, donde quieras. ej:



y... para que sirven las variables?

El uso de variables en un programa es fundamental, dentro del código las variables pueden cumplir función que se te ocurra, como por ejemplo contar cuantas veces se ejecuta un valor, almacenar valores, comparar valores, en fin, todo lo que tenga que ver con números que aumenten, disminuyan o se operen entre sí, te  daré algunos ejemplos en específico:

Voy a crear un programa que dibuje un cuadrado, entonces le diré que dibuje una linea de 5cm y luego gire a la derecha 90 grados, y que después vuelva al inicio del programa, entonces se volverá a repetir todo otra vez, y otra, y otra, infinitamente, yo quiero que el programa ya haya dibujado el cuadrado, es decir, quiero que el programa se repita solo cuatro veces, esto lo puedo solucionar definiendo un variable que se llame por ejemplo "lados", y que valga "0" antes de que empiece el programa, después le diré al programa que le sume uno a "lados" (lados = lados + 1) cada vez que dibuje un lado, y por ultimo colocaré una condición que diga que el programa solo se repetirá si "lados" es menor que cuatro (si lados < 4), cuando el programa se repita una vez "lados" será igual a uno, cuando el programa se repita dos veces "lados" será igual a dos, así hasta que lados sea igual a cuatro, en cuyo caso el programa terminaría.

Otro fundamental de las variables es el de almacenar información ingresada por el usuario: tú defines a "x", luego le pides al usuario que digite un valor para "x", el usuario digita por ejemplo 5, y tu programa define ahora que x = 5, si alguien pregunta cuanto vale "x" el programa te responderá: cinco!. Si quieres tambien puedes hacer programas que operen variables: le pides al usuario que digite dos numeros que tu programa guardará en dos variables, luego haces que tu programa las sume ,las guarde en otra variables y que luego imprima "la suma de los números es" y el valor de la tercera variable.

Estos y muchos más usos son los que se le pueden dar a las variables, espero que lo hayas entendido todo y gracias por leer el articulo.

-

{"handle":"robotica-instenalco","arch":"js","styles":{"a":"C8C8C8","b":82,"c":"000000","d":"000000","f":82,"i":82,"k":"C8C8C8","l":"C8C8C8","m":"C8C8C8","o":82,"p":"10","q":"C8C8C8","r":82,"cnrs":"0.41"}}