Ejecuta Script con una señal desde el messenger(Brazo Robot)

RoBots_Hard: Electrónica, OCR, WebCams, Reconocimiento de objetos, maquinas
Responder
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Ejecuta Script con una señal desde el messenger(Brazo Robot)

Mensaje por BasicOs »

Enseña al Brazo-robot cuando apretar el botón, remotamente y luego ejecutalo
Siguiendo con la saga de programa hechos especialmente para aplicar el brazo robot, este es el segundo.
El primero fue este que fue simplemente que autoit presione una tecla del móvil para enviar un sms.Primera aplicación del robot usando el movil

Como la anterior, esta está hecha para niños, en el sentido de mostrar una máxima simplicidad en el código para permitir a otros evolucionar y adaptar este para otros usos. (Si quiere, puede publicar el código y el video youtube de lo que hace el brazo aquí)

Parece ser que Jonny tenía problemas para crear el programa OCR-CAM, así que ya está aquí, ya si lo deseas puedes modificarlo, (ver tema OCR CAMARA), y complicarlo agrupando conjuntos de variables (o matrices) con conjuntos de pixeles con valores concretos, y así hacer simbolos más complejos como números o letras por ejemplo.
Publicando programa y video proximamente: :smt023 :smt023
Puedo usar cualquier ventana de camara.
Si uso un programa como el messenger entonces puedo dar ordenes al Autoit Remotamente desde la cam.
Puedo usar el script de reconocimiento de voz y decir "Pulsa", para que el robot pulse el botón.
Salu22:)

Código: Seleccionar todo

;Programa Robotlearningtoanswer.au3 Creditos BasicOs - www.Autoit.es - Programa para mostrar como se puede gestionar un brazo robot con Autoit
; Aprende un simbolo que se le muestra (un color) para identificarlo más tarde y mover el brazo (por ejemplo apagar la luz)
; Learns a color and wait it to be shown to execute a trigger moving robot-arm and switching lights off
; Programm to show how you can manage a trigger at Owi Robot by Autoit
; Envia una tecla a la interface. Se usan unas coordenadas exactas (atención a las coordenadas relativas o absolutas en OPT)
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
HotKeySet("{ESC}", "Salir")
Opt("SendKeyDelay", 10)
Opt("SendKeyDownDelay", 80) ; para no apagar y encender el motor cada vez hay que "mantener el send con esto", para recorridos largos del motor subir hasta 1000 (1 segundo)
Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("MouseCoordMode",1)


;;;;;; Localizo ventana de la camara y la activo
WinActivate("tituloventana")
WinWaitActive("tituloventana")
;;;;;; Enseñando al robot
MsgBox(0,"Brazo Robot Aprende", "Señale con el ratón el lugar del simbolo sin hacer click, y acepte para confirmar el color como señal")
$Pos = MouseGetPos()
$PosPixelX=$Pos[0]
$PosPixelY=$Pos[1]
MouseMove($PosPixelX+2,$PosPixelY+2) ; muevo ratón justo debajo del pixel a controlar
$ValorqueAprendeelPrograma=PixelGetColor($PosPixelX,$PosPixelY); un valor a adriestrar al programa, puede ser por ejemplo una cartulina o la oscuridad.
MsgBox(0,"Brazo Robot Aprende en"&$PosPixelX+1 & "," & $PosPixelY+1, "Ya ha aprendido "&$ValorqueAprendeelPrograma&". Ahora Acepte para estar a la espera de que le muestre el simbolo de nuevo para ejecutar el programa (y apagar la luz)")
;El robot está a la espera de que se muestre el simbolo
While 1
	if $ValorqueAprendeelPrograma=PixelGetColor($PosPixelX,$PosPixelY) then
		Beep(500, 1000)
		MsgBox(0,"Exito","Encontrado Simbolo pasamos a ejecutar",5)
		While $ValorqueAprendeelPrograma=PixelGetColor($PosPixelX,$PosPixelY)
			sleep(2000) ; cada 2 segundos hasta que deje de existir el simbolo
			WinWait("Robotic Arm","")
			If Not WinActive("Robotic Arm","") Then WinActivate("Robotic Arm","")
			WinWaitActive("Robotic Arm","")
			send("U")
		Wend
	endif
	Sleep(100)
WEnd

Func Salir()
  Exit
EndFunc

PD: Microsoft debe mejorar mucho, al instalar el messenger es penoso. Un bolsa de programas inutiles(en principio), cuando lo instalas. ¿Es que es tan dificil hacer un messenger al estilo Autoit, que haces click, bajas un ejecutable y sin instalación..? Hacen complejo lo sencillo como "amsn"

Actualización: Nuevo código y videos más actualizados,
actualización DEL CÓDIGO en el siguiente post

Lo que hace el programa:
1.- Hasta el segundo 22 Aprende LAS ORDENES: que con la mano avanza el brazo, y con el movil se para y finaliza
2.- Luego OBEDECE A LA ORDEN está a la espera de usar lo que ha aprendido para ejecutar los movimientos apagando la luz desde el messenger a distancia.(También se puede usar el script para identificar temperatura por ejemplo en el google-applet del clima o una pagina del tiempo, y ejecutar un programa, que por ejemplo, enciende la calefacción:
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Ejecuta Script con una señal desde el messenger(Brazo Robot)

Mensaje por Jonny »

Hola

Vaya, respondí en el otro post sin mirar este.

Pues miraré bien el código, a ver que puedo hacer con él, para solucionar el programa del ocr con la cam.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Ejecuta Script con una señal desde el messenger(Brazo Robot)

Mensaje por Ximorro »

Sí, yo también te preguntaba por tu cacharrete antes de ver esto.
Je, je, mola lo del modo aprendizaje, en vez de ponerlo a piñón fijo le dices cada vez qué color tiene que buscar, ¡muy bueno! :smt024

Una cosa, ¿es muy fiable lo de volver a encontrar el color? Lo digo porque trabajando en imágenes reales en 24bits es bien fácil que cuando vayas a buscar el color no sea exactamente ese, sino tremendamente parecido (cambios en la luminosidad, reflejos, etc...) Para la activación quizás sería mejor usar PixelSearch en vez de PixelGetColor, aunque busque en un sólo pixel, con PixelSearch puedes usar el parámetro shade-variation, para que busque colores muy similares. Quizás el ojo no los distinga, ¡pero PixelGetColor sí! :smt003
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Ejecuta Script con una señal desde el messenger(Brazo Robot)

Mensaje por BasicOs »

Ya esta modificado el codigo un jpg y un video del invento.
Se puede controlar cualquier acción desde una señal de la cam, como cuando alguien entra en casa que haga una señal como una voz de buenos dias, envie un correo y mueva el brazo robot para poner la luz.
El código más completo que el primero y actualizado aqui, similar al anterior pero depurado y usando pixelsearch() para dar un rango de variabilidad a los colores por errores de iluminación:

Código: Seleccionar todo

;Programa Robotluz.au3 Creditos BasicOs - www.Autoit.es - Programa para mostrar como se puede gestionar un brazo robot con Autoit con mímica, enseñandole previamente las ordenes
; Aprende un simbolo que se le muestra (un color) para identificarlo más tarde y mover el brazo (por ejemplo apagar la luz)
; Learns a color and wait it to be shown to execute a trigger moving robot-arm and switching lights off
; Programm to show how you can manage a trigger at Owi Robot by Autoit
; Envia una tecla a la interface. Se usan unas coordenadas exactas (atención a las coordenadas relativas o absolutas en OPT)
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>


HotKeySet("{ESC}", "Salir")
Opt("SendKeyDelay", 10)
Opt("SendKeyDownDelay", 500) ; para no apagar y encender el motor cada vez hay que "mantener el send con esto", para recorridos largos del motor subir hasta 1000 (1 segundo)
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("MouseCoordMode", 1)
Global $PosPixelX, $PosPixelY, $ValorqueAprendeelPrograma

;===================;;;;; Creo el valor a aprender que es $ValorqueAprendeelPrograma
;;;;;; Enseñando al robot

$ValorqueAprendeelPrograma = CapturaColor("que Inicia la busqueda de la señal"); un valor que aprende el programa, puede ser por ejemplo una cartulina o la oscuridad.

$ValorqueAprendeparaSalir = CapturaColor("Para salir de la busqueda"); un valor que aprende el programa, puede ser por ejemplo una cartulina o la oscuridad.


;============================ Aquí se busca que se produzca la señal
MsgBox(0, "Brazo Robot buscando en " & $PosPixelX + 1 & "," & $PosPixelY + 1, "Busca color '" & $ValorqueAprendeelPrograma & "'. Ahora Acepte para esperar a que se muestre el simbolo para ejecutar el programa del brazo")
;El robot está a la espera de que se muestre el simbolo

$i1 = 1
While 1
	$i1 = $i1 + 1
	ToolTip("Aquí Busqueda " & $i1, $PosPixelX + 1, $PosPixelY + 1)
	PixelSearch($PosPixelX - 20, $PosPixelY - 20, $PosPixelX + 20, $PosPixelY + 20, $ValorqueAprendeelPrograma, 3)
	If Not @error Then
		ToolTip("")
		Send("{PRINTSCREEN}")
		Beep(800, 2000)
		;While $ValorqueAprendeelPrograma = PixelGetColor($PosPixelX, $PosPixelY)
		;	Sleep(2000) ; cada 2 segundos hasta que deje de existir el simbolo
		WinWait("Robotic Arm", "")
		If Not WinActive("Robotic Arm", "") Then WinActivate("Robotic Arm", "")
		WinWaitActive("Robotic Arm", "")
		Send("J") ;movemos un pasito el brazo
		;WEnd
	EndIf
	PixelSearch($PosPixelX - 20, $PosPixelY - 20, $PosPixelX + 20, $PosPixelY + 20, $ValorqueAprendeparaSalir, 3)
	If Not @error Then
		Send("U") ;movemos un pasito el brazo
		Send("U") ;movemos un pasito el brazo
		Send("U") ;movemos un pasito el brazo
		Send("U") ;movemos un pasito el brazo
		Send("U") ;movemos un pasito el brazo

		ExitLoop
	EndIf
	Sleep(100)
WEnd
MsgBox(0, "Fin", "Tarea Finalizada", 5)

Func Salir()
	Exit
EndFunc   ;==>Salir

Func CapturaColor($TipoSenal) ;la señal tiene que ejecutarse en el mismo lugar (PosPixelX/Y)
	While 1
		$Pos = MouseGetPos()
		$PosPixelX = $Pos[0] - 1
		$PosPixelY = $Pos[1] - 1
		ToolTip("Click en la señal " & $TipoSenal, $Pos[0], $Pos[1])
		If _IsPressed(01) Then
			ToolTip("")
			ShowCross($PosPixelX + 1, $PosPixelY + 1, 20, 2, 0xFF, 500)
			Return (PixelGetColor($PosPixelX, $PosPixelY))
		EndIf
		Sleep(100)
	WEnd
EndFunc   ;==>CapturaColor

Func ShowCross($start_x, $start_y, $length, $width, $color, $time)
	Local $hDC, $hPen, $obj_orig

	$hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop)
	$hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
	$obj_orig = _WinAPI_SelectObject($hDC, $hPen)

	_WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left
	_WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right
	_WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up
	;   _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down
	_WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
	_WinAPI_LineTo($hDC, $start_x, $start_y + 5)

	Sleep($time) ; show cross over screen for defined seconds

	; refresh desktop (clear cross)
	_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)

	; clear resources
	_WinAPI_SelectObject($hDC, $obj_orig)
	_WinAPI_DeleteObject($hPen)
	_WinAPI_ReleaseDC(0, $hDC)
EndFunc   ;==>ShowCross
Otros videos parecidos:




En estos videos se ven las capturas remotas de la comunicación del messenger, pero en el jpg se ven más claramente los programas que estaban abiertos en ese momento:
  • -Robotic Arm manejando el brazo
  • - Amsn messenger para "recibir" las ordenes via messenger
  • - Autoit para ejecutar la lógica
Se ve que para el cliente de video (messenger) no use el de msn, sino la versión amsn que incluye "Send" en la cabecera, la ventana está separada como se puede ver en ej jpg.

A divertirse con la mímica hacia el PC, y también se pueden usar ordenes habladas
O sea que para los discapacitados, las personas que solo puedan usar tarjetas, y las personas que les guste hablar con mímica ya tienen una opción en windows con Autoit.
Salu22:)
PD: Si se quiere multiplicar por dos la fuerza del brazo, o varias veces se debe usar una polea (por ejemplo anclada en un techo o compuesta), y hay muchas otras maneras con poleas y palancas, como alguien dijo, si quieres mover el mundo dame un apoyo: http://www.authorstream.com/Presentatio ... owerpoint/
http://html.rincondelvago.com/palancas-y-poleas_2.html
Adjuntos
screendeledge.jpg
screendeledge.jpg (115.38 KiB) Visto 9377 veces
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Ejecuta Script con una señal desde el messenger(Brazo Robot)

Mensaje por BasicOs »

Según vemos en el video, que se puede controlar un PC con los gestos (la mano o simbolos) con Autoit y una Cam economica.
Para los tetraplejicos ya se podría hacer un detector de pixeles que moviera el brazo así con un scanner que ya esta a la venta, que te lee la actividad del cerebro en colores, enfado, alegria etc...., esto se podría usar para dar movimiento a los que no tienen manos (o con la voz). :smt032
http://www.elpais.com/articulo/futuro/r ... ifut_2/Tes
Actualizaci:
También Sony y Ms se ponen con lo de reconocimiento de gestos: http://www.elmundo.es/elmundo/2010/06/1 ... 19115.html
Actualizaci, Edit:
Independientemente se puede pensar en el edge robot como el nucleo o motor de otro robot más grande, como con niveles o capas de actuación, la mas interna sería AUTOIT, y la más externa despues de varios pasos encadenados la función que se desee.
Es decir, el brazo puede conducirse el mismo encima de un coche teledirigido conduciendo los mandos, sobre una plataforma, y con el netbook con cam va viendo el camino que tiene que seguir, o igualmente en un avion teledirigido, etc. .etc...
Salu22:)
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Ejecuta Script con una señal desde el messenger(Brazo Ro

Mensaje por BasicOs »

Aquí añado una receta para hacer un robot con una cam, un portatil, motor y un programa en basic. También es posible hacer con Autoit y el OCR.
http://www.todomicrostamp.com/proyecto_ ... ecto=iker2
Salu22:)
Edit:
Imagen
Imagen
Responder