RE-10-LAB-249 ROBOTICA v4

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 31

GUIAS DE PRÁCTICA DE ELECTRONICA

Código de registro: RE-10-LAB-249 Versión 4.0


UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

UNIVERSIDAD
PRIVADA DEL VALLE
FACULTAD DE INFORMATICA Y
ELECTRONICA

DPTO: ELECTRONICA

GUIA PRACTICA DE LABORATORIO

ROBOTICA

Título de la Practica
PRACTICA 01 DESCRIPCION DE LA CELULA DE TRABAJO DEL
ROBOT Y FUNCIONES BASICAS DEL SOFTWARE
PRACTICA 02 COMANDOS DE ORIENTACION DEL ROBOT
PRACTICA 03 PROGRAMAS CONTROL DE PERIFERICOS
PRACTICA 04 CONTROL DE SENSORES
PRACTICA 05 PROGRAMAS DE APLICACION
PRACTICA 06 RECONOCIMIENTO E IDENTIFICACION DE OBJETOS
USANDO EL SOFTWARE OPENCV
PRACTICA 07 MEDICION DE OBJETOS USANDO OPENCV

1
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 1

DESCRIPCIÓN DE LA CELULA DE TRABAJO DEL ROBOT


Y FUNCIONES BASICAS DEL SOFTWARE

1. CONOCIMIENTO TEORICO REQUERIDO

• El estudiante deberá tener conocimiento del kit educacional LEGO MINDSTORMS.


• Conocimiento de los sensores y actuadores que dispone LEGO.
• Sintaxis de comandos para programar el sistema.

2. COMPETENCIA (S)

• Describe las funciones básicas del programa BricxCC, usando la programación de la


célula de trabajo de LEGO, realizada por el docente.
• Proporciona una guía de programación de este lenguaje en español y el manual de
comandos en ingles formato electrónico y otros del programa BricxCC., a través de la
resolución de problemas.

3. MATERIALES, INSUMOS Y EQUIPOS.

MATERIALES Y EQUIPOS
Item Denominación Cantidad Unidad Observaciones

1 CPU 1 Pza
2 Lego Mindstorms 1 Pza
Los equipos son utilizados por un
3 Monitor 1 Pza grupo de 3 estudiantes y la
4 Mouse 1 Pza capacidad del laboratorio es para
8 grupos
5 Teclado 1 Pza
6 Lego EV3 1 Pza

2
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 1
INSUMOS
Item Denominación Cantidad Unidad Observaciones
1 Baterías LEGO 1 Pza
2 Cable RJ12 para LEGO 7 Pza
3 Cable USB para LEGO 1 Pza
4 Cable de poder 2 Pza Los insumos son utilizados
por un grupo de 3
5 Motores LEGO. 4 Pza estudiantes y la capacidad
del laboratorio es para 8
6 Sensor de ultrasonido 1 Pza
grupos
7 Sensor de luz 1 Pza
8 Sensor de contacto 1 Pza
9 Piezas para armado LEGO 100 Pza

4. TECNICA Ó PROCEDIMIENTO
Se formaran grupos de trabajo para el uso de LEGO, organizados por el docente.
EXPERIENCIA Nº 1:
Investigar con el auxilio del documento guía de programación del lenguaje que se vaya a
usar, las opciones de configuración en LEGO, con ayuda del docente, recuperación de
programas, almacenamiento de programas, acceso a la opción de ayuda, etc.

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA

La práctica tendrá una duración de 100 minutos.

6. MEDICIÓN, CALCULOS Y GRAFICOS

Realizar las mediciones, cálculos que se requiere para la realización de esta práctica.

7. CUESTIONARIO
1. Explicar la los comandos más importantes de BricxCC para LEGO.
2. Explicar el manejo de comandos avanzados en BricxCC (esto a criterio del docente).

3
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 2

COMANDOS DE ORIENTACION DEL ROBOT

1. CONOCIMIENTO TEORICO REQUERIDO.

• El estudiante deberá tener conocimiento del kit educacional LEGO MINDSTORMS.


• Conocimiento de los sensores y actuadores que dispone LEGO.
• Sintaxis de comandos para programar el sistema.

2. COMPETENCIA (S).

• Genera programas básicos con el que podrá manipular el robot. Utilizando


comandos de BricxCC para controlar el kit educacional LEGO MINDSTORMS, a
través de la resolución de problemas que se presentan en el campo de trabajo del
profesional.

3. MATERIALES, INSUMOS Y EQUIPOS.

MATERIALES Y EQUIPOS
Item Denominación Cantidad Unidad Observaciones

1 CPU 1 Pza
2 Lego Mindstorms 1 Pza
Los equipos son utilizados por un
3 Monitor 1 Pza grupo de 3 estudiantes y la
4 Mouse 1 Pza capacidad del laboratorio es para
8 grupos
5 Teclado 1 Pza

6 Lego Ev3 1 Pza

4
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

PRACTICA Nº 2

INSUMOS
Item Denominación Cantidad Unidad Observaciones

1 Baterías LEGO 1 Pza


2 Cable RJ12 para Lego 7 Pza
3 Cable USB para LEGO 1 Pza
4 Cable de poder 2 Pza Los insumos son utilizados
por un grupo de 3
5 Motores LEGO. 4 Pza estudiantes y la capacidad
del laboratorio es para 8
6 Sensor de ultrasonido 1 Pza grupos
7 Sensor de luz 1 Pza
8 Sensor de contacto 1 Pza
9 Piezas para armado LEGO 100 Pza

4. TECNICA Ó PROCEDIMIENTO.
EXPERIENCIA Nº 1:
Usando el programa BricxCC, las funciones del menú usuales y los comandos
apropiados programar el funcionamiento de los elementos impulsores instalados en el
esqueleto, para su control por medio de comandos, compilar el programa y trasferir
dicho programa al controlador de LEGO y ejecutarlo.
EXPERIENCIA Nº2:
Usando las posiciones tomadas en la experiencia #3, implementar el código fuente con
ayuda del docente para que el robot LEGO se mueva en conjunción con un sensor esto
será a elección del docente y los estudiantes durante la realización de esta experiencia.

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA.

La práctica tendrá una duración de 100 minutos.

6. MEDICIÓN, CALCULOS Y GRAFICOS.-

Realizar las mediciones, cálculos que se requiere para cada parte de esta práctica.

7. CUESTIONARIO.

5
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
1. Explicar cuál es la secuencia de enviado de un programa usando BricxCC.
PRACTICA Nº 3

PROGRAMAS CONTROL DE PERIFERICOS

1. CONOCIMIENTO TEORICO REQUERIDO

• El estudiante deberá tener conocimiento del kit educacional LEGO MINDSTORMS.


• Conocimiento de los sensores y actuadores que dispone LEGO.
• Sintaxis de comandos para programar ambos sistemas, en el kit educacional
LEGO MINDSTORMS se investigará comandos que permitan controlar los
elementos actuadores por medio de comandos PID y de realimentación de datos
desde el actuador.

2. COMPETENCIA (S)

• En el kit educacional LEGO MINDSTORMS, maneja y controla los elementos


actuadores, aplicando los comandos “RotateMotorPID”, “MotorRotationCount”,
“MotorTachoCount”, etc., para hacer funcionar una aplicación.

3. MATERIALES, INSUMOS Y EQUIPOS

MATERIALES Y EQUIPOS
Item Denominación Cantidad Unidad Observaciones

1 CPU 1 Pza

2 Lego Mindstorms 1 Pza


Los equipos son utilizados por un
grupo de 3 estudiantes y la
3 Monitor 1 Pza capacidad del laboratorio es para
8 grupos
4 Mouse 1 Pza

5 Teclado 1 Pza

6
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

PRACTICA Nº 3

INSUMOS
Item Denominación Cantidad Unidad Observaciones

1 Baterías LEGO 1 Pza


2 Cable RJ12 para Lego 7 Pza
3 Cable USB para LEGO 1 Pza
4 Cable de poder 2 Pza Los insumos son utilizados
por un grupo de 3
5 Motores LEGO. 4 Pza estudiantes y la capacidad
del laboratorio es para 8
6 Sensor de ultrasonido 1 Pza grupos
7 Sensor de luz 1 Pza
8 Sensor de contacto 1 Pza
9 Piezas para armado LEGO 100 Pza

4. TECNICA Ó PROCEDIMIENTO.

EXPERIENCIA Nº 1:

Usando los comandos de BricxCC que vean convenientes, realizar la generación de un


programa que permita el control coordinado de uno o más elementos actuadores
usando los comandos descritos en el subtítulo de competencias, la aplicación en si
será consensuada con docente.

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA

La práctica tendrá una duración de 100 minutos.

6. MEDICIÓN, CALCULOS Y GRAFICOS

Realizar las mediciones, cálculos que se requiere para cada parte de esta práctica.

7. CUESTIONARIO

1. Explicar el algoritmo utilizado para el programa de la práctica con LEGO.

7
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

PRACTICA Nº 4
CONTROL DE SENSORES

1. CONOCIMIENTO TEORICO REQUERIDO.

• El estudiante deberá tener conocimiento de la descripción del kit educacional LEGO


MINDSTORMS.
• Conocimiento de los periféricos que acompañan, los sensores y actuadores que
dispone LEGO.
• Sintaxis de comandos para programar en BricxCC..

2. COMPETENCIAS.

• Genera algoritmos y ejecuta programas más complejos para verificar la precisión


del movimiento del kit educacional LEGO MINDSTORMS y así profundizar más
aun en el estudio de los comandos del lenguaje de programación BricxCC.
• El estudiante aprende a manejar herramientas virtuales para la construcción de
estructuras mecánicas usando el software LEGO DIGITAL DESIGNER.

3. MATERIALES, INSUMOS Y EQUIPOS.

MATERIALES Y EQUIPOS
Item Denominación Cantidad Unidad Observaciones

1 CPU 1 Pza

2 Lego Mindstorms 1 Pza


Los equipos son utilizados por un
grupo de 3 estudiantes y la
3 Monitor 1 Pza capacidad del laboratorio es para
8 grupos
4 Mouse 1 Pza

5 Teclado 1 Pza

8
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

PRACTICA Nº 4

INSUMOS
Item Denominación Cantidad Unidad Observaciones

1 Baterías LEGO 1 Pza


2 Cable RJ12 para Lego 7 Pza
3 Cable USB para LEGO 1 Pza
4 Cable de poder 2 Pza
5 Motores LEGO. 4 Pza
Los equipos son utilizados
6 Sensor de ultrasonido 1 Pza
por un grupo de 3
7 Sensor de luz 1 Pza estudiantes y la capacidad
del laboratorio es para 8
8 Sensor de contacto 1 Pza grupos
9 Sensor acelerómetro 1 Pza
10 Sensor de control de angulo 1 Pza
11 Sensor giroscopio 1 Pza
12 Sensor de colores 1 Pza
13 Piezas para armado LEGO 100 Pza

4. TECNICA Ó PROCEDIMIENTO .

EXPERI ENCIA Nº 1:
Usando la experiencia obtenidas en laboratorios anteriores, realizar la construcción de
una estructura en el programa LEGO DIGITAL DESIGNER y la consecuente
generación de un programa en BricxCC, que permita utilizar el uno o más sensores
básicos previa consulta con el docente, el algoritmo debe ser borrado de la memoria
del controlador LEGO, esto para que no exista copia ilegal del código fuente.

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA

La práctica tendrá una duración de 100 minutos.

9
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

PRACTICA Nº 4

6. MEDICIÓN, CALCULOS Y GRAFICOS.-

Realizar las mediciones, cálculos que se requiere para cada parte de esta práctica.

7. CUESTIONARIO

1. Explique el algoritmo utilizado en las distintas experiencias.


2. Mencione la aplicabilidad de los programas generados.

10
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

PRACTICA Nº 5

PROGRAMAS DE APLICACION

1. CONOCIMIENTO TEORICO REQUERIDO

• El estudiante deberá tener conocimiento del kit educacional LEGO MINDSTORMS.


• Conocimiento de los periféricos que acompañan, los sensores y actuadores que
dispone LEGO.
• Sintaxis de comandos para programar en BricxCC..

2. COMPETENCIA (S)

• Combina simultáneamente comandos de posicionamiento de puntos del robot, uso de


variables, vectores, funciones, interface con el teclado de la Pc en un nivel más
complejo y completo, configuración de sensores complejos en LEGO para su utilización
adecuada.

3. MATERIALES, INSUMOS Y EQUIPOS

MATERIALES Y EQUIPOS
Item Denominación Cantidad Unidad Observaciones

1 CPU 1 Pza

2 Lego Mindstorms 1 Pza


Los equipos son utilizados por un
grupo de 3 estudiantes y la
3 Monitor 1 Pza capacidad del laboratorio es para
8 grupos
4 Mouse 1 Pza

5 Teclado 1 Pza

11
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 5

INSUMOS
Item Denominación Cantidad Unidad Observaciones

1 Baterías LEGO 1 Pza


2 Cable RJ12 para Lego 7 Pza
3 Cable USB para LEGO 1 Pza
4 Cable de poder 2 Pza
5 Motores LEGO. 4 Pza
Los insumos son utilizados
6 Sensor de ultrasonido 1 Pza
por un grupo de 3
7 Sensor de luz 1 Pza estudiantes y la capacidad
del laboratorio es para 8
8 Sensor de contacto 1 Pza grupos
9 Sensor acelerómetro 1 Pza
10 Sensor de control de angulo 1 Pza
11 Sensor giroscopio 1 Pza
12 Sensor de colores 1 Pza
13 Piezas para armado LEGO 100 Pza

4. TECNICA Ó PROCEDIMIENTO.

EXPERIENCIA Nº 1:
Permitir que los grupos de trabajo realicen una variedad de programas para con aplicaciones
diversas, con objeto de que los alumnos den rienda suelta a su imaginación para idear
distintos usos para el robot y permitir al docente la evaluación de sus avances en el
conocimiento de los comandos de programación BricxCC, (todos los programas serán
evaluados por el docente).

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA


La práctica tendrá una duración de 100 minutos.
6. MEDICIÓN, CALCULOS Y GRAFICOS.-

Realizar las mediciones, cálculos que se requiere esta práctica.

12
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 5

7. CUESTIONARIO.

1. Explicar el algoritmo de generación de texto


2. Mencionar los comandos usados para la generación del programa.

13
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

RECONOCIMIENTO E IDENTIFICACION DE OBJETOS USANDO EL SOFTWARE


OPENCV

1. CONOCIMIENTO TEORICO REQUERIDO

• Procesamiento digital de imágenes


• Técnicas de filtrado de imágenes
• Técnicas de detección de bordes y contornos
• Técnicas de reconocimiento de objetos

2. COMPETENCIA (S)

• Desarrolla técnicas de procesamiento de imágenes mediante algoritmos de detección


contornos para el reconocimiento de objetos usando OpenCV.

3. MATERIALES, INSUMOS Y EQUIPOS.

MATERIALES Y EQUIPOS

Item Denominación Cantidad Unidad Observaciones


Computadora con Python
1 y OpenCV 1 Pza

Camara WEB
2 1 Pza
Los equipos son utilizados por un
grupo de 3 estudiantes y la
3 Monitor 1 Pza capacidad del laboratorio es para
1 grupo
4 Mouse 1 Pza

5 Teclado 1 Pza

14
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

INSUMOS
Item Denominación Cantidad Unidad Observaciones
1 Camara WEB 3 Pza

2 Raspberry Pi 3 modelo b + 1 Pza

3 Pantalla tactil Raspberry Pi 1 Pza

Los insumos son utilizados


4 Micro sd 16 G 1 Pza por un grupo de 3
estudiantes y la capacidad
del laboratorio es para 1
grupo
5 Lector de micro sd 1 Pza

6 Fuente de Raspberry Pi 1 Pza

7 Conversor hdmi - vga 1 Pza

4. TECNICA Ó PROCEDIMIENTO

TRABAJO PRELIMINAR
El estudiante debe realizar los siguientes programas antes de realizar las prácticas de
laboratorio, por tal razón debe presentar evidencias de los resultados obtenidos antes de iniciar
la práctica.

1.- Obtención de imágenes a través de una cámara.


#Programa 1 Obtener imágenes de una cámara web
import cv2
# Captura imágenes de una cámara si se tiene una cámara por defecto es 0, si se tiene más
cámaras se colocará 1, 2, etc
cap = cv2.VideoCapture(0)
while(True):

15
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

ret, frame = cap.read()


if ret:
cv2.imshow('Captura WebCAM’, frame)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()

#Programa 2 Captura de imágenes de un video.


import numpy as np
import cv2
cap = cv2.VideoCapture('Carretera1.avi')
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('Video',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

2.- Aplicación de filtros espaciales para mejoramiento de la imagen.

Histograma

#Programa 3 determinación del histograma de una imagen a color


import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('lena.jpg')
cv2.imshow('lena.jpg', img)
color = ('b','g','r')
for i, c in enumerate(color):
hist = cv2.calcHist([img], [i], None, [256], [0, 256])
plt.plot(hist, color = c)
plt.xlim([0,256])
plt.show()
cv2.destroyAllWindows()

#Programa 4 Ecualización de una imagen a partir de su histograma


import cv2

16
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

img = cv2.imread('lena-clara.jpg', cv2.IMREAD_GRAYSCALE)


img1 = cv2.equalizeHist(img)
cv2.imshow('Original', img)
cv2.imshow('Imagen ecualizada', img1)
cv2.waitKey()

#Programa 5 Umbralización de una imagen en OpenCV aplicando binarizacion


import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('imagen.jpg',0)
# Fuente,nivel,maximo valor,tipo de binarizacion
ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
ret,thresh2 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)
ret,thresh3 = cv.threshold(img,127,255,cv.THRESH_TRUNC)
ret,thresh4 = cv.threshold(img,127,255,cv.THRESH_TOZERO)
ret,thresh5 = cv.threshold(img,127,255,cv.THRESH_TOZERO_INV)
titles = ['Imagen Original','BINARIA','BINARIA_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in xrange(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
cv.waitKey(0)

#Programa 6 Umbralización adaptativa con OpenCV Python


import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('sudoku.png',0)
img = cv.medianBlur(img,5)
ret,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,\
cv.THRESH_BINARY,11,2)
th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv.THRESH_BINARY,11,2)
titles = ['Imagen Original', 'Global Thresholding (v = 127)',
'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]

17
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

for i in xrange(4):
plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
cv.waitKey(0)

#Programa 7 Aplicación de Filtro pasa bajo de convolución


import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('opencv_logo.png')
kernel = np.ones((5,5),np.float32)/25 #mascara de 5*5
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
cv.waitKey(0)

#Programa 8 Aplicación de Filtro del promedio, Gausiano


import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('opencv-logo-white.png')
blur = cv.blur(img,(5,5)) #kernel o mascara del promedio
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
cv.waitKey(0)

#Aplicar este commando si se quiere aplicar un filtro gausiano


blur = cv.GaussianBlur(img,(5,5),0)
#Aplicar este commando si se quiere aplicar un filtro de la mediana
median = cv.medianBlur(img,5)
#Aplicar este commando si se quiere aplicar un filtro Bilateral
blur = cv.bilateralFilter(img,9,75,75)

18
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

3.- Aplicación de técnicas de detección de bordes.

#Programa 9 Deteccion de bordes usando filtros Canny


import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
edges = cv.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()

DESARROLLO EN LABORATORIO

Los siguientes programas deben desarrollarse en la práctica, con el material asignado

1.- Aplicación de técnicas de detección de objetos

Para este sección se debe tener instalado la cámara web en la Raspberry Pi y un objeto.

#Programa 1 Detección de líneas y círculos usando la transformada de Hough con OpenCV


import cv2
import numpy as np

img = cv2.imread('sudoku.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize = 3)

lines = cv2.HoughLines(edges, 1, np.pi/180, 200)

for line in lines:


rho, theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))

19
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

cv2.line(img, (x1,y1), (x2,y2), (0, 0, 255), 1, cv2.LINE_AA)

cv2.imshow('Bordes de Imagen', edges)


cv2.imshow('Detector de Lineas', img)
cv2.waitKey()

#Programa 2 Deteccion de lineas


import cv2
import numpy as np

img = cv2.imread('sudoku.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize = 3)

lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, minLineLength=100, maxLineGap=10)

for line in lines:


x1, y1, x2, y2 = line[0]
cv2.line(img, (x1,y1), (x2,y2), (0,255,0), 1, cv2.LINE_AA)

cv2.imshow('Bordes de Iamgen', edges)


cv2.imshow('Detector de Lineas', img)
cv2.waitKey()

#Programa 3 detección de círculos


import cv2
import numpy as np

img = cv2.imread('data/stuff.jpg')
src = cv2.medianBlur(img, 5)
src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(src, cv2.HOUGH_GRADIENT, 1, 20,


param1=50, param2=30, minRadius=0, maxRadius=0)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# dibujar circulo
cv2.circle(img, (i[0], i[1]), i[2], (0,255,0), 2)
# dibujar centro
cv2.circle(img, (i[0], i[1]), 2, (0,0,255), 3)

20
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

cv2.imshow('detected circles', img)


cv2.waitKey(0)
cv2.destroyAllWindows()

#Programa 4 Deteccion de objetos de una área definida

import numpy as np
import cv2

cap = cv2.VideoCapture('area2.avi')
col = int(cap.get(3))
fil = int(cap.get(4))
Objetos = (np.zeros((fil,col),np.uint8))+255
while(cap.isOpened()):
ret, frame1 = cap.read()
gray1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

gauss = cv2.GaussianBlur(gray1,(3,3),0)
bordes = cv2.Canny(gauss,150,255)
kernel = np.ones((10,10),np.uint8)
mask1 = cv2.morphologyEx(bordes,cv2.MORPH_OPEN,kernel)
mask2 = cv2.morphologyEx(mask1,cv2.MORPH_CLOSE,kernel)
mask2 = mask2.astype('uint8')

(_, contornos,_) = cv2.findContours(bordes.copy(), cv2.RETR_TREE,


cv2.CHAIN_APPROX_SIMPLE)

lines = cv2.HoughLinesP(bordes, 1, np.pi/180, 100, minLineLength=10, maxLineGap=10)

for c in contornos:
M = cv2.moments(c)

area = cv2.contourArea(c)
perimeter = cv2.arcLength(c,True)
approx = cv2.approxPolyDP(c,0.02*perimeter,True)
if area > 1000 and area < 500000:
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])

#print("Area {} ".format([c]),"Contorno {} ".format(M),"Cx


{}".format(cx),"Cy{}".format(cy))
print("Cx = {}".format(cx),"Cy = {}".format(cy))
#print("Area {} ".format([c]),"Contorno {} ".format(M))

21
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
cv2.drawContours(frame1, [c], 0, (0, 255, 0), 1, cv2.LINE_AA)
PRACTICA Nº 6

Ro = 0
Az = 255
Ve = 255
cv2.rectangle(frame1, (cx,cy), (cx+2,cy+2),(Ro,Az,Ve), 2)
cv2.drawContours(Objetos, [c], 0, (0, 255, 0), 1, cv2.LINE_AA)

#for line in lines:


# x1, y1, x2, y2 = line[0]
# cv2.line(frame1, (x1,y1), (x2,y2), (0,0,255), 1, cv2.LINE_AA)
#Objetos = (np.zeros((fil,col),np.uint8))+255

#print("Introduzca Un comando = :")


#comando = input()
#print("Comando{}",format(comando))
cv2.imshow('Imagen Bordes',bordes)
cv2.imshow('Imagen Original',frame1)
cv2.imshow('Imagen Mascara',Objetos)

if cv2.waitKey(50) & 0xFF == ord('q'):


break
colm = cap.get(3)
film = cap.get(4)
print(film)
print(colm)
print(ret)

cap.release()
cv2.destroyAllWindows()

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA

La práctica tendrá una duración de 100 minutos.

6. MEDICIÓN, CALCULOS Y GRAFICOS

Realizar las verificaciones, cálculos que se requiere para la realización de esta práctica.

22
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 6

7. CUESTIONARIO

1..- ¿Cuál es el concepto de Visión Maquina?


2.- ¿Cuáles son las aplicaciones de la visión máquina que son aplicadas a la robótica?
3.- ¿Cuáles son las técnicas que se usan para la detección de objetos?

23
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 7

MEDICION DE OBJETOS USANDO OPENCV

1. CONOCIMIENTO TEORICO REQUERIDO

• Técnicas de filtrado de imágenes


• Técnicas de detección de bordes y contornos.
• Técnicas de reconocimiento de objetos.

2. COMPETENCIA (S)

• Desarrolla técnicas de procesamiento de imágenes mediante algoritmos de detección


de contornos para el reconocimiento de objetos usando OpenCV.

1. MATERIALES, INSUMOS Y EQUIPOS.

MATERIALES Y EQUIPOS

Item Denominación Cantidad Unidad Observaciones

Computadora con Python


1 y OpenCV 1 Pza

Camara WEB
2 1 Pza
Los equipos son utilizados por un
grupo de 3 estudiantes y la
3 Monitor 1 Pza
capacidad del laboratorio es para
1 grupo
4 Mouse 1 Pza

5 Teclado 1 Pza

24
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
PRACTICA Nº 7

INSUMOS

Item Denominación Cantidad Unidad Observaciones


1 Camara WEB 3 Pza

2 Raspberry Pi 3 modelo b + 1 Pza

3 Pantalla tactil Raspberry Pi 1 Pza

4 Micro sd 16 G 1 Pza
Los insumos son utilizados
por un grupo de 3
estudiantes y la capacidad
5 Lector de micro sd 1 Pza del laboratorio es para 1
grupo

6 Fuente de Raspberry Pi 1 Pza

7 Puntero laser 1 Pza

8 Conversor hdmi - vga 1 Pza

4. TECNICA Ó PROCEDIMIENTO

TRABAJO PRELIMINAR

El estudiante debe realizar los siguientes programas antes de realizar las practicas de
laboratorio, por tal razón debe presentar evidencias de los resultados obtenidos antes de iniciar
la práctica.

1.- Aplicación detección de objetos.

a) Programa de comunicación con Arduino


#Codigo de interaccion entre Arduino y OpenCV
#Por Glar3

import cv2
import numpy as np
25
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
import serial #cargamos la libreria serial
PRACTICA Nº 7

#Iniciamos la camara
captura = cv2.VideoCapture('HZCodD.avi')

#Iniciamos la comunicacion serial


ser = serial.Serial('com1', 9600) #En la opcion de com3 reeemplazar por el com del
arduino

while(1):

#Capturamos una imagen y la convertimos de RGB -> HSV


_, imagen = captura.read()
hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)

#Establecemos el rango de colores que vamos a detectar


#En este caso de verde oscuro a verde-azulado claro
verde_bajos = np.array([0,0,0], dtype=np.uint8)
verde_altos = np.array([80, 255, 255], dtype=np.uint8)

#Crear una mascara con solo los pixeles dentro del rango de verdes
mask = cv2.inRange(hsv, verde_bajos, verde_altos)

#Encontrar el area de los objetos que detecta la camara


moments = cv2.moments(mask)
area = moments['m00']

#Descomentar para ver el area por pantalla


print(area)

#Si el objeto tiene un area determinada, escribimos 'h'


#Si no, escribimos un caracter erroneo
if(area > 2000000):
ser.write('h'.encode('utf-8'))

else:
ser.write('n'.encode('utf-8'))

#Mostramos la imagen original y la mascara


cv2.imshow('mask', mask)
cv2.imshow('Camara', imagen)
tecla = cv2.waitKey(5) & 0xFF
if tecla == ord('q'):
break

26
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
cv2.destroyAllWindows()
PRACTICA Nº 7

DESARROLLO EN LABORATORIO

Los siguientes programas deben desarrollarse en la práctica, con el material asignado

# import the necessary packages


from imutils import paths
import numpy as np
import imutils
import cv2

def find_marker(image):
# convert the image to grayscale, blur it, and detect edges
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(gray, 35, 125)

# find the contours in the edged image and keep the largest one;
# we'll assume that this is our piece of paper in the image
cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
c = max(cnts, key = cv2.contourArea)

# compute the bounding box of the of the paper region and return it
return cv2.minAreaRect(c)

def distance_to_camera(knownWidth, focalLength, perWidth):


# compute and return the distance from the maker to the camera
return (knownWidth * focalLength) / perWidth

# initialize the known distance from the camera to the object, which
# in this case is 24 inches
KNOWN_DISTANCE = 24.0

# initialize the known object width, which in this case, the piece of
# paper is 12 inches wide
KNOWN_WIDTH = 11.0

# load the furst image that contains an object that is KNOWN TO BE 2 feet
# from our camera, then find the paper marker in the image, and initialize
# the focal length
image = cv2.imread("pattern.png")

27
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
marker = find_marker(image)
focalLength = (marker[1][0] * KNOWN_DISTANCE) / KNOWN_WIDTH
PRACTICA Nº 7

# loop over the images


for imagePath in sorted(paths.list_images("images")):
# load the image, find the marker in the image, then compute the
# distance to the marker from the camera
image = cv2.imread(imagePath)
marker = find_marker(image)
inches = distance_to_camera(KNOWN_WIDTH, focalLength, marker[1][0])

# draw a bounding box around the image and display it


box = cv2.cv.BoxPoints(marker) if imutils.is_cv2() else cv2.boxPoints(marker)
box = np.int0(box)
cv2.drawContours(image, [box], -1, (0, 255, 0), 2)
cv2.putText(image, "%.2fft" % (inches / 12),
(image.shape[1] - 200, image.shape[0] - 20),
cv2.FONT_HERSHEY_SIMPLEX,
2.0, (0, 255, 0), 3)
cv2.imshow("image", image)
cv2.waitKey(0)

Programa 2
import numpy as np
import cv2
import glob
# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
objp = np.zeros((6*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)
# Arrays to store object points and image points from all the images.
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.

images = glob.glob('pattern.png')

for fname in images:


img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# Find the chess board corners


ret, corners = cv2.findChessboardCorners(gray, (7,6),None)

28
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
# If found, add object points, image points (after refining them)
if ret == True:
objpoints.append(objp)
PRACTICA Nº 7

corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
imgpoints.append(corners2)

# Draw and display the corners


img = cv2.drawChessboardCorners(img, (7,6), corners2,ret)
cv2.imshow('img',img)

if cv2.waitKey(0) & 0xFF == ord('q'):


#break
cv2.destroyAllWindows()

import numpy as np
import cv2
import glob
# termination criterio
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# preparar puntos de objeto, como (0,0,0,0), (1,0,0,0), (2,0,0,0)...., (6,5,0)
objp = np.zeros((6*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)
# Arrays para almacenar puntos de objeto y puntos de imagen de todas las imágenes.
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.
images = glob.glob('*.png')
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Encuentra las esquinas del tablero de ajedrez
ret, corners = cv2.findChessboardCorners(gray, (7,6),None)
# Si se encuentran, añada puntos de objeto, puntos de imagen (después de refinarlos)
if ret == True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
imgpoints.append(corners2)
# Dibuja y muestra las esquinas
img = cv2.drawChessboardCorners(img, (7,6), corners2,ret)
cv2.imshow('img',img)
cv2.waitKey(1000)

cv2.destroyAllWindows()

29
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA
Programa 3

import cv2
PRACTICA Nº 7

import numpy as np

#Captura de video a traves de la webcam


cap=cv2.VideoCapture(0)

D = []
max_samples = 10000

outfile = open('new.txt', 'w')

while(1):
d=0.1
centers=[]
_, img = cap.read()

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #Se obtiene un histograma basada en las


saturaciones de colores.

blue_lower=np.array([95,150,100],np.uint8)
blue_upper=np.array([150,255,255],np.uint8)

blue=cv2.inRange(hsv,blue_lower,blue_upper) #Se crea una mascara utilizando


intervalos de color azul.

kernel = np.ones((5 ,5), uint8) #Crea una matriz de 5x5 la cual recorrera el video,
blue = cv2.morphologyEx(blue,cv2.MORPH_OPEN,kernel)
blue = cv2.morphologyEx(blue,cv2.MORPH_CLOSE,kernel)

blue=cv2.erode(blue,kernel, iterations=1) #Se erosiona utilizando el kernel sobre la


mascara.
res1=cv2.bitwise_and(img, img, mask = blue) #La nueva imagen reemplazara a blue.

(_,contours,hierarchy)=cv2.findContours(blue,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPL
E) #Encuentra los contornos de los objetos que se ven en el filtro

for pic, contour in enumerate(contours):


area = cv2.contourArea(contour) #funcion de opencv que obtiene los contornos
mayor_contorno = max(contours, key = cv2.contourArea)

30
GUIAS DE PRÁCTICA DE ELECTRONICA
Código de registro: RE-10-LAB-249 Versión 4.0
UNIVERSIDAD DEL VALLE
LABORATORIO DE ROBOTICA

if(area>2000):
x,y,w,h = cv2.boundingRect(contour) #Encuentra coordenadas de los contornos.
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.putText(img,Marcador,(x,y),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,0,0))
PRACTICA Nº 7

M = cv2.moments(contour) #Se obtiene el centro de masa de los marcadores


enconrados.
cx = int(M['m10'] /M['m00'])
cy = int(M['m01'] /M['m00'])
centers.append([cx,cy])
cv2.circle(img, (cx, cy), 7, (255, 255, 255), -1)

if len(centers)==2:
D = (np.linalg.norm(cx-cy)) #Se aplica distancia euclidiana para encontrar la
distancia entre los centros de masa.
print(D)
outfile.write({0} \n.format(D))
cv2.imshow(Color Tracking,img)
if cv2.waitKey(10) & 0xFF == ord('q'):
outfile.close()
print('Los datos han sido enviados')
cap.release()
cv2.destroyAllWindows()
break

5. TIEMPO DE DURACIÓN DE LA PRÁCTICA

La práctica tendrá una duración de 100 minutos.

6. MEDICIÓN, CALCULOS Y GRAFICOS

Realizar las verificaciones, cálculos que se requiere para la realización de esta práctica.

7. CUESTIONARIO

1..- ¿Cuáles son las técnicas que se emplean para la medición de objetos?
2.- ¿Qué aplicaciones se pueden usar en robótica con la técnica de medición de objetos?

31

También podría gustarte