<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Como bien dice Guille, la información de PyBot resumida está acá:</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<a href="https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=PyBot" id="LPlnk848553">https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=PyBot</a><br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
En cuanto a la pregunta original: si, el mensaje que envía siempre es el mismo de &quot;get_value&quot;, pero eso es el final del mensaje.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
Al inicio se manda un byte que dice a qué modulo le estamos hablando.&nbsp;</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<img style="max-width:100%" class="ContentPasted1 w-691 h-202" size="52599" contenttype="image/png" data-outlook-trace="F:1|T:1" src="cid:21d3938d-682c-44b1-872e-5311bb328669"><br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
Y en PyBot hacemos el &quot;send&quot; de ese mensaje:</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<img style="max-width:100%" class="ContentPasted2 w-463 h-128" size="9757" contenttype="image/png" data-outlook-trace="F:1|T:1" src="cid:0812f681-d4cc-4d8a-9303-288357275784"><br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
el &quot;self.shifted&quot; sería el identificador, luego el tipo de operación (0x03), luego la longitud, un byte vacío y luego si el &quot;get_value&quot;</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
Quizás habría que hacer un taller de PyBot explicando esto.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
El código hace lo mismo que en Lua, pero Python me gusta más.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size: 11pt; color: rgb(0, 0, 0);"><b>De:</b> butia-devel-l-bounces@fing.edu.uy &lt;butia-devel-l-bounces@fing.edu.uy&gt; en nombre de Guillermo Reisch &lt;greisch@fing.edu.uy&gt;<br>
<b>Enviado:</b> viernes, 21 de julio de 2023 16:55<br>
<b>Para:</b> butia-devel-l@fing.edu.uy &lt;butia-devel-l@fing.edu.uy&gt;<br>
<b>Cc:</b> Eduardo Trápani &lt;etrapani@gmail.com&gt;<br>
<b>Asunto:</b> Re: [Butia-devel-list] Protocolo PC&lt;-&gt;Butiá sobre USB</font>
<div>&nbsp;</div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">Manual, bue, esta la información de bobot en la wiki de butia<br>
<a href="https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=Bobot" data-auth="NotApplicable">https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=Bobot</a><br>
<br>
Después cambiamos el &quot;bobot&quot; (en lua echo por Jorge) por &quot;pybot&quot; (en python <br>
echo por Alan) que se comunica con la usb4aButiá directamente usando la <br>
librería pyusb, ahí ya no necesitamos el servidor tcp/ip esperando comandos <br>
(ya que usamos pybot como una api directamente y no como un servidor aunque <br>
también tiene server por lo que vi...)<br>
<a href="https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=PyBot" data-auth="NotApplicable">https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=PyBot</a><br>
Codigo esta en butia/turtlebots/pybot<br>
<br>
Y por ultimo si te interesa el formato protocolo USB no hay otra que ver el <br>
USB4Butia (que es la placa con el pic18f4550 que maneja el butia 2.0)<br>
<a href="https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?" data-auth="NotApplicable">https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?</a><br>
title=USB4buti%C3%A1<br>
<br>
El usb4butia esta basado en usb4all<br>
<a href="https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=Usb4all" data-auth="NotApplicable">https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?title=Usb4all</a><br>
que es un proyecto de grado de Andres Aguirre.<br>
La tesis final con la documentación de usuario y todo esta en<br>
<a href="https://sourceforge.net/p/usb4all/code/ci/master/tree/doc/usb4all/" data-auth="NotApplicable">https://sourceforge.net/p/usb4all/code/ci/master/tree/doc/usb4all/</a><br>
Igual que todo el firmware de butia que esta en:<br>
<a href="https://sourceforge.net/p/usb4all/code" data-auth="NotApplicable">https://sourceforge.net/p/usb4all/code</a><br>
<br>
el protocolo que usa usb4all (implementado en el firmware)<br>
<a href="https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?" data-auth="NotApplicable">https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php?</a><br>
title=Usb4all#3._Protocolo_de_Comunicaci.C3.B3n<br>
&nbsp;es un RPC (Remote Procedure Call) [bloqueante] en que le mandas un mensaje a <br>
algún modulo y el modulo responde, tienes un modulo principal o admin que se <br>
encarga de abrir otros modulos, y cada modulo (por ejemplo &quot;grey&quot; o sensor de <br>
grices) tiene funciones particulares [en el caso de &quot;grey&quot; GET_VALUE=1]<br>
<br>
En pybot el manejo del modulo admin esta en:<br>
turtlebots/pybot/device.py<br>
<br>
Y cada modulo particular podes ver las funciones que soporta en:<br>
turtlebots/pybot/drivers/$NOMBRE_MODULO<br>
<br>
Ejemplo:<br>
# Abrir modulo grey (obtenido de device.py)<br>
[0][10][0][0][1][1]['g']['r']['e']['y'] =&gt; usb4all<br>
<br>
Si podes desde la app android instalar un interprete python ya podrías correr <br>
el código de pybot en la app y utilizarlo como una api.<br>
<br>
Espero no haberte confundido más todavía :-P<br>
<br>
Saluds<br>
Guillermo Reisch<br>
<br>
<br>
El jueves, 20 de julio de 2023 23:21:13 -03 Eduardo Trápani escribió:<br>
&gt; Hola,<br>
&gt; <br>
&gt; Estoy tratando de comunicarme desde una aplicación Android en una Beta<br>
&gt; Crux de Ceibal con el adaptador USB OTG.<br>
&gt; <br>
&gt; Intento seguir el codigo de bobot[1] pero honestamente, en lua me pierdo<br>
&gt; entre los objetos y los mensajes sobre USB. Los send() envían por<br>
&gt; ejemplo todos el mismo código para leer sensores (aparentemente<br>
&gt; GET_VALUE=0x01) pero no veo cómo indicar a cuál sensor se refiere.<br>
&gt; <br>
&gt; ¿Hay algún documento que cuente un poco cómo es el protocolo de<br>
&gt; conversación USB con la Butiá? Puede ser algo general, es para entender<br>
&gt; el flujo de la comunicación y cómo se elige el dispositivo (sensor,<br>
&gt; motor) con el que se quiere hablar. Si no hay documento, ¿alguien puede<br>
&gt; comentar por arriba cómo funciona la charla con la Butiá sobre USB?<br>
&gt; <br>
&gt; [1] <a href="https://sourceforge.net/p/butia/code/ci/master/tree/bobot/" data-auth="NotApplicable">
https://sourceforge.net/p/butia/code/ci/master/tree/bobot/</a><br>
&gt; <br>
&gt; _______________________________________________<br>
&gt; Butia-devel-l site list<br>
&gt; Butia-devel-l@fing.edu.uy<br>
&gt; <a href="https://www.fing.edu.uy/mailman/listinfo/butia-devel-l" data-auth="NotApplicable">
https://www.fing.edu.uy/mailman/listinfo/butia-devel-l</a><br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
Butia-devel-l site list<br>
Butia-devel-l@fing.edu.uy<br>
<a href="https://www.fing.edu.uy/mailman/listinfo/butia-devel-l" data-auth="NotApplicable">https://www.fing.edu.uy/mailman/listinfo/butia-devel-l</a><br>
</div>
</span></font></div>
</body>
</html>