diff --git a/docs/css/extra.css b/docs/css/extra.css index fd7604f4..68aa3c2e 100644 --- a/docs/css/extra.css +++ b/docs/css/extra.css @@ -2,6 +2,20 @@ html { scrollbar-gutter: stable; } +/* --- Brand colors (palette uses primary/accent: custom; set per color scheme) --- */ +[data-md-color-scheme="default"] { + --md-primary-fg-color: #1D3556; /* Ocean blue */ + --md-primary-fg-color--light: #2c4a72; + --md-primary-fg-color--dark: #14253b; + --md-accent-fg-color: #2B9C6A; /* Signal green (dark) */ +} +[data-md-color-scheme="slate"] { + --md-primary-fg-color: #1D3556; /* keep ocean-blue header + tabs in dark mode */ + --md-primary-fg-color--light: #2c4a72; + --md-primary-fg-color--dark: #14253b; + --md-accent-fg-color: #4BEF8F; /* Signal green (light) — readable on dark */ +} + .md-header { height:3.7rem; background-color: #1d3556; @@ -28,6 +42,27 @@ html { width:auto; } +/* The logo (waterlinked_logo.png) is already the "Water Linked" wordmark. Where the logo + shows, the site-name text beside it doubles "Water Linked", so show only "Documentation" + instead — header reads "WaterLinked Documentation" (clearly a docs site, no doubling). + site_name stays "Water Linked Documentation" for the page /search; the page title + still slides into the header on scroll (that topic carries data-md-component="header-topic"). + Scoped to ≥76.25em because Material hides the wordmark logo below that — on mobile/tablet + there's no logo, so the full "Water Linked Documentation" text should remain. */ +@media screen and (min-width: 76.25em) { + .md-header__title .md-header__topic:not([data-md-component]) .md-ellipsis { + position: relative; + color: transparent; + } + .md-header__title .md-header__topic:not([data-md-component]) .md-ellipsis::after { + content: "Documentation"; + position: absolute; + left: 0; + top: 0; + color: #fff; + } +} + .responsive-video { position: relative; width: 100%; @@ -57,7 +92,92 @@ html { background-color: #2B9C6A; } -/* Ocean Blue for links */ -a { +/* Green for content links — scoped to typeset content so it doesn't tint nav/tab labels */ +.md-typeset a { color: #2B9C6A; } +/* Brighter green for content links in dark mode (better contrast on slate) */ +[data-md-color-scheme="slate"] .md-typeset a { + color: #4BEF8F; +} + +/* Wire-colour / LED swatches — drawn in CSS instead of emoji so they look pixel-identical + on every OS & browser. Emoji such as ⬜/⚪ are rendered by each device's own emoji font + (white/silver ones can look pink or oddly bordered on some platforms); these boxes don't + depend on that font. Used in dvl/electrical.md. Squares = wire colours, circles = LEDs. */ +.swatch { + display: inline-block; + width: .85em; + height: .85em; + border: 1px solid rgba(0, 0, 0, .4); + border-radius: 3px; + vertical-align: -.1em; +} +.swatch-round { border-radius: 50%; } +[data-md-color-scheme="slate"] .swatch { border-color: rgba(255, 255, 255, .5); } +.c-black { background: #1a1a1a; } +.c-red { background: #d32f2f; } +.c-green { background: #2e7d32; } +.c-orange { background: #ef6c00; } +.c-brown { background: #5d4037; } +.c-silver { background: #c0c0c0; } +.c-ledon { background: #2ecc40; } +.c-ledoff { background: #3a3a3a; } +.c-green-white { background: linear-gradient(90deg, #2e7d32 50%, #fff 50%); } +.c-orange-white { background: linear-gradient(90deg, #ef6c00 50%, #fff 50%); } +.c-brown-white { background: linear-gradient(90deg, #5d4037 50%, #fff 50%); } + +/* Product photos / screenshots have an opaque white background baked into the file, so in + dark mode they render as harsh bright blocks (CSS can't make an opaque pixel transparent, + and many photos have a dark subject that needs a light backdrop anyway). In dark mode, + frame content images as a light "photo card": the white backing keeps any transparent + images readable, and the padding + rounded corners make white-background images read as an + intentional framed photo instead of a raw white rectangle. */ +[data-md-color-scheme="slate"] .md-typeset img { + background-color: #fff; + padding: .35rem; + border-radius: .25rem; +} + +/* --- Sticky section tabs ------------------------------------------------------------ + Keep the top-level section tabs reachable while scrolling. Out of the box (this site runs + mkdocs-material 9.x) the tab bar shows only at the very top: the theme's JS toggles the + boolean `hidden` attribute on the `.md-tabs` nav as you scroll, which fades the links out. + Material's built-in sticky tabs (navigation.tabs.sticky) is an Insiders-only feature, so + we pin the bar under the fixed header ourselves and cancel the link fade. Scoped to + ≥76.25em because below that the tab bar is hidden (mobile uses the drawer), matching the + theme's own tabs breakpoint. */ +@media screen and (min-width: 76.25em) { + .md-tabs { + position: sticky; + top: 3.7rem; /* sit directly under the fixed header (its height) */ + } + /* The theme adds the `hidden` attribute on scroll, which opacity-fades the links. Cancel + that so the links stay clickable while the bar is pinned. (The bar itself stays put + because the theme keeps .md-tabs displayed, not display:none, in the hidden state.) */ + .md-tabs[hidden] { + pointer-events: auto; + } + .md-tabs[hidden] .md-tabs__link { + transform: none; + opacity: .7; + } + .md-tabs[hidden] .md-tabs__item--active .md-tabs__link, + .md-tabs[hidden] .md-tabs__link:hover, + .md-tabs[hidden] .md-tabs__link:focus { + opacity: 1; + } + /* The pinned tab bar covers the band just below the header, so drop the sticky sidebars + (left nav + right TOC) to start beneath it, else their tops (the nav title / "Table of + contents" label) hide behind the bar. The theme TOGGLES this offset via the + `md-header--lifted` class on the header: present at the top (tabs shown → sidebars + `top:4.8rem`), but removed on scroll (→ sidebars fall back to the base `top:2.4rem`). + Since we keep the tabs pinned in BOTH states, the sidebars must clear the bar in both, + so force the offset unconditionally with !important (beats the theme's state-dependent + rules at any specificity). Offset = header 3.7rem + tab bar 2.4rem = 6.1rem (measured: + header+tabs = 122px at 1rem=20px). */ + .md-sidebar { + top: 6.1rem !important; + } +} + diff --git a/docs/dvl/axes.md b/docs/dvl/axes.md index 5f66450b..697632b6 100644 --- a/docs/dvl/axes.md +++ b/docs/dvl/axes.md @@ -2,49 +2,115 @@ The axis convention is the same for all DVL models. Velocities and dead reckoning output use the vehicle frame. By default, the vehicle frame is the same as the body frame, but it can be adjusted to allow flexible mounting on the vehicle. +## Body frame + +The DVL outputs velocity in a right-handed body frame: + +* **x** points forward. +* **y** points right (starboard). +* **z** points down, toward the transducers (the metal back plate faces up). -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 89"> +Seen from above, with forward pointing up and ⊗ marking the **z** axis (pointing into the page, toward the seabed), the two model groups indicate forward differently: + +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 185 152" fill="currentColor" font-size="0.3em" text-anchor="middle"> <defs> - <marker id="leftarrowhead" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"> - <polygon points="6 0, 0 3, 6 6 " /> + <marker id="ax-arrow-a" markerWidth="6" markerHeight="6" refX="4.5" refY="3" orient="auto"> + <path d="M0,0 L6,3 L0,6 Z"/> </marker> - <marker id="rightarrowhead" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"> - <polygon points="0 0, 6 3, 0 6 " /> + </defs> + <text x="80" y="14" font-size="1.5em">DVL A50 / A125</text> + <circle cx="80" cy="92" r="36" fill="none" stroke="currentColor" stroke-width="0.7"/> + <circle cx="80" cy="92" r="4" fill="none" stroke="currentColor" stroke-width="0.6"/> + <line x1="77.2" y1="89.2" x2="82.8" y2="94.8" stroke="currentColor" stroke-width="0.6"/> + <line x1="82.8" y1="89.2" x2="77.2" y2="94.8" stroke="currentColor" stroke-width="0.6"/> + <text x="71" y="94" text-anchor="end">z</text> + <line x1="80" y1="88" x2="80" y2="30" stroke="currentColor" stroke-width="0.7" marker-end="url(#ax-arrow-a)"/> + <text x="80" y="25">x (forward)</text> + <line x1="84" y1="92" x2="150" y2="92" stroke="currentColor" stroke-width="0.7" marker-end="url(#ax-arrow-a)"/> + <text x="154" y="94" text-anchor="start">y (right)</text> + <circle cx="80" cy="61" r="2.3"/> + <text x="90" y="54" text-anchor="start">LED</text> + <line x1="88" y1="55" x2="81.5" y2="60" stroke="currentColor" stroke-width="0.3"/> + <rect x="75.5" y="126" width="9" height="5" fill="currentColor" stroke="none"/> + <line x1="80" y1="130" x2="80" y2="144" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/> + <text x="91" y="141" text-anchor="start">Cable</text> + <line x1="89" y1="139.5" x2="81.5" y2="140.5" stroke="currentColor" stroke-width="0.3"/> +</svg> + +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 185 152" fill="currentColor" font-size="0.3em" text-anchor="middle"> + <defs> + <marker id="ax-arrow-b" markerWidth="6" markerHeight="6" refX="4.5" refY="3" orient="auto"> + <path d="M0,0 L6,3 L0,6 Z"/> </marker> </defs> - <text text-anchor="middle" x="30" y="5" font-size="0.3em">Body frame</text> - <text text-anchor="middle" x="30" y="25" font-size="0.275em">x (Forward)</text> - <text text-anchor="left" x="60" y="55" font-size="0.275em" alignment-baseline="middle">y (Right)</text> - <line stroke="black" stroke-width="0.5" marker-start="url(#leftarrowhead)" x1="30" y1="30" x2="30" y2="80"/> - <line stroke="black" stroke-width="0.5" marker-end="url(#rightarrowhead)" x1="5" y1="55" x2="55" y2="55"/> - <text text-anchor="left" x="32" y="50" font-size="0.275em" alignment-baseline="middle">z (Down)</text> - <text text-anchor="middle" x="140" y="5" font-size="0.3em">Vehicle frame</text> - <text text-anchor="middle" x="140" y="25" font-size="0.275em">x (Vehicle)</text> - <text text-anchor="left" x="170" y="55" font-size="0.275em" alignment-baseline="middle">y (Vehicle)</text> - <line stroke="black" stroke-width="0.5" marker-start="url(#leftarrowhead)" x1="140" y1="30" x2="140" y2="80"/> - <line stroke="black" stroke-width="0.5" marker-end="url(#rightarrowhead)" x1="115" y1="55" x2="165" y2="55"/> - <g transform="rotate(30, 140, 55)"> - <line stroke="black" stroke-width="0.5" marker-start="url(#leftarrowhead)" x1="140" y1="30" x2="140" y2="80"/> - <line stroke="black" stroke-width="0.5" marker-end="url(#rightarrowhead)" x1="115" y1="55" x2="165" y2="55"/> - <text text-anchor="middle" x="150" y="27.5" font-size="0.275em">x (Body)</text> - <text text-anchor="left" x="160" y="50" font-size="0.275em" alignment-baseline="middle">y (Body)</text> - </g> - <text text-anchor="left" x="142" y="42.5" font-size="0.275em" alignment-baseline="middle">θ</text> - <path d="M 140 45 a 4 4 0 0 1 4.5 2" fill="none" stroke="black" stroke-width="0.5"/> - <!--- the path above gives an arc-ish figure but i have no idea how to do this properly --> + <text x="80" y="14" font-size="1.5em">DVL A100 / A250</text> + <circle cx="80" cy="92" r="36" fill="none" stroke="currentColor" stroke-width="0.7"/> + <circle cx="80" cy="92" r="4" fill="none" stroke="currentColor" stroke-width="0.6"/> + <line x1="77.2" y1="89.2" x2="82.8" y2="94.8" stroke="currentColor" stroke-width="0.6"/> + <line x1="82.8" y1="89.2" x2="77.2" y2="94.8" stroke="currentColor" stroke-width="0.6"/> + <text x="71" y="94" text-anchor="end">z</text> + <line x1="80" y1="88" x2="80" y2="30" stroke="currentColor" stroke-width="0.7" marker-end="url(#ax-arrow-b)"/> + <text x="80" y="25">x (forward)</text> + <line x1="84" y1="92" x2="150" y2="92" stroke="currentColor" stroke-width="0.7" marker-end="url(#ax-arrow-b)"/> + <text x="154" y="94" text-anchor="start">y (right)</text> + <circle cx="80" cy="60" r="2.2" fill="none" stroke="currentColor" stroke-width="0.7"/> + <text x="90" y="53" text-anchor="start">FWD mark</text> + <line x1="88" y1="54" x2="82" y2="58.5" stroke="currentColor" stroke-width="0.3"/> + <circle cx="80" cy="112" r="4" fill="none" stroke="currentColor" stroke-width="0.7"/> + <circle cx="80" cy="112" r="1.6"/> + <rect x="75.5" y="126" width="9" height="5" fill="currentColor" stroke="none"/> + <line x1="80" y1="131" x2="80" y2="144" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/> + <text x="116" y="116" text-anchor="start">Back-plate entry</text> + <line x1="114" y1="114.5" x2="84.5" y2="112" stroke="currentColor" stroke-width="0.3"/> + <text x="116" y="126" text-anchor="start">or side entry</text> + <line x1="114" y1="124.5" x2="85" y2="129" stroke="currentColor" stroke-width="0.3"/> </svg> +**Finding forward on the device.** On the DVL A50 and DVL A125, the status LED sits at the forward edge and marks **+x**. On the DVL A100 and DVL A250, the status LED faces down (the **z** direction), so forward is instead stamped **FWD** on the metal back plate. On all models the cable is toward the back of the housing, opposite forward (the **−x** side). On the DVL A100 and DVL A250 it enters either from the side or through the back plate (rear O-ring interface), as shown above. The mechanical drawings on the [DVL A100](dvl-a100.md) and [DVL A250](dvl-a250.md) pages show the FWD mark and cable position. -## Body frame +### Origin + +The origin of the body frame is the point at which the DVL measures velocity: the point on the DVL's central axis where the transducer beam axes intersect. In standard mounting orientation (transducers facing down, metal back plate up), it sits above the metal back plate, where the beam axes meet when extended upward: -The body frame axes of the DVL are as follows: +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 165" fill="currentColor" font-size="0.3em" text-anchor="middle"> + <defs> + <marker id="vmo-beam" markerWidth="6" markerHeight="6" refX="4.5" refY="3" orient="auto"> + <path d="M0,0 L6,3 L0,6 Z"/> + </marker> + <marker id="vmo-dim" markerWidth="6" markerHeight="6" refX="5" refY="3" orient="auto-start-reverse"> + <path d="M0,0 L6,3 L0,6 Z"/> + </marker> + </defs> + <line x1="100" y1="47" x2="100" y2="148" stroke="currentColor" stroke-width="0.3" stroke-dasharray="1,1.5" opacity="0.5"/> + <path d="M58,85 L58,96.9 L88,111.1 L112,111.1 L142,96.9 L142,85 Z" fill="none" stroke="currentColor" stroke-width="0.7"/> + <rect x="58" y="82" width="84" height="3" fill="none" stroke="currentColor" stroke-width="0.7"/> + <line x1="73" y1="104" x2="100" y2="47" stroke="currentColor" stroke-width="0.5" stroke-dasharray="2,1.5"/> + <line x1="127" y1="104" x2="100" y2="47" stroke="currentColor" stroke-width="0.5" stroke-dasharray="2,1.5"/> + <line x1="66" y1="101" x2="80" y2="107" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/> + <line x1="120" y1="107" x2="134" y2="101" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/> + <line x1="73" y1="104" x2="56" y2="140" stroke="currentColor" stroke-width="0.7" marker-end="url(#vmo-beam)"/> + <line x1="127" y1="104" x2="144" y2="140" stroke="currentColor" stroke-width="0.7" marker-end="url(#vmo-beam)"/> + <circle cx="100" cy="47" r="2"/> + <line x1="103" y1="47" x2="154" y2="47" stroke="currentColor" stroke-width="0.3"/> + <line x1="142" y1="82" x2="154" y2="82" stroke="currentColor" stroke-width="0.3"/> + <line x1="152" y1="47" x2="152" y2="82" stroke="currentColor" stroke-width="0.5" marker-start="url(#vmo-dim)" marker-end="url(#vmo-dim)"/> + <text x="100" y="42">Origin</text> + <text x="52" y="84" text-anchor="end">Back plate</text> + <line x1="54" y1="83.3" x2="58" y2="83.3" stroke="currentColor" stroke-width="0.3"/> + <text x="34" y="121" text-anchor="end">Transducers</text> + <line x1="36" y1="119.5" x2="68" y2="105" stroke="currentColor" stroke-width="0.3"/> + <text x="100" y="150">Beams (to seabed)</text> + <text x="157" y="62" text-anchor="start">d</text> +</svg> -* X axis is pointing forward (LED is forward (only for A50/A125), cable backward) -* Y axis is pointing right -* Z axis is pointing down (metal back plate is up, transducers are down, LED is pointing down only for A100/A250) -* Origin is the center of the DVL on the transducer side. +The distance from the top of the back plate to the origin (shown as **d** above) depends on the model: -<!-- TODO: Confirm whether a backplate distance should be documented separately for DVL A100 and DVL A250. --> +| Model | Distance from back plate to origin | +| :--- | :--- | +| DVL A50 | 28 mm | +| DVL A100 | 38 mm | +| DVL A125 | 70 mm | +| DVL A250 | 84 mm | By default, the body frame and vehicle frame are the same and align with the frame used for dead reckoning. @@ -56,6 +122,35 @@ Mechanical/transducer diagrams number the transducers from 1 to 4. In protocol m The DVL can be mounted at an angle to the forward direction of the vehicle (yaw). +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 89" fill="currentColor"> + <defs> + <marker id="leftarrowhead" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"> + <polygon points="6 0, 0 3, 6 6 " /> + </marker> + <marker id="rightarrowhead" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"> + <polygon points="0 0, 6 3, 0 6 " /> + </marker> + </defs> + <text text-anchor="middle" x="30" y="5" font-size="0.3em">Body frame</text> + <text text-anchor="middle" x="30" y="25" font-size="0.275em">x (Forward)</text> + <text text-anchor="start" x="60" y="55" font-size="0.275em" alignment-baseline="middle">y (Right)</text> + <line stroke="currentColor" stroke-width="0.5" marker-start="url(#leftarrowhead)" x1="30" y1="30" x2="30" y2="80"/> + <line stroke="currentColor" stroke-width="0.5" marker-end="url(#rightarrowhead)" x1="5" y1="55" x2="55" y2="55"/> + <text text-anchor="start" x="32" y="50" font-size="0.275em" alignment-baseline="middle">z (Down)</text> + <text text-anchor="middle" x="140" y="5" font-size="0.3em">Vehicle frame</text> + <text text-anchor="middle" x="140" y="25" font-size="0.275em">x (Vehicle)</text> + <text text-anchor="start" x="170" y="55" font-size="0.275em" alignment-baseline="middle">y (Vehicle)</text> + <line stroke="currentColor" stroke-width="0.5" marker-start="url(#leftarrowhead)" x1="140" y1="30" x2="140" y2="80"/> + <line stroke="currentColor" stroke-width="0.5" marker-end="url(#rightarrowhead)" x1="115" y1="55" x2="165" y2="55"/> + <g transform="rotate(30, 140, 55)"> + <line stroke="currentColor" stroke-width="0.5" marker-start="url(#leftarrowhead)" x1="140" y1="30" x2="140" y2="80"/> + <line stroke="currentColor" stroke-width="0.5" marker-end="url(#rightarrowhead)" x1="115" y1="55" x2="165" y2="55"/> + <text text-anchor="middle" x="150" y="27.5" font-size="0.275em">x (Body)</text> + <text text-anchor="start" x="160" y="50" font-size="0.275em" alignment-baseline="middle">y (Body)</text> + </g> + <text text-anchor="start" x="142" y="42.5" font-size="0.275em" alignment-baseline="middle">θ</text> + <path d="M 140 45 a 4 4 0 0 1 4.5 2" fill="none" stroke="currentColor" stroke-width="0.5"/></svg> + The clockwise angle θ in degrees around the Z axis, in the X-Y plane, from the forward axis of the vehicle to the forward axis of the DVL can be entered as a mounting rotation offset in the [web GUI](configuration.md), or through the configuration method over the TCP JSON API or serial protocol. The DVL will then output data in the vehicle frame obtained by rotating the [DVL body frame](#body-frame) anti-clockwise around the Z axis by θ degrees. The X axis of the velocity output will be aligned with the forward axis of the vehicle. At time zero, the X axis of the DVL's dead-reckoning frame will be aligned with the forward axis of the vehicle. diff --git a/docs/dvl/bluerov-integration-dvl-ugps.md b/docs/dvl/bluerov-integration-dvl-ugps.md index d9dec38d..17e3c223 100644 --- a/docs/dvl/bluerov-integration-dvl-ugps.md +++ b/docs/dvl/bluerov-integration-dvl-ugps.md @@ -1,3 +1,5 @@ +# DVL with UGPS for BlueROV2 + ## Optimizing performance when using DVL and UGPS together ### Capabilities of the DVL as a Standalone System diff --git a/docs/dvl/bluerov-integration.md b/docs/dvl/bluerov-integration.md index 70c36b49..6bdd9352 100644 --- a/docs/dvl/bluerov-integration.md +++ b/docs/dvl/bluerov-integration.md @@ -1,3 +1,5 @@ +# DVL for BlueROV2 + ## Introduction The Water Linked [DVLs](https://www.waterlinked.com/dvl) are designed to integrate with most ROVs and AUVs through Ethernet and/or a serial interface (UART). To minimize the time between receipt of a DVL and having it up and running, the DVLs are shipped with an attached I/O interface for power, Ethernet, and serial connectivity. However, for most ROVs and AUVs, the DVL has to be integrated with the on-board electronics through a penetrator or a subsea connector. diff --git a/docs/dvl/dvl-a250_a100-json-protocol.md b/docs/dvl/dvl-a250_a100-json-protocol.md index c62d6a22..53e2a249 100644 --- a/docs/dvl/dvl-a250_a100-json-protocol.md +++ b/docs/dvl/dvl-a250_a100-json-protocol.md @@ -77,7 +77,7 @@ The messages are delimited by newline. Example of TCP report (indented for legibility) -``` +```json { "time": 106.3935775756836, "vx": -3.713480691658333e-05, @@ -168,7 +168,7 @@ format | Format type and version for this report: `json_v3` Example of a dead reckoning report. -``` +```json { "ts": 49056.809, "x": 12.43563613697886467, @@ -189,13 +189,13 @@ Example of a dead reckoning report. Dead reckoning can be reset by issuing the `reset_dead_reckoning` command: -``` +```json {"command": "reset_dead_reckoning"} ``` If the request is successfully received the response will have 'success' set to 'true'. The dead reckoning will have a delay of approximately 50ms until the positioning values being zeroed out. If the response is unsuccessful, the 'success' will be 'false' and a non-empty describing text will be returned in 'error_message'. -``` +```json { "response_to":"reset_dead_reckoning", "success": true, @@ -212,13 +212,13 @@ Gyro calibration is not needed as a normal setup step for DVL A100/A250. The gyro can be calibrated by issuing the `calibrate_gyro` command: -``` +```json {"command":"calibrate_gyro"} ``` The response will be as follows if the calibration is successful. If unsuccessful, `success` will be `false`, and a non-empty `error_message` will be provided. -``` +```json { "response_to": "calibrate_gyro", "success": true, @@ -235,13 +235,13 @@ In setups where multiple acoustic sensors are used it can be useful to control t See [Integration](integration.md#triggering-and-synchronization) for guidance on using triggering with other acoustic instruments. -``` +```json {"command":"trigger_ping"} ``` The response will be as follows if the command is accepted. If the queue is full, `success` will be `false`, and a non-empty `error_message` will be provided. -``` +```json { "response_to": "trigger_ping", "success": true, @@ -271,14 +271,14 @@ The response will be as follows if the command is accepted. If the queue is full The current configuration of the DVL can be obtained by issuing the `get_config` command: -``` +```json {"command": "get_config"} ``` If the configuration is successfully fetched, the response will be in the following format. If not, `success` will be false, a non-empty `error_message` string will be provided, and `result` will be `null`. -``` +```json { "response_to":"get_config", "success":true, @@ -300,14 +300,14 @@ If the configuration is successfully fetched, the response will be in the follow Setting of configuration parameters can be carried out by issuing a `set_config` in the following format, including those parameters which are to be set: -``` +```json {"command":"set_config","parameters":{"speed_of_sound":1480}} ``` If the parameters are successfully set, the response will be in the following format. If not, `success` will be false, and a non-empty `error_message` string will be provided. -``` +```json { "response_to": "set_config", "success": true, diff --git a/docs/dvl/dvl-a250_a100-serial-protocol.md b/docs/dvl/dvl-a250_a100-serial-protocol.md index 0d476f87..99b00c89 100644 --- a/docs/dvl/dvl-a250_a100-serial-protocol.md +++ b/docs/dvl/dvl-a250_a100-serial-protocol.md @@ -110,7 +110,7 @@ The report has the following format: Example where all velocities are valid: -``` +```text wrz,0.120,-0.400,2.000,y,1.30,1.855,1e-07;0;1.4;0;1.2;0;0.2;0;1e+09,7,14,123.00,1*50 ``` @@ -135,7 +135,7 @@ The report has the following format: Example where all data is valid: -``` +```text wru,0,0.070,1.10,-40,-95*9c wru,1,-0.500,1.25,-62,-104*f0 wru,2,2.200,1.40,-56,-98*18 @@ -164,7 +164,7 @@ status | Reports if there are any issues with the DVL (0 if no errors, 1 ot Example: -``` +```text wrp,49056.809,0.41,0.15,1.23,0.4,53.9,13.0,19.3,0*de wrp,49057.269,0.39,0.18,1.23,0.4,53.9,13.0,19.3,0*e2 ``` @@ -196,7 +196,7 @@ The reply will be an ack (`wra`) if the command is successful, and a nak (`wrn`) The serial output protocol in use can be configured by issuing the `wcp` command. The selected protocol is persistent over reboots. -``` +```text wcp,[protocol number] ``` @@ -216,7 +216,7 @@ The reply will be an ack (`wra`) if the protocol change is successful, and a nak Example setting configuring output to use protocol number 3: -``` +```text wcp,3 ``` @@ -248,7 +248,7 @@ The current configuration of the DVL can be obtained by issuing the `wcc` comman If the configuration is successfully fetched, the response will be in the following format. If not, a nak `wrn` will be returned. -``` +```text wrc,[speed_of_sound],[mounting_rotation_offset],[acoustic_enabled],[dark_mode_enabled],[range_mode],[periodic_cycling_enabled],[hardware_trigger_enabled] ``` @@ -257,7 +257,7 @@ wrc,[speed_of_sound],[mounting_rotation_offset],[acoustic_enabled],[dark_mode_en Setting of configuration parameters can be carried out by issuing the `wcs` command in the following format. -``` +```text wcs,[speed_of_sound],[mounting_rotation_offset],[acoustic_enabled],[dark_mode_enabled],[range_mode],[periodic_cycling_enabled],[hardware_trigger_enabled] ``` @@ -265,13 +265,13 @@ Those parameters which are not to be set can be left blank. Example for setting dark mode without changing the other parameters: -``` +```text wcs,,,,y,,, ``` Example for setting speed of sound to 1450 m/s and disabling acoustics, without changing the other parameters: -``` +```text wcs,1450,,n,,,, ``` @@ -299,7 +299,7 @@ Same purpose as the [velocity report](#velocity-report-wrz), but in an older for Example where velocities are valid: -``` +```text wrx,112.83,0.007,0.017,0.006,0.000,0.93,y,0*d2 wrx,140.43,0.008,0.021,0.012,0.000,0.92,y,0*b7 wrx,118.47,0.009,0.020,0.013,0.000,0.92,y,0*54 @@ -307,7 +307,7 @@ wrx,118.47,0.009,0.020,0.013,0.000,0.92,y,0*54 Example where velocities and altitude are not valid and a high temperature warning occurs: -``` +```text wrx,1075.51,0.000,0.000,0.000,2.707,-1.00,n,1*04 wrx,1249.29,0.000,0.000,0.000,2.707,-1.00,n,1*6a wrx,1164.94,0.000,0.000,0.000,2.707,-1.00,n,1*39 @@ -328,14 +328,14 @@ Same purpose as the [transducer report](#transducer-report-wru), but in an older Example where all distances are valid: -``` +```text wrt,15.00,15.20,14.90,14.20*b1 wrt,14.90,15.10,14.80,14.10*ac ``` Example where distance is not valid for transducer 4: -``` +```text wrt,14.90,15.10,14.80,-1.00*53 wrt,15.00,15.20,14.90,-1.00*71 ``` @@ -353,7 +353,7 @@ Compatible implementations: Example for how to verify checksum using Python 3 and [crcmod](https://pypi.org/project/crcmod/): -``` +```python crc = crcmod.predefined.mkPredefinedCrcFun("crc-8") sentence = b"wrx,1164.94,0.000,0.000,0.000,2.707,-1.00,n,1*39" data, checksum = sentence.split(b"*") @@ -366,7 +366,7 @@ else: The [crcmod](https://pypi.org/project/crcmod/) python package can generate code in other languages. Here is an example (subject to the [MIT License](https://opensource.org/licenses/MIT)) for C which should be straightforward to adapt to other languages. -``` +```c static const uint8_t lookup_table[256] = { 0x00U,0x07U,0x0EU,0x09U,0x1CU,0x1BU,0x12U,0x15U, 0x38U,0x3FU,0x36U,0x31U,0x24U,0x23U,0x2AU,0x2DU, diff --git a/docs/dvl/dvl-a50_a125-changelog.md b/docs/dvl/dvl-a50_a125-changelog.md index e97c5e76..26f858b7 100644 --- a/docs/dvl/dvl-a50_a125-changelog.md +++ b/docs/dvl/dvl-a50_a125-changelog.md @@ -61,11 +61,11 @@ See [Software updates](./sw-update.md) for more information on software updates. - Update serial output command (wcg) to include configuration for PD4 - Update serial protocol to version 2.6.0 - Update serial protocols 'Latest' to 'WL - Serial V2' and 'Backward compatible' to 'WL - Serial V1+V2' for clarity -- [Beta] Add PD4 protocol support" +- [Beta] Add PD4 protocol support Known issues: -- "Chip id not correctly sent over serial" +- Chip id not correctly sent over serial ## 2.6.0 (2024-08) @@ -82,7 +82,7 @@ Known issues: - Improve velocity calculation - Fix issue that causes Ethernet connectivity problems with certain switches -- Fix network configuration incorrectly showing as \"static\" after factory reset +- Fix network configuration incorrectly showing as "static" after factory reset - [Beta] Add support for PD4 protocol endpoint Known issues: @@ -194,7 +194,7 @@ Known issues: - Add thermal shut down - Improve velocity calculation - Update serial protocol to version 2.2.0 -- Add output of orientation angels +- Add output of orientation angles - Add position estimation (dead reckoning) (Beta) ## 1.6.0 (2021-03) @@ -205,7 +205,7 @@ Known issues: - Improve velocity valid - Improve noise immunity -- Add tranducer details in serial protocol +- Add transducer details in serial protocol - Add vertical speed visualisation - Add ping rate in GUI - Improve web gui update rate using websockets diff --git a/docs/dvl/dvl-json-protocol.md b/docs/dvl/dvl-json-protocol.md index 36a28a88..2a0d6a94 100644 --- a/docs/dvl/dvl-json-protocol.md +++ b/docs/dvl/dvl-json-protocol.md @@ -71,7 +71,7 @@ The messages are delimited by newline. | time_of_validity | Timestamp of the surface reflection, aka 'center of ping' (Unix timestamp in microseconds) | | time_of_transmission | Timestamp from immediately before sending of the report over TCP (Unix timestamp in microseconds) | | tracking_mode | Active tracking mode. `bottom` for bottom tracking, `water` for [water tracking](water-tracking.md). Added in `json_v3.2` | -| format | Format type and version for this report: `json_v3.1` | +| format | Format type and version for this report: `json_v3.3` | | type | Report type: `velocity` or `velocity_water` | !!! note "Transducer numbering and protocol IDs" @@ -79,7 +79,7 @@ The messages are delimited by newline. Example of TCP report (indented for legibility) -``` +```json { "time": 106.3935775756836, "vx": -3.713480691658333e-05, @@ -171,7 +171,7 @@ format | Format type and version for this report: `json_v3` Example of a dead reckoning report. -``` +```json { "ts": 49056.809, "x": 12.43563613697886467, @@ -192,13 +192,13 @@ Example of a dead reckoning report. Dead reckoning can be reset by issuing the `reset_dead_reckoning` command: -``` +```json {"command": "reset_dead_reckoning"} ``` If the request is successfully received the response will have 'success' set to 'true'. The dead reckoning will have a delay of approximately 50ms until the positioning values being zeroed out. If the response is unsuccessful, the 'success' will be 'false' and a non-empty describing text will be returned in 'error_message'. -``` +```json { "response_to":"reset_dead_reckoning", "success": true, @@ -213,13 +213,13 @@ If the request is successfully received the response will have 'success' set to The gyro can be calibrated by issuing the `calibrate_gyro` command: -``` +```json {"command":"calibrate_gyro"} ``` The response will be as follows if the calibration is successful. If unsuccessful, `success` will be `false`, and a non-empty `error_message` will be provided. -``` +```json { "response_to": "calibrate_gyro", "success": true, @@ -236,13 +236,13 @@ In setups where multiple acoustic sensors are used it can be useful to control t See [Integration](integration.md#triggering-and-synchronization) for guidance on using triggering with other acoustic instruments. -``` +```json {"command":"trigger_ping"} ``` The response will be as follows if the command is accepted. If the queue is full, `success` will be `false`, and a non-empty `error_message` will be provided. -``` +```json { "response_to": "trigger_ping", "success": true, @@ -257,13 +257,13 @@ The response will be as follows if the command is accepted. If the queue is full Get version info by issuing the `get_version_info` command. -``` +```json {"command":"get_version_info"} ``` A successful response looks like this: -``` +```json { "response_to": "get_version_info", "success": true, @@ -289,7 +289,7 @@ A successful response looks like this: Set [NTP configuration](./time.md#ntp-server-address-configuration-auto-or-custom) by issuing the `set_time_ntp` command with a `ntp_address` parameter. Set `ntp_address` either to the address of a NTP server, or as "auto". -``` +```json { "command": "set_time_ntp", "parameters": { @@ -300,7 +300,7 @@ Set [NTP configuration](./time.md#ntp-server-address-configuration-auto-or-custo A successful response looks like this: -``` +```json { "response_to": "set_time_ntp", "success": true, @@ -315,7 +315,7 @@ A successful response looks like this: Get [NTP configuration](./time.md#ntp-server-address-configuration-auto-or-custom) by issuing the `get_time_ntp` command. -``` +```json { "command": "get_time_ntp" } @@ -323,7 +323,7 @@ Get [NTP configuration](./time.md#ntp-server-address-configuration-auto-or-custo A successful response looks like this: -``` +```json { "response_to": "get_time_ntp", "success": true, @@ -342,7 +342,7 @@ Set time manually by issuing the `set_time_manual` command with the `now` parame For more information see [Setting manual time](./time.md#setting-manual-time). -``` +```json { "command": "set_time_manual", "parameters": { @@ -353,7 +353,7 @@ For more information see [Setting manual time](./time.md#setting-manual-time). A successful response looks like this: -``` +```json { "response_to": "set_time_manual", "success": true, @@ -366,7 +366,7 @@ A successful response looks like this: In the event the DVL is already synchronized via NTP, the response will look like this: -``` +```json { "response_to": "set_time_manual", "success": false, @@ -381,7 +381,7 @@ In the event the DVL is already synchronized via NTP, the response will look lik Get [time status](./time.md#time-status) by issuing the `get_time_status` command. -``` +```json { "command": "get_time_status" } @@ -398,7 +398,7 @@ The response contains the following fields: Here is an example response where the DVL is not synchornized with NTP: -``` +```json { "response_to": "get_time_status", "success": true, @@ -416,7 +416,7 @@ Here is an example response where the DVL is not synchornized with NTP: Here is an example response where the DVL has achieved sync with NTP: -``` +```json { "response_to": "get_time_status", "success": true, @@ -436,7 +436,7 @@ Here is an example response where the DVL has achieved sync with NTP: A [forced NTP sync](./time.md#ntp-force-sync) can be triggered by issuing the `force_sync_ntp` command with the `timeout_seconds` as an integer timeout in seconds. -``` +```json { "command": "force_sync_ntp", "parameters": { @@ -455,7 +455,7 @@ This will trigger a forced NTP sync in the DVL. The DVL will wait up to `timeout Here is an example response where the DVL achieved NTP sync: -``` +```json { "response_to": "force_sync_ntp", "success": true, @@ -477,7 +477,7 @@ Here is an example response where the DVL achieved NTP sync: Here is an example response where the DVL did not achieve NTP sync: -``` +```json { "response_to": "force_sync_ntp", "success": true, @@ -514,14 +514,14 @@ Here is an example response where the DVL did not achieve NTP sync: The current configuration of the DVL can be obtained by issuing the `get_config` command: -``` +```json {"command": "get_config"} ``` If the configuration is successfully fetched, the response will be in the following format. If not, `success` will be false, a non-empty `error_message` string will be provided, and `result` will be `null`. -``` +```json { "response_to":"get_config", "success":true, @@ -543,14 +543,14 @@ If the configuration is successfully fetched, the response will be in the follow Setting of configuration parameters can be carried out by issuing a `set_config` in the following format, including those parameters which are to be set: -``` +```json {"command":"set_config","parameters":{"speed_of_sound":1480}} ``` If the parameters are successfully set, the response will be in the following format. If not, `success` will be false, and a non-empty `error_message` string will be provided. -``` +```json { "response_to": "set_config", "success": true, diff --git a/docs/dvl/dvl-pd-formats.md b/docs/dvl/dvl-pd-formats.md index 7d47df24..8d1281b8 100644 --- a/docs/dvl/dvl-pd-formats.md +++ b/docs/dvl/dvl-pd-formats.md @@ -108,8 +108,6 @@ Sentences TS, BI, and BD are filled with relevant numbers. All other sentences a #### Example output -<!-- Copied from wl-95050/protocols/protocol_pd6_test/TestPD6Encode --> - ```text :SA, +0.00, +0.00, 0.00 :TS,22020812061800, 0.0, +0.0, 0.0,1475.0, 0 diff --git a/docs/dvl/dvl-serial-protocol.md b/docs/dvl/dvl-serial-protocol.md index b2f9922c..ed1969d0 100644 --- a/docs/dvl/dvl-serial-protocol.md +++ b/docs/dvl/dvl-serial-protocol.md @@ -104,7 +104,7 @@ The report has the following format: `wrs,`*[system_time],[ntp_synced],[ntp_sync Examples: -``` +```text wrs,1776409079,0,, wrs,1776409079,1,192.168.0.10,45 ``` @@ -136,7 +136,7 @@ The report has the following format: Example where all velocities are valid: -``` +```text wrz,0.120,-0.400,2.000,y,1.30,1.855,1e-07;0;1.4;0;1.2;0;0.2;0;1e+09,7,14,123.00,1*50 ``` @@ -166,7 +166,7 @@ The report has the following format: Example where all velocities are valid: -``` +```text wrs,0.120,-0.400,2.000,y,1.855,1e-07;0;1.4;0;1.2;0;0.2;0;1e+09,7,14,123.00,1*50 ``` @@ -197,7 +197,7 @@ The report has the following format: Example where all data is valid: -``` +```text wru,0,0.070,1.10,-40,-95*9c wru,1,-0.500,1.25,-62,-104*f0 wru,2,2.200,1.40,-56,-98*18 @@ -226,7 +226,7 @@ status | Reports if there are any issues with the DVL (0 if no errors, 1 ot Example: -``` +```text wrp,49056.809,0.41,0.15,1.23,0.4,53.9,13.0,19.3,0*de wrp,49057.269,0.39,0.18,1.23,0.4,53.9,13.0,19.3,0*e2 ``` @@ -254,7 +254,7 @@ The reply will be an ack (`wra`) if the command is successful, and a nak (`wrn`) The serial output protocol in use can be configured by issuing the `wcp` command. The selected protocol is persistent over reboots. -``` +```text wcp,[protocol number] ``` @@ -274,7 +274,7 @@ The reply will be an ack (`wra`) if the protocol change is successful, and a nak Example setting configuring output to use protocol number 3: -``` +```text wcp,3 ``` @@ -305,7 +305,7 @@ The current configuration of the DVL can be obtained by issuing the `wcc` comman If the configuration is successfully fetched, the response will be in the following format. If not, a nak `wrn` will be returned. -``` +```text wrc,[speed_of_sound],[mounting_rotation_offset],[acoustic_enabled],[dark_mode_enabled],[range_mode],[periodic_cycling_enabled] ``` @@ -314,7 +314,7 @@ wrc,[speed_of_sound],[mounting_rotation_offset],[acoustic_enabled],[dark_mode_en Setting of configuration parameters can be carried out by issuing the `wcs` command in the following format. -``` +```text wcs,[speed_of_sound],[mounting_rotation_offset],[acoustic_enabled],[dark_mode_enabled],[range_mode],[periodic_cycling_enabled] ``` @@ -322,7 +322,7 @@ Those parameters which are not to be set can be left blank. Example for setting dark mode without changing the other parameters: -``` +```text wcs,,,,y,, ``` @@ -336,7 +336,7 @@ wcs,,,,,wt, Example for setting speed of sound to 1450 m/s and disabling acoustics, without changing the other parameters: -``` +```text wcs,1450,,n,,, ``` @@ -364,7 +364,7 @@ Same purpose as the [velocity report](#velocity-report-wrz), but in an older for Example where velocities are valid: -``` +```text wrx,112.83,0.007,0.017,0.006,0.000,0.93,y,0*d2 wrx,140.43,0.008,0.021,0.012,0.000,0.92,y,0*b7 wrx,118.47,0.009,0.020,0.013,0.000,0.92,y,0*54 @@ -372,7 +372,7 @@ wrx,118.47,0.009,0.020,0.013,0.000,0.92,y,0*54 Example where velocities and altitude are not valid and a high temperature warning occurs: -``` +```text wrx,1075.51,0.000,0.000,0.000,2.707,-1.00,n,1*04 wrx,1249.29,0.000,0.000,0.000,2.707,-1.00,n,1*6a wrx,1164.94,0.000,0.000,0.000,2.707,-1.00,n,1*39 @@ -393,14 +393,14 @@ Same purpose as the [transducer report](#transducer-report-wru), but in an older Example where all distances are valid: -``` +```text wrt,15.00,15.20,14.90,14.20*b1 wrt,14.90,15.10,14.80,14.10*ac ``` Example where distance is not valid for transducer 4: -``` +```text wrt,14.90,15.10,14.80,-1.00*53 wrt,15.00,15.20,14.90,-1.00*71 ``` @@ -418,7 +418,7 @@ Compatible implementations: Example for how to verify checksum using Python 3 and [crcmod](https://pypi.org/project/crcmod/): -``` +```python crc = crcmod.predefined.mkPredefinedCrcFun("crc-8") sentence = b"wrx,1164.94,0.000,0.000,0.000,2.707,-1.00,n,1*39" data, checksum = sentence.split(b"*") @@ -431,7 +431,7 @@ else: The [crcmod](https://pypi.org/project/crcmod/) python package can generate code in other languages. Here is an example (subject to the [MIT License](https://opensource.org/licenses/MIT)) for C which should be straightforward to adapt to other languages. -``` +```c static const uint8_t lookup_table[256] = { 0x00U,0x07U,0x0EU,0x09U,0x1CU,0x1BU,0x12U,0x15U, 0x38U,0x3FU,0x36U,0x31U,0x24U,0x23U,0x2AU,0x2DU, diff --git a/docs/dvl/electrical.md b/docs/dvl/electrical.md index d8155fef..42da76d9 100644 --- a/docs/dvl/electrical.md +++ b/docs/dvl/electrical.md @@ -2,6 +2,9 @@ This page covers electrical connection, LED signals, wiring, shielding, and serial interface for all DVLs. +!!! tip "First-time setup" + New to the DVL? The [Quickstart](quickstart.md) covers the full setup path (mount, wire, connect, open the web GUI). This page is the detailed wiring reference; to get on the network afterwards, see [Network setup](networking.md). + Most wiring is common across the DVL models. The serial electrical interface differs: * DVL A50 and DVL A125 use 3.3 V UART, 5 V tolerant. @@ -11,11 +14,11 @@ Most wiring is common across the DVL models. The serial electrical interface dif | Visualization | LED signal | Description | | :---: | :--- | :--- | -| ⚫ | **No green light** | Power is off. | -| 🟢 | **Fixed green light** | The DVL is powering on. Depending on configuration it can take ~30-60 seconds to power on. | -| 🟢⚫⚫⚫ | **Flashing green light** (mostly off, slow) | DVL looking for bottom lock. | -| 🟢🟢🟢⚫ | **Flashing green light** (mostly on, slow) | DVL has bottom lock. | -| 🟢⚫🟢⚫ | **Flashing green light** (fast) | DVL is in [thermal shutdown](how-to-diagnose.md#thermal-shutdown). | +| <span class="swatch swatch-round c-ledoff"></span> | **No green light** | Power is off. | +| <span class="swatch swatch-round c-ledon"></span> | **Fixed green light** | The DVL is powering on. Depending on configuration it can take ~30-60 seconds to power on. | +| <span class="swatch swatch-round c-ledon"></span> <span class="swatch swatch-round c-ledoff"></span> <span class="swatch swatch-round c-ledoff"></span> <span class="swatch swatch-round c-ledoff"></span> | **Flashing green light** (mostly off, slow) | DVL looking for bottom lock. | +| <span class="swatch swatch-round c-ledon"></span> <span class="swatch swatch-round c-ledon"></span> <span class="swatch swatch-round c-ledon"></span> <span class="swatch swatch-round c-ledoff"></span> | **Flashing green light** (mostly on, slow) | DVL has bottom lock. | +| <span class="swatch swatch-round c-ledon"></span> <span class="swatch swatch-round c-ledoff"></span> <span class="swatch swatch-round c-ledon"></span> <span class="swatch swatch-round c-ledoff"></span> | **Flashing green light** (fast) | DVL is in [thermal shutdown](how-to-diagnose.md#thermal-shutdown). | ## Wiring interface @@ -25,22 +28,22 @@ Power and Ethernet wiring are common. The brown and brown/white serial pair depe | Interface | Color | Visual | | :--- | :--- | :---: | -| Negative/Ground | Black | ⬛ | -| Positive (10–30 Vdc) | Red | 🟥 | -| ETH RX+ | Green/White | 🟩⬜ | -| ETH RX- | Green | 🟩 | -| ETH TX- | Orange | 🟧 | -| ETH TX+ | Orange/White | 🟧⬜ | -| Shielded wire | Naked/silver | ⚪ | +| Negative/Ground | Black | <span class="swatch c-black"></span> | +| Positive (10–30 Vdc) | Red | <span class="swatch c-red"></span> | +| ETH RX+ | Green/White | <span class="swatch c-green-white"></span> | +| ETH RX- | Green | <span class="swatch c-green"></span> | +| ETH TX- | Orange | <span class="swatch c-orange"></span> | +| ETH TX+ | Orange/White | <span class="swatch c-orange-white"></span> | +| Shielded wire | Naked/silver | <span class="swatch c-silver"></span> | ### Model-specific serial wires | Model | Interface | Color | Visual | | :--- | :--- | :--- | :---: | -| DVL A50/A125 | UART TX | Brown/White | 🟫⬜ | -| DVL A50/A125 | UART RX | Brown | 🟫 | -| DVL A100/A250 | Serial (RS232) TX | Brown/White | 🟫⬜ | -| DVL A100/A250 | Serial (RS232) RX | Brown | 🟫 | +| DVL A50/A125 | UART TX | Brown/White | <span class="swatch c-brown-white"></span> | +| DVL A50/A125 | UART RX | Brown | <span class="swatch c-brown"></span> | +| DVL A100/A250 | Serial (RS232) TX | Brown/White | <span class="swatch c-brown-white"></span> | +| DVL A100/A250 | Serial (RS232) RX | Brown | <span class="swatch c-brown"></span> | !!! note Power must be applied to the power terminals before applying voltage to the serial pins. @@ -61,14 +64,14 @@ The table below shows the pinout for the DVL A50/A100/A250 Seacon MC8M connector | Interface | Pin | Color | Visual | | :--- | :--- | :--- | :---: | -| Negative/Ground | 1 | Black | ⬛ | -| Positive (10–30 Vdc) | 2 | Red | 🟥 | -| ETH RX+ | 3 | Green/White | 🟩⬜ | -| ETH RX- | 4 | Green | 🟩 | -| ETH TX- | 5 | Orange | 🟧 | -| ETH TX+ | 6 | Orange/White | 🟧⬜ | -| Serial TX | 7 | Brown/White | 🟫⬜ | -| Serial RX | 8 | Brown | 🟫 | +| Negative/Ground | 1 | Black | <span class="swatch c-black"></span> | +| Positive (10–30 Vdc) | 2 | Red | <span class="swatch c-red"></span> | +| ETH RX+ | 3 | Green/White | <span class="swatch c-green-white"></span> | +| ETH RX- | 4 | Green | <span class="swatch c-green"></span> | +| ETH TX- | 5 | Orange | <span class="swatch c-orange"></span> | +| ETH TX+ | 6 | Orange/White | <span class="swatch c-orange-white"></span> | +| Serial TX | 7 | Brown/White | <span class="swatch c-brown-white"></span> | +| Serial RX | 8 | Brown | <span class="swatch c-brown"></span> | <!-- TODO: Confirm and publish the DVL A250 side-entry Seacon connector pinout before reusing the A50/A125 table for A250. --> diff --git a/docs/dvl/how-to-diagnose.md b/docs/dvl/how-to-diagnose.md index d602d968..6a7c5d93 100644 --- a/docs/dvl/how-to-diagnose.md +++ b/docs/dvl/how-to-diagnose.md @@ -4,6 +4,19 @@ This page applies to all our DVLs unless otherwise noted. Use this guide when the DVL is not performing as expected, cannot get bottom lock, reports invalid velocity, or produces noisy measurements. +**Jump to a symptom:** + +* [Invalid velocity](#invalid-velocity) +* [Loss of bottom lock](#loss-of-bottom-lock) +* [Weak signal or noisy measurements](#weak-signal-or-noisy-measurements) +* [Air bubbles](#air-bubbles) +* [Thrusters, propellers, and hull turbulence](#thrusters-propellers-and-hull-turbulence) +* [Mechanical vibration and flexible mounts](#mechanical-vibration-and-flexible-mounts) +* [Operation close to the water surface](#operation-close-to-the-water-surface) +* [Obstructed beam paths / line of sight](#obstructed-beam-paths-line-of-sight) +* [Active acoustic interference from other sensors](#active-acoustic-interference-from-other-sensors) +* [Thermal shutdown](#thermal-shutdown) + ## Before contacting support 1. Confirm that the DVL is powered and submerged. diff --git a/docs/dvl/installation.md b/docs/dvl/installation.md index 6fe3024e..8035764d 100644 --- a/docs/dvl/installation.md +++ b/docs/dvl/installation.md @@ -2,6 +2,9 @@ This page gives common installation guidance for all our DVLs. Use it together with the mechanical and electrical page for your specific model. +!!! tip "First-time setup" + For the full end-to-end path (mount, wire, connect, open the web GUI), follow the [Quickstart](quickstart.md). This page covers mounting and placement; see also [Electrical](electrical.md) and [Network setup](networking.md). + ## Before installation 1. Check that the DVL, cable, connector, and mounting hardware are undamaged. diff --git a/docs/dvl/networking.md b/docs/dvl/networking.md index e700030a..03d1bedf 100644 --- a/docs/dvl/networking.md +++ b/docs/dvl/networking.md @@ -9,6 +9,9 @@ The DVL has several services available over Ethernet: Use Ethernet for first setup whenever possible. It gives access to the web GUI, diagnostics, configuration, software updates, and the TCP data stream. +!!! tip "First-time setup" + Connect power and wiring first (see [Electrical](electrical.md)), then use this page to get on the network. For the full end-to-end setup path, follow the [Quickstart](quickstart.md). + ## Network configuration ### Multicast DNS (mDNS) diff --git a/docs/dvl/overview.md b/docs/dvl/overview.md index 1f1a8ccf..590bd305 100644 --- a/docs/dvl/overview.md +++ b/docs/dvl/overview.md @@ -1,5 +1,5 @@ # Overview -At Water Linked we pride ourselves on building the Worlds smallest DVLs in their respective categories. Our DVLs combine everything that is important in the smallest possible formfactor: Prize and Performance! +At Water Linked we pride ourselves on building the world's smallest DVLs in their respective categories. Our DVLs combine everything that is important in the smallest possible form factor: price and performance! ## What is a DVL? A DVL estimates velocity relative to the seafloor by sending acoustic waves from four angled transducers and measuring the frequency shift (Doppler effect) of the returned echoes. By combining measurements from all four transducers over time, the DVL can accurately estimate both the speed and direction of movement. @@ -58,36 +58,40 @@ The DVL A100 and DVL A250 share the same general web GUI, configuration, electri -## A50 +## Models -* [DVL A50 Documentation & Installation](dvl-a50.md) +<div class="grid cards" markdown> -The [DVL A50](dvl-a50.md) is one of the world's smallest commercially available Doppler Velocity Logs. +- **[DVL A50](dvl-a50.md)** -The A50 established a new market standard with its high performance, ultra-small 4-beam setup, open interface protocol, and low cost. + 1 MHz · altitude to 50 m · 66 mm diameter -## A100 + One of the world's smallest commercially available DVLs — an ultra-compact 4-beam unit for size- and payload-limited platforms operating close to the bottom. -* [DVL A100 Documentation & Installation](dvl-a100.md) + [Model details](dvl-a50.md) -The [DVL A100](dvl-a100.md) is a compact, high-accuracy Doppler Velocity Log for lightweight and integration-friendly platforms. +- **[DVL A100](dvl-a100.md)** *(coming Q4 2026)* -The A100 supports close-range and mid-range operation up to 100 m altitude and shares web GUI, configuration, electrical, protocol, and integration documentation with the DVL A250 where behavior is identical. + 625 kHz · altitude to 100 m · 90 mm diameter -## A125 + A compact, high-accuracy DVL for lightweight, integration-friendly platforms that need more range than the A50. -* [DVL A125 Documentation & Installation](dvl-a125.md) + [Model details](dvl-a100.md) -The [DVL A125](dvl-a125.md) is the next step up from the [DVL A50](dvl-a50.md), providing better performance at greater distances while still keeping a small form factor relative to competing DVLs. +- **[DVL A125](dvl-a125.md)** -The DVL A125 builds on the DVL A50 with increased performance, a small 4-beam setup, an open interface protocol, and mid-to-low cost. + 420 kHz · altitude to 125 m · 125 mm diameter -## A250 + The step up from the A50: better performance at greater distances while keeping a small form factor. -* [DVL A250 Documentation & Installation](dvl-a250.md) + [Model details](dvl-a125.md) -The [DVL A250](dvl-a250.md) is the most capable DVL in the lineup, delivering long-range performance while maintaining a compact and efficient design. +- **[DVL A250](dvl-a250.md)** -Operating at lower frequency for extended reach, the A250 enables reliable velocity measurements at distances up to 250 m, making it suitable for demanding subsea operations. + 250 kHz · altitude to 250 m · 149 mm diameter -The DVL A250 combines high performance, a compact 4-beam setup, open interface protocol, and a competitive cost, making it a powerful solution for larger vehicles and deep-water applications. + The most capable model — long-range, deep-water velocity measurement for larger vehicles and demanding subsea operations. + + [Model details](dvl-a250.md) + +</div> diff --git a/docs/dvl/sw-update.md b/docs/dvl/sw-update.md index 03903362..da6b56c4 100644 --- a/docs/dvl/sw-update.md +++ b/docs/dvl/sw-update.md @@ -2,6 +2,9 @@ We recommend running the latest DVL software where possible. Software updates are done from the web GUI **About** page. The latest software can be obtained [automatically](#automatic-software-update) or [manually](#offline-software-update). +!!! note + Software updates are performed only through the web GUI over the Ethernet (network) connection. The serial interface cannot be used to update the DVL. + The release notes for each release are found here: * [DVL A50/A125 changelog](./dvl-a50_a125-changelog.md) diff --git a/docs/dvl/time.md b/docs/dvl/time.md index 577e0c9d..3cff1f14 100644 --- a/docs/dvl/time.md +++ b/docs/dvl/time.md @@ -55,7 +55,7 @@ Upon achieving sync, or when the timeout expires, the operation will respond wit |`status`|Time status as described [here](#time-status) | !!! warning - `success` true means the DVL acieved NTP sync. To assert the DVL is synchronized to a specific NTP server, check the returned status. + `success` true means the DVL achieved NTP sync. To assert the DVL is synchronized to a specific NTP server, check the returned status. !!! warning The operation can cause abrupt jumps in system time, and is not recommended for use while reading DVL output. diff --git a/docs/dvl/water-tracking.md b/docs/dvl/water-tracking.md index f1ae0c6d..0b2edda9 100644 --- a/docs/dvl/water-tracking.md +++ b/docs/dvl/water-tracking.md @@ -1,4 +1,4 @@ -# Water Tracking +# Water tracking Water tracking is a mode where the DVL estimates velocity relative to the water column instead of the sea bottom. It can be useful when the DVL cannot get bottom lock, or when the movement of the water itself is relevant. @@ -32,58 +32,62 @@ The dashboard shows the active tracking mode. On supported software, the trackin The diagnostic page still shows spatial velocity, per-transducer velocity, and validity. In water tracking mode, the acoustic signal view shows signal strength and noise as separate time-based graphs. -## TCP JSON API +## Enable water tracking -Water tracking is available in TCP JSON API version `json_v3.2` and up for supported models. Use the TCP JSON API configuration method for your model: +Water tracking is enabled by setting `range_mode` to `wt`. Select the interface you integrate with: -* [DVL A50/A125 TCP JSON API configuration](dvl-json-protocol.md#configuration-over-json) -* DVL A100/A250 TCP JSON API configuration is planned for water tracking and is not available yet. +=== "TCP JSON API" -Enable water tracking by setting `range_mode` to `wt`: + Available in TCP JSON API version `json_v3.2` and up for supported models. Use the TCP JSON API configuration method for your model: -```json -{"command":"set_config","parameters":{"range_mode":"wt"}} -``` + * [DVL A50/A125 TCP JSON API configuration](dvl-json-protocol.md#configuration-over-json) + * DVL A100/A250 TCP JSON API configuration is planned for water tracking and is not available yet. -Set `range_mode` back to `auto` to return to automatic bottom tracking: + Enable water tracking by setting `range_mode` to `wt`: -```json -{"command":"set_config","parameters":{"range_mode":"auto"}} -``` + ```json + {"command":"set_config","parameters":{"range_mode":"wt"}} + ``` -Water tracking does not introduce a separate report type. The DVL continues to use the normal velocity-and-transducer report, with the field `"type"` showing the active tracking mode. When water tracking is active, the report describes velocity relative to the water column rather than velocity relative to the bottom and the `"type"` will be `"velocity_water"`. + Set `range_mode` back to `auto` to return to automatic bottom tracking: -See the TCP JSON API for your model for the report fields: + ```json + {"command":"set_config","parameters":{"range_mode":"auto"}} + ``` -* [DVL A50/A125 TCP JSON API velocity-and-transducer report](dvl-json-protocol.md#velocity-and-transducer-report) -* DVL A100/A250 TCP JSON API water-tracking report fields are planned and are not available yet. + Water tracking does not introduce a separate report type. The DVL continues to use the normal velocity-and-transducer report, with the field `"type"` showing the active tracking mode. When water tracking is active, the report describes velocity relative to the water column rather than velocity relative to the bottom and the `"type"` will be `"velocity_water"`. -## Serial API + See the TCP JSON API for your model for the report fields: -Water tracking is available in serial protocol >= `2.7.0` for supported models. Use the serial configuration method for your model: + * [DVL A50/A125 TCP JSON API velocity-and-transducer report](dvl-json-protocol.md#velocity-and-transducer-report) + * DVL A100/A250 TCP JSON API water-tracking report fields are planned and are not available yet. -* [DVL A50/A125 serial configuration](dvl-serial-protocol.md#configuration-over-serial) -* DVL A100/A250 serial configuration for water tracking is planned and is not available yet. +=== "Serial API" -Enable water tracking by setting `range_mode` to `wt` using the `wcs` command: + Available in serial protocol >= `2.7.0` for supported models. Use the serial configuration method for your model: -```text -wcs,,,,,wt, -``` + * [DVL A50/A125 serial configuration](dvl-serial-protocol.md#configuration-over-serial) + * DVL A100/A250 serial configuration for water tracking is planned and is not available yet. -Set `range_mode` back to `auto` to return to automatic bottom tracking: + Enable water tracking by setting `range_mode` to `wt` using the `wcs` command: -```text -wcs,,,,,auto, -``` + ```text + wcs,,,,,wt, + ``` -Water tracking introduces a serial report called `wrs`, which is similar to the `wrz` report but does not include altitude data. Use this data when water tracking is activated. + Set `range_mode` back to `auto` to return to automatic bottom tracking: -```text -wrs,[vx],[vy],[vz],[valid],[fom],[covariance],[time_of_validity],[time_of_transmission],[time],[status] -``` + ```text + wcs,,,,,auto, + ``` -See the serial protocol for your model for the report format: + Water tracking introduces a serial report called `wrs`, which is similar to the `wrz` report but does not include altitude data. Use this data when water tracking is activated. -* [DVL A50/A125 serial velocity report](dvl-serial-protocol.md#velocity-report-wrs) -* DVL A100/A250 serial water-tracking reports are planned and are not available yet. + ```text + wrs,[vx],[vy],[vz],[valid],[fom],[covariance],[time_of_validity],[time_of_transmission],[time],[status] + ``` + + See the serial protocol for your model for the report format: + + * [DVL A50/A125 serial velocity report](dvl-serial-protocol.md#velocity-report-wrs) + * DVL A100/A250 serial water-tracking reports are planned and are not available yet. diff --git a/docs/master-d1.md b/docs/explorer-kit/master-d1.md similarity index 86% rename from docs/master-d1.md rename to docs/explorer-kit/master-d1.md index e768b1c7..bb32f49b 100644 --- a/docs/master-d1.md +++ b/docs/explorer-kit/master-d1.md @@ -1,6 +1,6 @@ # Master-D1 Electronics -![master_components](img/master_components.png) +![master_components](../img/master_components.png) ## Description @@ -30,17 +30,17 @@ The LED on the Locator-A1 interface is not in use. ## Dimensions -![master_dimensions](img/master_dimensions.png) +![master_dimensions](../img/master_dimensions.png) The diagrams below shows the mechanical dimensions of the Master-D1 electronics. -![master_dimensions_top](img/master_dimensions_top.png) +![master_dimensions_top](../img/master_dimensions_top.png) -![master_dimensions_side](img/master_dimensions_side.png) +![master_dimensions_side](../img/master_dimensions_side.png) ## Setup -![system_setup](img/system_setup.png) +![system_setup](../img/system_setup.png) ## Datasheet diff --git a/docs/img/home-dvl-a50.png b/docs/img/home-dvl-a50.png new file mode 100644 index 00000000..513b071b Binary files /dev/null and b/docs/img/home-dvl-a50.png differ diff --git a/docs/img/home-modem-m16.png b/docs/img/home-modem-m16.png new file mode 100644 index 00000000..008263b7 Binary files /dev/null and b/docs/img/home-modem-m16.png differ diff --git a/docs/img/home-sonar-3d-15.webp b/docs/img/home-sonar-3d-15.webp new file mode 100644 index 00000000..34f73e9d Binary files /dev/null and b/docs/img/home-sonar-3d-15.webp differ diff --git a/docs/img/home-underwater-gps-g2.png b/docs/img/home-underwater-gps-g2.png new file mode 100644 index 00000000..2fe32f5a Binary files /dev/null and b/docs/img/home-underwater-gps-g2.png differ diff --git a/docs/index.md b/docs/index.md index 6263d860..b8107d9f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,76 +1,21 @@ -<style> - .align { - /* This uses flexbox to center items horizontally. */ - display: flex; - justify-content: center; - flex-wrap: wrap; - text-align: center; - } +# Select your product - .md-typeset .img-fluid { - max-width: 100%; - height: auto; - } +<div class="grid cards" markdown> - /* Each item in a row takes up 1/3 of the width on large screens */ - .col-3 { - flex: 0 0 48%; - box-sizing: border-box; - } +- [![Water Linked Sonar 3D-15](img/home-sonar-3d-15.webp){ alt="Water Linked Sonar 3D-15" }](sonar-3d/sonar-3d-15-introduction.md) - /* Adjust for medium/small screens as needed */ - @media (max-width: 768px) { - .col-md-6 { - flex: 0 0 50%; - } - } - @media (max-width: 576px) { - .col-sm-12 { - flex: 0 0 100%; - } - } -</style> + **[Sonar 3D-15](sonar-3d/sonar-3d-15-introduction.md)** + +- [![Water Linked DVL A50](img/home-dvl-a50.png){ alt="Water Linked DVL A50" }](dvl/overview.md) + + **[DVL](dvl/overview.md)** + +- [![Water Linked Modem M16](img/home-modem-m16.png){ alt="Water Linked Modem M16" }](modem-m16/modem-m16.md) + + **[Modem M16](modem-m16/modem-m16.md)** + +- [![Water Linked Underwater GPS G2](img/home-underwater-gps-g2.png){ alt="Water Linked Underwater GPS G2" }](underwater-gps/introduction.md) + + **[Underwater GPS](underwater-gps/introduction.md)** -<div class="md-content" data-md-component="content"> - <article class="md-content__inner md-typeset"> - <h1 id="documentation">Select your Product!</h1> - <!-- ROW 1: 3D Sonar, DVL A125, DVL A50 --> - <div class="align"> - <div class="col-3 col-md-6 col-sm-12"> - <a href="./sonar-3d/sonar-3d-15-introduction/"> - <img class="img-fluid" - src="https://www.waterlinked.com/web/image/product.product/919/image_1024/%5BWL-21045-2%5D%20Sonar%203D-15?unique=6f5242e" /> - <br /> - <h4>Sonar 3D-15</h4> - </a> - </div> - <div class="col-3 col-md-6 col-sm-12"> - <a href="./dvl/overview/"> - <img class="img-fluid" - src="https://www.waterlinked.com/web/image/product.product/1516/image_512/%5BWL-21035-4-S-300-SIDE-IO%5D%20DVL%20A50%20%28Standard%2C%20300m%2C%203m%20c-w%20Interface%20PCB%29"/> - <br /> - <h4>DVL</h4> - </a> - </div> - </div> - <!-- ROW 2: Modem M16, Underwater GPS G2, Locator-A1 --> - <div class="align"> - <div class="col-3 col-md-6 col-sm-12"> - <a href="./modem-m16/modem-m16"> - <img class="img-fluid" - src="https://www.waterlinked.com/web/image/product.product/240/image_1024/%5BWL-21048-1-S%5D%20Modem%20M16%20%28Standard%29?unique=f736508"/> - <br /> - <h4>Modem M16</h4> - </a> - </div> - <div class="col-3 col-md-6 col-sm-12"> - <a href="./underwater-gps/introduction/"> - <img class="img-fluid" - src="https://www.waterlinked.com/web/image/product.product/152/image_512/%5BWL-11001-2-R100-U1-ANT%5D%20Underwater%20GPS%20G2%20Standard%20Kit%20%28100m%29"/> - <br /> - <h4>Underwater GPS</h4> - </a> - </div> - </div> - </article> </div> diff --git a/docs/modem-m16/modem-m16-faq.md b/docs/modem-m16/modem-m16-faq.md index 05304776..cd9e9a34 100644 --- a/docs/modem-m16/modem-m16-faq.md +++ b/docs/modem-m16/modem-m16-faq.md @@ -31,3 +31,6 @@ The signal strength from the Modem-M16 is donut-shaped around the transducer. Below is a simple scetch that illustrates the signal strength in all directions. For shorter distances the mounting is not relevant, as the signal is transmitted in all directions and also reflected at the surface, seabed or other constructions in the water. On long distances or to achieve optimal behaviour, the mounting position might slightly impact the signal range of the modem. ![Signal strength scetch](../img/m16_signal_strength.png) + +## 6. How fast can the modems move relative to each other? +The two modems should not move faster than **0.8 m/s relative to each other**. Above this relative velocity, the Doppler shift of the acoustic signal becomes significant and can disrupt the communication link. See [Acoustics](../modem-m16/modem-m16.md#acoustics). diff --git a/docs/modem-m16/modem-m16.md b/docs/modem-m16/modem-m16.md index 4300149f..94cf1400 100644 --- a/docs/modem-m16/modem-m16.md +++ b/docs/modem-m16/modem-m16.md @@ -31,4 +31,10 @@ The Modem M16 is a two-way half-duplex 10bps acoustic modem with a robust and us | Transducer frequency | 58.5 kHz | | Bits per package | 16 | | Package duration | 1.6 seconds | +| Max relative velocity | 0.8 m/s | + +!!! note "Relative movement and Doppler shift" + The two modems should not move faster than **0.8 m/s relative to each other**. Above + this relative velocity, the Doppler shift of the acoustic signal becomes significant + and can disrupt the communication link. diff --git a/mkdocs.yml b/mkdocs.yml index bb10d040..29061425 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,4 +1,4 @@ -site_name: Documentation +site_name: Water Linked Documentation site_url: https://docs.waterlinked.com repo_url: https://github.com/waterlinked/docs edit_uri: "" @@ -11,15 +11,30 @@ theme: font: text: Open Sans palette: - # Light mode - - scheme: default - primary: "#1D3556" # Ocean blue - accent: "#4BEF8F" # Signal green light - # Background override for light mode - background: "#F1F9EE" # Green white - surface: "#2B9C6A" # Signal green dark + # Light mode — brand colors are defined in css/extra.css (primary/accent: custom) + - media: "(prefers-color-scheme: light)" + scheme: default + primary: custom + accent: custom + toggle: + icon: material/weather-sunny + name: Switch to dark mode + # Dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: custom + accent: custom + toggle: + icon: material/weather-night + name: Switch to light mode features: - content.heading.permalinks + - content.code.copy + - navigation.tabs + - navigation.top + - search.suggest + - search.highlight + - search.share icon: link: material/link-variant @@ -41,7 +56,14 @@ markdown_extensions: - meta - pymdownx.superfences - pymdownx.details + - pymdownx.highlight: + anchor_linenums: true + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.tabbed: + alternate_style: true - attr_list + - md_in_html extra_css: - css/extra.css @@ -119,7 +141,7 @@ nav: - Power supply: explorer-kit/power-supply.md - Network settings: explorer-kit/network-settings.md - Hardware: explorer-kit/hardware.md - - Master-D1: master-d1.md + - Master-D1: explorer-kit/master-d1.md - Receiver-D1: explorer-kit/receiver-d1.md - Locators: - Locator-A1: explorer-kit/locators/locator-a1.md @@ -185,20 +207,20 @@ nav: - FAQ: dvl/faq.md - Modem: - - Modem-M64 (retired): - - Introduction: modem-m64/modem-m64.md - - Protocol: modem-m64/modem-m64-protocol.md - Modem-M16: - Introduction: modem-m16/modem-m16.md - Quickstart: modem-m16/modem-m16-quickstart.md - Interface: - - Wiring interface: modem-m16/modem-m16-wiring.md + - Wiring interface: modem-m16/modem-m16-wiring.md - GUI: modem-m16/modem-m16-gui.md - Integration: - Interface overview: modem-m16/modem-m16-integration.md - Protocol: modem-m16/modem-m16-protocol.md - Diagnostic report structure: modem-m16/modem-m16-diagnostic-report.md - M16 FAQ: modem-m16/modem-m16-faq.md + - Modem-M64 (retired): + - Introduction: modem-m64/modem-m64.md + - Protocol: modem-m64/modem-m64-protocol.md - I/O interface cards: - Revision 2: io-interface-cards/io-interface-rev2.md