lunes, 23 de enero de 2017

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.

miércoles, 23 de noviembre de 2016

Medición de Ángulos: Grados vs Radianes

Seguramente ya habías oído sobre los grados como la unidad de medida usada para medir la amplitud de un ángulo, seguramente ya sabias que en una circunferencia hay 360 grados, sin embargo recordemos un poco sobre lo que es un grado. Tambien es importante saber que los ángulos positivos se miden en sentido horario.

Si tomas una circunferencia y trazas 360 segmentos desde el centro hasta 360 puntos equidistantes ubicados en la circunferencia, la separación entre cada par de segmentos adyacentes, que comparten uno de sus extremos equivale a un grado, entonces en una circunferencia podrás encontrar 360 grados, cada uno de estos grados es (como todo en la matemática) infinitamente divisible, por lo general se dividen decimalmente, de manera que podremos medir ángulos de 34,5 grados o de 3,33 grados. Otra manera de dividir a los grados es según un sistema sexagesimal: cada grado (º) se puede dividir en 60 minutos (´) y cada minuto en 60 segundos ("). Suena familiar no?, pues resulta que estas unidades de medida son las que se utilizan para dividir a la Tierra en los usos horarios, correspondientes a los meridianos, los meridianos dividen a la Tierra verticalmente, y la hora de cada zona depende de el meridiano en el que esté, por eso es que distintas partes del mundo pueden tener la misma hora, puesto que la única condición para que esto suceda es que estén sobre el mismo meridiano.

Mediciones de ángulos dadas en grados
Mediciones de ángulos dadas en radianes



Volviendo al  tema vamos a comentar de que se trata un radian. Pues sucede que, como con muchas otras magnitudes, no existe una sola unidad de medida aplicable, así como para medir longitudes podemos usar metros o pies y pulgadas y para medir la temperatura podemos usar grados celcius, kelvin o grados fahrenheit, para medir la amplitud de un angulo podemos usar grados o radianes.






y a cuanto equivale un radian?. Un radian se define como un ángulo central cuya longitud de arco equivale al radio. Un arco es un elemento de la circunferencia, es una "segmento"de la circunferencia entre dos puntos de esta. Entonces, con lo anterior y sabiendo que la relación entre la circunferencia y su radio es: "circunferencia = 2*𝛑*radio" tenemos que una circunferencia se puede dividir en 2𝛑 radianes, y como una circunferencia también equivale a 360° entonces 360°=2𝛑rad y por regla de 3: 1rad=57,2958°. 



Existen maneras sencillas de transformar ángulos a radianes y viceversa, son dos simples formulas que trabajan bajo una regla de tres ya que sabemos que 180° = 1rad:



Como ya te habrás dado cuenta, las medidas en radianes se suelen expresar como múltiplos o submúltiplos de 𝛑 ya que este numero es el que relaciona la longitud de la circunferencia con el radio, a continuación se muestra una tabla que relaciona a algunos ángulos con su valor en radianes:

G0°30°45°60°90°120°135°150°180°210°225°240°270°300°315°330°360°
R0π/6π/4π/3π/22π/33π/45π/6π7π/65π/44π/33π/25π/37π/411π/62π
Si te preguntabas por que existe esta extraña unidad de medida para los angulos quiza despeje un poco las dudas el que diga que es indispensable el uso de radianes como escala de medición para los angulos en la mayoria de las ecuaciones usadas en algunas ciencias como Física, cálculo infinitesimal, trigonometría y goniometría.

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

viernes, 11 de noviembre de 2016

Primer puesto en VEX Competition Starstruck 2016- 2017: Sportsmanship Award

El Equipo URDI participó en Noviembre de 2016 en competencia de VEX EDR en Rionegro-Antioquia. Ganó primer puesto en Trabajo en equipo.  El coach del equipo es Angel Gabriel Caviedes Joya. Acompañaron los estudiantes Emmanuel David Angarita Quintanilla, Gean Franco Uribe Villamizar, Daniel Enrique Peña León, María Andrea Caviedes Joya y Madeleine Vergara Hernández.

Para la competencia contó con la participación de los docentes Maricela Velasco, Dysney Santiago Fuentes y María Judith Joya Rondano. El acompañamiento de los padres de familia ha sido fundamental para los logros obtenidos.

La Unidad Robótica del Instituto Técnico Nacional de Comercio agradece la participación de la Empresa TecnoEduca de Bucaramanga y  el aporte en conocimientos de los docentes: Dario José Hernández Bolivar- UNAB, Javier Suarez León-  UDI, Joaquín Ardila Rueda-Colegio Salesiano, Oscar Buitrago-Colegio La Juventud, Cristian Mauricio Estupiñán Manrique- Tecnoacademia y en general a la comunidad Educativa de la institución.

 






martes, 25 de octubre de 2016

Pendón para Competencia Vex Starstruck


Este es el pendón que vamos a llevar a la competencia "Vex competition: Starstruck" que se estará desarrollando en Rionegro, Antioquia el 3,4 y 5 de Noviembre de este año.

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"}}