{"id":6336,"date":"2025-11-26T16:57:02","date_gmt":"2025-11-26T08:57:02","guid":{"rendered":"https:\/\/meskernel.net\/?p=6336"},"modified":"2025-11-26T16:57:05","modified_gmt":"2025-11-26T08:57:05","slug":"ordenador-de-acompanamiento","status":"publish","type":"post","link":"https:\/\/meskernel.net\/es\/companion-computer\/","title":{"rendered":"Tel\u00e9metro l\u00e1ser LD30-S1R(LDL-T) \u2192 Ordenador de acompa\u00f1amiento \u2192 Controlador de vuelo Pixhawk."},"content":{"rendered":"<p>Esta gu\u00eda proporciona una soluci\u00f3n totalmente operativa y sin necesidad de documentaci\u00f3n adicional para integrar:<\/p>\n\n\n\n<p>LD30-S1R \u2192 Ordenador de compa\u00f1\u00eda (Raspberry Pi \/ Jetson \/ Android) \u2192 MAVLink \u2192 <a href=\"https:\/\/meskernel.net\/es\/pixhawk-ldl-t-laser-distance-sensor-integration\/\">Pixhawk<\/a><\/p>\n\n\n\n<p>Incluye diagramas de cableado, flujo de an\u00e1lisis de datos, c\u00f3digo Python listo para ejecutar, configuraci\u00f3n de par\u00e1metros Pixhawk y verificaci\u00f3n de la estaci\u00f3n de control terrestre.<\/p>\n\n\n\n<p>Siga esta gu\u00eda paso a paso y el sistema funcionar\u00e1 inmediatamente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>1. Conexiones de cableado (LD30 \u2194 Ordenador de abordo \u2194 Controlador de vuelo)<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1.1 LD30-S1R \u2194 Ordenador de abordo (UART)<\/strong><\/h2>\n\n\n\n<p>Los ordenadores de compa\u00f1\u00eda pueden ser:<br><strong>Raspberry Pi \/ Jetson Nano \/ PC industrial \/ Dispositivo Android con USB-UART<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>LD30-S1R<\/th><th>Ordenador de compa\u00f1\u00eda (<a href=\"https:\/\/meskernel.net\/es\/usart-vs-uart\/\">UART<\/a>)<\/th><\/tr><\/thead><tbody><tr><td><strong>VCC (3,3-4,0V)<\/strong><\/td><td>3,3 V o regulador externo<\/td><\/tr><tr><td><strong>GND<\/strong><\/td><td>GND<\/td><\/tr><tr><td><strong>TXD (drenaje abierto)<\/strong><\/td><td>RX<\/td><\/tr><tr><td><strong>RXD<\/strong><\/td><td>TX<\/td><\/tr><tr><td><strong>PWREN<\/strong><\/td><td>Pull HIGH (3.3V) o GPIO<\/td><\/tr><tr><td><strong>nRST<\/strong><\/td><td>No conectado<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota:<\/strong> LD30 uses 3.3V <a href=\"https:\/\/meskernel.net\/es\/ttl-uart\/\">TTL UART<\/a>. <strong>No lo haga<\/strong> conectar a 5V TTL UART.<br>TX es de drenaje abierto; los pull-ups internos de Raspberry Pi y Jetson funcionan bien.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1.2 Ordenador de abordo \u2194 Pixhawk (MAVLink UART)<\/strong><\/h2>\n\n\n\n<p>Utilice <strong>TELEM1 \/ TELEM2<\/strong> puerto.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Ordenador de compa\u00f1\u00eda<\/th><th>Pixhawk (Puerto TELEM)<\/th><\/tr><\/thead><tbody><tr><td><strong>TX<\/strong><\/td><td>RX<\/td><\/tr><tr><td><strong>RX<\/strong><\/td><td>TX<\/td><\/tr><tr><td><strong>GND<\/strong><\/td><td>GND<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Velocidad en baudios: <strong>115200<\/strong><\/li>\n\n\n\n<li>Protocolo: <strong>MAVLink2<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>2. Lectura de datos del LD30-S1R en el ordenador de acompa\u00f1amiento<\/strong><\/h1>\n\n\n\n<p>El LD30 se comunica mediante un protocolo de comandos binarios.<br>El ordenador de acompa\u00f1amiento se encarga:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Puerto UART abierto<\/li>\n\n\n\n<li>Enviar comando \u201cmedici\u00f3n continua<\/li>\n\n\n\n<li>Analiza los marcos que empiezan por <strong>0xAA<\/strong><\/li>\n\n\n\n<li>Distancia de extracci\u00f3n (mm)<\/li>\n\n\n\n<li>Convertir a metros<\/li>\n\n\n\n<li>Empaquetar en MAVLink <strong>SENSOR_DISTANCIA<\/strong><\/li>\n\n\n\n<li>Enviar a Pixhawk<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2.1 Comando de medici\u00f3n continua<\/strong><\/h2>\n\n\n\n<p>Del Manual del usuario del LD30 (secci\u00f3n 14.12):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AA 00 00 20 00 01 00 04 25\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2.2 Formato del marco de datos<\/strong><\/h2>\n\n\n\n<p>Los datos devueltos incluyen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Distancia:<\/strong> 4 bytes (mm)<\/li>\n\n\n\n<li><strong>Calidad de la se\u00f1al:<\/strong> 2 bytes<\/li>\n\n\n\n<li>Cabecera del marco: <strong>0xAA<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>3. Script Python completo (listo para ejecutarse)<\/strong><\/h1>\n\n\n\n<p>Este gui\u00f3n:<\/p>\n\n\n\n<p>\u2714 Lee LD30<br>\u2714 Analiza la distancia<br>\u2714 Convierte mm \u2192 m<br>\u2714 Env\u00eda MAVLink <code>SENSOR_DISTANCIA<\/code><br>\u2714 Transmite datos a Pixhawk en tiempo real<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Guardar como <code>ld30_to_mavlink.py<\/code><br>Corre con:<br><code>python3 ld30_to_mavlink.py<\/code><\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>import serial\nfrom pymavlink import mavutil\nimport struct\n\n# --- LD30 Serial Port ---\nld30 = serial.Serial('\/dev\/ttyUSB0', 115200, timeout=0.1)\n\n# Continuous measurement command (from manual 14.12)\nCONT_MEASURE = bytes(&#91;0xAA,0x00,0x00,0x20,0x00,0x01,0x00,0x04,0x25])\nld30.write(CONT_MEASURE)\n\n# --- MAVLink connection to Pixhawk ---\nmav = mavutil.mavlink_connection('\/dev\/ttyAMA0', baud=115200)\n\ndef send_distance_to_fc(distance_m):\n    mav.mav.distance_sensor_send(\n        0,       # time_boot_ms\n        3,       # min_distance (cm)\n        3000,    # max_distance (cm)\n        int(distance_m * 100),  # current distance (cm)\n        0,       # type\n        0,       # id\n        0,       # orientation\n        0        # covariance\n    )\n\nbuffer = bytearray()\n\nwhile True:\n    data = ld30.read()\n    if not data:\n        continue\n\n    buffer += data\n\n    # Minimum frame length = 12 bytes\n    if len(buffer) >= 12:\n        # Look for header 0xAA\n        if buffer&#91;0] != 0xAA:\n            buffer.pop(0)\n            continue\n\n        # Parse fixed-length frame\n        if len(buffer) >= 12:\n            # Distance is bytes 6~9 (big-endian)\n            dist_bytes = buffer&#91;6:10]\n            distance_mm = struct.unpack(\">I\", dist_bytes)&#91;0]\n            distance_m = distance_mm \/ 1000.0\n\n            print(\"LD30 Distance:\", distance_m, \"m\")\n            send_distance_to_fc(distance_m)\n\n            buffer = bytearray()  # Clear buffer\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>4. Configuraci\u00f3n de par\u00e1metros Pixhawk (Mission Planner)<\/strong><\/h1>\n\n\n\n<p>Ir a:<br><strong>Config \u2192 Lista completa de par\u00e1metros<\/strong><\/p>\n\n\n\n<p>Ajusta lo siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Par\u00e1metro<\/th><th>Valor<\/th><\/tr><\/thead><tbody><tr><td><strong>RNGFND1_TYPE<\/strong><\/td><td>10 (MAVLink)<\/td><\/tr><tr><td><strong>RNGFND1_MIN_CM<\/strong><\/td><td>3<\/td><\/tr><tr><td><strong>RNGFND1_MAX_CM<\/strong><\/td><td>3000<\/td><\/tr><tr><td><strong>RNGFND1_ORIENT<\/strong><\/td><td>0 (Adelante) o <strong>25 (Hacia abajo)<\/strong><\/td><\/tr><tr><td><strong>RNGFND1_RMETRIC<\/strong><\/td><td>1<\/td><\/tr><tr><td><strong>PROTOCOLO_DE_SERIE1<\/strong><\/td><td>2 (MAVLink2)<\/td><\/tr><tr><td><strong>SERIAL1_BAUD<\/strong><\/td><td>115<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Si utiliza TELEM2, utilice SERIAL2_*<br>Si utiliza TELEM3, utilice SERIAL3_*<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>5. Monitorizaci\u00f3n de datos LD30 en Mission Planner \/ QGroundControl<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5.1 Planificador de misiones<\/strong><\/h2>\n\n\n\n<p>Navega hasta:<\/p>\n\n\n\n<p><strong>Datos de vuelo \u2192 Estado \u2192 sonar_range \/ rngfnd1_dist<\/strong><\/p>\n\n\n\n<p>o:<\/p>\n\n\n\n<p><strong>Ctrl + F \u2192 Inspector MAVLink \u2192 DISTANCE_SENSOR<\/strong><\/p>\n\n\n\n<p>Ya lo ver\u00e1s:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Distancia en tiempo real<\/li>\n\n\n\n<li>Frecuencia de actualizaci\u00f3n<\/li>\n\n\n\n<li>ID de flujo MAVLink<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5.2 QGroundControl<\/strong><\/h2>\n\n\n\n<p>Navega:<\/p>\n\n\n\n<p><strong>Widgets \u2192 Analyze Tools \u2192 MAVLink Inspector \u2192 DISTANCE_SENSOR<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>6. Flujo de trabajo global del sistema<\/strong><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>            LD30-S1R\n                \u2502\n           TTL UART 3,3 V\n                \u2502\n        \u250c\u2500\u2500\u2500\u2500Companion Computer\u2500\u2500\u2500\u2500\u2510\n        \u2502 L\u00f3gica de an\u00e1lisis LD30 \u2502\n        \u2502 Empaquetado MAVLink \u2502\n        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                  MAVLink UART\n                       \u2502\n                 Controlador de vuelo Pixhawk\n                       \u2502\n        Planificador de misi\u00f3n \/ QGroundControl\n<\/code><\/pre>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>This guide provides a fully working, no-extra-documentation-needed solution to integrate: LD30-S1R \u2192 Companion Computer (Raspberry Pi \/ Jetson \/ Android) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6339,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[49],"tags":[],"class_list":["post-6336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-solution"],"_links":{"self":[{"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/posts\/6336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/comments?post=6336"}],"version-history":[{"count":0,"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/posts\/6336\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/media\/6339"}],"wp:attachment":[{"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/media?parent=6336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/categories?post=6336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meskernel.net\/es\/wp-json\/wp\/v2\/tags?post=6336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}