You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/advanced/beambots.html
+228Lines changed: 228 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -270,7 +270,235 @@ <h3 class="title"><a href="../index.html">Electrónica, Robótica e IOT con Elix
270
270
</aside>
271
271
<articleclass="doc">
272
272
<h1class="page">Beam Bots</h1>
273
+
<divid="preamble">
274
+
<divclass="sectionbody">
275
+
<divclass="imageblock">
276
+
<divclass="content">
277
+
<imgsrc="_images/beambots.png" alt="beambots">
278
+
</div>
279
+
</div>
280
+
<divclass="paragraph">
281
+
<p>Beam Bots es un framework de Elixir diseñado para desarrollar aplicaciones robóticas tolerantes a fallos, aprovechando los principios de OTP.</p>
282
+
</div>
283
+
<divclass="paragraph">
284
+
<p>Este framework se basa en un lenguaje específico de dominio (DSL) construido mediante el uso de macros. El resultado es un código que se asemeja a una especificación, reflejando directamente la estructura física del robot.</p>
285
+
</div>
286
+
</div>
287
+
</div>
288
+
<divclass="sect1">
289
+
<h2id="comparación-con-ros2"><aclass="anchor" href="#comparación-con-ros2"></a>Comparación con ROS2</h2>
290
+
<divclass="sectionbody">
291
+
<divclass="paragraph">
292
+
<p>Beam Bots ofrece un enfoque similar a ROS2 para la comunicación y la gestión de tareas, pero utilizando las capacidades nativas del ecosistema BEAM. A continuación, se presenta una comparación de conceptos clave:</p>
<p><code>Phoenix.PubSub</code>, <code>Registry</code> para el registro de procesos, y la capacidad inherente de <strong>process messaging</strong> de Erlang/Elixir.</p>
310
+
</div></div></td>
311
+
</tr>
312
+
<tr>
313
+
<tdclass="tableblock halign-left valign-top"><pclass="tableblock"><strong>Servicios para interacciones síncronas de solicitud/respuesta</strong></p></td>
<p><code>GenServer.call/3</code> es el mecanismo estándar para realizar llamadas síncronas a un proceso <code>GenServer</code>, emulando un servicio.</p>
316
+
</div></div></td>
317
+
</tr>
318
+
<tr>
319
+
<tdclass="tableblock halign-left valign-top"><pclass="tableblock"><strong>Acciones para tareas de larga duración con retroalimentación de progreso</strong></p></td>
<p><code>Task.Supervisor</code> gestionando procesos <code>Task</code> que pueden enviar mensajes de progreso al proceso solicitante.</p>
322
+
</div></div></td>
323
+
</tr>
324
+
<tr>
325
+
<tdclass="tableblock halign-left valign-top"><pclass="tableblock"><strong>Nodos de ciclo de vida para gestionar transiciones de estado de forma explícita</strong></p></td>
<p><code>GenServer</code> con transiciones de estado definidas, permitiendo la implementación de máquinas de estado robustas.</p>
328
+
</div></div></td>
329
+
</tr>
330
+
<tr>
331
+
<tdclass="tableblock halign-left valign-top"><pclass="tableblock"><strong>Sistema de parámetros para configuración dinámica en tiempo de ejecución</strong></p></td>
<p>El módulo <code>MoveCommand</code> define un comando de movimiento para el robot, el cual se registra en el bloque <code>commands</code>. A continuación, se define la topología del robot, compuesta por enlaces y articulaciones. Cada definición de articulación debe incluir un tipo, un eje y sus límites.</p>
444
+
</div>
445
+
<divclass="paragraph">
446
+
<p>Para ejecutar la aplicación del robot, se debe integrar en el archivo <code>application.ex</code> de la siguiente manera:</p>
447
+
</div>
448
+
<divclass="listingblock">
449
+
<divclass="content">
450
+
<preclass="highlightjs highlight"><codeclass="language-elixir hljs" data-lang="elixir">defmodule MyApp.Application do
<p>La aplicación también puede ser probada en modo simulación. Para ello, se inicia el entorno del proyecto con <code>iex -S mix</code>, y luego se ejecutan los siguientes comandos:</p>
469
+
</div>
470
+
<divclass="listingblock">
471
+
<divclass="content">
472
+
<preclass="highlightjs highlight"><codeclass="language-elixir hljs" data-lang="elixir"># iniciar proceso de simulación
0 commit comments