[ { "identifier": "rmackay9.camera-download", "name": "Camera Download", "website": "https://github.com/rmackay9/blueos-camera-download", "docker": "rmackay9/blueos-camera-download", "description": "Download images and videos from camera gimbals connected via Ethernet", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rmackay9/camera-download/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rmackay9/company_logo.png", "versions": { "0.0.3": { "identifier": "326bbae3-2c09-50d5-b78c-3df3a673b9ef", "type": "device-integration", "website": null, "images": [ { "expanded_size": 99535604, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a0cff36cb61f4319a7ed5e4a11a2d6b62d9ed69aef5a42fb79a73f011010328a" }, { "expanded_size": 85232790, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bf010204bb3f5039873dd4001208b2202d08a56311800ed1207b8a14654fdbb6" }, { "expanded_size": 94804153, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:efc2a5539ddccd7c1ae4279eb35f0fa7495d8e23b0e29ddd86940dba8b1d6575" } ], "authors": [ { "name": "Randy Mackay", "email": "rmackay9@yahoo.com" } ], "filter_tags": [ "data-collection" ], "extra_links": { "source": "https://github.com/rmackay9/blueos-camera-download" }, "tag": "0.0.3", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "ArduPilot", "name": "ArduPilot", "email": "rmackay9@yahoo.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/camera-download/downloads:/app/downloads", "/usr/blueos/extensions/camera-download/settings:/app/settings", "/usr/blueos/extensions/camera-download/logs:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "0.0.2": { "identifier": "67c1b777-041a-58a6-9697-d2a0e2e797e7", "type": "device-integration", "website": null, "images": [ { "expanded_size": 99212913, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8b928a304f0c8ab34190db0e427d025b7a06ccf29d9f0741bbb757e0cabec457" }, { "expanded_size": 85016217, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c22ef7334e1816a8c40b1f23c21be74ee3f9a80fcd9ac033fe1bfa8533724877" }, { "expanded_size": 94446987, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:624c3a7fa49d01c4ada756034a89a2be444cc71263b6587b3a2beb4734c8419d" } ], "authors": [ { "name": "Randy Mackay", "email": "rmackay9@yahoo.com" } ], "filter_tags": [ "data-collection" ], "extra_links": { "source": "https://github.com/rmackay9/blueos-camera-download" }, "tag": "0.0.2", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "ArduPilot", "name": "ArduPilot", "email": "rmackay9@yahoo.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/camera-download/downloads:/app/downloads", "/usr/blueos/extensions/camera-download/settings:/app/settings", "/usr/blueos/extensions/camera-download/logs:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "0.0.1": { "identifier": "d73abde9-fe33-54ac-a1e6-cc04712d9ffe", "type": "device-integration", "website": null, "images": [ { "expanded_size": 99242317, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:125053b71c5eb2f309577304ae14569a3dd4964458138317c03c4bd9b5380b75" }, { "expanded_size": 85090703, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5c870844b1872760bb8fd9c4e6eaf0b5266cb2735a67727022d0519fa5623b7d" }, { "expanded_size": 94440534, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:ef306f2e41e080959381e1bb6c65b184c84651b0c8cef7c307a92e2691e4dcb6" } ], "authors": [ { "name": "Randy Mackay", "email": "rmackay9@yahoo.com" } ], "filter_tags": [ "data-collection" ], "extra_links": { "source": "https://github.com/rmackay9/blueos-camera-download" }, "tag": "0.0.1", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "ArduPilot", "name": "ArduPilot", "email": "rmackay9@yahoo.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/$IMAGE_NAME/downloads:/app/downloads", "/usr/blueos/extensions/$IMAGE_NAME/settings:/app/settings", "/usr/blueos/extensions/$IMAGE_NAME/logs:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 1986, "last_updated": "2025-10-01T05:57:10.274174Z", "date_registered": "2025-05-10T01:56:01.193452Z" } }, { "identifier": "rmackay9.opticalflow", "name": "OpticalFlow", "website": "https://github.com/BlueOS-Community/blueos-opticalflow", "docker": "rmackay9/blueos-opticalflow", "description": "Optical Flow using a camera gimbal connected via Ethernet", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rmackay9/opticalflow/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rmackay9/company_logo.png", "versions": { "0.0.1": { "identifier": "38a63505-5655-5060-8f27-5ced5ddefa84", "type": "device-integration", "website": null, "images": [ { "expanded_size": 458860792, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:c793cd73f2e7a0f0843a36c48603539d3e8c46b537ac312eac28d0c34e9a5228" } ], "authors": [ { "name": "Randy Mackay", "email": "rmackay9@yahoo.com" } ], "filter_tags": [ "data-collection" ], "extra_links": { "source": "https://github.com/rmackay9/blueos-opticalflow" }, "tag": "0.0.1", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "ArduPilot", "name": "ArduPilot", "email": "rmackay9@yahoo.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/opticalflow/settings:/app/settings", "/usr/blueos/extensions/opticalflow/logs:/app/logs" ], "CpuQuota": 100000, "CpuPeriod": 100000, "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 647, "last_updated": "2025-07-15T10:40:44.978177Z", "date_registered": "2025-06-30T11:16:48.313135Z" } }, { "identifier": "rmackay9.precision-landing", "name": "Precision Landing", "website": "https://github.com/BlueOS-Community/blueos-precision-landing", "docker": "rmackay9/blueos-precision-landing", "description": "Precision landing on an AprilTag using a camera gimbal connected via Ethernet", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rmackay9/precision-landing/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rmackay9/company_logo.png", "versions": { "0.0.1": { "identifier": "50d05056-e648-52bb-95ca-a89a9d399e49", "type": "device-integration", "website": null, "images": [ { "expanded_size": 201178072, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:c47895001effba0ebaa7db0c356f18c0006a5fa416bd97f1e02c34e3030dc4be" } ], "authors": [ { "name": "Randy Mackay", "email": "rmackay9@yahoo.com" } ], "filter_tags": [ "data-collection" ], "extra_links": { "source": "https://github.com/rmackay9/blueos-precision-landing" }, "tag": "0.0.1", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "ArduPilot", "name": "ArduPilot", "email": "rmackay9@yahoo.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/precision-landing/settings:/app/settings", "/usr/blueos/extensions/precision-landing/logs:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 695, "last_updated": "2025-07-10T10:12:35.559561Z", "date_registered": "2025-06-09T11:02:45.219651Z" } }, { "identifier": "nortekgroup.nucleus", "name": "Nortek Nucleus", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "docker": "nortekgroup/blueos_nucleus", "description": "Supports the Nucleus1000 DVL for ROV navigation", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/nortekgroup/company_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/nortekgroup/company_logo.png", "versions": { "2.0.8": { "identifier": "917a0ddc-2b54-56dd-96a2-00f17980b686", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 313722772, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b99a604810afd3b30715c792d1bf995afa921a09a5ed89db9e2c2ad23f48f230" }, { "expanded_size": 266158633, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:61327727f08256e9caabbcb348fa69e44dc0f2d79954436d0b6d01426d3f48e4" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.8", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/.nortek_nucleus:/opt/nucleus_extension/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.7": { "identifier": "92601868-76f3-51b0-ad6f-2b898bd84084", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 316466884, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:446482905fdc614afbd80e68a2769bf6a9ae7330f449c697d6dd5880a2e61dbe" }, { "expanded_size": 270465037, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:20ae7fb1236223cd0b80da7f0accb5bf9c33c9dbf3f20cf9d5b62a9eed96f1a4" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.7", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/.nortek_nucleus:/opt/nucleus_extension/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.6": { "identifier": "7e60314a-f269-5ed1-b52d-07263dab29b3", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 257297999, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:0f6faf49e08296a95a0e57c36709c4d1f99b31657281703587e259eed660298d" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.6", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/.nortek_nucleus:/opt/nucleus_extension/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.5": { "identifier": "941be78d-95df-5995-93e0-6dcf84ed1e02", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 291737343, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0a2bea27f28ce97562eed0c02c547a06aa688210e3b90dad47c5320f906fac1e" }, { "expanded_size": 257298833, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2cf32852ae27e91f78aaf60960e0b8dd22e2b345b8876e5a82f4a50cfab8f822" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.5", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/.nortek_nucleus:/opt/nucleus_extension/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.4": { "identifier": "18bcc15e-fccb-56ea-ac6f-040545fd2028", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 245175567, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f7a53a5a85ee47be838b19cfdd9059afe85042fccf4d3b2d170e9e19b0a4dba1" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.4", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/.nortek_nucleus:/home/pi/.nortek_nucleus" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.3": { "identifier": "df8163f3-c404-5d00-808e-5b6483f46d05", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 75732464, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:879098e3119195f2a1599c1e9b80cdede14a6cac80505de8b72434086471f6c2" }, { "expanded_size": 71445106, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:d2d21d245e269cb8e04699f20a345d28c4801dbbaff5e958f5840cf39106eb9a" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.3", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.2": { "identifier": "8de0579b-1a1f-5e71-80e7-18d467b4fb83", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 78494296, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:128d407349eadbeca5620ec5df7148bfe42791e0d72886e1f77e461867226a3e" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.2", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.1": { "identifier": "d570ef66-58ae-5be6-99ff-b999c641fc37", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 78272118, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f73d00ea183697ffa304176b15b58ab65ccc4bc35adc7ad8d66841102a0fa0d6" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.1", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "2.0.0": { "identifier": "3c8312b7-9a84-5ff4-b5aa-4ca6474e3c32", "type": "device-integration", "website": "https://github.com/NortekSupport/nucleus_driver", "images": [ { "expanded_size": 82247227, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:63907b1e2420470c8777caa6710b71e207b12e6b30f14a89730b145518dea139" }, { "expanded_size": 76656994, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:3fff9afe64f9f53e771883705266b4d6234458e1a580d98a15c607a1b91c27bb" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "2.0.0", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.2.0": { "identifier": "5279391c-d9e5-5ac9-a901-96de644f637c", "type": "device-integration", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67262813, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:630017a74190da84b89edee200f473baf0140a80d8e7e843bab8a9178091268d" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "1.2.0", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.1.0": { "identifier": "1311ade4-1008-5502-84b3-c592f1aeb0fc", "type": "device-integration", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67100057, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e0dedf493f9749aa953b59d4941e1fdf254c4a6949ecee933079e1d203e71773" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "1.1.0", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.4": { "identifier": "d80dda53-9e55-5730-8db0-5fb11b255c4d", "type": "device-integration", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67188902, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:737d0121074d2009aec5e835884197efa32d063779f1417d981c41e3c351cbec" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "1.0.4", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.2": { "identifier": "db710a2e-7da6-51a6-b5a7-b89187e26d9d", "type": "device-integration", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67163850, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8d96a946443c05c829d07953772cd0c53ee88120455449768796ee133c38f679" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "1.0.2", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.1": { "identifier": "45bcca1a-93dc-5556-885e-70cf737f4c66", "type": "device-integration", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67134167, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6ca7ff490e0537ea5b733e17f2cde35ab9df44ce623873e7524424d83f8c3bbc" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log", "water-tracking", "current-profiling" ], "extra_links": {}, "tag": "1.0.1", "docs": null, "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.0": { "identifier": "36b22160-b9ae-5dd7-813c-af6e0654135a", "type": "other", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67134035, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:27ce7b6d54144a21ffc977980db8cab5449ea187d7a547730435ff33e81410ee" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.0.0", "docs": "", "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "0.0.8": { "identifier": "c6069a89-a287-5ab5-a68e-4a8b83d48d04", "type": "other", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67134028, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f435a931ca002a48fac05f49210a5fde5f4149230f0cc28eaa6620d07c783d02" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.8", "docs": "", "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "0.0.7": { "identifier": "a2f79df4-7b59-549a-8d5e-7bcf276d92f1", "type": "other", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 67134007, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:3c2863d40a1fb24a52bee3a121066c066ce4dea188bcf34f57d703604b4ef67d" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.7", "docs": "", "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "0.0.6": { "identifier": "27443a12-b946-5860-a163-1747f31fc434", "type": "other", "website": "https://github.com/nortekgroup/nucleus_driver/tree/main/blueos_extension", "images": [ { "expanded_size": 72171314, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b6e57a127d370dca3515d4ebf56e412406b19ff4a466b0d39e5e747689dbb117" }, { "expanded_size": 66433573, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ea7125f465fbb327c4b7d20debe40491de00e448c9750b31497388bac2c776b4" } ], "authors": [ { "name": "Martin Bergene Johansen", "email": "martin.johansen@nortekgroup.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.6", "docs": "", "readme": "

BlueOS Nucleus Extension

\n

Intro

\n

This extension integrates the Nortek Nucleus into the BlueROV2 via the BlueOS extensions platform.
\nIt packages the Nucleus Driver inside a Docker image alongside a Node.js-based frontend, which streams velocity, orientation, and position data from the Nucleus into the ArduSub control system via MAVLink commands.

\n

By providing the ROV with this navigation data, the extension enables advanced control modes such as Position Hold, AUTO, and GUIDED.
\nNote: AUTO and GUIDED modes require the Nucleus to have the INS license.

\n

Nortek Nucleus integration

\n

To mount the Nucleus unto the BlueROV2 and connect it to its network, refer Nortek's Nucleus integration guide.

\n

setup

\n

BlueOS

\n

BlueOS needs to be of version 1.2.6 or newer in order to support the adding of third party extensions.

\n

ArduSub

\n

ArduSub needs to be of version 4.1.2 or newer for it to support the mavlink packets used to send data from the Nucleus.

\n

The current version of the extension is developed on ArduSub version 4.5.0 and it is recommended to use at least this version of ArduSub.

\n

Nucleus

\n

The Nucleus must be properly configured in order for it to work with the extension.

\n

It must be configured with a static IP address in order for the extension to connect to it over the ROV network. Assuming the network configuration on the BlueROV2 is default, the following example is valid:\nSETETH,IPMETHOD=\"STATIC\",IP=\"192.168.2.201\"

\n

In order for the various mode to be available for use in the ROV's controller, certain messages must be sent from the Nucleus. The minimum configurations of the Nucleus are described in the following sections, but it is expected that the user reads the MANUAL to properly configure the Nucleus to fit their needs.

\n

Bottom track

\n

Bottom track is responsible for sending velocity data to the ROV and it is required for the ROV to use its Position Hold feature. To enable this output, set the following:\nSETBT,DS=\"ON\"

\n

The frequency of which bottom track data is collected is configured through the trigger settings, i.e.:

\n

SETTRIG,FREQ=4

\n

The trigger settings also handles the altimeter and current profile settings, which influences the trigger frequency. In addition, the frequency of the trigger settings is limited by the bottom track settings. Therefore, read the MANUAL and familiarize yourself with these settings before setting up the Nucleus for your use. For the extension, setting this value as high as you can afford for your configuration is advised.

\n

AHRS

\n

AHRS data is essential for providing the ROV with an orientation when sending the velocity data to the ROV. The velocity data sent will be limited to the trigger frequency defined for the bottom track data. Ensure that the AHRS frequency is higher than the bottom track data, but there is no benefit from maxing it out. Example config:

\n

SETAHRS,DS=\"ON\",FREQ=10

\n

INS

\n

The INS must be enabled in order to utilize the AUTO and GUIDED modes in the ROV. Enable the datastream for the INS:

\n

SETNAV,DS=\"ON\"

\n

And set the instrument settings to navigation mode:

\n

SETINST,TYPE=\"NAV\"

\n

PID parameters

\n

N.B. Adjusting these parameters WILL change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

The PID parameters can be changed through the \"Autopilot parameters\" menu in the blueos.local home page. Good parameterization is necessary for a good performance of the ROV. The correct parameters varies from vehicle to vehicle as the physical attributes of the ROV has an impact on its behavior. However, recommended starting parameters for a standard BlueROV2 with only the Nucleus being the third party installation are as follows:

\n

| Parameter | Value |\n| ---| --- |\n| PSC_POSXY_P | 1.0 |\n| PSC_POSZ_P | 1.0 |\n| PSC_VELXY_P | 5.0 |\n| PSC_VELXY_I | 0.5 |\n| PSC_VELXY_D | 0.8 |\n| PSC_VELZ_P | 5.0 |

\n

While these parameters might provide a well performing ROV, they are most likely not optimal. It is recommended to adjust these parameters to get the desired ROV behavior.

\n

Controller parameters

\n

N.B. Adjusting any of these parameters may change the behavior of the ROV

\n

N.B. The ROV does not store original values of these parameters in case they are changed.

\n

In order for the controller to accept and utilize the velocity and position packets sent from the Nucleus, certain parameters has to be changed. The parameters can be changed in the \"Autopilot parameters\" menu in the blueos.local home page.

\n

After these parameters has been changed it is necessary to power cycle the vehicle for these parameters to take effect

\n

The parameters and their required values are the following

\n

| Parameter | Value |\n| ---| --- |\n| SERIAL0_PROTOCOL | MAVLink2 |\n| EK3_ENABLE | Enabled |\n| AHRS_EKF_TYPE | Enable EKF3 |\n| EK2_ENABLE | Disable |\n| VISO_TYPE | MAVLink |\n| EK3_SRC1_POSXY | ExternalNav |\n| EK3_SRC1_VELXY | ExternalNav |\n| EK3_SRC1_YAW | ExternalN |\n| EK3_SRC2_YAW | Compass |

\n

Also, EK3 algorithm in the ROV may struggle in AUTO mode and its noticed with \"EKf3 lane switch\" errors. As well as jumps in the estimated position which can be seen in the ROVs position in QGroundControl.

\n

If this is happening, a dirty fix is to adjust the \"EKF3 Lane Relative Error Sensitivity Threshold\", which is the threshold for how much error there can be in the estimates before the algorithm changes the \"lane\". By increasing this value the algorithm is less likely to change lanes while running and is likely to yield a better performance as these lane changes causes quite big jump it the estimate positions.

\n

During testing there were good results by setting this value to its maximum, that is:

\n

| Parameter | Value |\n| ---| --- |\n| EK3_ERR_THRESH | 1.0 |

\n

GUI

\n

Accessible via the Nortek Nucleus entry in the BlueOS menu. It consists of two tabs: Connection and Home.

\n

Connection Page

\n

Allows the user to establish a connection to the Nucleus, using the static IP configured on the device. The connection will be established to either port 9000, or 9002 depending on whether \"Stream only\" is enabled.

\n

If not enabled, the connection is done to port 9000 which allows the extension to communicate with (send data to) the Nucleus, which is essential for some of the functionality in the GUI such as:

\n\n

By enabling \"Stream only\", the user may (and must) issue commands to the Nucleus from another source, such as the Nucleus Software, or other software the user may have developed for the Nucleus. While connected to this port, the extension can ONLY receive data from the Nucleus, which is sufficient in order for the ROV to receive the required data.

\n

The connection also includes options for Autoconnect and Autostart:
\n- Autoconnect \u2013 Automatically connects to the Nucleus whenever the ROV is powered up.\n - The \"autoconnect\" will attempt to use the latest IP address and port used to connect to the Nucleus\n- Autostart \u2013 Automatically starts the Nucleus after connecting (requires Autoconnect to be enabled).
\n - If \"Stream only\" (port 9002) was enabled for the latest connection, autostart will fail as a start command cannot be issued when connected to port 9002

\n

GUI free usage

\n

If the user wish to use the extension without having to interface the GUI at all in consecutive missions, an initial connection can be done in the extension where they connect to the Nucleus selecting the following:

\n\n

Additionally, the user must send a SET_GPS_GLOBAL_ORIGIN command to the ROV through MavLink in order to provide the ROV with an initial condition before they can use the AUTO and GUIDED modes of the ROV, as the ROV must know where it is before it can use these features.

\n

By doing this, the extension will start the Nucleus and start sending data to the ROV whenever it starts up, and the operator does not have to use the GUI in order to benefit from the extension.

\n

Home Page

\n

The Home page provides tools for monitoring and controlling data flow between the Nucleus and the ROV.

\n

Packet Counters

\n

Two packet counters serve as a quick sanity check to verify that data is being sent to the ROV:
\n- Position Delta packets
\n- Position Estimate packets

\n

Each counter displays:
\n- Sent \u2013 Number of successfully sent packets.
\n- Skipped \u2013 Packets not sent because transmission is disabled.
\n- Failed \u2013 Packets that failed to send due to an error.
\n- Frequency \u2013 The rate (in Hz) at which packets are being sent.

\n

An enable toggle for each packet type determines whether packets are sent to the ROV. Disabling a packet type will cause its skipped counter to increase.

\n

GNSS Origin and Map

\n

The GNSS Origin panel, combined with the interactive map, allows the user to define the ROV\u2019s reference origin.
\nThis can be done by:
\n- Clicking on the map, or
\n- Manually entering latitude and longitude in the GNSS Origin panel.

\n

The gnss origin must be set before that AUTO and GUIDED modes can be used in the ROV.

\n

Important: The GNSS origin can only be set once per ROV power cycle. To change it, the ROV must be rebooted.

\n

The map also displays the path traveled by the Nucleus based on its INS output.
\nAn active internet connection is required for the map to display.

", "support": "https://support.nortekgroup.com/", "requirements": null, "company": { "about": "", "name": "Nortek", "email": "" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 57063, "last_updated": "2025-08-19T08:35:34.715228Z", "date_registered": "2023-03-23T10:28:07.423732Z" } }, { "identifier": "williangalvani.virtualhere", "name": "VirtualHere", "website": "https://github.com/Williangalvani/BlueOS-VirtualHere", "docker": "williangalvani/blueos-extension-virtualhere", "description": "Remotely access onboard USB devices over IP", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/virtualhere/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.5": { "identifier": "db61c28c-9b57-5be9-9e4b-084784b8245e", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-VirtualHere", "images": [ { "expanded_size": 20690393, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:2a4859d75b374b4606455d8b342c5d0c9797dd8dae705d96a56aefe353ddb42f" }, { "expanded_size": 21088620, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:b8a43485bb2a97686267291b3e951468ac62f4f1b30afb72bffd702370131ca0" }, { "expanded_size": 19183296, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:248dae936a9997901d6b26cb83d53eef137a9b08dd3221807f7b4e926f1fe092" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.5", "docs": null, "readme": "

BlueOS VirtualHere extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Download a client from https://www.virtualhere.com/usb_client_software

", "support": "https://github.com/Williangalvani/BlueOS-VirtualHere/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/usr/blueos/extensions/virtualhere:/virtualhere/config:rw" ], "Privileged": true, "NetworkMode": "host" } } }, "v1.0.4": { "identifier": "906e5e05-59c0-5f59-9018-816dd48d575c", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-VirtualHere", "images": [ { "expanded_size": 46438597, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b87589ae87e39c6d7097c094280799834aaade364f93d04d33ca0cbf31e2d692" }, { "expanded_size": 40845365, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1132c389d835abf4988654f579e08c074d81ba3f92322dba2afc974c1b9b5704" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.4", "docs": null, "readme": "

BlueOS VirtualHere extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Download a client from https://www.virtualhere.com/usb_client_software

", "support": "https://github.com/Williangalvani/BlueOS-VirtualHere/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/usr/blueos/extensions/virtualhere:/virtualhere/config:rw" ], "Privileged": true, "NetworkMode": "host" } } }, "v1.0.3": { "identifier": "166bd1cb-1e1b-56ff-a5f5-721e02b95994", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-VirtualHere", "images": [ { "expanded_size": 61972606, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:27c382df5571e9d2338b729a022ad7c902e58267e648231eacee78d7169cfe6b" }, { "expanded_size": 56520690, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:58add8e210182fa2c96607fb8192b2dfb3f853ebe18c088b9738a50163daf041" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.3", "docs": null, "readme": "

BlueOS VirtualHere extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Download a client from https://www.virtualhere.com/usb_client_software

", "support": "https://github.com/Williangalvani/BlueOS-VirtualHere/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "v1.0.2": { "identifier": "f11b999a-862a-5908-8c10-57fe46b9d864", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-VirtualHere", "images": [ { "expanded_size": 62383495, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4006bc89ee6193e8f973c02858cc91c8482cab78704ea5307912f56058ab59ba" }, { "expanded_size": 56660183, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1b63d3d179c9092429d622033862b69d5d36542d5bf1009c99edb9a194fe84f6" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.2", "docs": "", "readme": "

BlueOS VirtualHere extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Download a client from https://www.virtualhere.com/usb_client_software

", "support": "https://github.com/Williangalvani/BlueOS-VirtualHere/issues", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "v1.0.0": { "identifier": "4d7a08b8-ab08-54b2-8cfb-ae1a6f2acb7b", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-VirtualHere", "images": [ { "expanded_size": 62349790, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b84df60bdd753d795c649f5ba2266a3394961da30a94f36a090aea5626ccda53" }, { "expanded_size": 56623432, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ca693a1fc97e7937624d08b06c3bd18fba03f22997473cab088ee8a16e4cb213" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "

BlueOS VirtualHere extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

To use, first install it in BlueOS:

\n

red-pill\nsudo docker run -d --net=host --privileged --name=blueos-virtualhere --restart=unless-stopped williangalvani/blueos-extension-virtualhere:latest

\n

Client

\n

Download a client from https://www.virtualhere.com/usb_client_software

", "support": "https://github.com/Williangalvani/BlueOS-VirtualHere/issues", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true } } } }, "repo_info": { "downloads": 145716, "last_updated": "2025-02-12T04:32:06.301572Z", "date_registered": "2022-09-07T07:17:20.147217Z" } }, { "identifier": "williangalvani.oakd vins", "name": "Oak-D Visual Odometry", "website": "https://github.com/Williangalvani/Blueos-oakd-vins", "docker": "williangalvani/blueos-oakd-vins", "description": "Visual Odometry using Oak-D cameras", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/oakd vins/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v0.0.1": { "identifier": "02ed3772-5ccd-5063-8e51-1254a8c9942c", "type": "device-integration", "website": null, "images": [ { "expanded_size": 1333348604, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6bf37d9ecddc239c5e81438a5cc04823f1fe42634e3c4d59eee7be4a97e16a39" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/Blueos-oakd-vins" }, "tag": "v0.0.1", "docs": null, "readme": "

BlueOS Oak D VINS

\n

This project implements Visual-Inertial Navigation System (VINS) using the Luxonis OAK-D camera for ArduPilot-based vehicles. It provides position and velocity estimates that can be used as a substitute for GPS, enabling position control modes like Loiter, PosHold, RTL, and Auto to work in GPS-denied environments.\nThis extension is based on the guide at Ardupilot) and the work by ChobitsFan,\nBut replaces the mavlink proxy for mavlink2rest for integration into BlueOS

\n

Hardware Requirements

\n\n

Hardware Setup

\n
    \n
  1. Connect the OAK-D to one of the RPI's blue USB3 ports
  2. \n
\n

ArduPilot Configuration

\n

Configure your ArduPilot flight controller with these parameters:

\n\n

Flight Testing

\n

For your first flight:

\n
    \n
  1. Takeoff in Stabilize or Alt-Hold mode
  2. \n
  3. Verify vehicle stability
  4. \n
  5. Move the vehicle around and observe position tracking in Mission Planner
  6. \n
  7. Switch to Loiter mode (be ready to switch back to Stabilize/Alt-Hold if needed)
  8. \n
  9. Test position holding and movement at various speeds
  10. \n
  11. If everything works as expected, future flights can be armed and taken off in Loiter mode
  12. \n
\n

Troubleshooting

\n", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/dev/bus/usb:/dev/bus/usb" ], "DeviceCgroupRules": [ "c 189:* rmw" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 455, "last_updated": "2025-06-13T02:53:50.603427Z", "date_registered": "2025-06-13T02:53:50.53734Z" } }, { "identifier": "williangalvani.oakd", "name": "Oak-D Video Streams", "website": "https://github.com/Williangalvani/Oakd-extension", "docker": "williangalvani/oakd-extension", "description": "Exposes Oak-D streams into cockpit", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/oakd/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.1": { "identifier": "63e34a69-3b69-5327-8254-d4ff289d23db", "type": "device-integration", "website": "https://github.com/Williangalvani/Oakd-extension/", "images": [ { "expanded_size": 1062993112, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:d5ba4018fdb8926dd1e5b70b2e8f319d11eb3f07204fc1748e669c3a95fff3d6" }, { "expanded_size": 1277364534, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:fc5af65f1246cb8312a88077aa398076b867287f53ff2c21725ed2e5e4b6d6dc" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/Oakd-extension/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } }, "v1.0.1-heta.1": { "identifier": "4d8e6434-af76-53c3-b91c-111aff57d0da", "type": "device-integration", "website": "https://github.com/Williangalvani/Oakd-extension/", "images": [ { "expanded_size": 1150339016, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:55eb2f8e8d25a693dc2c53d52b082a29b5c6bf08c9d64d22a5a5c5ce8c93a49e" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1-heta.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/Oakd-extension/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } }, "v1.0.0": { "identifier": "267435ea-f9fd-510b-b863-250a622957f2", "type": "device-integration", "website": "https://github.com/Williangalvani/Oakd-extension/", "images": [ { "expanded_size": 1150339194, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6da815487395a969ee4cd142ab7c55bf7b201032b433ae1e551af7380b75a042" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": null, "readme": "

This extension exposes the Stereo Depth Disparity and RGB video from Oak-D cameras into RTSP streams that can be displayed in Cockpit.

", "support": "https://github.com/Williangalvani/Oakd-extension/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } } }, "repo_info": { "downloads": 8353, "last_updated": "2025-02-12T16:03:19.432988Z", "date_registered": "2024-04-02T12:56:46.518809Z" } }, { "identifier": "williangalvani.zerotier", "name": "ZeroTier", "website": "https://github.com/BlueOS-Community/ZeroTierOne", "docker": "williangalvani/zerotier", "description": "Join a virtual network to operate your vehicle from anywhere", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/zerotier/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.14.3": { "identifier": "e02f7be8-2150-56c6-a9bc-fe80cc5e2033", "type": "other", "website": "https://github.com/Williangalvani/zerotierone", "images": [ { "expanded_size": 66127769, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2b3326b44dfc7d86e5bf07699c53dd6da8ad99a829e86feababcdbdfd7f38881" }, { "expanded_size": 74405442, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:fda146009388e3940cbfe48c6f0e8323e0fd3fa632ea4003320d67617d824658" }, { "expanded_size": 82667925, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:84354908f25dc03e798f959ca3a61b4b909eaeb6dfe8e32ae70931780af38078" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.14.3", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/zerotierone/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/usr/blueos/extensions/zerotier:/var/lib/zerotier-one", "/var/lib/zerotier-one:/old-settings" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } }, "v1.14.2": { "identifier": "16b3044d-6676-508b-bdac-f0e4d2125fb7", "type": "other", "website": "https://github.com/Williangalvani/zerotierone", "images": [ { "expanded_size": 66196576, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a51989fad182fd33e0712e88b4977a69589d12f5c28347a89a14e893dd365d18" }, { "expanded_size": 74474451, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:4971108e54998199bfb26e922dd544a770e047e6fbb33d98ae708228766d015c" }, { "expanded_size": 82740513, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4f14f2364ce85ddf0690838a897d0241939a5f23f7edd88e1c96578949f93093" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.14.2", "docs": null, "readme": "
\n

NOTE: This is a BlueOS Extension for using the ZeroTier service on a BlueOS device. It sets up a VPN to access your device from anywhere with an internet connection.

\n
\n

Initial Setup

\n
    \n
  1. Install the ZeroTier extension on your vehicle
  2. \n
  3. Download ZeroTier on the device(s) you want to connect with
  4. \n
  5. Log In to ZeroTier online\n
  6. \n
  7. Create a new network and copy the generated network ID
  8. \n
  9. Join the network (using the ID) from the BlueOS ZeroTier Extension page, as well as through the ZeroTier interface on your device(s)
  10. \n
  11. If using a private network, return to the online ZeroTier interface, scroll down to the \"Members\" section, and allow each device access to the network by checking the \"Auth?\" checkbox beside its listing\n
  12. \n
  13. You should now be able to access the BlueOS web interface through the ZeroTier connection\n
  14. \n
  15. Configure the desired endpoints (for MAVLink telemetry, video streams, serial, etc) to point to the intended recipient\n
  16. \n
\n

General Usage

\n

Once the network and endpoints have been configured it should be possible to reconnect at will, whenever the vehicle and a device are both connected to the internet, and connected to a ZeroTier network they're both authorised on.

\n

If a device leaves a ZeroTier network (or is not connected to the internet) then it will not be accessible to the rest of the network. ZeroTier's online manager can be used to de-authorise devices and/or remove them from the network entirely.

\n

Troubleshooting

\n", "support": "https://github.com/Williangalvani/zerotierone/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/usr/blueos/extensions/zerotier:/var/lib/zerotier-one", "/var/lib/zerotier-one:/old-settings" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } }, "v1.14.0": { "identifier": "1c7ef7f2-05d3-5efb-815f-de4c075ca8d9", "type": "other", "website": "https://github.com/Williangalvani/zerotierone", "images": [ { "expanded_size": 67417026, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:831682262dd736b8844e59d9bb49e479755c6cc0b27b71e4058c91033b7d2a40" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.14.0", "docs": null, "readme": "
\n

NOTE: This is a BlueOS Extension for using the ZeroTier service on a BlueOS device. It sets up a VPN to access your device from anywhere with an internet connection.

\n
\n

Initial Setup

\n
    \n
  1. Install the ZeroTier extension on your vehicle
  2. \n
  3. Download ZeroTier on the device(s) you want to connect with
  4. \n
  5. Log In to ZeroTier online\n
  6. \n
  7. Create a new network and copy the generated network ID
  8. \n
  9. Join the network (using the ID) from the BlueOS ZeroTier Extension page, as well as through the ZeroTier interface on your device(s)
  10. \n
  11. If using a private network, return to the online ZeroTier interface, scroll down to the \"Members\" section, and allow each device access to the network by checking the \"Auth?\" checkbox beside its listing\n
  12. \n
  13. You should now be able to access the BlueOS web interface through the ZeroTier connection\n
  14. \n
  15. Configure the desired endpoints (for MAVLink telemetry, video streams, serial, etc) to point to the intended recipient\n
  16. \n
\n

General Usage

\n

Once the network and endpoints have been configured it should be possible to reconnect at will, whenever the vehicle and a device are both connected to the internet, and connected to a ZeroTier network they're both authorised on.

\n

If a device leaves a ZeroTier network (or is not connected to the internet) then it will not be accessible to the rest of the network. ZeroTier's online manager can be used to de-authorise devices and/or remove them from the network entirely.

\n

Troubleshooting

\n", "support": "https://github.com/Williangalvani/zerotierone/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/usr/blueos/extensions/zerotier:/var/lib/zerotier-one", "/var/lib/zerotier-one:/old-settings" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } }, "v1.12.3": { "identifier": "d8da95f8-29ff-5b64-a4ac-3e4425d890f4", "type": "other", "website": "https://github.com/Williangalvani/zerotierone", "images": [ { "expanded_size": 260334935, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:714ca73d30b033b2eb4d3f70e77cf86fa5871a4cddf5314ed435dc4b4b860ff7" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.12.3", "docs": null, "readme": "
\n

NOTE: This is a BlueOS Extension for using the ZeroTier service on a BlueOS device. It sets up a VPN to access your device from anywhere with an internet connection.

\n
\n

Initial Setup

\n
    \n
  1. Install the ZeroTier extension on your vehicle
  2. \n
  3. Download ZeroTier on the device(s) you want to connect with
  4. \n
  5. Log In to ZeroTier online\n
  6. \n
  7. Create a new network and copy the generated network ID
  8. \n
  9. Join the network (using the ID) from the BlueOS ZeroTier Extension page, as well as through the ZeroTier interface on your device(s)
  10. \n
  11. If using a private network, return to the online ZeroTier interface, scroll down to the \"Members\" section, and allow each device access to the network by checking the \"Auth?\" checkbox beside its listing\n
  12. \n
  13. You should now be able to access the BlueOS web interface through the ZeroTier connection\n
  14. \n
  15. Configure the desired endpoints (for MAVLink telemetry, video streams, serial, etc) to point to the intended recipient\n
  16. \n
\n

General Usage

\n

Once the network and endpoints have been configured it should be possible to reconnect at will, whenever the vehicle and a device are both connected to the internet, and connected to a ZeroTier network they're both authorised on.

\n

If a device leaves a ZeroTier network (or is not connected to the internet) then it will not be accessible to the rest of the network. ZeroTier's online manager can be used to de-authorise devices and/or remove them from the network entirely.

\n

Troubleshooting

\n", "support": "https://github.com/Williangalvani/zerotierone/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/usr/blueos/extensions/zerotier:/var/lib/zerotier-one", "/var/lib/zerotier-one:/old-settings" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } }, "v1.12.1": { "identifier": "2c16f342-5e57-580d-b91c-595299c4f765", "type": "other", "website": "https://github.com/Williangalvani/zerotierone", "images": [ { "expanded_size": 246398941, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:473153de2deff0d6ebe51df9a6d86dd1b382eecf78ba8f5ecad052c12d3ad94d" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.12.1", "docs": null, "readme": "

This is a ZeroTier extension. It sets up a VPN to access your device from anywhere with an internet connection.\nFor more information on ZeroTier, check ZeroTier.

", "support": "https://github.com/Williangalvani/zerotierone/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/var/lib/zerotier-one:/var/lib/zerotier-one" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } }, "v1.0.1": { "identifier": "50fceca3-00cf-550d-a4b3-6fc682caefab", "type": "other", "website": "https://github.com/Williangalvani/zerotierone", "images": [ { "expanded_size": 169429191, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1172a08bfae4bc3fb54589d1b6abc7237a05b1a09c8a8e4bd87d2ba424e424be" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "

This is a ZeroTier extension. It sets up a VPN to access your device from anywhere with an internet connection.\nFor more information on ZeroTier, check ZeroTier.

", "support": "https://github.com/Williangalvani/zerotierone/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/var/lib/zerotier-one:/var/lib/zerotier-one" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } }, "v1.0.0": { "identifier": "a55f32d8-739a-50b3-b8eb-e6e648c55554", "type": "other", "website": "https://github.com/williangalvani/zerotierone", "images": [ { "expanded_size": 169297643, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:da7a45553d91224582cfd56ead75ecdfc259e3ced1cb1c830bb044cdcc344c3c" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "

This is a ZeroTier extension. It sets up a VPN to access your device from anywhere with an internet connection.\nFor more information on ZeroTier, check ZeroTier.

", "support": "https://github.com/williangalvani/zerotierone", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "CapAdd": [ "SYS_ADMIN", "NET_ADMIN" ], "Binds": [ "/var/lib/zerotier-one:/var/lib/zerotier-one" ], "Devices": [ { "PathOnHost": "/dev/net/tun", "PathInContainer": "/dev/net/tun", "CgroupPermissions": "rwm" } ] } } } }, "repo_info": { "downloads": 59480, "last_updated": "2025-05-19T20:37:10.685576Z", "date_registered": "2022-06-08T02:20:40.875088Z" } }, { "identifier": "williangalvani.network-scanner", "name": "Network Scanner", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner", "docker": "williangalvani/blueos-network-scanner", "description": "Find other devices at your BlueOS network", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/network-scanner/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.4": { "identifier": "ba43e516-985f-5bfb-a55d-71619255ad2a", "type": "tool", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "images": [ { "expanded_size": 166688673, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:606acae5c681b8d4500b23fa1dd5eccef8ac5ae9c942b54761ef625fd10c6554" }, { "expanded_size": 139074473, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b0c0ee03db1f8855174ca393296e5edad6088d5e662d9d03297227108586215e" }, { "expanded_size": 161521974, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a7a4c30fa4d0791577ac49ec13ec80c7f61c7f3fd73550064b69f5074fe7694f" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.4", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "NetworkMode": "host" } } }, "1.0.3": { "identifier": "f2419dc7-3cbe-52e5-a1ea-4fc19741f7b8", "type": "tool", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "images": [ { "expanded_size": 156824186, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2f0a5930e99df255156474da83c8eb3eb4c4ad599967df9f8bee1484498f6fd7" }, { "expanded_size": 161309683, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6719c16d2edb8adebb57b32788137398cc9bb66cb8619c8fbf65481a9ec99077" }, { "expanded_size": 134610455, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7b3398f704302768bbec38c4822994b24c5e6553e928ec23363d479d8e941228" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.0.3", "docs": null, "readme": "

BlueOS Network SCanner

\n

This allows scanning each individual logical interface in the vehicle to find connected devices

\n

changelog

\n

v1.0.1:

\n", "support": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "NetworkMode": "host" } } }, "v1.0.2": { "identifier": "f2609867-67d1-59f0-851b-9e98ba00f78d", "type": "tool", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "images": [ { "expanded_size": 135356970, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:77a7f2a97e30eedf50ae2e29e4c6e9a1a95f81ad07ac9d8c7fc664296d17caed" }, { "expanded_size": 157816879, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:9c1ed7cbb80575d48f6ca4e1b765a4e3c32ceb1b508becc70e5eb05e5c3eec35" }, { "expanded_size": 162273079, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0f86e59bb7f91ec4697deecd3be10914ff28e784725cd895b64adba26172664c" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.2", "docs": null, "readme": "

BlueOS Network SCanner

\n

This allows scanning each individual logical interface in the vehicle to find connected devices

\n

changelog

\n

v1.0.1:

\n", "support": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "NetworkMode": "host" } } }, "1.0.2": { "identifier": "b274476e-1a19-55de-aea8-545830702d4d", "type": "tool", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "images": [ { "expanded_size": 135355878, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:0fae403cbe350d99649b7fb4d525f7baf43955736110d11c55bb0ba857506b4c" }, { "expanded_size": 157816485, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0d3228f9d5ade13c571c0573bf22aaebdb7791fb32010a3ce64a32649dccae2c" }, { "expanded_size": 162273079, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0f86e59bb7f91ec4697deecd3be10914ff28e784725cd895b64adba26172664c" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.0.2", "docs": null, "readme": "

BlueOS Network SCanner

\n

This allows scanning each individual logical interface in the vehicle to find connected devices

\n

changelog

\n

v1.0.1:

\n", "support": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "NetworkMode": "host" } } }, "v1.0.1": { "identifier": "13bfb792-567e-5440-90bc-47aecc0e6503", "type": "tool", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "images": [ { "expanded_size": 139164501, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5e82e94b39b55a9e2eee865259af83d311dbfbae1470fc304c77a9cc93a0efbe" }, { "expanded_size": 161690019, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:bb52f8f92b786a3576e22519059196a401dfdfcb705c989f8d4696ee165d1995" }, { "expanded_size": 167205891, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:05abfefd25d3fa05d6ddce099d68ee7df4f2a48cc364eb972e409c164c31bc01" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "

BlueOS Network SCanner

\n

This allows scanning each individual logical interface in the vehicle to find connected devices

\n

changelog

\n

v1.0.1:

\n", "support": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "NetworkMode": "host" } } }, "v1.0.0": { "identifier": "9784d249-52a2-57f1-81be-488a862daec0", "type": "tool", "website": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "images": [ { "expanded_size": 167206981, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0daea257fead5fe6622ac888910e082b8e9ac4b1263907d128db8d8926753f5d" }, { "expanded_size": 139162770, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:73768f50b93360ed53bfa76ca220d06e812af178b40f2bfd0ffe5a75dc2a351e" }, { "expanded_size": 139162731, "platform": { "architecture": "arm", "variant": "v8", "os": "linux" }, "digest": "sha256:730538912fce663c577e2af81fda7b9f706228445bd73c7930d8b07f57b77d3c" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": null, "readme": "

BlueOS Network SCanner

\n

This allows scanning each individual logical interface in the vehicle to find connected devices

", "support": "https://github.com/Williangalvani/BlueOS-extension-network-scanner/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "NetworkMode": "host" } } } }, "repo_info": { "downloads": 16779, "last_updated": "2025-05-14T20:51:07.385773Z", "date_registered": "2024-05-05T23:27:05.667297Z" } }, { "identifier": "williangalvani.mediamtx", "name": "MediaMTX", "website": "https://github.com/Williangalvani/blueos-extension-MediaMTX", "docker": "williangalvani/blueos-extension-mediamtx", "description": "Wrapper for running MediaMTX on BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/mediamtx/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.11.4": { "identifier": "6ebfd9cf-8512-506f-84cd-ef6d976326e0", "type": "other", "website": "https://github.com/Williangalvani/blueos-extension-MediaMTX/", "images": [ { "expanded_size": 377756642, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:02559e26a434da9d4a550bb1ba196298116060b83ca4159b4f55fa1976ed73b2" }, { "expanded_size": 400043896, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6450dcf8cfd03b53a3c5c61e10efba47a1ceda6b4b3fbc65c05b8f9a126240fc" }, { "expanded_size": 406148628, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:714533fbd4ccefe47b159a07031e5e748578741b187ddba8a9e57a3eb253ca7b" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.11.4", "docs": null, "readme": "

MediaMTX BlueOS Extension

\n

A BlueOS extension that provides RTSP relay functionality using MediaMTX, enabling you to proxy, view, and redistribute RTSP video streams through various protocols including WebRTC.

\n

Features

\n", "support": "https://github.com/Williangalvani/blueos-extension-MediaMTX//issues", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/mediamtx:/usr/blueos/extensions/mediamtx" ] } } }, "v1.11.3": { "identifier": "532cf967-c2c4-5683-90fa-db9d4e2f283a", "type": "other", "website": null, "images": [ { "expanded_size": 377758214, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:016b83ac163978454ce26651bb54aaab1f994a75399087b6b06dfb351bd1f8e6" }, { "expanded_size": 400043736, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:684ab67bd2401d8c7df5ea8f54623a5246e90cae79e1947b3b2b34a300e2e595" }, { "expanded_size": 406148631, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:d84d31123d4e54cf0a0e4992dcf9d664fec86a9df8ec4ac600bc9e7a0a0405e7" } ], "authors": [], "filter_tags": [], "extra_links": {}, "tag": "v1.11.3", "docs": null, "readme": null, "support": null, "requirements": null, "company": null, "permissions": { "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/mediamtx:/usr/blueos/extensions/mediamtx" ] } } }, "1.11.2": { "identifier": "4712e580-6d4e-5970-8cc5-ec61b47c9e55", "type": "other", "website": null, "images": [ { "expanded_size": 377758539, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1ba75f01ddae51b87321c459bbe019ad8c27cdb6b276d3167d74a74dbf86a16f" }, { "expanded_size": 400044021, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:09e3adf3d735b5939a558f4dc0cd0b983b42132aeda85bb775bc6de7b2b5766e" }, { "expanded_size": 406148810, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:88c929c2632255edf3584e78099a0d0f169506d1c2674785679020c3902630ac" } ], "authors": [], "filter_tags": [], "extra_links": {}, "tag": "1.11.2", "docs": null, "readme": null, "support": null, "requirements": null, "company": null, "permissions": { "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/mediamtx:/usr/blueos/extensions/mediamtx" ] } } }, "v1.11.2": { "identifier": "7f803853-64e6-5e69-9143-2c29945266bf", "type": "other", "website": null, "images": [ { "expanded_size": 448697728, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:343934b5d699e847526667ec1434c80c9d851fceee11b06ddc373322a7a2c9df" }, { "expanded_size": 474079974, "platform": { "architecture": "arm64", "variant": "v8", "os": "linux" }, "digest": "sha256:cd152b36da020bd7f737ec6bcd694027b3eca1b5c5c967540abfcce26cc17e6a" }, { "expanded_size": 477581564, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4448fb1fc9d9a340142e1af9a93961dfd52f20180e8faa0a86724f8ac5b369a9" } ], "authors": [], "filter_tags": [], "extra_links": {}, "tag": "v1.11.2", "docs": null, "readme": null, "support": null, "requirements": null, "company": null, "permissions": { "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/mediamtx:/usr/blueos/extensions/mediamtx" ] } } } }, "repo_info": { "downloads": 5080, "last_updated": "2025-06-10T17:33:30.945249Z", "date_registered": "2025-03-06T16:25:46.94933Z" } }, { "identifier": "williangalvani.plc-diagnostics", "name": "Tether Diagnostics", "website": "https://github.com/Williangalvani/plc-extension", "docker": "williangalvani/blueos-plc", "description": "Diagnose issues with your tether", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/plc-diagnostics/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.3": { "identifier": "32e55347-6b8e-55c2-aaac-f885a82e34ec", "type": "tool", "website": null, "images": [ { "expanded_size": 87971421, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:35957a0d632117c9a77a100f263b2422a8334a77304f27ee2357d3881394ee67" }, { "expanded_size": 94089425, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:206c698b13448b5fb8b8a3aaa84178b678425db0a54da6fc99d64fd3f2f9625c" }, { "expanded_size": 100039947, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:93c49ef221826ee6f8f183672a931909a4b298334648f0a812899c04ba6015e1" } ], "authors": [ { "name": "Willian Galvani", "email": "wiliangalvani@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/plc-extension" }, "tag": "v1.0.3", "docs": null, "readme": "

PLC Diagnostics

\n

Having thether issues? This extension will help you better understand your link's bandwidth and connection quality

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Willian Galvani", "email": "wiliangalvani@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "v1.0.2": { "identifier": "03921d1c-df43-5492-8887-44e9616df379", "type": "tool", "website": null, "images": [ { "expanded_size": 87971421, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:35957a0d632117c9a77a100f263b2422a8334a77304f27ee2357d3881394ee67" }, { "expanded_size": 94089425, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:206c698b13448b5fb8b8a3aaa84178b678425db0a54da6fc99d64fd3f2f9625c" }, { "expanded_size": 100039947, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:93c49ef221826ee6f8f183672a931909a4b298334648f0a812899c04ba6015e1" } ], "authors": [ { "name": "Willian Galvani", "email": "wiliangalvani@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/plc-extension" }, "tag": "v1.0.2", "docs": null, "readme": "

QuickStart-Python-Extension

\n

A quick-start repository for building and uploading a Python-focused BlueOS Extension.

\n

Intent

\n

This is intended to showcase:\n1. How to make a basic Extension with a simple web interface, using Python and some HTML\n2. The difference between code running on the frontend vs the backend\n - Backend code has access to vehicle hardware and other service APIs, as well as the filesystem (for things like persistent logging)\n - Frontend code is in charge of the display, and runs in the browser interface (instead of on the vehicle's onboard computer)

\n

Usage

\n

Forking the repository will try to automatically package and upload your Extension variant to a Docker registry (Docker Hub), using the built in GitHub Action.\nThis process makes use of some GitHub Variables that you can configure for your fork.

\n

It is also possible to manually run the Action (via the Actions tab), or to build and deploy the extension manually on your local machine (although this requires installing the relevant build tools and cloning the repository onto your computer).

\n
\n

\ud83d\udca1Note: If you are forking this repository as a starting point for creating your own BlueOS Extension, it is recommended to enable Issues in your fork (via the Settings tab at the top), so that users and co-developers of your Extension can raise problems and make suggestions.

\n
", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Willian Galvani", "email": "wiliangalvani@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "1.0.1": { "identifier": "37303bf5-4438-56b4-b632-704649aa3a6e", "type": "example", "website": null, "images": [ { "expanded_size": 87951124, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b189e8966331dbaacbd9d21c5583f0bb0c4faf00c9f8c3fd2d6fce2e6b330117" }, { "expanded_size": 94070756, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:852084320d5d8516d94f787aa28ee0e0615087849e78f6bc8533176d8f2a3713" }, { "expanded_size": 100027144, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:1e451e2e07c76d97625aabaf4a8748e3e5a8aad58e45fa5b8bf773a25714e365" } ], "authors": [ { "name": "$AUTHOR", "email": "$AUTHOR_EMAIL" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/$OWNER/$REPO" }, "tag": "1.0.1", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "$MAINTAINER", "email": "$MAINTAINER_EMAIL" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "1.0.0": { "identifier": "ccd0b581-f1c8-567d-be09-86de4cd774fc", "type": "example", "website": null, "images": [ { "expanded_size": 87950576, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:3b74784581bf1a4c0c922944c69571e3434cf2de40db7d0bbd7fa461e7e4bdc9" } ], "authors": [ { "name": "$AUTHOR", "email": "$AUTHOR_EMAIL" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/$OWNER/$REPO" }, "tag": "1.0.0", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "$MAINTAINER", "email": "$MAINTAINER_EMAIL" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "v1.0.0": { "identifier": "f7449486-ec50-5b8d-b582-a80f342e296c", "type": "example", "website": null, "images": [ { "expanded_size": 87950576, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5fb4fbd32e76af6d853b972e4ea682e226147b7f4247f9f60c80860a8d963666" }, { "expanded_size": 100026516, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:09a49126a1f5572165aa4010e171fd1be4a13cd4c804c78f9276d2717a271c80" } ], "authors": [ { "name": "$AUTHOR", "email": "$AUTHOR_EMAIL" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/$OWNER/$REPO" }, "tag": "v1.0.0", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "$MAINTAINER", "email": "$MAINTAINER_EMAIL" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "0.0.5": { "identifier": "a9ba0b33-ba29-506b-8425-ac3e621b2181", "type": "tool", "website": null, "images": [ { "expanded_size": 87971421, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:35957a0d632117c9a77a100f263b2422a8334a77304f27ee2357d3881394ee67" }, { "expanded_size": 94089425, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:206c698b13448b5fb8b8a3aaa84178b678425db0a54da6fc99d64fd3f2f9625c" }, { "expanded_size": 100039947, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:93c49ef221826ee6f8f183672a931909a4b298334648f0a812899c04ba6015e1" } ], "authors": [ { "name": "Willian Galvani", "email": "wiliangalvani@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/plc-extension" }, "tag": "0.0.5", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Willian Galvani", "email": "wiliangalvani@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } } }, "repo_info": { "downloads": 19471, "last_updated": "2025-10-15T19:07:10.2706Z", "date_registered": "2024-05-23T03:16:55.205832Z" } }, { "identifier": "williangalvani.blueos-proxy", "name": "BlueOS Proxy", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "docker": "williangalvani/blueos-extension-proxy", "description": "BlueOS Proxy", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/blueos-proxy/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.6": { "identifier": "3210aab9-2ace-53be-a9ed-d7ca2b1b461f", "type": "tool", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 85211048, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:98484b6ffa1b364badc3cf30cbeb089e34d43fbf7e31d116b3eb7a5d1afbfc39" }, { "expanded_size": 90276046, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:854b6f7d09217f5e7f52fb62706d06fc6b90f697f5b8ae2d42d923886b656b2a" }, { "expanded_size": 92075584, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5cad7a6e79851e51159fbab930d3f88c93f36d03a2e25b1e0c58605e8523a41d" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.6", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v1.0.5": { "identifier": "10157f79-be95-5227-a0f4-88a7dfb1de9a", "type": "tool", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 84082227, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:916b3317ef9194b2f1cd52c17e7a8063b2b6d3a910d52fa45c3a3094ff6fef5b" }, { "expanded_size": 89363969, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:d6ff37f296b152aae546aef85b9074c68e63e954782d9f7c0005b8cb2b290dc9" }, { "expanded_size": 91219284, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ac71d7f0585c6921f66b8cdae3b175580235c4b2a25694d88680d72da5068503" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.5", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v1.0.4": { "identifier": "46c43d44-b4e5-5705-9850-a1fdac70a0ef", "type": "tool", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 84850534, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fd1b9813bd070ed908eedd1893a4384bb326c4810822fa90559cf4cb9c27742e" }, { "expanded_size": 90415003, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:1c08c9b3a0bfd9d1b77a12bbd58cfe2955f3b511979d95c4978c9fb925dcba16" }, { "expanded_size": 92195367, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:da034c9f0a018f571cd8205b0f212da6cca4e647f5708545d67c75aecb946b04" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.4", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v1.0.3": { "identifier": "0f5fa5df-187c-52c9-91f7-59550a1f923d", "type": "tool", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 84759554, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a5f4b1f8bacfcb91b79e43880c2d4130854f8b84850450e5b3342628b7ad078a" }, { "expanded_size": 90239649, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:4fcfb25e22e3f1f3a4327e9df9f1fbb94260b4cc576a29aef41969cbe2c71b21" }, { "expanded_size": 92139393, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:506d80c107ea66232b122a85008e76946585454b33e214306a9c963a376d51df" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.3", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v1.0.2": { "identifier": "a0cacf66-8f2c-58d5-b730-1cead219d628", "type": "tool", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 84749977, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:558d5fd76d64ebf386f9d3b999e735f06d5c5e5083185bb8eee43da06fb21160" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.2", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v1.0.1": { "identifier": "7a4a7012-1030-5396-a25f-f9feb4bee516", "type": "tool", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 84582989, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:403797eeef9396e67001caa71d638c64e10a8e27aad5f16838208de4c7ae5c47" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v1.0.0": { "identifier": "ecdb7a22-1823-574b-9165-0fc25d948f3b", "type": "example", "website": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "images": [ { "expanded_size": 73489461, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:aedd59836db2027ddf1ef1bf107e2ca80bf94cafa0c7a2263040b6299398ec41" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": null, "readme": "

Blueos Proxy Extension

\n

This allows you to browse the ROV network as if you were in there.\nIt is useful for accessing and configuring routers and other local devices that may not be reachable from the GCS computer.

", "support": "https://github.com/Williangalvani/Blueos-Proxy-Extension", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } }, "v0.0.1": { "identifier": "0f219efe-14c3-5232-95d5-529d5396df1c", "type": "example", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 80488310, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5813a9a11a447009c7e3a235b2fc263e8f283d136986f5b5a091e4f9b62d2fd4" }, { "expanded_size": 73489461, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:89ef4fcfe2880c061112831114679d61eb12639002da11203fecfb03312fa844" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v0.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": {}, "HostConfig": { "Binds": [ "/usr/blueos/userdata/blueos-proxy/:/usr/blueos/userdata/blueos-proxy/" ], "NetworkMode": "host" } } } }, "repo_info": { "downloads": 25745, "last_updated": "2026-02-10T22:39:44.945961Z", "date_registered": "2023-05-28T18:03:17.343281Z" } }, { "identifier": "williangalvani.dashcam", "name": "Dashcam", "website": "https://github.com/Williangalvani/BlueOS-Dashcam/", "docker": "williangalvani/blueos-dashcam", "description": "Local video recording on the vehicle", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/dashcam/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v0.0.21": { "identifier": "6d45db1a-8207-5664-a31c-6518f8cc7a8f", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-Dashcam/", "images": [ { "expanded_size": 434016336, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:04d62986216c110b7f44c25968e9e49b918d8d14bf23b7d055bb2dee0f62ec42" }, { "expanded_size": 488610857, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0a30453d19298d78efc66bb4191c2eb59cb93056c1192bf7dcf204d3f1a289d7" }, { "expanded_size": 517007302, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:3d684dfb9f93f74d1db94fd2627251c0a41e918840a98c385976743b864caba9" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "media" ], "extra_links": {}, "tag": "v0.0.21", "docs": null, "readme": "

DashCam

\n

This extension allows onboard video recording from rtsp sources, such as BlueOS' Mavlink Camera Manager and IP cameras.q

\n

Changelog

\n

0.0.14: Published on BlueOS extension repository

", "support": "https://github.com/Williangalvani/BlueOS-Dashcam/issues", "requirements": "core >= 1.4", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Binds": [ "/usr/blueos/extensions/dashcam/videos/:/home/blueos/videos/", "/root/.config/blueos/ardupilot-manager/firmware/logs/:/home/blueos/logs/", "/usr/blueos/extensions/dashcam/settings/:/home/blueos/settings/" ], "CpuQuota": 100000, "CpuPeriod": 100000, "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.20": { "identifier": "9486192b-148c-50d2-8b66-036918507be8", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-Dashcam/", "images": [ { "expanded_size": 433996674, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9dcd19df8204b2726abfbdd5523eb387b6675a5183eabcf16b3b105677e9f779" }, { "expanded_size": 488591523, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:222edac9bffcd4b1596d92760fa42d5b87e66fed9158b7b3fdd7bc7bb7a64908" }, { "expanded_size": 516987766, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8dc1436036105594d4f6028fd8d17e7922224b23c7318ca535b6458cc61ae3f6" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "media" ], "extra_links": {}, "tag": "v0.0.20", "docs": null, "readme": "

DashCam

\n

This extension allows onboard video recording from rtsp sources, such as BlueOS' Mavlink Camera Manager and IP cameras.q

\n

Changelog

\n

0.0.14: Published on BlueOS extension repository

", "support": "https://github.com/Williangalvani/BlueOS-Dashcam/issues", "requirements": "core >= 1.4", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Binds": [ "/usr/blueos/extensions/dashcam/videos/:/home/blueos/videos/", "/root/.config/blueos/ardupilot-manager/firmware/logs/:/home/blueos/logs/", "/usr/blueos/extensions/dashcam/settings/:/home/blueos/settings/" ], "CpuQuota": 100000, "CpuPeriod": 100000, "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.19": { "identifier": "8914e67e-4468-5d5e-9841-b1f6b88392a9", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-Dashcam/", "images": [ { "expanded_size": 433705809, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:30c23226938e04dccb2f894cf1b896dd71a38aa17e2e55dd16e36c120315a268" }, { "expanded_size": 488330971, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6f157bc4ea18cd18d039d3a771851d0fcaf1c1b06e12eaa9421e802d6cce345c" }, { "expanded_size": 516686512, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:474c5910ada2372cc581e9641f46c1c5185b2a2531cf56636288841e3271a77a" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "media" ], "extra_links": {}, "tag": "v0.0.19", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-Dashcam/issues", "requirements": "core >= 1.4", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Binds": [ "/usr/blueos/extensions/dashcam/videos/:/home/blueos/videos/", "/root/.config/blueos/ardupilot-manager/firmware/logs/:/home/blueos/logs/", "/usr/blueos/extensions/dashcam/settings/:/home/blueos/settings/" ], "CpuQuota": 100000, "CpuPeriod": 100000, "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.15": { "identifier": "ff8df0a4-81e6-58ae-98a9-9797135be5c6", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-Dashcam/", "images": [ { "expanded_size": 433705809, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:30c23226938e04dccb2f894cf1b896dd71a38aa17e2e55dd16e36c120315a268" }, { "expanded_size": 488330971, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6f157bc4ea18cd18d039d3a771851d0fcaf1c1b06e12eaa9421e802d6cce345c" }, { "expanded_size": 516686512, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:474c5910ada2372cc581e9641f46c1c5185b2a2531cf56636288841e3271a77a" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "media" ], "extra_links": {}, "tag": "v0.0.15", "docs": null, "readme": "

DashCam

\n

This extension allows onboard video recording from rtsp sources, such as BlueOS' Mavlink Camera Manager and IP cameras.q

\n

Changelog

\n

0.0.14: Published on BlueOS extension repository

", "support": "https://github.com/Williangalvani/BlueOS-Dashcam/issues", "requirements": "core >= 1.4", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Binds": [ "/usr/blueos/extensions/dashcam/videos/:/home/blueos/videos/", "/root/.config/blueos/ardupilot-manager/firmware/logs/:/home/blueos/logs/", "/usr/blueos/extensions/dashcam/settings/:/home/blueos/settings/" ], "CpuQuota": 100000, "CpuPeriod": 100000, "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.14": { "identifier": "af95efff-75d6-599d-8e63-b901664ea8cf", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-Dashcam/", "images": [ { "expanded_size": 437653621, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:91753e42ba9dbad79328c1a16b27b595094da0e13d481949370aa0bd146dc30a" }, { "expanded_size": 482406990, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a48bd3a3f5bb75bf39fefe6d9998c8d61cb080ee7b01d9a84b78530d5f9c114d" }, { "expanded_size": 510565170, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ca35206285af9093e2a530ab267237c0102df314961e02ea9ccabe215f55394f" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "media" ], "extra_links": {}, "tag": "v0.0.14", "docs": null, "readme": "

DashCam

\n

This extension allows onboard video recording from rtsp sources, such as BlueOS' Mavlink Camera Manager and IP cameras.q

\n

Changelog

\n

0.0.14: Published on BlueOS extension repository

", "support": "https://github.com/Williangalvani/BlueOS-Dashcam/issues", "requirements": "core >= 1.4", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Binds": [ "/usr/blueos/extensions/dashcam/videos/:/home/blueos/videos/", "/root/.config/blueos/ardupilot-manager/firmware/logs/:/home/blueos/logs/", "/usr/blueos/extensions/dashcam/settings/:/home/blueos/settings/" ], "CpuQuota": 100000, "CpuPeriod": 100000, "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.3": { "identifier": "b09f67e5-d404-58cd-889d-4647fd2740e1", "type": "other", "website": null, "images": [ { "expanded_size": 437631440, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ed9b0450f242a59977e4d70e072a5a86ab30fc48d57cfe84cb4aab7f3750bbab" }, { "expanded_size": 482380721, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6d838d03d3ed3addc5b0c264576db2a9095be4f51960466b9655419aae973e68" }, { "expanded_size": 510543921, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:04e3c37186fee779626cb991ca16ad8ab34675dc44886bd3f16e204a8f6378fa" } ], "authors": [], "filter_tags": [], "extra_links": {}, "tag": "v0.0.3", "docs": null, "readme": null, "support": null, "requirements": null, "company": null, "permissions": null } }, "repo_info": { "downloads": 10405, "last_updated": "2025-12-18T15:25:02.403031Z", "date_registered": "2025-03-27T12:48:44.862676Z" } }, { "identifier": "williangalvani.example1", "name": "Example 1", "website": "https://github.com/Williangalvani/BlueOS-examples/", "docker": "williangalvani/blueos-example1", "description": "Hello World", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/example1/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.1": { "identifier": "bf421443-99eb-57ac-8de4-190157c0c680", "type": "example", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 46802192, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:34d8e4576adb26c8db7a338b595cf01857da21c3a67f14796f0e503b4f0edfbd" }, { "expanded_size": 41255503, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:268ee547e87fc7b4c8c6dbd360a1e8a1c10228164e2458d9220b6a06155a8951" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "f01e3e89-4f93-5c96-8b6a-5526699bebb1", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 47258668, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:97920e5f8f44d815b8b6f6f2a662e1721e902b43005dd91464c08c56b8e8c66b" }, { "expanded_size": 41443310, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:95166dcc031a759856cc1527021093c83261c5a32a18f2329e48e0f3e2c419c0" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core > 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 84232, "last_updated": "2023-05-02T10:57:42.905818Z", "date_registered": "2022-09-20T18:15:02.068256Z" } }, { "identifier": "williangalvani.example4", "name": "Example 4", "website": "https://github.com/Williangalvani/BlueOS-examples/", "docker": "williangalvani/blueos-example4", "description": "Vuetify + Persistent backend", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/example4/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.1": { "identifier": "8971d6d2-1339-51d2-b015-bbf05e4f3df9", "type": "example", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 53713690, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:bec0e1bddc646ba1c477fd5767b29302aaff8d38057287949eac54d4815c7c3e" }, { "expanded_size": 45092996, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:361210e8893ca847ed186885daf3cf6f06c6a455182e7bb90b8622dbe7945c91" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "f9b3fffd-adc2-5d3a-aa12-3c4bdc3220f4", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 51091856, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:d6515e5ff51293fd362e88bec27dd55b0451dea1bf541d263f15faa8410a0756" }, { "expanded_size": 45276851, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:78487700a46fb9c5c27c1738690fdd3e02d9f3a52416355b040ea405b773e4e5" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 86837, "last_updated": "2023-05-02T10:59:21.807562Z", "date_registered": "2022-09-19T20:13:46.735725Z" } }, { "identifier": "williangalvani.ntrip", "name": "Ntrip", "website": "https://github.com/Williangalvani/BlueOS-Ntrip-extension", "docker": "williangalvani/blueos-ntrip-extension", "description": "Ntrip extension for BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/ntrip/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v0.0.5": { "identifier": "beb4275d-7629-5949-a19a-4afa683c7dac", "type": "other", "website": null, "images": [ { "expanded_size": 95713109, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:d96c5bde63b3074daddf96d29d74b9ba1feb4652dc7735e4d5aec735b93a49e9" }, { "expanded_size": 101480439, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2eb1340615cbca10d59551365400be28057d240b97234f0eacbfe205a134ef45" }, { "expanded_size": 101499343, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:7ab27c426feba8bc47679746d894c6a34a550766985a2232a614552f7a33689e" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/BlueOS-Ntrip-extension" }, "tag": "v0.0.5", "docs": null, "readme": "

BlueOS RTK NTRIP Extension

\n

A BlueOS Extension that provides Real-Time Kinematic (RTK) positioning capabilities by connecting to NTRIP casters and forwarding correction data to the autopilot via mavlink2rest.

\n

Features

\n\n

What is RTK?

\n

Real-Time Kinematic positioning is a satellite navigation technique that provides centimeter-level positioning accuracy by using correction data from a base station. This extension:

\n
    \n
  1. Connects to an NTRIP caster (Network Transport of RTCM via Internet Protocol)
  2. \n
  3. Receives RTCM correction messages from a nearby base station
  4. \n
  5. Forwards these corrections to your vehicle's GPS via mavlink2rest
  6. \n
  7. Enables high-precision positioning for autonomous operations
  8. \n
\n

Local Development & Testing

\n

Quick Start

\n
    \n
  1. \n

    Install Dependencies:\n bash\n pip install -r requirements.txt

    \n
  2. \n
  3. \n

    Run the Extension:\n bash\n cd app\n python main.py

    \n
  4. \n
  5. \n

    Open Web Interface: Navigate to http://localhost:8000

    \n
  6. \n
\n

Command Line Options

\n

bash\npython main.py --help

\n

Available options:\n- --mavlink2rest-url: mavlink2rest service URL (default: http://localhost:6040)\n- --host: Host to bind to (default: 0.0.0.0)\n- --port: Port to bind to (default: 8000)\n- --config-file: Configuration file path (default: rtk_config.json)\n- --reload: Enable auto-reload for development

\n

Example Usage

\n

```bash

\n

Run with custom mavlink2rest URL

\n

python main.py --mavlink2rest-url http://192.168.1.100:6040

\n

Run on different port with auto-reload

\n

python main.py --port 9000 --reload

\n

Use custom config file

\n

python main.py --config-file /path/to/my_config.json\n```

\n

BlueOS Deployment

\n
    \n
  1. Install the Extension through the BlueOS Extension Manager
  2. \n
  3. Configure NTRIP Settings:
  4. \n
  5. Enter your NTRIP caster URL (e.g., rtk2go.com:2101)
  6. \n
  7. Specify the mountpoint for your region
  8. \n
  9. Add username/password if required
  10. \n
  11. Configure mavlink2rest URL (usually http://host.docker.internal:6040)
  12. \n
  13. Enable the connection
  14. \n
  15. Monitor Status: View real-time connection status and data reception
  16. \n
  17. Verify GPS: Check your vehicle's GPS status for RTK fix
  18. \n
\n

Configuration

\n

The extension stores configuration in a local JSON file with the following parameters:

\n\n

Configuration is automatically saved to config/rtk_config.json (or the file specified with --config-file).

\n

Docker Volume Mounting

\n

For persistent configuration across container restarts, you can mount the config directory:

\n

```bash

\n

Mount config directory for persistent settings

\n

docker run -v ./config:/app/config blueos-rtk-extension

\n

Or when building/running locally

\n

python main.py --config-file config/rtk_config.json\n```

\n

This allows you to:\n- Persist settings across container updates\n- Edit configuration files directly on the host\n- Backup and restore configurations easily

\n

Requirements

\n\n

Supported NTRIP Services

\n

This extension works with any standard NTRIP caster, including:

\n\n

File Structure

\n

```\napp/\n\u251c\u2500\u2500 main.py # Main application\n\u251c\u2500\u2500 pyproject.toml # Python package configuration\n\u251c\u2500\u2500 config/ # Configuration directory\n\u2502 \u2514\u2500\u2500 rtk_config.json # Settings file (created automatically)\n\u2514\u2500\u2500 static/\n \u251c\u2500\u2500 index.html # Web interface\n \u2514\u2500\u2500 register_service # BlueOS service registration

\n

requirements.txt # Dependencies for local development\nlogs/ # Log files (created automatically)\n```

\n

Troubleshooting

\n

Connection Issues

\n

If the NTRIP connection fails:

\n
    \n
  1. Verify your NTRIP caster URL and credentials
  2. \n
  3. Check internet connectivity
  4. \n
  5. Ensure the mountpoint is valid for your location
  6. \n
  7. Review the error messages in the status section
  8. \n
\n

Local Development

\n

If you encounter issues running locally:

\n
    \n
  1. Ensure all dependencies are installed: pip install -r requirements.txt
  2. \n
  3. Check that the mavlink2rest service is running (if testing with real hardware)
  4. \n
  5. Verify firewall settings aren't blocking the ports
  6. \n
  7. Check the console output and log files in the logs/ directory
  8. \n
\n

BlueOS Deployment

\n

For BlueOS-specific issues:

\n
    \n
  1. Ensure the mavlink2rest URL is set to http://host.docker.internal:6040
  2. \n
  3. Check that the extension has network access
  4. \n
  5. Verify the autopilot is configured to accept GPS corrections
  6. \n
\n

Development

\n

Built with:\n- Backend: Python with Litestar framework\n- Frontend: Modern HTML/CSS/JavaScript\n- Communication: REST API with mavlink2rest integration\n- Storage: Local JSON file for configuration\n- Logging: Rotating file logs for debugging

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ntrip-to-mavlink/config:/app/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.4": { "identifier": "cbb9405a-63aa-5bb9-8e49-e1ba000cf98f", "type": "other", "website": null, "images": [ { "expanded_size": 95566756, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9a896c426f607e00ffd1524bc6dc7f321787ae43f66bcafb510ffa48db9d0b04" }, { "expanded_size": 101214638, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:7f7b2022feef048e14aef5749c3b0e221b82bad8d81722c4804d6892709da2ae" }, { "expanded_size": 101243953, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:611fca2896527396d213b6bb553ed963c1895ca3df072ac7ac4c0ed03e5d5b89" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/BlueOS-Ntrip-extension" }, "tag": "v0.0.4", "docs": null, "readme": "

BlueOS RTK NTRIP Extension

\n

A BlueOS Extension that provides Real-Time Kinematic (RTK) positioning capabilities by connecting to NTRIP casters and forwarding correction data to the autopilot via mavlink2rest.

\n

Features

\n\n

What is RTK?

\n

Real-Time Kinematic positioning is a satellite navigation technique that provides centimeter-level positioning accuracy by using correction data from a base station. This extension:

\n
    \n
  1. Connects to an NTRIP caster (Network Transport of RTCM via Internet Protocol)
  2. \n
  3. Receives RTCM correction messages from a nearby base station
  4. \n
  5. Forwards these corrections to your vehicle's GPS via mavlink2rest
  6. \n
  7. Enables high-precision positioning for autonomous operations
  8. \n
\n

Local Development & Testing

\n

Quick Start

\n
    \n
  1. \n

    Install Dependencies:\n bash\n pip install -r requirements.txt

    \n
  2. \n
  3. \n

    Run the Extension:\n bash\n cd app\n python main.py

    \n
  4. \n
  5. \n

    Open Web Interface: Navigate to http://localhost:8000

    \n
  6. \n
\n

Command Line Options

\n

bash\npython main.py --help

\n

Available options:\n- --mavlink2rest-url: mavlink2rest service URL (default: http://localhost:6040)\n- --host: Host to bind to (default: 0.0.0.0)\n- --port: Port to bind to (default: 8000)\n- --config-file: Configuration file path (default: rtk_config.json)\n- --reload: Enable auto-reload for development

\n

Example Usage

\n

```bash

\n

Run with custom mavlink2rest URL

\n

python main.py --mavlink2rest-url http://192.168.1.100:6040

\n

Run on different port with auto-reload

\n

python main.py --port 9000 --reload

\n

Use custom config file

\n

python main.py --config-file /path/to/my_config.json\n```

\n

BlueOS Deployment

\n
    \n
  1. Install the Extension through the BlueOS Extension Manager
  2. \n
  3. Configure NTRIP Settings:
  4. \n
  5. Enter your NTRIP caster URL (e.g., rtk2go.com:2101)
  6. \n
  7. Specify the mountpoint for your region
  8. \n
  9. Add username/password if required
  10. \n
  11. Configure mavlink2rest URL (usually http://host.docker.internal:6040)
  12. \n
  13. Enable the connection
  14. \n
  15. Monitor Status: View real-time connection status and data reception
  16. \n
  17. Verify GPS: Check your vehicle's GPS status for RTK fix
  18. \n
\n

Configuration

\n

The extension stores configuration in a local JSON file with the following parameters:

\n\n

Configuration is automatically saved to config/rtk_config.json (or the file specified with --config-file).

\n

Docker Volume Mounting

\n

For persistent configuration across container restarts, you can mount the config directory:

\n

```bash

\n

Mount config directory for persistent settings

\n

docker run -v ./config:/app/config blueos-rtk-extension

\n

Or when building/running locally

\n

python main.py --config-file config/rtk_config.json\n```

\n

This allows you to:\n- Persist settings across container updates\n- Edit configuration files directly on the host\n- Backup and restore configurations easily

\n

Requirements

\n\n

Supported NTRIP Services

\n

This extension works with any standard NTRIP caster, including:

\n\n

File Structure

\n

```\napp/\n\u251c\u2500\u2500 main.py # Main application\n\u251c\u2500\u2500 pyproject.toml # Python package configuration\n\u251c\u2500\u2500 config/ # Configuration directory\n\u2502 \u2514\u2500\u2500 rtk_config.json # Settings file (created automatically)\n\u2514\u2500\u2500 static/\n \u251c\u2500\u2500 index.html # Web interface\n \u2514\u2500\u2500 register_service # BlueOS service registration

\n

requirements.txt # Dependencies for local development\nlogs/ # Log files (created automatically)\n```

\n

Troubleshooting

\n

Connection Issues

\n

If the NTRIP connection fails:

\n
    \n
  1. Verify your NTRIP caster URL and credentials
  2. \n
  3. Check internet connectivity
  4. \n
  5. Ensure the mountpoint is valid for your location
  6. \n
  7. Review the error messages in the status section
  8. \n
\n

Local Development

\n

If you encounter issues running locally:

\n
    \n
  1. Ensure all dependencies are installed: pip install -r requirements.txt
  2. \n
  3. Check that the mavlink2rest service is running (if testing with real hardware)
  4. \n
  5. Verify firewall settings aren't blocking the ports
  6. \n
  7. Check the console output and log files in the logs/ directory
  8. \n
\n

BlueOS Deployment

\n

For BlueOS-specific issues:

\n
    \n
  1. Ensure the mavlink2rest URL is set to http://host.docker.internal:6040
  2. \n
  3. Check that the extension has network access
  4. \n
  5. Verify the autopilot is configured to accept GPS corrections
  6. \n
\n

Development

\n

Built with:\n- Backend: Python with Litestar framework\n- Frontend: Modern HTML/CSS/JavaScript\n- Communication: REST API with mavlink2rest integration\n- Storage: Local JSON file for configuration\n- Logging: Rotating file logs for debugging

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ntrip-to-mavlink/config:/app/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.3": { "identifier": "ac0c9a0b-eae2-5c9e-9884-141d4c8001b1", "type": "other", "website": null, "images": [ { "expanded_size": 102273157, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:dedc0ee55fe1577c1735987a91a7c8f5cdbd937642bf31c83245f9338eaf629c" }, { "expanded_size": 103004438, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:fd6e5ca8b772827a1f2589fc0f13a6852ce9c46e04516721f318366cbc05118a" }, { "expanded_size": 95711390, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:efc7460f2c83708cac6f6859ad7205dc91e09bcaebfc3270aad110f170a0f544" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/BlueOS-Ntrip-extension" }, "tag": "v0.0.3", "docs": null, "readme": "

BlueOS RTK NTRIP Extension

\n

A BlueOS Extension that provides Real-Time Kinematic (RTK) positioning capabilities by connecting to NTRIP casters and forwarding correction data to the autopilot via mavlink2rest.

\n

Features

\n\n

What is RTK?

\n

Real-Time Kinematic positioning is a satellite navigation technique that provides centimeter-level positioning accuracy by using correction data from a base station. This extension:

\n
    \n
  1. Connects to an NTRIP caster (Network Transport of RTCM via Internet Protocol)
  2. \n
  3. Receives RTCM correction messages from a nearby base station
  4. \n
  5. Forwards these corrections to your vehicle's GPS via mavlink2rest
  6. \n
  7. Enables high-precision positioning for autonomous operations
  8. \n
\n

Local Development & Testing

\n

Quick Start

\n
    \n
  1. \n

    Install Dependencies:\n bash\n pip install -r requirements.txt

    \n
  2. \n
  3. \n

    Run the Extension:\n bash\n cd app\n python main.py

    \n
  4. \n
  5. \n

    Open Web Interface: Navigate to http://localhost:8000

    \n
  6. \n
\n

Command Line Options

\n

bash\npython main.py --help

\n

Available options:\n- --mavlink2rest-url: mavlink2rest service URL (default: http://localhost:6040)\n- --host: Host to bind to (default: 0.0.0.0)\n- --port: Port to bind to (default: 8000)\n- --config-file: Configuration file path (default: rtk_config.json)\n- --reload: Enable auto-reload for development

\n

Example Usage

\n

```bash

\n

Run with custom mavlink2rest URL

\n

python main.py --mavlink2rest-url http://192.168.1.100:6040

\n

Run on different port with auto-reload

\n

python main.py --port 9000 --reload

\n

Use custom config file

\n

python main.py --config-file /path/to/my_config.json\n```

\n

BlueOS Deployment

\n
    \n
  1. Install the Extension through the BlueOS Extension Manager
  2. \n
  3. Configure NTRIP Settings:
  4. \n
  5. Enter your NTRIP caster URL (e.g., rtk2go.com:2101)
  6. \n
  7. Specify the mountpoint for your region
  8. \n
  9. Add username/password if required
  10. \n
  11. Configure mavlink2rest URL (usually http://host.docker.internal:6040)
  12. \n
  13. Enable the connection
  14. \n
  15. Monitor Status: View real-time connection status and data reception
  16. \n
  17. Verify GPS: Check your vehicle's GPS status for RTK fix
  18. \n
\n

Configuration

\n

The extension stores configuration in a local JSON file with the following parameters:

\n\n

Configuration is automatically saved to config/rtk_config.json (or the file specified with --config-file).

\n

Docker Volume Mounting

\n

For persistent configuration across container restarts, you can mount the config directory:

\n

```bash

\n

Mount config directory for persistent settings

\n

docker run -v ./config:/app/config blueos-rtk-extension

\n

Or when building/running locally

\n

python main.py --config-file config/rtk_config.json\n```

\n

This allows you to:\n- Persist settings across container updates\n- Edit configuration files directly on the host\n- Backup and restore configurations easily

\n

Requirements

\n\n

Supported NTRIP Services

\n

This extension works with any standard NTRIP caster, including:

\n\n

File Structure

\n

```\napp/\n\u251c\u2500\u2500 main.py # Main application\n\u251c\u2500\u2500 pyproject.toml # Python package configuration\n\u251c\u2500\u2500 config/ # Configuration directory\n\u2502 \u2514\u2500\u2500 rtk_config.json # Settings file (created automatically)\n\u2514\u2500\u2500 static/\n \u251c\u2500\u2500 index.html # Web interface\n \u2514\u2500\u2500 register_service # BlueOS service registration

\n

requirements.txt # Dependencies for local development\nlogs/ # Log files (created automatically)\n```

\n

Troubleshooting

\n

Connection Issues

\n

If the NTRIP connection fails:

\n
    \n
  1. Verify your NTRIP caster URL and credentials
  2. \n
  3. Check internet connectivity
  4. \n
  5. Ensure the mountpoint is valid for your location
  6. \n
  7. Review the error messages in the status section
  8. \n
\n

Local Development

\n

If you encounter issues running locally:

\n
    \n
  1. Ensure all dependencies are installed: pip install -r requirements.txt
  2. \n
  3. Check that the mavlink2rest service is running (if testing with real hardware)
  4. \n
  5. Verify firewall settings aren't blocking the ports
  6. \n
  7. Check the console output and log files in the logs/ directory
  8. \n
\n

BlueOS Deployment

\n

For BlueOS-specific issues:

\n
    \n
  1. Ensure the mavlink2rest URL is set to http://host.docker.internal:6040
  2. \n
  3. Check that the extension has network access
  4. \n
  5. Verify the autopilot is configured to accept GPS corrections
  6. \n
\n

Development

\n

Built with:\n- Backend: Python with Litestar framework\n- Frontend: Modern HTML/CSS/JavaScript\n- Communication: REST API with mavlink2rest integration\n- Storage: Local JSON file for configuration\n- Logging: Rotating file logs for debugging

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ntrip-to-mavlink/config:/app/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.0.2": { "identifier": "920f59c6-a093-5db4-a649-4e939ae982c6", "type": "other", "website": null, "images": [ { "expanded_size": 95703055, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:97f675b54608b213a7950de510615fb07fb97c4f592c16eefda2aacf2cf2351b" }, { "expanded_size": 102262147, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:654333cf4911829f6c19aae65bfc2e3c69fe0c576dcc47010ee9874da3e56e3d" }, { "expanded_size": 102999208, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a8cf323181f2e7d6c7299ebf65f4459309c47e4fdbdfbdcf66b720b0ea6586cc" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/williangalvani/BlueOS-Ntrip-extension" }, "tag": "v0.0.2", "docs": null, "readme": "

BlueOS RTK NTRIP Extension

\n

A BlueOS Extension that provides Real-Time Kinematic (RTK) positioning capabilities by connecting to NTRIP casters and forwarding correction data to the autopilot via mavlink2rest.

\n

Features

\n\n

What is RTK?

\n

Real-Time Kinematic positioning is a satellite navigation technique that provides centimeter-level positioning accuracy by using correction data from a base station. This extension:

\n
    \n
  1. Connects to an NTRIP caster (Network Transport of RTCM via Internet Protocol)
  2. \n
  3. Receives RTCM correction messages from a nearby base station
  4. \n
  5. Forwards these corrections to your vehicle's GPS via mavlink2rest
  6. \n
  7. Enables high-precision positioning for autonomous operations
  8. \n
\n

Local Development & Testing

\n

Quick Start

\n
    \n
  1. \n

    Install Dependencies:\n bash\n pip install -r requirements.txt

    \n
  2. \n
  3. \n

    Run the Extension:\n bash\n cd app\n python main.py

    \n
  4. \n
  5. \n

    Open Web Interface: Navigate to http://localhost:8000

    \n
  6. \n
\n

Command Line Options

\n

bash\npython main.py --help

\n

Available options:\n- --mavlink2rest-url: mavlink2rest service URL (default: http://localhost:6040)\n- --host: Host to bind to (default: 0.0.0.0)\n- --port: Port to bind to (default: 8000)\n- --config-file: Configuration file path (default: rtk_config.json)\n- --reload: Enable auto-reload for development

\n

Example Usage

\n

```bash

\n

Run with custom mavlink2rest URL

\n

python main.py --mavlink2rest-url http://192.168.1.100:6040

\n

Run on different port with auto-reload

\n

python main.py --port 9000 --reload

\n

Use custom config file

\n

python main.py --config-file /path/to/my_config.json\n```

\n

BlueOS Deployment

\n
    \n
  1. Install the Extension through the BlueOS Extension Manager
  2. \n
  3. Configure NTRIP Settings:
  4. \n
  5. Enter your NTRIP caster URL (e.g., rtk2go.com:2101)
  6. \n
  7. Specify the mountpoint for your region
  8. \n
  9. Add username/password if required
  10. \n
  11. Configure mavlink2rest URL (usually http://host.docker.internal:6040)
  12. \n
  13. Enable the connection
  14. \n
  15. Monitor Status: View real-time connection status and data reception
  16. \n
  17. Verify GPS: Check your vehicle's GPS status for RTK fix
  18. \n
\n

Configuration

\n

The extension stores configuration in a local JSON file with the following parameters:

\n\n

Configuration is automatically saved to config/rtk_config.json (or the file specified with --config-file).

\n

Docker Volume Mounting

\n

For persistent configuration across container restarts, you can mount the config directory:

\n

```bash

\n

Mount config directory for persistent settings

\n

docker run -v ./config:/app/config blueos-rtk-extension

\n

Or when building/running locally

\n

python main.py --config-file config/rtk_config.json\n```

\n

This allows you to:\n- Persist settings across container updates\n- Edit configuration files directly on the host\n- Backup and restore configurations easily

\n

Requirements

\n\n

Supported NTRIP Services

\n

This extension works with any standard NTRIP caster, including:

\n\n

File Structure

\n

```\napp/\n\u251c\u2500\u2500 main.py # Main application\n\u251c\u2500\u2500 pyproject.toml # Python package configuration\n\u251c\u2500\u2500 config/ # Configuration directory\n\u2502 \u2514\u2500\u2500 rtk_config.json # Settings file (created automatically)\n\u2514\u2500\u2500 static/\n \u251c\u2500\u2500 index.html # Web interface\n \u2514\u2500\u2500 register_service # BlueOS service registration

\n

requirements.txt # Dependencies for local development\nlogs/ # Log files (created automatically)\n```

\n

Troubleshooting

\n

Connection Issues

\n

If the NTRIP connection fails:

\n
    \n
  1. Verify your NTRIP caster URL and credentials
  2. \n
  3. Check internet connectivity
  4. \n
  5. Ensure the mountpoint is valid for your location
  6. \n
  7. Review the error messages in the status section
  8. \n
\n

Local Development

\n

If you encounter issues running locally:

\n
    \n
  1. Ensure all dependencies are installed: pip install -r requirements.txt
  2. \n
  3. Check that the mavlink2rest service is running (if testing with real hardware)
  4. \n
  5. Verify firewall settings aren't blocking the ports
  6. \n
  7. Check the console output and log files in the logs/ directory
  8. \n
\n

BlueOS Deployment

\n

For BlueOS-specific issues:

\n
    \n
  1. Ensure the mavlink2rest URL is set to http://host.docker.internal:6040
  2. \n
  3. Check that the extension has network access
  4. \n
  5. Verify the autopilot is configured to accept GPS corrections
  6. \n
\n

Development

\n

Built with:\n- Backend: Python with Litestar framework\n- Frontend: Modern HTML/CSS/JavaScript\n- Communication: REST API with mavlink2rest integration\n- Storage: Local JSON file for configuration\n- Logging: Rotating file logs for debugging

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ntrip-to-mavlink/config:/app/config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 2827, "last_updated": "2025-10-06T16:30:12.858404Z", "date_registered": "2025-06-05T16:32:39.297165Z" } }, { "identifier": "williangalvani.example3", "name": "Example 3", "website": "https://github.com/Williangalvani/BlueOS-examples/", "docker": "williangalvani/blueos-example3", "description": "Basic Vuetify example", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/example3/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.1": { "identifier": "57e56b68-d5bf-563e-bf9b-faf46092a91d", "type": "example", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 48803918, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6fb2d75b10ba570f679fe19d5352d6bc86ec3ddcf81d44ab62e98e48fd68fc17" }, { "expanded_size": 43257229, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2ea73258ad7653091c56983f2b3484d3239ac1a13009cb5f8f337ba509162b29" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "e27b2b4c-10f0-5277-9045-0f1482e0a2bc", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 49260395, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0d15d91d5b3612b3f6c1feda490b605ca7ef8ad16cb4dfb622eb12581d8d4b72" }, { "expanded_size": 43445037, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:abed773725bdd4e3facaf6884dde2bad1a25f479d3b3697af3480a2549da3cd1" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 92114, "last_updated": "2023-05-02T10:58:42.102603Z", "date_registered": "2022-09-19T20:24:45.273155Z" } }, { "identifier": "williangalvani.usbip", "name": "USBIP", "website": "https://github.com/Williangalvani/blueos-usbip", "docker": "williangalvani/blueos-extension-usbip", "description": "USBIP extension for extending USB over IP", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/usbip/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.4": { "identifier": "1045feeb-4a10-504c-9039-b5c707f9735d", "type": "device-integration", "website": "https://github.com/Williangalvani/BlueOS-UsbIp", "images": [ { "expanded_size": 50885297, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6c62693850e139fa6a944541f04e071f482a9a6ffdca615a81d8865a4f08bd2f" }, { "expanded_size": 45361150, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:81b18bba6d769a73106932cbc5fbf37452b18c5dc9673e0cb68a937160eab4c4" }, { "expanded_size": 49265251, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0c50cfa414ac3b51cdfe9931d77e7913330d129d0a1c13fad76cbcd40f3f2502" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.4", "docs": null, "readme": "

USB/IP extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Linux:

\n

```

\n

load modules

\n

sudo modprobe usbip-core\nsudo modprobe vhci-hcd

\n

list devices

\n

sudo usbip list --remote blueos.local

\n

connect to device with bus 1-1.3

\n

sudo usbip attach --remote blueos.local --busid 1-1.3

\n

```

\n

Windows

\n

Download the 3.6 dev release from https://github.com/cezanne/usbip-win and follow the \"Client\" instructions there.\nThe new \"ude\" driver seemed to work for me.

\n

Changelog:

\n", "support": "https://github.com/Williangalvani/BlueOS-UsbIp", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "v1.0.3": { "identifier": "c9ab154d-70e1-5174-a91c-d8b0e84bcbc2", "type": "device-integration", "website": "https://github.com/Williangalvani/BlueOS-UsbIp", "images": [ { "expanded_size": 46300711, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:77fa8d6dc7271ea52c9b220744212c7d2c501b44053c99cf57242f915abee571" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.3", "docs": null, "readme": "

USB/IP extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Linux:

\n

```

\n

load modules

\n

sudo modprobe usbip-core\nsudo modprobe vhci-hcd

\n

list devices

\n

sudo usbip list --remote blueos.local

\n

connect to device with bus 1-1.3

\n

sudo usbip attach --remote blueos.local --busid 1-1.3

\n

```

\n

Windows

\n

Download the 3.6 dev release from https://github.com/cezanne/usbip-win and follow the \"Client\" instructions there.\nThe new \"ude\" driver seemed to work for me.

\n

Changelog:

\n", "support": "https://github.com/Williangalvani/BlueOS-UsbIp", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.2": { "identifier": "0ba7d41c-99ac-5b5b-a8a5-0571103fef2b", "type": "device-integration", "website": "https://github.com/Williangalvani/BlueOS-UsbIp", "images": [ { "expanded_size": 46300676, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:71bd46130f38fea1c6d6c7d91104100c760a5f254689c4f329fa1731b136990d" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.2", "docs": null, "readme": "

USB/IP extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Linux:

\n

```

\n

load modules

\n

sudo modprobe usbip-core\nsudo modprobe vhci-hcd

\n

list devices

\n

sudo usbip list --remote blueos.local

\n

connect to device with bus 1-1.3

\n

sudo usbip attach --remote blueos.local --busid 1-1.3

\n

```

\n

Windows

\n

Download the 3.6 dev release from https://github.com/cezanne/usbip-win and follow the \"Client\" instructions there.\nThe new \"ude\" driver seemed to work for me.

\n

Changelog:

\n", "support": "https://github.com/Williangalvani/BlueOS-UsbIp", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.1": { "identifier": "21940e28-c01a-5daa-836d-4d56fdbcf7d9", "type": "device-integration", "website": "https://github.com/Williangalvani/BlueOS-UsbIp", "images": [ { "expanded_size": 60355857, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6b4d81bb368a7899b106009a3d2a717144c471dde7dfaa22e61aa4512b987887" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "communication" ], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "

USB/IP extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

To use, first pull it in blueos:

\n

red-pill\nsudo docker run -d --net=host --name=blueos-example1 --restart=unless-stopped williangalvani/blueos-extension-usbip:latest

\n

Client

\n

Linux:

\n

```

\n

load modules

\n

sudo modprobe usbip-core\nsudo modprobe vhci-hcd

\n

list devices

\n

sudo usbip list --remote blueos.local

\n

connect to device with bus 1-1.3

\n

sudo usbip attach --remote blueos.local --busid 1-1.3

\n

```

\n

Windows

\n

Download the 3.6 dev release from https://github.com/cezanne/usbip-win and follow the \"Client\" instructions there.\nThe new \"ude\" driver seemed to work for me.

", "support": "https://github.com/Williangalvani/BlueOS-UsbIp", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.0": { "identifier": "66cc7571-3976-551f-9ccc-0159c33fab96", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-UsbIp", "images": [ { "expanded_size": 60460083, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2721824e101a3d6853d17b1a743020d7048eb55677c4243293366ec4930ff7fa" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "

USB/IP extension

\n

This exposes usb devices via IP, which can be used in another client device

\n

Client

\n

Linux:

\n

```

\n

load modules

\n

sudo modprobe usbip-core\nsudo modprobe vhci-hcd

\n

list devices

\n

sudo usbip list --remote blueos.local

\n

connect to device with bus 1-1.3

\n

sudo usbip attach --remote blueos.local --busid 1-1.3

\n

```

\n

Windows

\n

Download the 3.6 dev release from https://github.com/cezanne/usbip-win and follow the \"Client\" instructions there.\nThe new \"ude\" driver seemed to work for me.

", "support": "https://github.com/Williangalvani/BlueOS-UsbIp", "requirements": "core > 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } } }, "repo_info": { "downloads": 48601, "last_updated": "2026-01-29T19:40:05.327436Z", "date_registered": "2022-09-07T02:56:18.778263Z" } }, { "identifier": "williangalvani.example5", "name": "Example 5", "website": "https://github.com/Williangalvani/BlueOS-examples/", "docker": "williangalvani/blueos-example5", "description": "GPIO PWM Control", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/example5/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.1": { "identifier": "aee11d25-295e-5fc7-8d75-c8cffa35172d", "type": "example", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 80249985, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:f04b7ccea49448746dd544f11e17947a153673cf5342d6c74d8f6dbbf9ceea0d" }, { "expanded_size": 70567870, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e87fa5aae685c797296502f1623cfd032ea3d6c9f7d8e241a382537e0fa0ca85" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "interaction" ], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "1f032679-8e6f-5837-9743-39ff07613067", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 66852214, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:71889390624dbe62a6f63094ca917da18182d55235ea7804c72209b995587970" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 7912, "last_updated": "2023-05-02T11:19:18.145903Z", "date_registered": "2022-10-12T18:15:01.290841Z" } }, { "identifier": "williangalvani.example2", "name": "Example 2", "website": "https://github.com/Williangalvani/BlueOS-examples/", "docker": "williangalvani/blueos-example2", "description": "Static HTML plus MAVLink data", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/example2/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/williangalvani/company_logo.png", "versions": { "v1.0.1": { "identifier": "39888870-c652-52f0-9ead-0640b21526bc", "type": "example", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 46802665, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:49131f6972848dea860471a4215687166319a4b105422aa1dd6b75a74610d588" }, { "expanded_size": 41255976, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:0b5b5c4341d46ae89398405d5eef61fed9ed6f86923451ff0135c855f53a247a" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "76dbd22b-c7a4-566e-9342-5871c558bd88", "type": "other", "website": "https://github.com/Williangalvani/BlueOS-examples/", "images": [ { "expanded_size": 47259138, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:330ef2defbb59580f2c5324d03c968b7f43e4073c3a3cc3e4c9620d5ce9d4781" }, { "expanded_size": 41443780, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:213f70bf5f5252d251419b90fa83845496cb18068c7c6d20399292614d5b0061" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "No README available", "support": "https://github.com/Williangalvani/BlueOS-examples/", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 89097, "last_updated": "2023-05-02T10:58:10.407395Z", "date_registered": "2022-09-19T20:25:33.201236Z" } }, { "identifier": "jmrobotics.jm-connect", "name": "JM Connect", "website": "https://www.jmrobotics.no", "docker": "maphstra/jm-connect-blueos", "description": "JM Connect Extension for BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/jmrobotics/jm-connect/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/jmrobotics/company_logo.png", "versions": { "0.2.2": { "identifier": "e1875128-8230-5138-b12a-ccff882ebcf8", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 124964433, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fb0c59a1c46c52bad2998864734b79ae2939a1f76ddddbd504ebe1463406801b" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.2", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.2.2-linux-arm64": { "identifier": "2fb4fa3d-3a58-5380-bcc7-071584b64c27", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 124964433, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fb0c59a1c46c52bad2998864734b79ae2939a1f76ddddbd504ebe1463406801b" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.2-linux-arm64", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.2.1": { "identifier": "5155c614-f7f3-57ec-b73b-900f3cdcadf0", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 125206028, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6791a60687d5857771cdb26bd8c31d621a4b039663c9c044131b03a18dc61dc6" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.1", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.2.1-linux-arm64": { "identifier": "07be3538-cf7e-599e-ac30-93df14808a98", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 125206028, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6791a60687d5857771cdb26bd8c31d621a4b039663c9c044131b03a18dc61dc6" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.1-linux-arm64", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.2.0": { "identifier": "d5fe8c03-c92c-5a23-a309-6fd6387360df", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 125197240, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e302422bd7b32bfebf5da4434a37aa13588c3683e74924dcd196e90ee330c69e" }, { "expanded_size": 135664177, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:9979d4391cd664d7e55eae1b726bc35d1da8c259b0594058c1698a68d49d9414" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.0", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.2.0-linux-arm64": { "identifier": "a8041ab8-30d7-5184-8101-ad296b44ec87", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 135664177, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:9979d4391cd664d7e55eae1b726bc35d1da8c259b0594058c1698a68d49d9414" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.0-linux-arm64", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.2.0-linux-arm-v7": { "identifier": "0f125985-02d3-55c0-9a90-2b5a37029c07", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 125197240, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e302422bd7b32bfebf5da4434a37aa13588c3683e74924dcd196e90ee330c69e" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.0-linux-arm-v7", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.9": { "identifier": "70f8b6be-ca32-5fa2-ae42-ca914a319ae4", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 125463812, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ce56c79c16aff426c8c80ef3a17724547a7377ffacdef3d159d502c2ee89112a" }, { "expanded_size": 135915224, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:17d9c43bc2868f914593a453a5d8c509ed576323e03727f06b5e5164f9d7226f" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.9", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.9-linux-arm64": { "identifier": "f76d5165-8089-5c64-93f4-e06ea50657ee", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 135915224, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:17d9c43bc2868f914593a453a5d8c509ed576323e03727f06b5e5164f9d7226f" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.9-linux-arm64", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.9-linux-arm-v7": { "identifier": "7750d014-2159-5613-b5f4-103cbedcdf60", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 125463812, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ce56c79c16aff426c8c80ef3a17724547a7377ffacdef3d159d502c2ee89112a" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.9-linux-arm-v7", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.8": { "identifier": "bacd090a-56a3-5ff5-80cc-9a1ecc66c2e6", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 139907444, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5fddf3cd759e6b3578ceb7b386da9ef2d760dcb3f8ea9d9877268b29fd96a51e" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.8", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.7": { "identifier": "08ebdb20-d1ee-5013-8b14-aebd673adef5", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 138667765, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b5523947d1f8edbf6cb655969e2d53d78767007686d08dd60198acd4f1158219" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.7", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.6": { "identifier": "a4b4f76c-05cc-5d2e-a10e-0f0c4f83ac56", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 138671180, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6bf09bdef42b75b4b336aa8477b79f1ee68f2b538b59553f26635f30e2d3d9e7" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.6", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.5": { "identifier": "daf1d7e7-6dc5-5812-b6fe-67232ff1b411", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 136304617, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:002194270ed9fbbe8cac68fa8c7d66e65e96bf5f0ca882afc1c739c4bedba43c" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.5", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.4": { "identifier": "9e541814-e629-5f4a-8694-cbbc0cf59a34", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 136206402, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:4461f49763ed0adb0881470d76cc821acf0a7ededd41c97806bf1430a2e8cad6" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.4", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.3": { "identifier": "fbc14f43-9f80-5186-9066-a2c52764f83d", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 136206392, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:198a4b4657e5c37caf15757ce6670877cc040f498d9704b79fde54711b50f4de" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.3", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.2": { "identifier": "2104939c-c7c6-52a3-82b0-0c7834424a34", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 136201023, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2249b4f0a6f10851cd51ce43b9323afe9cfe3c9ff759d9c035815a861d14aea0" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.2", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config", "/var/run/docker.sock:/var/run/docker.sock" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.1": { "identifier": "42117cfd-19c3-5487-8c86-0c64ac5904a8", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 97327764, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:93eae4b370102f9b40f1df916e30e29f62ece3a6bfd0d9f30a229f00c65f1fe3" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.1", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.1.0": { "identifier": "eaeca9bf-4fdd-5338-b35c-df1cc1255a46", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 96709262, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:541ec3d6cdba151cdb6498ef8f1af4af800d9ecccc8563eedd96d539a1c29157" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.0", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.0.9": { "identifier": "79a9df48-e803-535b-8859-5b0d7c4ac99b", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 96709149, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fe37249ef731d10570ae5364036104c7ec2ce3ae84acfed3f9e8ae8d4b2c0215" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.9", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.0.8": { "identifier": "8ea1115d-e017-5e93-b643-31269c341f4d", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 97114085, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f4ca957ef8684090eb19561193c745a318565bac884edc9b7c936464867dcb3b" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.8", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.0.7": { "identifier": "e2484dd2-e2ba-5ac4-9d91-7d717f618332", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 96633870, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:29567855a636348f71a638082d335c6229f095d74548b4b4d42ce5752a1a77fe" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.7", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.0.6": { "identifier": "d859a0f3-6010-5e77-bf71-73b51788130e", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 94349911, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2d7302f32d74adfdebe98b99b9c2f9b596ab356be2deaa163185bae96d922002" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.6", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.0.5": { "identifier": "5567cfc0-0947-559b-b69c-3a0eb7ebba12", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 94350096, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:df13934cdb1e4d0bd6b3dd5f1d94856866de13e5e1e246a817243510eab945b7" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.5", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } }, "0.0.4": { "identifier": "fbde77c2-558e-5654-9fba-00720ba5ca46", "type": "other", "website": "https://www.jmrobotics.no", "images": [ { "expanded_size": 98481422, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a383b8e2f0888f718c52bc92f99d4180bce41e3d9d44ef6886b642e6ae2d1719" } ], "authors": [ { "name": "Mads Peter Hammer Strand", "email": "mads@jmrobotics.no" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.4", "docs": "", "readme": "No README available", "support": "https://www.jmrobotics.no", "requirements": "core >= 1", "company": { "about": "", "name": "JM Robotics", "email": "support@jmrobotics.no" }, "permissions": { "Env": [ "SERVER_URL=https://software.jmrobotics.no/server/", "I2CBUS=6", "ROV_ID=" ], "ExposedPorts": { "1337/tcp": {}, "8137/tcp": {}, "1338/tcp": {} }, "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/root/.config/jm:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "1337/tcp": [ { "HostPort": "1337" } ], "8137/tcp": [ { "HostPort": "8137" } ], "1338/tcp": [ { "HostPort": "1338" } ] } } } } }, "repo_info": { "downloads": 49328, "last_updated": "2025-08-11T09:16:41.507357Z", "date_registered": "2023-05-02T08:49:43.621656Z" } }, { "identifier": "waterlinked.sonar", "name": "Water Linked 3D Sonar", "website": "https://github.com/waterlinked/BlueOS-Sonar-Extension", "docker": "waterlinked/blueos-sonar-extension", "description": "Web interface for Water Linked 3D Sonar configuration and visualization with automatic IP discovery", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/waterlinked/sonar/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/waterlinked/company_logo.png", "versions": { "v1.0.0": { "identifier": "f1f592d1-d5e5-5a59-9479-a079003654e7", "type": "device-integration", "website": "https://github.com/waterlinked/BlueOS-Sonar-Extention", "images": [ { "expanded_size": 70303568, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b9ce6d7dfb850fef0105c5f2c2fae5af34f56f0db95f000e6fbce3c57d254cf6" } ], "authors": [ { "name": "Water Linked", "email": "support@waterlinked.com" } ], "filter_tags": [ "3dsonar", "point-cloud", "waterlinked" ], "extra_links": {}, "tag": "v1.0.0", "docs": null, "readme": "No README available", "support": "https://github.com/waterlinked/BlueOS-Sonar-Extention/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Water Linked", "email": "support@waterlinked.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 8106, "last_updated": "2025-04-10T13:01:02.286385Z", "date_registered": "2025-03-27T14:05:41.061437Z" } }, { "identifier": "waterlinked.ugps", "name": "Water Linked UGPS", "website": "https://github.com/waterlinked/blueos-ugps-extension", "docker": "waterlinked/blueos-ugps-extension", "description": "Provides location with GPS and SBL acoustic positioning", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/waterlinked/ugps/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/waterlinked/company_logo.png", "versions": { "v1.0.7": { "identifier": "0c5721ac-c2ba-5fbd-ad3e-e2c0fe1ef646", "type": "device-integration", "website": "https://github.com/waterlinked/blueos-ugps-extension", "images": [ { "expanded_size": 42737259, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c6cdac88c362326fcceb817befaf78f9b687c16f64d73299e6e3614757c36ca0" } ], "authors": [ { "name": "Water Linked", "email": "support@waterlinked.com" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.7", "docs": null, "readme": "

BlueOS Extension for Water Linked Underwater GPS

\n

State

\n

This extension has no UI page (so it creates no listing in the sidebar of BlueOS).

\n

Functionality

\n

Assuming the UGPS is detected and working, this service\n* forwards MAVLink data from Mavlink2Rest like depth to the UGPS Topside (to enable it to function)\n* forwards locator position from UGPS Topside to MAVLink (message GPS_INPUT)\n * the autopilot should send corresponding GPS_RAW_INT messages to the topside computer (QGroundControl)\n * the autopilot sends regular GLOBAL_POSITION_INT messages to the topside computer with its filtered position estimates\n* forwards topside position from UGPS Topside to UDP port 14401 with NMEA to be received by QGroundControl.\n * This feature is experimental and does not work reliably with all versions of QGroundControl.

\n

Information flow triggered by this extension:\n\"Information

\n

If you do not have access to a UGPS system, you can use UGPS_HOST=https://demo.waterlinked.com , which simulates a UGPS system with its API.

\n

Hardware documentation can be found at https://waterlinked.github.io/underwater-gps/integration/bluerov-integration/

\n

How to install

\n

There are 2 options

\n

Preferred: Use the extensions manager in BlueOS > 1.1.0

\n
    \n
  • Click Extensions > Extensions Manager
  • \n
  • Install this extension
  • \n
\n

Configuration is usually not required, but can be done by editing the extension in the \"Installed\" tab of the Extensions Manager.

\n

Editing requires Pirate Mode\nto be enabled, after which the \"Edit\" button can be used. Copy the Original Settings contents\ninto the Custom settings box, and (if necessary) change the IPs/Host addresses, e.g. to use the demo server:\n{\n \"NetworkMode\": \"host\",\n \"Env\": [\n \"UGPS_HOST=https://demo.waterlinked.com\",\n \"MAVLINK_HOST=http://192.168.2.2:6040\",\n \"QGC_IP=192.168.2.1\",\n \"EXTRA_ARGS=\"\n ]\n}

\n

Use the \"View Logs\" button to check the status.

\n

For developers: Build docker image yourself and start it

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal)

\n

install git, clone this repository and run\n```

\n

build the docker image

\n

docker build -t waterlinked/blueos-ugps-extension:latest .

\n

see all images

\n

docker images

\n

running the plugin

\n

either: run detached

\n

with standard command

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or: in interactive shell to get debug output

\n

docker run -it waterlinked/blueos-ugps-extension:latest /bin/bash

\n

with standard command

\n

cd app && python main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

cd app && python main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

end interactive session

\n

exit

\n

then stop/start/look at log with

\n

docker stop [container-id]\ndocker start [container-id]\ndocker log [container-id] # if run detached

\n

if you are a developer, upload the docker image to registry with (replace \"latest\" with desired tag)

\n

docker login -u waterlinked\ndocker push waterlinked/blueos-ugps-extension:latest\n```

", "support": "https://github.com/waterlinked/blueos-ugps-extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Water Linked", "email": "support@waterlinked.com" }, "permissions": { "NetworkMode": "host", "Env": [ "UGPS_HOST=http://192.168.2.94", "MAVLINK_HOST=http://192.168.2.2:6040", "QGC_IP=192.168.2.1", "EXTRA_ARGS=" ] } }, "v1.0.7-beta.5": { "identifier": "ec530e8b-3edb-5204-8ec3-7ab95a2548aa", "type": "device-integration", "website": "https://github.com/waterlinked/blueos-ugps-extension", "images": [ { "expanded_size": 45409796, "platform": { "architecture": "arm", "variant": "v5", "os": "linux" }, "digest": "sha256:a3e5dd741d7c259f42e53ae660aaba0a4c4ea809bac829a8bf7ddf9f08488027" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.7-beta.5", "docs": null, "readme": "No README available", "support": "https://github.com/waterlinked/blueos-ugps-extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Water Linked", "email": "support@waterlinked.com" }, "permissions": { "NetworkMode": "host", "Env": [ "UGPS_HOST=http://192.168.2.94", "MAVLINK_HOST=http://192.168.2.2:6040", "QGC_IP=192.168.2.1", "EXTRA_ARGS=" ] } }, "v1.0.7-beta.2": { "identifier": "01960110-d3b4-5ec9-b831-fc6ed5504c76", "type": "device-integration", "website": "https://github.com/waterlinked/blueos-ugps-extension", "images": [ { "expanded_size": 42996077, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:827ca6180221c282ced1a2c58e02388c1cf1b4eb87cca1604355a90bf0b81293" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.7-beta.2", "docs": null, "readme": "

BlueOS Extension for Water Linked Underwater GPS

\n

State

\n

This extension has no UI page (so it creates no listing in the sidebar of BlueOS).

\n

Functionality

\n

Assuming the UGPS is detected and working, this service\n* forwards MAVLink data from Mavlink2Rest like depth to the UGPS Topside (to enable it to function)\n* forwards locator position from UGPS Topside to MAVLink (message GPS_INPUT)\n * the autopilot should send corresponding GPS_RAW_INT messages to the topside computer (QGroundControl)\n * the autopilot sends regular GLOBAL_POSITION_INT messages to the topside computer with its filtered position estimates\n* forwards topside position from UGPS Topside to UDP port 14401 with NMEA to be received by QGroundControl.\n * This feature is experimental and does not work reliably with all version of QGroundControl.

\n

If you do not have access to a UGPS system, you can use UGPS_HOST=https://demo.waterlinked.com , which simulates a UGPS system with its API.

\n

Hardware documentation can be found at https://waterlinked.github.io/underwater-gps/integration/bluerov-integration/

\n

How to install

\n

There are 2 options

\n

Preferred: Use the extensions manager in BlueOS > 1.1.0

\n
    \n
  • Click Extensions > Extensions Manager
  • \n
  • Install this extension
  • \n
\n

Configuration is usually not required, but can be done by editing the extension in the \"Installed\" tab of the Extensions Manager.

\n

Editing requires Pirate Mode\nto be enabled, after which the \"Edit\" button can be used. Copy the Original Settings contents\ninto the Custom settings box, and (if necessary) change the IPs/Host addresses, e.g. to use the demo server:\n{\n \"NetworkMode\": \"host\",\n \"Env\": [\n \"UGPS_HOST=https://demo.waterlinked.com\",\n \"MAVLINK_HOST=http://192.168.2.2:6040\",\n \"QGC_IP=192.168.2.1\",\n \"EXTRA_ARGS=\"\n ]\n}

\n

Use the \"View Logs\" button to check the status.

\n

For developers: Build docker image yourself and start it

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal)

\n

install git, clone this repository and run\n```

\n

build the docker image

\n

docker build -t waterlinked/blueos-ugps-extension:latest .

\n

see all images

\n

docker images

\n

running the plugin

\n

either: run detached

\n

with standard command

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or: in interactive shell to get debug output

\n

docker run -it waterlinked/blueos-ugps-extension:latest /bin/bash

\n

with standard command

\n

cd app && python main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

cd app && python main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

end interactive session

\n

exit

\n

then stop/start/look at log with

\n

docker stop [container-id]\ndocker start [container-id]\ndocker log [container-id] # if run detached

\n

if you are a developer, upload the docker image to registry with (replace \"latest\" with desired tag)

\n

docker login -u waterlinked\ndocker push waterlinked/blueos-ugps-extension:latest\n```

", "support": "https://github.com/waterlinked/blueos-ugps-extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Water Linked", "email": "support@waterlinked.com" }, "permissions": { "NetworkMode": "host", "Env": [ "UGPS_HOST=http://192.168.2.94", "MAVLINK_HOST=http://192.168.2.2:6040", "QGC_IP=192.168.2.1", "EXTRA_ARGS=" ] } }, "v1.0.6": { "identifier": "a16ae9c5-eeb8-5263-8b1c-0401b0a1e2da", "type": "device-integration", "website": "https://github.com/waterlinked/blueos-ugps-extension", "images": [ { "expanded_size": 44982471, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:d1c746dac6246d215f00966754129fb78375c1e98bba95d9a0f3a165a2522805" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.6", "docs": null, "readme": "

BlueOS Extension for Water Linked Underwater GPS

\n

State

\n

This extension is currently in development. It has no UI page (so creates no listing in the sidebar of BlueOS).

\n

Functionality

\n

Assuming the UGPS is detected and working this service\n* forwards MAVLink data from Mavlink2Rest like depth to the UGPS Topside (to enable it to function)\n* forwards locator position from UGPS Topside to MAVLink (message GPS_INPUT)\n * the autopilot should send corresponding GPS_RAW_INT messages to the topside computer (QGroundControl)\n * the autopilot sends regular GLOBAL_POSITION_INT messages to the topside computer with its filtered position estimates\n* forwards topside position from UGPS Topside to UDP port 14401 with NMEA to be received by QGroundControl.

\n

If you do not have access to a UGPS system, you can use UGPS_HOST=https://demo.waterlinked.com , which simulates a UGPS system with its API.

\n

Hardware documentation can be found at https://waterlinked.github.io/underwater-gps/integration/bluerov-integration/

\n

How to install

\n

There are 2 options

\n

Use the extensions manager in BlueOS 1.1.0

\n
    \n
  • Click Extensions > Extensions Manager
  • \n
  • Install this extension
  • \n
\n

Configuration is usually not required, but can be done by editing the extension in the \"Installed\" tab of the Extensions Manager.

\n

Editing requires Pirate Mode\nto be enabled, after which the \"Edit\" button can be used. Copy the Original Settings contents\ninto the Custom settings box, and (if necessary) change the IPs/Host addresses, e.g. to use the demo server:\n{\n \"NetworkMode\": \"host\",\n \"Env\": [\n \"UGPS_HOST=https://demo.waterlinked.com\",\n \"MAVLINK_HOST=http://192.168.2.2:6040\",\n \"QGC_IP=192.168.2.1\",\n \"EXTRA_ARGS=\"\n ]\n}

\n

Use the \"View Logs\" button to check the status.

\n

Build docker image yourself and start it

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal)

\n

install git, clone this repository and run\n```

\n

build the docker image

\n

docker build -t waterlinked/blueos-ugps-extension:latest .

\n

see all images

\n

docker images

\n

running the plugin

\n

either: run detached

\n

with standard command

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or: in interactive shell to get debug output

\n

docker run -it waterlinked/blueos-ugps-extension:latest /bin/bash

\n

with standard command

\n

cd app && python main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

cd app && python main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

end interactive session

\n

exit

\n

then stop/start/look at log with

\n

docker stop [container-id]\ndocker start [container-id]\ndocker log [container-id] # if run detached

\n

if you are a developer, upload to registry with (replace latest with desired tag)

\n

docker login -u waterlinked\ndocker push waterlinked/blueos-ugps-extension:latest\n```

", "support": "https://github.com/waterlinked/blueos-ugps-extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Water Linked", "email": "support@waterlinked.com" }, "permissions": { "NetworkMode": "host", "Env": [ "UGPS_HOST=http://192.168.2.94", "MAVLINK_HOST=http://192.168.2.2:6040", "QGC_IP=192.168.2.1", "EXTRA_ARGS=" ] } }, "v1.0.4": { "identifier": "07593b5f-33d9-512b-92e7-bde2b70e0c1a", "type": "other", "website": "https://github.com/waterlinked/blueos-ugps-extension", "images": [ { "expanded_size": 43100109, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:55811587b48ae3f980fa069e27d74c11a98567bd141eb2cb29cd3a0a43c39526" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.4", "docs": "", "readme": "

BlueOS Extension for Water Linked Underwater GPS

\n

State

\n

This extension is currently in development. It has no UI page (so creates no listing in the sidebar of BlueOS).

\n

Functionality

\n

Assuming the UGPS is detected and working this service\n* forwards MAVLink data from Mavlink2Rest like depth to the UGPS Topside (to enable it to function)\n* forwards locator position from UGPS Topside to MAVLink (message GPS_INPUT)\n * the autopilot should send corresponding GPS_RAW_INT messages to the topside computer (QGroundControl)\n * the autopilot sends regular GLOBAL_POSITION_INT messages to the topside computer with its filtered position estimates\n* forwards topside position from UGPS Topside to UDP port 14401 with NMEA to be received by QGroundControl (implemented, but currently not tested)

\n

If you do not have access to a UGPS system, you can use UGPS_HOST=https://demo.waterlinked.com , which simulates a UGPS system with its API.

\n

Hardware documentation can be found at https://waterlinked.github.io/underwater-gps/integration/bluerov-integration/

\n

How to install

\n

There are 2 options

\n

Use the extensions manager in BlueOS 1.1.0

\n
    \n
  • Click Extensions > Extensions Manager
  • \n
  • Install this extension
  • \n
\n

Configuration is usually not required, but can be done by editing the extension in the \"Installed\" tab of the Extensions Manager.

\n

Editing requires Pirate Mode\nto be enabled, after which the \"Edit\" button can be used. Copy the Original Settings contents\ninto the Custom settings box, and (if necessary) change the IPs/Host addresses:\n\"UGPS_HOST=http://192.168.2.94\",\n \"MAVLINK_HOST=http://192.168.2.2:6040\",\n \"QGC_IP=192.168.2.1\"

\n

Use the \"View Logs\" button to check the status.

\n

Build docker image yourself and start it

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal)

\n

install git, clone this repository and run\n```

\n

build the docker image

\n

docker build -t waterlinked/blueos-ugps-extension:latest .

\n

see all images

\n

docker images

\n

running the plugin

\n

either: run detached

\n

with standard command

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

docker run -d --net=host waterlinked/blueos-ugps-extension:latest python app/main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or: in interactive shell to get debug output

\n

docker run -it waterlinked/blueos-ugps-extension:latest /bin/bash

\n

with standard command

\n

cd app && python main.py --ugps_host http://192.168.2.94 --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

or with demo server

\n

cd app && python main.py --ugps_host https://demo.waterlinked.com --mavlink_host http://192.168.2.2:6040 --qgc_ip 192.168.2.1

\n

end interactive session

\n

exit

\n

then stop/start/look at log with

\n

docker stop [container-id]\ndocker start [container-id]\ndocker log [container-id] # if run detached

\n

if you are a developer, upload to registry with (replace latest with desired tag)

\n

docker login -u waterlinked\ndocker push waterlinked/blueos-ugps-extension:latest\n```

", "support": "https://github.com/waterlinked/blueos-ugps-extension", "requirements": "core >= 1", "company": { "about": "", "name": "Blue Robotics / Water Linked", "email": "support@bluerobotics.com / support@waterlinked.com" }, "permissions": { "NetworkMode": "host", "Env": [ "UGPS_HOST=http://192.168.2.94", "MAVLINK_HOST=http://192.168.2.2:6040", "QGC_IP=192.168.2.1" ] } } }, "repo_info": { "downloads": 12935, "last_updated": "2024-10-16T08:28:28.588962Z", "date_registered": "2023-04-18T13:14:56.444696Z" } }, { "identifier": "deepwaterexploration.dwe_os_2", "name": "DWE OS 2.0", "website": "https://github.com/DeepwaterExploration/DWE_OS_2", "docker": "deepwaterexploration/dwe_os_2", "description": "Web-based driver and software interface for DWE.ai cameras", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/deepwaterexploration/dwe_os_2/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/deepwaterexploration/company_logo.png", "versions": { "v0.5.1-asic": { "identifier": "3400c2ef-956b-54e4-ab07-f4e1593263a6", "type": "device-integration", "website": null, "images": [ { "expanded_size": 412449373, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:61ca0181df553eefc3a7300faa38d0d8cfee8ad2a40b616a4176fe67648ec8c9" } ], "authors": [ { "name": "Brandon Stevens", "email": "support@dwe.ai" } ], "filter_tags": [ "cameras", "dwe-ai", "exporehd", "stellarhd", "deepwater-exploration" ], "extra_links": {}, "tag": "v0.5.1-asic", "docs": null, "readme": "

DWE_OS 2.0

\n

DWE_OS is an optional piece of software \u2014 designed to run on underwater systems \u2014 that allows for extended functionality of DeepWater Exploration cameras. It provides out-of-the-box camera streaming and customization features, minimizing the development time typically required for subsea camera integration.

\n

\"DWE_OS\"

\n

For more information, please see our documentation site.

", "support": "https://dwe.ai/pages/contact", "requirements": null, "company": { "about": "", "name": "DeepWater Exploration", "email": "support@dwe.ai" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/sys/class/video4linux:/sys/class/video4linux", "/usr/blueos/userdata/dwe_os_2:/settings", "/dev:/dev" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.5.0-arm64": { "identifier": "cd698ddd-2853-5ffb-937a-7b24c9d41e94", "type": "device-integration", "website": null, "images": [ { "expanded_size": 402919657, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:b42d9c9b3825a4449c8b8efed0a64a087c85ecf5a11895be7a6f437654070f3f" } ], "authors": [ { "name": "Brandon Stevens", "email": "support@dwe.ai" } ], "filter_tags": [ "cameras", "dwe-ai", "exporehd", "stellarhd", "deepwater-exploration" ], "extra_links": {}, "tag": "v0.5.0-arm64", "docs": null, "readme": "

DWE_OS 2.0

\n

DWE_OS is an optional piece of software \u2014 designed to run on underwater systems \u2014 that allows for extended functionality of DeepWater Exploration cameras. It provides out-of-the-box camera streaming and customization features, minimizing the development time typically required for subsea camera integration.

\n

\"DWE_OS\"

\n

For more information, please see our documentation site.

", "support": "https://dwe.ai/pages/contact", "requirements": null, "company": { "about": "", "name": "DeepWater Exploration", "email": "support@dwe.ai" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/sys/class/video4linux:/sys/class/video4linux", "/usr/blueos/userdata/dwe_os_2:/settings", "/dev:/dev" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.4.3": { "identifier": "f357bdef-fcd1-5851-895b-fcb1ac63117b", "type": "device-integration", "website": null, "images": [ { "expanded_size": 370445121, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:3278b8a0abb470f2b69f400fa4269c635f49069a13a21f50fbdb90823a0313d6" } ], "authors": [ { "name": "Brandon Stevens", "email": "support@dwe.ai" } ], "filter_tags": [ "cameras", "dwe-ai", "exporehd", "stellarhd", "deepwater-exploration" ], "extra_links": {}, "tag": "v0.4.3", "docs": null, "readme": "

DWE_OS 2.0

\n

DWE_OS is an optional piece of software \u2014 designed to run on underwater systems \u2014 that allows for extended functionality of DeepWater Exploration cameras. It provides out-of-the-box camera streaming and customization features, minimizing the development time typically required for subsea camera integration.

\n

\"DWE_OS\"

\n

For more information, please see our documentation site.

", "support": "https://dwe.ai/pages/contact", "requirements": null, "company": { "about": "", "name": "DeepWater Exploration", "email": "support@dwe.ai" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/sys/class/video4linux:/sys/class/video4linux", "/usr/blueos/userdata/dwe_os_2:/settings", "/dev:/dev" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.4.3-blueos": { "identifier": "27502449-4909-5055-ae73-923014149e95", "type": "device-integration", "website": null, "images": [ { "expanded_size": 376564891, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:31868a37aea7d6ebcac625644afaaa5c6dd67ea28575818b2d9658987093fc83" } ], "authors": [ { "name": "Brandon Stevens", "email": "support@dwe.ai" } ], "filter_tags": [ "cameras", "dwe-ai", "exporehd", "stellarhd", "deepwater-exploration" ], "extra_links": {}, "tag": "v0.4.3-blueos", "docs": null, "readme": "

DWE_OS 2.0

\n

DWE_OS is an optional piece of software \u2014 designed to run on underwater systems \u2014 that allows for extended functionality of DeepWater Exploration cameras. It provides out-of-the-box camera streaming and customization features, minimizing the development time typically required for subsea camera integration.

\n

\"DWE_OS\"

\n

For more information, please see our documentation site.

", "support": "https://dwe.ai/pages/contact", "requirements": null, "company": { "about": "", "name": "DeepWater Exploration", "email": "support@dwe.ai" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/sys/class/video4linux:/sys/class/video4linux", "/usr/blueos/userdata/dwe_os_2:/settings", "/dev:/dev" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.4.2-blueos": { "identifier": "1fb63ce3-09f3-528b-8dea-a63a5e16313d", "type": "device-integration", "website": null, "images": [ { "expanded_size": 375587336, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:98597305c3257d6dc846ee363b20380a4bdea72fe2c122c827c6579fcca40db9" } ], "authors": [ { "name": "Brandon Stevens", "email": "support@dwe.ai" } ], "filter_tags": [ "cameras", "dwe-ai", "exporehd", "stellarhd", "deepwater-exploration" ], "extra_links": {}, "tag": "v0.4.2-blueos", "docs": null, "readme": "

DWE_OS 2.0

\n

DWE_OS is an optional piece of software \u2014 designed to run on underwater systems \u2014 that allows for extended functionality of DeepWater Exploration cameras. It provides out-of-the-box camera streaming and customization features, minimizing the development time typically required for subsea camera integration.

\n

\"DWE_OS\"

\n

For more information, please see our documentation site.

", "support": "https://dwe.ai/pages/contact", "requirements": null, "company": { "about": "", "name": "DeepWater Exploration", "email": "support@dwe.ai" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/sys/class/video4linux:/sys/class/video4linux", "/usr/blueos/userdata/dwe_os_2:/settings", "/dev:/dev" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v0.4.1-beta-3.9": { "identifier": "8cc249c7-14ce-5852-8152-e8914c2eb486", "type": "device-integration", "website": null, "images": [ { "expanded_size": 378651240, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b7e116dc2e25bef77c88bf8761fd8ec74a698e5f9b6554a78e80ec0482fc380f" } ], "authors": [ { "name": "Brandon Stevens", "email": "support@dwe.ai" } ], "filter_tags": [ "cameras", "dwe-ai", "exporehd", "stellarhd", "deepwater-exploration" ], "extra_links": {}, "tag": "v0.4.1-beta-3.9", "docs": null, "readme": "

DWE_OS 2.0

\n

DWE_OS is an optional piece of software \u2014 designed to run on underwater systems \u2014 that allows for extended functionality of DeepWater Exploration cameras. It provides out-of-the-box camera streaming and customization features, minimizing the development time typically required for subsea camera integration.

\n

\"DWE_OS\"

\n

For more information, please see our documentation site.

", "support": "https://dwe.ai/pages/contact", "requirements": null, "company": { "about": "", "name": "DeepWater Exploration", "email": "support@dwe.ai" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/sys/class/video4linux:/sys/class/video4linux", "/usr/blueos/userdata/dwe_os_2:/settings", "/dev:/dev" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 9337, "last_updated": "2026-01-30T23:08:57.02872Z", "date_registered": "2024-10-28T21:23:12.958451Z" } }, { "identifier": "marinesitu.madrona", "name": "Madrona", "website": "https://gitlab.com/marinesitu-public/madrona/madrona", "docker": "marinesitu/madrona", "description": "Generic OAK-D camera management, configuration, and surveying software optimized for MarineSitu's underwater C3 camera line", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/marinesitu/madrona/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/marinesitu/company_logo.png", "versions": { "1.13.2": { "identifier": "3377d739-80b5-5041-b640-0c8ee8120a6f", "type": "device-integration", "website": "https://marinesitu.com", "images": [ { "expanded_size": 1353521957, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:87fd62a428df67d878b22421a38bbccc3c6639dd1f86c980cb00195df237cace" }, { "expanded_size": 1315657868, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:75396c20f7dec6d319640df51000907c1a3bbb9fe722f147ea56e1b2e27b5a8e" }, { "expanded_size": 1112706913, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5fa72dca5bfbe5f462b543864f8aa7852e13e5e135012f0a438faea27d9a625a" } ], "authors": [ { "name": "Jack Mead", "email": "jack@marinesitu.com" } ], "filter_tags": [ "luxonis", "oak-d", "stereo", "depth", "camera", "data-collection" ], "extra_links": {}, "tag": "1.13.2", "docs": null, "readme": "

Madrona

\n

\"Docs\"\n\"License:\n\"pipeline

\n

\"Madrona\"

\n

Camera management, configuration, and surveying software optimized for MarineSitu\u2019s underwater C3 camera line

\n

Madrona is a web-based tool for managing MarineSitu's C3 cameras. It allows users to configure, control, and stream video from the cameras in a variety of ways. Designed to be used with the BlueOS Cockpit for BlueROV or as a standalone application.

\n

For more information on hardware specifications, see the MarineSitu Website.

\n

For usage, see the official documentation at: Madrona Documenation.

\n

For installation and developing, see the Installation Guide.

\n

For building, versioning, and CI/CD release details see the Versioning.

\n

For releases details on new features and changes, see the ChangeLog.

\n

If you would like to contribute to the project by coding, requesting features, or submitting bug reports, please see the Contributing Guide.

", "support": "contact@marinesitu.com", "requirements": null, "company": { "about": "Leaders in Ocean Intelligence", "name": "MarineSitu Inc.", "email": "contact@marinesitu.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb", "/usr/blueos/extensions/madrona:/data/madrona" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } }, "1.13.1": { "identifier": "13a485eb-bff8-57a3-8a85-eb85becbed8c", "type": "device-integration", "website": "https://marinesitu.com", "images": [ { "expanded_size": 1353521945, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ae21ec4a87bcaea3319d1959dbf4cfe480d1f58a5fa31854f358e89973e9232c" }, { "expanded_size": 1315657864, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f991e57219df4907128d63d9bd18bde202cb1e2c30a7a97e54023c6a02e8db90" } ], "authors": [ { "name": "Jack Mead", "email": "jack@marinesitu.com" } ], "filter_tags": [ "luxonis", "oak-d", "stereo", "depth", "camera", "data-collection" ], "extra_links": {}, "tag": "1.13.1", "docs": null, "readme": "

Madrona

\n

\"Docs\"\n\"License:\n\"pipeline

\n

\"Madrona\"

\n

Camera management, configuration, and surveying software optimized for MarineSitu\u2019s underwater C3 camera line

\n

Madrona is a web-based tool for managing MarineSitu's C3 cameras. It allows users to configure, control, and stream video from the cameras in a variety of ways. Designed to be used with the BlueOS Cockpit for BlueROV or as a standalone application.

\n

For more information on hardware specifications, see the MarineSitu Website.

\n

For usage, see the official documentation at: Madrona Documenation.

\n

For installation and developing, see the Installation Guide.

\n

For building, versioning, and CI/CD release details see the Versioning.

\n

For releases details on new features and changes, see the ChangeLog.

\n

If you would like to contribute to the project by coding, requesting features, or submitting bug reports, please see the Contributing Guide.

", "support": "contact@marinesitu.com", "requirements": null, "company": { "about": "Leaders in Ocean Intelligence", "name": "MarineSitu Inc.", "email": "contact@marinesitu.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb", "/usr/blueos/extensions/madrona:/data/madrona" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } }, "1.13.0": { "identifier": "80b930d8-75a7-5c9b-9b32-cd0f48174128", "type": "device-integration", "website": "https://marinesitu.com", "images": [ { "expanded_size": 1315657766, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b07eed5af17f57d5f4fecf1bc1e8e8eef6804cfc8320f3d73fe3614d8f0234f6" } ], "authors": [ { "name": "Jack Mead", "email": "jack@marinesitu.com" } ], "filter_tags": [ "luxonis", "oak-d", "stereo", "depth", "camera", "data-collection" ], "extra_links": {}, "tag": "1.13.0", "docs": null, "readme": "

Madrona

\n

\"Docs\"\n\"License:\n\"pipeline

\n

\"Madrona\"

\n

Camera management, configuration, and surveying software optimized for MarineSitu\u2019s underwater C3 camera line

\n

Madrona is a web-based tool for managing MarineSitu's C3 cameras. It allows users to configure, control, and stream video from the cameras in a variety of ways. Designed to be used with the BlueOS Cockpit for BlueROV or as a standalone application.

\n

For more information on hardware specifications, see the MarineSitu Website.

\n

For usage, see the official documentation at: Madrona Documenation.

\n

For installation and developing, see the Installation Guide.

\n

For building, versioning, and CI/CD release details see the Versioning.

\n

For releases details on new features and changes, see the ChangeLog.

\n

If you would like to contribute to the project by coding, requesting features, or submitting bug reports, please see the Contributing Guide.

", "support": "contact@marinesitu.com", "requirements": null, "company": { "about": "Leaders in Ocean Intelligence", "name": "MarineSitu Inc.", "email": "contact@marinesitu.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb", "/usr/blueos/extensions/madrona:/data/madrona" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } }, "1.12.2": { "identifier": "28ae9281-4ea7-5dbe-ab87-1d5a6a67e6af", "type": "device-integration", "website": "https://marinesitu.com", "images": [ { "expanded_size": 1315657318, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:63d062ccd360ce56379a94ee20f9afb7ddbc495a6de68cff2b8108530b809cc0" } ], "authors": [ { "name": "Jack Mead", "email": "jack@marinesitu.com" } ], "filter_tags": [ "luxonis", "oak-d", "stereo", "depth", "camera", "data-collection" ], "extra_links": {}, "tag": "1.12.2", "docs": null, "readme": "

Madrona

\n

\"Docs\"\n\"License:\n\"pipeline

\n

\"Madrona\"

\n

Camera management, configuration, and surveying software optimized for MarineSitu\u2019s underwater C3 camera line

\n

Madrona is a web-based tool for managing MarineSitu's C3 cameras. It allows users to configure, control, and stream video from the cameras in a variety of ways. Designed to be used with the BlueOS Cockpit for BlueROV or as a standalone application.

\n

For more information on hardware specifications, see the MarineSitu Website.

\n

For usage, see the official documentation at: Madrona Documenation.

\n

For installation and developing, see the Installation Guide.

\n

For building, versioning, and CI/CD release details see the Versioning.

\n

For releases details on new features and changes, see the ChangeLog.

\n

If you would like to contribute to the project by coding, requesting features, or submitting bug reports, please see the Contributing Guide.

", "support": "contact@marinesitu.com", "requirements": null, "company": { "about": "Leaders in Ocean Intelligence", "name": "MarineSitu Inc.", "email": "contact@marinesitu.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb", "/usr/blueos/extensions/madrona:/data/madrona" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } }, "1.3.1": { "identifier": "7834d378-4876-5c97-8ab4-c19e96b567cb", "type": "device-integration", "website": "https://marinesitu.com", "images": [ { "expanded_size": 1353521945, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ae21ec4a87bcaea3319d1959dbf4cfe480d1f58a5fa31854f358e89973e9232c" }, { "expanded_size": 1315657864, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f991e57219df4907128d63d9bd18bde202cb1e2c30a7a97e54023c6a02e8db90" } ], "authors": [ { "name": "Jack Mead", "email": "jack@marinesitu.com" } ], "filter_tags": [ "luxonis", "oak-d", "stereo", "depth", "camera", "data-collection" ], "extra_links": {}, "tag": "1.3.1", "docs": null, "readme": "

Madrona

\n

\"Docs\"\n\"License:\n\"pipeline

\n

\"Madrona\"

\n

Camera management, configuration, and surveying software optimized for MarineSitu\u2019s underwater C3 camera line

\n

Madrona is a web-based tool for managing MarineSitu's C3 cameras. It allows users to configure, control, and stream video from the cameras in a variety of ways. Designed to be used with the BlueOS Cockpit for BlueROV or as a standalone application.

\n

For more information on hardware specifications, see the MarineSitu Website.

\n

For usage, see the official documentation at: Madrona Documenation.

\n

For installation and developing, see the Installation Guide.

\n

For building, versioning, and CI/CD release details see the Versioning.

\n

For releases details on new features and changes, see the ChangeLog.

\n

If you would like to contribute to the project by coding, requesting features, or submitting bug reports, please see the Contributing Guide.

", "support": "contact@marinesitu.com", "requirements": null, "company": { "about": "Leaders in Ocean Intelligence", "name": "MarineSitu Inc.", "email": "contact@marinesitu.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev/bus/usb:/dev/bus/usb", "/usr/blueos/extensions/madrona:/data/madrona" ], "DeviceCgroupRules": [ "c 189:* rmw" ] } } } }, "repo_info": { "downloads": 8718, "last_updated": "2026-02-05T20:04:31.590433Z", "date_registered": "2025-03-27T21:00:19.768813Z" } }, { "identifier": "bluerobotics.jupyter", "name": "Jupyter", "website": "https://github.com/BlueOS-Community/blueos-jupyter", "docker": "patrickelectric/blueos-jupyter", "description": "Code in Python directly in BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/jupyter/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "0.2.0": { "identifier": "b1da3c8a-0fc4-5070-bb26-9d15bed8056c", "type": "other", "website": null, "images": [ { "expanded_size": 1178493617, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f578a510f7a7dfaa8acf4cb331b9db23640e57ad6a1e4df15fc8da4db7d54d25" }, { "expanded_size": 1213335519, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:e3fad50b8a2b844e5e9727b2a5411e2b52e0f95b003ad147ccd22e8e591f8160" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "python", "ide", "development" ], "extra_links": {}, "tag": "0.2.0", "docs": null, "readme": "

blueos-jupyter

\n

Extension to start coding with python examples and create projects.

\n

To install your own libraries, use: pip install --user.

\n

Home directory (/root/) will be persistent besides pip local holder for user libraries.

\n

Libraries installed:\n- bluerobotics-ping\n- bluerobotics-navigator\n- plotly\n- pymavlink

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/extensions/jupyter/root:/root:rw", "/dev:/dev:rw" ], "NetworkMode": "host" } } }, "0.1.0": { "identifier": "0fe22234-421f-5549-86e1-44515ecc0c37", "type": "other", "website": null, "images": [ { "expanded_size": 946708030, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7fbecadd64e1b484f67a6cafda92c3f4b9630e277d83a4288196ebbf01af336f" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "python", "ide", "development" ], "extra_links": {}, "tag": "0.1.0", "docs": null, "readme": "

blueos-jupyter

\n

Extension to start coding with python examples and create projects.

\n

To install your own libraries, use: pip install --user.

\n

Home directory (/root/) will be persistent besides pip local holder for user libraries.

\n

Libraries installed:\n- bluerobotics-ping\n- bluerobotics-navigator\n- plotly\n- pymavlink

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/extensions/jupyter/root:/root:rw", "/dev:/dev:rw" ], "NetworkMode": "host" } } }, "0.0.0": { "identifier": "513dcee7-8d8e-5e4c-bcb6-71b7e15c44fd", "type": "other", "website": null, "images": [ { "expanded_size": 471140182, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:80fbf5feb15c6e9f08544727addaabdd28968cec1ea44ef70553026ed49b09d1" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, { "name": "Raul Trombin", "email": "raulvtormbin@gmail.com" } ], "filter_tags": [ "python", "ide", "development" ], "extra_links": {}, "tag": "0.0.0", "docs": null, "readme": "

blueos-jupyter

\n

Extension to start coding with python examples and create projects.

\n

To install your own libraries, use: pip install --user.

\n

Home directory (/root/) will be persistent besides pip local holder for user libraries.

\n

Libraries installed:\n- bluerobotics-ping\n- bluerobotics-navigator\n- plotly\n- pymavlink

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata/jupyter/root:/root:rw", "/dev:/dev:rw" ], "NetworkMode": "host" } } } }, "repo_info": { "downloads": 10243, "last_updated": "2024-11-02T19:51:27.122486Z", "date_registered": "2023-09-20T20:30:01.66808Z" } }, { "identifier": "bluerobotics.blueos-documentation", "name": "BR Documentation", "website": "https://github.com/bluerobotics/BlueRobotics-docs-Extension", "docker": "bluerobotics/blueos-docs", "description": "Blue Robotics software documentation", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/blueos-documentation/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "2025.2.8": { "identifier": "ec8b692a-9478-5cd2-b23e-bbd42a63ba10", "type": "other", "website": null, "images": [ { "expanded_size": 146399379, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:28fe2371a69dea5b5ab5908a76fa0741065d072429b9822b7f500edd36a8b825" }, { "expanded_size": 147154260, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a3b8029009e5bd950d679592a365a19398014f253cd0ce1d5e820a066a14314c" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, { "name": "ES-Alexander", "email": "sandman.esalexander@gmail.com" } ], "filter_tags": [ "development", "documentation" ], "extra_links": {}, "tag": "2025.2.8", "docs": null, "readme": "
\n\n
\n

A local, offline copy of the latest Blue Robotics software documentation.

\n

Includes documentation for BlueOS as well as Cockpit.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 1092, "last_updated": "2025-02-07T19:07:24.353007Z", "date_registered": "2025-02-06T15:30:31.14782Z" } }, { "identifier": "bluerobotics.node-red", "name": "Node-RED", "website": "https://github.com/BlueOS-Community/blueos-node-red", "docker": "patrickelectric/blueos-node-red", "description": "Low-code development tool for custom functionality", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/node-red/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "1.1.0": { "identifier": "4e50156a-1afb-592e-bf18-c159d7c126a0", "type": "other", "website": null, "images": [ { "expanded_size": 168829981, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7fd15626dafae013f3d3bfd8dde4a11003bbd9c1c1c1d9e63edaa765fba77542" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "node-red" ], "extra_links": {}, "tag": "1.1.0", "docs": null, "readme": "

BlueOS node-red

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n

It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/extensions/node-red:/data:rw", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.3": { "identifier": "f56aceb6-80df-59c4-8b04-ec4fb55ce680", "type": "other", "website": null, "images": [ { "expanded_size": 161203610, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:40af90b41e49214ab3cd2551871caae204e2d2bb484cf647c4b8b5db15936e1c" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "node-red" ], "extra_links": {}, "tag": "1.0.3", "docs": null, "readme": "

BlueOS node-red

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n

It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/extensions/node-red:/data:rw", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.2": { "identifier": "0b938a2c-503c-532d-8e70-842f4f0b4321", "type": "other", "website": null, "images": [ { "expanded_size": 157814612, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:20ce89d066804fc5c0207b71e7de85488abd1caccb011c21ee5a66d4df7f3130" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "node-red" ], "extra_links": {}, "tag": "1.0.2", "docs": null, "readme": "

BlueOS node-red

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n

It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata/node-red:/data:rw", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.1": { "identifier": "4fdb3c47-ee61-5322-a7ca-1e85416dbadc", "type": "other", "website": null, "images": [ { "expanded_size": 161234072, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7e898a24b188429bad6bb6d1229ae906a1447b732afbc69fe29b22a5b839af89" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "node-red" ], "extra_links": {}, "tag": "1.0.1", "docs": null, "readme": "

BlueOS node-red

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n

It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata/node-red:/data:rw", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.0": { "identifier": "10ae5964-f59f-53a9-8828-664dc3406aab", "type": "other", "website": null, "images": [ { "expanded_size": 161234072, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7e898a24b188429bad6bb6d1229ae906a1447b732afbc69fe29b22a5b839af89" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "node-red" ], "extra_links": {}, "tag": "1.0.0", "docs": null, "readme": "

BlueOS node-red

\n

Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.

\n

It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata/node-red:/data:rw", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 20173, "last_updated": "2024-07-29T21:22:46.380269Z", "date_registered": "2023-08-29T20:22:57.798237Z" } }, { "identifier": "bluerobotics.blueos-doris", "name": "DORIS", "website": "https://github.com/bluerobotics/blueos-doris-extension", "docker": "bluerobotics/blueos-doris", "description": "DORIS - Deep Ocean Research and Imaging System", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/blueos-doris/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "0.0.20": { "identifier": "38f47d7d-7370-5a9c-8fb7-41e544dd8d2c", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157303617, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:4c30c61aede1c08a879e0b70befbf1d385cd8e605e092732afdca5be26e6040c" }, { "expanded_size": 186640146, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0205aea275130324f6ecaed9a0cd2b059daacdd60d569a7d330ef872720a6455" }, { "expanded_size": 194249226, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:7adbc2181088e05dd18c8fb3928b7c9e7105382b98cbb888e7843162445c89f6" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.20", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris/configurations:/tmp/storage/configurations", "/usr/blueos/extensions/doris/notifications:/tmp/storage/notifications", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.19": { "identifier": "f8105290-94a4-5c17-9519-251229072b63", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157303836, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:62ee9ebfa213954b191aa6235626a683fb7ad0b0958738e23bde7a4ec19cc2a0" }, { "expanded_size": 186640439, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f5dfc99eca5b811a65c37f84187a651b3489efd039d427fb1c5395d32d3db7b4" }, { "expanded_size": 194249214, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:53d2f8921d481ab05e5a7375bc337e38609f3e707b98ecd032bc9769873732f5" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.19", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.18": { "identifier": "92551a83-aad8-5ea4-ac9e-d1a8be208b6c", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157288336, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:56666432b9b7d18d4875422559cca3684effa9a645b048f13c76a172c9188aad" }, { "expanded_size": 186632885, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5ac9c84c5f1ea7f308376e70bd703a7e244c0a0dabcf0eca8db34e787caaee5b" }, { "expanded_size": 194243910, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:2d730b91472a8e65c7b57e56edbded88b288c41a689089105d89fd6b1b3745ad" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.18", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.17": { "identifier": "656dcb80-d010-5cbc-891e-ddb2f8063d9a", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157288573, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:184aef2835f10501f4cfb8ee12d5b4c897e1d4ede46d498be53eb3c87f1393bc" }, { "expanded_size": 186633176, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:8d700eafef677a1ac35bd06cc88b97bd4060e89b3295a83fb64ae57307ac0f8e" }, { "expanded_size": 194244399, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:dbb7f22142e03c715059ab8864d3e387edb16ba0b07d8fe995e180b0bb3e6a53" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.17", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.16": { "identifier": "e80aeae8-75d8-5c81-9bb8-fa785d03f3f9", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157289196, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:da09c9af9e6515aec89b59b5932c619fc27faf536dcf53c093b850d04c2dfe07" }, { "expanded_size": 186632974, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:34590a00a98dc7fdbbc60c86644991398d5827f181ee7cee76cae4cb78fa7e49" }, { "expanded_size": 194244004, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b5a317126c4d85c1fad7b1af7b3f6653fe622afafa139cc2c258b60f8fcf6b7a" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.16", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.15": { "identifier": "37ad8e2c-4d43-54c7-aaf4-43ab41dd47ae", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157288714, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ea92f247e8b80f90e7fcbfadf7161b8b9a4fb6b0da9fc707553d6778d5a8a09d" }, { "expanded_size": 186633381, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:01d3b10c5c14449a18251c8725820aa2d4b2eee593ea963624c7ab88f1dabb37" }, { "expanded_size": 194243993, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:cc057649e3d7df10c8e0833af8a2a660fb088aac3dd8a326845317202d8e2345" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.15", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.14": { "identifier": "af96bb22-41e8-5dbf-a88b-da0556d5a7f3", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157288326, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:363f0f64dfe15db2df8970ae0e20f07640f26dd0a75a021dfc284b1818f53589" }, { "expanded_size": 186633167, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:88edc83089d90ddc12a205961dc8cac580b6b58c63a44392f6ee9346bb1ddb04" }, { "expanded_size": 194243807, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:437338e63f8e39fde0c64e0c28ff1636bbe074fffefe2946f2d20350e1accbd1" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.14", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/dev:/dev:rw", "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.13": { "identifier": "c71bd649-fa4a-5317-88df-c6bc36b469ad", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157288228, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:19df1d2529a7c8335f30af5931e0abff3528771e74a4690d5f3a995d02db285e" }, { "expanded_size": 186633364, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:36e0c0d9cf0df6c65910575e624a482141d7270af54974792e6a1ad9aaddcfe6" }, { "expanded_size": 194243568, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:cd1e99bc12da730c216f542efe9560c78971e34227e273def13d4ea583e55e70" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.13", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.12": { "identifier": "64dee75d-23e4-586b-9e72-7578e24bd61e", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157054481, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b85427c497c168220bafa99a1e383d9f8d71c32cd08e5705a685734ea730a9f9" }, { "expanded_size": 186399179, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:41a9b7e83fc912713c89931054787a39017695cf47225bef93ce1f63f12b46f1" }, { "expanded_size": 194011135, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:fc8e64f9eab26c25598a5230c6c9a252e133249e57194cb41a696a07501bc4f7" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.12", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/blueos/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.11": { "identifier": "d371452f-0b5d-5565-98ce-c185b2826d1f", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 157049191, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:75bf0b26c738a687ea152a90c2e05a93a3f60cb9f9c00d779321e187eb70ea9f" }, { "expanded_size": 186395173, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3e8c6faed94f8a0fbac4bc2ef625684cd53d4c662fce5483522581e4949c40e1" }, { "expanded_size": 194005860, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0ef797a3e0b0c03a5858ad531930a6d17d192f0cc2a15a8daab4bb84d3f64ae4" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.11", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.10": { "identifier": "07aa4f24-239e-5385-901d-0f7e35dfe614", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 156653052, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9ee91f92c8bc343f38aeea6de9621b079dd924774b4394de4a7775de92afac76" }, { "expanded_size": 185999438, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:e44a78068eb5943d64e4990ed4fed62136c2015a66e55e7f7eb2742b21ef19d6" }, { "expanded_size": 193609864, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:e03de996abca483ef5d78c5d4ff8b395da47c603322dfbf347995674bc3c275d" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.10", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.9": { "identifier": "bd867b5e-61c9-533b-bea4-89a4d90db044", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 156736721, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:63205850d699d89517f65a39ee8939674b956c36383ce269f61d7b603b4587d2" }, { "expanded_size": 186084094, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:531426e5c48b23d1fbd45acdce226342729dd9117c7243a1ea0a7433c6268856" }, { "expanded_size": 193694740, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:d3bd669bc3179ca84942e3ed7076b45db81fa0f2744a9adcd67e38776e07eb20" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.9", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.8": { "identifier": "ade93fe1-afdd-5d9f-8a7a-979aaafb3ede", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155521230, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:56e924717db1834429b96b2686ce24f04b6fcf8dedf2c4a20a12d0ad42c00c12" }, { "expanded_size": 184847196, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:009859182fff3d50868a7b8ac4d33d2a8bc2afccc9436f03cce397cf0073c808" }, { "expanded_size": 192470798, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:d851c8a17f905e4bde3ca7415098d66add3058ed935f126aa811caf6d4db473d" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.8", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.7": { "identifier": "7ef2927b-8cd4-5c4b-ac3c-d34fea1130d3", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155519986, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:94512a7deed8ab284351c4b63e1efac6ee2364ee380fd861c1ec91ece785829c" }, { "expanded_size": 184845837, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2fd0508d16ada644f1c303979cf8da49cfb4b58bc4de4b0670e986552f9bf4a8" }, { "expanded_size": 192469449, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:7466d2589f9193533c0c5c3e8e7931738ef84cc40e1b5360403b522bfbec780e" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.7", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.6": { "identifier": "007456a8-0ac8-5396-9643-62a7fc7c4552", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155517357, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:33b9b5717dc1cc7b12e41eaf3ebbdc4a8e4b7ef605f9bb3f64e9d9c1831de6c2" }, { "expanded_size": 184845055, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a0c1e70e727a245683567c3a11f2c5d88551d7804e89ad97935d2a34d49cb0df" }, { "expanded_size": 192467443, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:30171d63bc94affc10359fb8ba37ef97702d113a32cd7f25c2287aa346c31a40" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.6", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.5": { "identifier": "563ac639-9665-5af1-88ba-c3865c789dd5", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155518092, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7dd1d57a7ea32ee6ff3ed5fad8ff85d320063c2bf9977860e8cad0fe9fe54ebe" }, { "expanded_size": 184844175, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5fd08bcb7ec886c7447da0ebd8eac403f2c4820a6eeabde74e4595c4e9c63f91" }, { "expanded_size": 192467444, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:dcf2849064d6db3fbcbef95cfcea358b511acb6982198d02e8bc7e2b362eb1b5" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.5", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/ardupilot-manager/firmware:/tmp/storage/firmware", "/usr/blueos/extensions/doris:/tmp/storage/internal", "/usr/blueos/userdata/recorder:/tmp/storage/recorder" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.4": { "identifier": "3f5990af-c2fe-5b78-ad7a-f2a83bb50fc3", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155517444, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:0b0f921c426acfe7f6cd67110fc2c0501a7f049860fdb3f5c102f67a78700925" }, { "expanded_size": 184844349, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:c473b781c23075ee53e8f162406d84c31f78852b8a67d525b1e30ed6d6f8fd4a" }, { "expanded_size": 192467440, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:bbb580845c7c391c82fcc0e23b11c19e0a4ecd5219a07f91973e8700b08d039e" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.4", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/doris:/tmp/storage" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.3": { "identifier": "c2c27abf-5ecb-591b-9772-def85c2c737e", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155516823, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:20fbbe1856eaaa1a5b1215b18566d3ab9fae76ebd14b57a03ad10547d78191fb" }, { "expanded_size": 184844764, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:039f29ee9d2b7d94a2a73682231cf4f962ed185d55868fff4aa044255f3cdd8d" }, { "expanded_size": 192466414, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:33f2665c76df641d2cd0ac864207fd3c054cdb67159f51efb74daece06f61e68" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.3", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/doris:/tmp/storage" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.2": { "identifier": "0c086e55-7c02-5a6c-93ca-5004bfd7b89e", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 155087536, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:26b8220229b30511cb9bfe657411cf9f392119f6af7575f66c2ab60f33cac56b" }, { "expanded_size": 184411620, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:fddd34f608f00567ca1e032681f51563537a3a53a81ee6f199273733a6f893dc" }, { "expanded_size": 192035134, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:7012793838c798770eab56fe5661ca54dd4ee7a66cd986421a5b5910e921b631" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.2", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/doris:/data" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } }, "0.0.1": { "identifier": "84a705c2-8a9e-58f2-b570-9a9c16976c89", "type": "device-integration", "website": "https://bluerobotics.com", "images": [ { "expanded_size": 154635285, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:4a516b6c55dfce7d419c8177bad6db119cc2b087e125c0ec0aed296b6dc5e667" }, { "expanded_size": 183971519, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6cfb2f62bd6f4787be2f51ffe794f1884a0633c2bad9fc33f801b569bdf4a118" }, { "expanded_size": 191590036, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:552cad04d1a262520acfa4b40c9035c15e97b6d6a0c83178a8d323935abe637d" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/bluerobotics/blueos-doris-extension" }, "tag": "0.0.1", "docs": null, "readme": "

DORIS - Deep Ocean Research and Imaging System

\n

A BlueOS extension for deep ocean research and imaging operations.

\n

Features

\n
    \n
  • Real-time System Status: Battery, storage, and CPU monitoring
  • \n
  • Location Tracking: GPS position with satellite count
  • \n
  • Network Management: WiFi scanning and connection via BlueOS
  • \n
  • Mission Programming: Configure and manage research missions
  • \n
  • Sensor Configuration: Monitor and configure connected modules
  • \n
  • Media Management: Access captured images and video
  • \n
  • BlueOS Integration: Automatic service registration and discovery
  • \n
\n

Architecture

\n

blueos-doris-extension/\n\u251c\u2500\u2500 frontend/ # Vue 3 + TypeScript web interface\n\u251c\u2500\u2500 backend/ # Python + Robyn API server\n\u2502 \u2514\u2500\u2500 src/doris/\n\u2502 \u251c\u2500\u2500 routes/ # API endpoints\n\u2502 \u251c\u2500\u2500 services/ # BlueOS service integrations\n\u2502 \u2514\u2500\u2500 models/ # Pydantic data models\n\u251c\u2500\u2500 .github/workflows/ # CI/CD deployment\n\u251c\u2500\u2500 Dockerfile # BlueOS extension container\n\u2514\u2500\u2500 docker-compose.yml # Local development setup

\n

Quick Start

\n

Using Docker (Recommended)

\n

```bash

\n

Build the image

\n

docker build -t doris:latest .

\n

Run locally

\n

docker run -p 8095:8095 --add-host=host.docker.internal:host-gateway doris:latest\n```

\n

Then open http://localhost:8095

\n

Using Docker Compose

\n

```bash

\n

Edit docker-compose.yml to set your BlueOS IP if needed

\n

docker-compose up --build\n```

\n

Development

\n

Prerequisites

\n
    \n
  • Node.js 20+ with Yarn
  • \n
  • Python 3.11+
  • \n
  • Docker (for container builds)
  • \n
\n

Local Development

\n
    \n
  1. Start the frontend dev server:
  2. \n
\n

bash\ncd frontend\nyarn install\nyarn dev

\n
    \n
  1. Start the backend:
  2. \n
\n

bash\ncd backend\nuv sync\nuv run python -m doris.main

\n
    \n
  1. Configure BlueOS connection:
  2. \n
\n

Set the environment variable to point to your BlueOS instance:

\n

bash\nexport DORIS_BLUEOS_ADDRESS=http://192.168.2.2

\n

Building for Production

\n

```bash

\n

Build frontend

\n

cd frontend && yarn build

\n

Run backend (serves frontend)

\n

cd backend && python -m doris.main\n```

\n

Docker

\n

Build Optimization

\n

The Dockerfile is optimized for layer caching. Only changes to pyproject.toml will trigger a full rebuild (including uvloop compilation which takes ~10 minutes). Source code changes use cached dependencies for fast rebuilds (~30 seconds).

\n

Environment Variables

\n

| Variable | Default | Description |\n|----------|---------|-------------|\n| DORIS_BLUEOS_ADDRESS | http://host.docker.internal | BlueOS API base URL |\n| DORIS_PORT | 8095 | Backend server port |\n| DORIS_HOST | 0.0.0.0 | Backend bind address |

\n

BlueOS Extension

\n

When installed as a BlueOS extension, DORIS automatically connects to BlueOS services via host.docker.internal.

\n

Service Registration

\n

DORIS implements the /register_service endpoint for BlueOS Helper discovery. This allows BlueOS to:

\n
    \n
  • Display DORIS in the extensions menu
  • \n
  • Set up automatic nginx routing
  • \n
  • Show service metadata (icon, description, version)
  • \n
\n

Installation

\n

From Docker Hub:\n<username>/blueos-doris:latest

\n

From GitHub Container Registry:\nghcr.io/<owner>/blueos-doris:latest

\n
    \n
  1. In BlueOS, go to Extensions \u2192 Install from URL
  2. \n
  3. Enter one of the Docker image URLs above
  4. \n
  5. DORIS will appear in the extensions menu
  6. \n
\n

BlueOS APIs Used

\n

| Service | Port | Purpose |\n|---------|------|---------|\n| WiFi Manager | 9000 | Network scanning and connection |\n| MAVLink2Rest | 6040 | GPS, battery, and vehicle data |\n| Linux2Rest | 6030 | System information and storage |\n| Ping Service | 9110 | Sonar sensor data |\n| Camera Manager | 6020 | Camera control |\n| Bag of Holding | 9101 | Persistent storage |

\n

API Documentation

\n

When running, API documentation is available at:

\n
    \n
  • OpenAPI (Swagger): http://localhost:8095/docs
  • \n
\n

Key Endpoints

\n

| Method | Endpoint | Description |\n|--------|----------|-------------|\n| GET | /register_service | BlueOS service registration |\n| GET | /api/v1/health | Health check |\n| GET | /api/v1/system/status | System status (battery, storage, location) |\n| GET | /api/v1/network | Network information |\n| GET | /api/v1/sensors/modules | Connected modules |\n| GET | /api/v1/missions | List missions |\n| POST | /api/v1/missions | Create mission |\n| GET | /api/v1/media/files | List media files |

\n

Deployment

\n

GitHub Actions

\n

The repository includes automated deployment to both Docker Hub and GitHub Container Registry:

\n

```yaml

\n

.github/workflows/deploy.yml

\n

Triggers on push, pull request, and manual dispatch

\n

```

\n

Required Secrets:\n- DOCKER_USERNAME - Docker Hub username\n- DOCKER_PASSWORD - Docker Hub password/token

\n

GHCR uses the built-in GITHUB_TOKEN (no additional secrets needed).

\n

Manual Deployment

\n

```bash

\n

Build and tag

\n

docker build -t yourusername/blueos-doris:latest .

\n

Push to Docker Hub

\n

docker push yourusername/blueos-doris:latest

\n

Push to GHCR

\n

docker tag yourusername/blueos-doris:latest ghcr.io/yourusername/blueos-doris:latest\ndocker push ghcr.io/yourusername/blueos-doris:latest\n```

", "support": null, "requirements": "core >= 1.1", "company": { "about": "Deep Ocean Research and Imaging System", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8095/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/doris:/data" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8095/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 2997, "last_updated": "2026-04-01T05:07:24.878605Z", "date_registered": "2026-02-12T13:43:54.707847Z" } }, { "identifier": "bluerobotics.power-switch-calibration", "name": "PowerSwitch Calibration", "website": "https://github.com/rjehangir/BlueOS-PS-Calibration/", "docker": "rjehangir/blueos-ps-calibration", "description": "Calibrate offset on BlueBoat for improved measurements", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/power-switch-calibration/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "v1.0.0": { "identifier": "bcc4553d-e923-5310-93d0-4a775fe22322", "type": "device-integration", "website": null, "images": [ { "expanded_size": 7915983, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e542fdb888f196961b5cb710cbada54be76cfff90b16eb8e73a434f34abf672f" } ], "authors": [ { "name": "Rustom Jehangir", "email": "rusty@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": null, "readme": "

BlueOS Power Switch Calibration Extension

\n

This extension provides a simple routine to calibrate the offset of the \"Power Switch\" used in the BlueBoat to provide a more accurate current and power measurement.

\n

Build

\n

Execute the following command to build your extension:

\n

shell\n docker buildx build --platform linux/arm/v7 . -t my_docker_user/blueos-ps-calibration:latest --output type=registry

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 2657, "last_updated": "2023-11-07T01:34:15.374584Z", "date_registered": "2023-11-05T01:19:48.269227Z" } }, { "identifier": "bluerobotics.openvscode", "name": "OpenVSCoder", "website": "https://github.com/BlueOS-Community/blueos-code-server", "docker": "patrickelectric/blueos-openvscode", "description": "Edit and run code directly in BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/openvscode/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "1.1.2": { "identifier": "a74a07d6-9148-5a4e-9bb9-0d65cf1ee13e", "type": "other", "website": null, "images": [ { "expanded_size": 717989843, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6c4f9d55d5a55b557d473ad47b08493e56be4801d44744a151598505a80f2d38" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.1.2", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata/openvscode/.cache:/home/workspace/.cache:rw", "/usr/blueos/userdata/openvscode/.local:/home/workspace/.local:rw", "/usr/blueos/userdata:/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/var/run/docker.sock:/var/run/docker.sock:rw", "/usr/bin/docker:/usr/bin/docker:ro", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.1.1": { "identifier": "9ea3a4bf-5af7-5628-bf18-a0112499a59d", "type": "other", "website": null, "images": [ { "expanded_size": 690118664, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:36249d2e485389d1a2cc2470160a2452236bba9684a1050f9a1a83bda032579e" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.1.1", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/var/run/docker.sock:/var/run/docker.sock:rw", "/usr/bin/docker:/usr/bin/docker:ro", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.1.0": { "identifier": "f1e0dcf6-8ee1-5746-bd9b-5a8189bf4716", "type": "other", "website": null, "images": [ { "expanded_size": 800907473, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c4bfff1256818710af76d7b9ca2cfff8d98f2edcacf745c2b460a5166d822ece" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.1.0", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/var/run/docker.sock:/var/run/docker.sock:rw", "/usr/bin/docker:/usr/bin/docker:ro", "/etc/hostname:/etc/hostname:ro", "/dev:/dev:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.7": { "identifier": "f069f86e-9bc5-573f-9c49-020604e09720", "type": "other", "website": null, "images": [ { "expanded_size": 306628412, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b145ec2696af559d0df0ef81cd3428627332bcc3bab0f6a531b668a4fac63be7" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.7", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/var/run/docker.sock:/var/run/docker.sock:rw", "/usr/bin/docker:/usr/bin/docker:ro", "/etc/hostname:/etc/hostname:ro", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.6": { "identifier": "1aa4f634-c664-5a19-814a-e2f54b1437f3", "type": "other", "website": null, "images": [ { "expanded_size": 306628413, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a917f9dc8ea4b6c8c55d2d740d28e034ee0e83e46422a8bb6a40e9fe8b8b5af6" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.6", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/etc/hostname:/etc/hostname:ro", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.5": { "identifier": "5a744a04-250a-5e44-a418-c833bc445a98", "type": "other", "website": null, "images": [ { "expanded_size": 306628410, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fca3d0af07145c5a4b15ed014f9e7db84d2f358b4d22716cf0fda8d31cbc479b" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.5", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/etc/hostname:/etc/hostname:ro", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.4": { "identifier": "15f94a81-695d-530f-bafc-5dcef4bbf61b", "type": "other", "website": null, "images": [ { "expanded_size": 306514789, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:de3c0417bb5f8ff88cefc38e78d8706116d8ae9726c2ab4262af5a7580e7567c" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.4", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.3": { "identifier": "c1d55fdb-fa51-5c81-931b-02931f7c3461", "type": "other", "website": null, "images": [ { "expanded_size": 211619864, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5647c270f0f05c688748e58912aa139e1d82b8801ccf23b4997631e13f89abe9" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.3", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.2": { "identifier": "acff44bd-868a-5073-8dd0-9de682c36b45", "type": "other", "website": null, "images": [ { "expanded_size": 211619835, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:933474f7fb3e1223b29b1fd6c1b382d8ca40635e2513d322fed6d052f2c2a8f1" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.2", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.1": { "identifier": "7d6e443f-a79b-5590-82e4-482b15e1ed2f", "type": "other", "website": null, "images": [ { "expanded_size": 211619828, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:dee5ee2a9c888be36172b674b9284a9434147874af39ca6680c017de0dfa8610" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.1", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/usr/blueos/userdata:/home/workspace/userdata:rw", "/usr/blueos/openvscode:/openvscode:rw", "/:/home/workspace/host:rw" ], "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } }, "1.0.0": { "identifier": "dcda618a-ffe0-5fc0-8493-847a675d0d09", "type": "other", "website": null, "images": [ { "expanded_size": 211619813, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fafa0fa8ef1e93fc13f8db0da55157fc95303a4b5c2bccd00cf670aaae8b5d3e" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "code", "development", "ide", "vscode", "python", "rust" ], "extra_links": {}, "tag": "1.0.0", "docs": null, "readme": "

BlueOS Code Server

\n

BlueOS extension for OpenVSCode Server.

\n

OpenVSCode server is a project where it provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser. It's based on the very same architecture used by Gitpod or GitHub Codespaces at scale.

", "support": null, "requirements": null, "company": null, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 49784, "last_updated": "2023-09-06T01:24:53.238154Z", "date_registered": "2023-07-06T13:38:30.979513Z" } }, { "identifier": "bluerobotics.ros", "name": "ROS", "website": "https://github.com/BlueOS-Community/blueos-ros", "docker": "patrickelectric/blueos-ros", "description": "Robot Operating System (ROS) extension for BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/ros/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "0.0.2": { "identifier": "73dc76ed-2f14-5fae-a087-aee4886d5fbd", "type": "other", "website": null, "images": [ { "expanded_size": 370009641, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:75a2bf8947eba791595c30713506e8f94231a656c48f99119c53d17eb09ec72e" }, { "expanded_size": 370009669, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a9a2112b8cc7df5fefab629d79aa50c7cf68f6f205afe5f7fa44ed343072517a" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "ros", "robot" ], "extra_links": {}, "tag": "0.0.2", "docs": null, "readme": "

BlueOS ROS extension

\n

This extension makes possible to communicate with the vehicle via ROS

\n

To connect, you just need to run the following commands:\n```sh\nexport ROS_MASTER_URI=http://blueos.local:11311

\n

or export ROS_MASTER_URI=http://:11311

\n

rostopic list # Done, you already have access to it!\n```

\n

You can also access the data via roslibjs.

\n

```html

\n\n\n\n\n\n\n\n\n\n

Simple ROS User Interface

\n

Connection status:

\n

Last /mavros/vfr_hud received:

\n\n\n

```

\n

Use a different ROS master origin

\n

It's possible to change ROS master for the extension using BlueOS on pirate mode and configuring ROS environments variables under the extension configuration menu.

\n

A valid configurtion wouyld look like this:

\n

json5\n{\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\"\n },\n \"Env\": [\n \"ROS_HOSTNAME=192.168.2.2\",\n \"ROS_MASTER_URI=http://192.168.2.3:11311\",\n \"ROS_IP=192.168.2.2\"\n ]\n}

\n

For more information about it, check BlueOS documentation.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw" ], "Privileged": true, "NetworkMode": "host" } } }, "0.0.1": { "identifier": "e5208a5f-f0e7-5baf-a9b3-d193cc19f3f0", "type": "other", "website": null, "images": [ { "expanded_size": 369666474, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9b159ab65e4d0b1d541460865aab4cabf9173de7163221d229522cb47a4ae381" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "ros", "robot" ], "extra_links": {}, "tag": "0.0.1", "docs": null, "readme": "

BlueOS ROS extension

\n

This extension makes possible to communicate with the vehicle via ROS

\n

To connect, you just need to run the following commands:\n```sh\nexport ROS_MASTER_URI=http://blueos.local:11311

\n

or export ROS_MASTER_URI=http://:11311

\n

rostopic list # Done, you already have access to it!\n```

\n

You can also access the data via roslibjs.

\n

```html

\n\n\n\n\n\n\n\n\n\n

Simple ROS User Interface

\n

Connection status:

\n

Last /mavros/vfr_hud received:

\n\n\n

```

\n

Use a different ROS master origin

\n

It's possible to change ROS master for the extension using BlueOS on pirate mode and configuring ROS environments variables under the extension configuration menu.

\n

A valid configurtion wouyld look like this:

\n

json5\n{\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\"\n },\n \"Env\": [\n \"ROS_HOSTNAME=192.168.2.2\",\n \"ROS_MASTER_URI=http://192.168.2.3:11311\",\n \"ROS_IP=192.168.2.2\"\n ]\n}

\n

For more information about it, check BlueOS documentation.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw" ], "Privileged": true, "NetworkMode": "host" } } } }, "repo_info": { "downloads": 7435, "last_updated": "2025-03-21T12:52:28.85139Z", "date_registered": "2023-09-13T06:14:36.827307Z" } }, { "identifier": "bluerobotics.cellular-modem-manager", "name": "Cellular Modem Manager", "website": "https://github.com/bluerobotics/cellphone-modem-manager", "docker": "bluerobotics/blueos-cellphone-modem-manager", "description": "Blue Robotics cellular modem manager", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/cellular-modem-manager/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "0.3.3": { "identifier": "28e4dec8-c7a3-565b-ae29-0a16c23906a7", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "images": [ { "expanded_size": 134736854, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bb67326df10a86a2d8097dabc9007fc888ebca10e92359748cdfedd269bf4401" }, { "expanded_size": 140908402, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a2a6c6e3e022506192469762b548dcb31406897260448c70c28675757de92438" }, { "expanded_size": 144572942, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:dbb1ab9a311474b23bd39ad86ce588d4b1988e8d08102b331772fe77cd571565" } ], "authors": [ { "name": "Jo\u00e3o M\u00e1rio Lago", "email": "joaolago@bluerobotics.com" }, { "name": "Willian Galvani", "email": "willian@bluerobotics.com" }, { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.3.3", "docs": null, "readme": "

Basic extension to manage cellphone modems

", "support": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "requirements": "core >= 1.3", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "20038/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config", "/dev:/dev:rw" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "20038/tcp": [ { "HostPort": "" } ] } } } }, "0.3.2": { "identifier": "e34bd18a-2b7d-5e51-bd6a-65f32872c70c", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "images": [ { "expanded_size": 97958127, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:52fcd9a1a1f6862970fd17039fed6b8313cf98e79c0dcb3bdc185af45937d421" }, { "expanded_size": 107310913, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:e5e497dd1725378e308993ad2a71242b92eed00b2048cda0e7e5b051f5fba44d" } ], "authors": [ { "name": "Jo\u00e3o M\u00e1rio Lago", "email": "joaolago@bluerobotics.com" }, { "name": "Willian Galvani", "email": "willian@bluerobotics.com" }, { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.3.2", "docs": null, "readme": "

Basic extension to manage cellphone modems

", "support": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "requirements": "core >= 1.3", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "20038/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config", "/dev:/dev:rw" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "20038/tcp": [ { "HostPort": "" } ] } } } }, "0.3.1": { "identifier": "c0792ea7-2d4c-53f2-be8c-dc1f073e7635", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "images": [ { "expanded_size": 98324590, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:31695cefd4807f1cf0ff29963ce9ba0ae21ec23f599687a2d0d3fbe4e9bfd34e" } ], "authors": [ { "name": "Jo\u00e3o M\u00e1rio Lago", "email": "joaolago@bluerobotics.com" }, { "name": "Willian Galvani", "email": "willian@bluerobotics.com" }, { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.3.1", "docs": null, "readme": "

Basic extension to manage cellphone modems

", "support": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "requirements": "core >= 1.3", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "20038/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config", "/dev:/dev:rw" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "20038/tcp": [ { "HostPort": "" } ] } } } }, "0.3.0": { "identifier": "abbfaa33-1f3a-5fc2-a5f2-37873f7d304b", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "images": [ { "expanded_size": 98147826, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1deed31f468d4899a9ad6b8b7d3327efb72e475427f9c12ee88effc2668ef91f" } ], "authors": [ { "name": "Jo\u00e3o M\u00e1rio Lago", "email": "joaolago@bluerobotics.com" }, { "name": "Willian Galvani", "email": "willian@bluerobotics.com" }, { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.3.0", "docs": null, "readme": "

Basic extension to manage cellphone modems

", "support": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "requirements": "core >= 1.3", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "20038/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config", "/dev:/dev:rw" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "20038/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0": { "identifier": "21bcd310-3940-5f4c-963d-7ca913469063", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "images": [ { "expanded_size": 98006979, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2d9c19eea0c360eded692fb5e23d3a7d8bb7146f542e7aeb613f9ef8a245d88d" }, { "expanded_size": 107030530, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5ca0ce1d54db139f385fe3cd66256f5803ed3ae70ebb28e993f2245d97864dbc" } ], "authors": [ { "name": "Jo\u00e3o M\u00e1rio Lago", "email": "joaolago@bluerobotics.com" }, { "name": "Willian Galvani", "email": "willian@bluerobotics.com" }, { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.2.0", "docs": null, "readme": "

Basic extension to manage cellphone modems

", "support": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "requirements": "core >= 1.3", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "20038/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config", "/dev:/dev:rw" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "20038/tcp": [ { "HostPort": "" } ] } } } }, "0.1.0": { "identifier": "14aff5b7-66a0-58e0-9efa-4ae9bc0a1548", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "images": [ { "expanded_size": 98006170, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5fdbc09389ee7691c4c5b801c6f071f45d2d153afa375a3c872209870c20f3a2" }, { "expanded_size": 107037533, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:939417b974e09839443fb39e1743ed57214057847548df506b780412fb7a2a39" } ], "authors": [ { "name": "Jo\u00e3o M\u00e1rio Lago", "email": "joaolago@bluerobotics.com" }, { "name": "Willian Galvani", "email": "willian@bluerobotics.com" }, { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.1.0", "docs": null, "readme": "

Basic extension to manage cellphone modems

", "support": "https://raw.githubusercontent.com/bluerobotics/cellphone-modem-manager/", "requirements": "core >= 1.3", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "20038/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/root/.config:/root/.config", "/dev:/dev:rw" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "20038/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 8719, "last_updated": "2025-11-26T19:52:40.880543Z", "date_registered": "2024-12-10T16:34:37.516719Z" } }, { "identifier": "bluerobotics.water-linked-dvl", "name": "Water Linked DVL", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/", "docker": "bluerobotics/blueos-water-linked-dvl", "description": "Enables ROV position holding and navigation", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/water-linked-dvl/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "v1.0.10": { "identifier": "c97f7cd7-b8a8-5d46-9e80-ba7f145fc74c", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 70793987, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c35c09154d09888a790762abb50420614be63a429f95eee232a54a9ecb3a8ba6" }, { "expanded_size": 75009578, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:ce53a62f2eba8c4a4366871b4f6fc0796c970b828cc416242889e4fcd1045f7b" }, { "expanded_size": 76783323, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:e44f3a7ddce725e6235e8c3e4805438b95a55de85d5f7e47ff971436c827f951" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.10", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.10

\n
    \n
  • Improve DVL finding logic
  • \n
  • Refactor settings file
  • \n
\n

v1.0.7

\n
    \n
  • Fix using lat/long inputs with no internet
  • \n
\n

v1.0.6

\n
    \n
  • No longer sets parameters automatically. Users can now change for two modes of operation:
      \n
    • DVL-only, the recommended mode
    • \n
    • DVL+GPS, experimental mode which allows fusing (underwater) GPS and DVL data
    • \n
    \n
  • \n
\n

v1.0.5

\n
    \n
  • Update texts to make support of DVL A125 obvious
  • \n
\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Water Linked DVL A50 and A125 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.9": { "identifier": "f6f7e641-213b-548a-89d1-a5ec996d9a1f", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 70499171, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f70040ebd2b7373095d9c4866475c6dd7a485336c673924597bd4ca98125a4e8" }, { "expanded_size": 76668659, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:24217099cf3989405e25904469b0eb412213531c058d96cc42f964872583d588" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.9", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.7

\n
    \n
  • Fix using lat/long inputs with no internet
  • \n
\n

v1.0.6

\n
    \n
  • No longer sets parameters automatically. Users can now change for two modes of operation:
      \n
    • DVL-only, the recommended mode
    • \n
    • DVL+GPS, experimental mode which allows fusing (underwater) GPS and DVL data
    • \n
    \n
  • \n
\n

v1.0.5

\n
    \n
  • Update texts to make support of DVL A125 obvious
  • \n
\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Water Linked DVL A50 and A125 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.8": { "identifier": "19ef5284-1317-5015-8b86-993b64c5929f", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 70431811, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5fc14875bc39ee7e24213fe23941fc47c09476f9563abc388e77a2f1f09d04b2" }, { "expanded_size": 76603940, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0c329808451439ad814a8e70389e36d122916f3120b19ed149eafe7ea5c4b45c" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.8", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.7

\n
    \n
  • Fix using lat/long inputs with no internet
  • \n
\n

v1.0.6

\n
    \n
  • No longer sets parameters automatically. Users can now change for two modes of operation:
      \n
    • DVL-only, the recommended mode
    • \n
    • DVL+GPS, experimental mode which allows fusing (underwater) GPS and DVL data
    • \n
    \n
  • \n
\n

v1.0.5

\n
    \n
  • Update texts to make support of DVL A125 obvious
  • \n
\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Water Linked DVL A50 and A125 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.7": { "identifier": "bc9d57c3-cf02-5785-bf89-921c450a9fb4", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 70965287, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b96869c28654831900781874f50eb75649b5b600a88abdfcbdfb30fc5fcd12e3" }, { "expanded_size": 77097826, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:02b1b004172e7f53009bda575ce76f17b02d02352d195bc7d1caacd9a052ada8" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.7", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.7

\n
    \n
  • Fix using lat/long inputs with no internet
  • \n
\n

v1.0.6

\n
    \n
  • No longer sets parameters automatically. Users can now change for two modes of operation:
      \n
    • DVL-only, the recommended mode
    • \n
    • DVL+GPS, experimental mode which allows fusing (underwater) GPS and DVL data
    • \n
    \n
  • \n
\n

v1.0.5

\n
    \n
  • Update texts to make support of DVL A125 obvious
  • \n
\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Water Linked DVL A50 and A125 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.6": { "identifier": "5b72c3c7-cc68-5c2c-9edd-b400daa9070d", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 70955108, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5c4cc57ab14bbc3c32fc83aefad9f4ef6ab244411b1f80c4511fd6f70535fb48" }, { "expanded_size": 77083331, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a1486d8026590c4143410fff474811be8d83bd5ae2c80c2f2509bd858b2b6823" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.6", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.6

\n
    \n
  • No longer sets parameters automatically. Users can now change for two modes of operation:
      \n
    • DVL-only, the recommended mode
    • \n
    • DVL+GPS, experimental mode which allows fusing (underwater) GPS and DVL data
    • \n
    \n
  • \n
\n

v1.0.5

\n
    \n
  • Update texts to make support of DVL A125 obvious
  • \n
\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Water Linked DVL A50 and A125 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.5": { "identifier": "d4a8e194-7374-5f38-9e6b-05d689366907", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 71286141, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7af61750294fa6eb726e73f855d6ec207ba7bf2c0af1e1ac9626c9e29b54a924" }, { "expanded_size": 77417461, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6a05bce7c3834c01e2014db273c45e29fa0de985ec5091553f3f4c59d305da62" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.5", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.5

\n
    \n
  • Update texts to make support of DVL A125 obvious
  • \n
\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Water Linked DVL A50 and A125 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.4": { "identifier": "d28a5218-620a-58c3-8468-46a878b2260a", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 71246910, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f8ee948cb512af09d2cab3cc92cc39de0bc802645f382033ba7c5d5972f7c541" }, { "expanded_size": 77377333, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:f366b363ae588f2e2d0d1b69d7b029c9a6974ff6bd8db0c818cc98c81ca8a7fe" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.4", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.4

\n
    \n
  • Fix issue introduced in v1.0.3 where the extension was unable to talk to Cable-guy
  • \n
\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Waterlinked DVL A50 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.3": { "identifier": "a6397468-59fb-5808-9706-ea15c6948122", "type": "device-integration", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 71173047, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:18c4bf17906b278c44e840b40f8561928283ea151f48958ef42dd8ee0d95eb48" }, { "expanded_size": 77304661, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5c2dd5704cd10b3cf502f3a47d5f9f0283e846e66d3ebcfa7d8ffe5673eb269f" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [ "positioning", "navigation", "doppler-velocity-log" ], "extra_links": {}, "tag": "v1.0.3", "docs": null, "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.3

\n
    \n
  • Uses an random available port instead of 9001 to avoid conflict
  • \n
  • Updated menu icon
  • \n
\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Waterlinked DVL A50 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "9001/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config:/root/.config" ], "PortBindings": { "9001/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.2": { "identifier": "a5416f70-61fe-5098-930b-6fce0d2c0bf4", "type": "other", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 78844216, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:2f52eb554ba188b329ad06f5167927c54fa773cb33beb6f78a1d2bb3ab991395" }, { "expanded_size": 72588503, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1e8607b8ea94b70337ada4b84941aa38fcccb06b0c630122d07c2dc66e64630d" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.2", "docs": "", "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.2

\n
    \n
  • Improved style
  • \n
\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Waterlinked DVL A50 driver as a BlueOS Extension.

\n

Install

\n

Install it from BlueOS extensions tab.

\n

The service will show in the \"Extension Manager\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "requirements": "core > 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.1": { "identifier": "98ed5b74-52a3-57e1-a100-cbeb698c5498", "type": "other", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 72798434, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:65115990f649c932a39466fc846aaf671608b441c1e8e8448b8cd4496204d88d" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": "", "readme": "

BlueOS-Water-Linked-DVL

\n

Changelog

\n

v1.0.1

\n
    \n
  • Fixed an issue where the driver was sending Rangefinder messages with invalid data
  • \n
\n

This is a docker implementation of a Waterlinked DVL-a50 driver for the new Blue Robotics BlueOS.

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/blueos:/root/.config --name=BlueOS-Water-Linked-DVL --restart=unless-stopped bluerobotics/blueos-water-linked-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "requirements": "core > 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.0": { "identifier": "a12a3bf4-23fa-54be-b7af-d4b1598c8246", "type": "other", "website": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "images": [ { "expanded_size": 78926907, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:e3e67687861b5d8c4613e35fafe4f13498c9906e6553125b032f6f6ddf075944" }, { "expanded_size": 72784115, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:daae2a13f71622da16ae0b2a766c3b17b314cf15d538d00112f4036677dad0de" } ], "authors": [ { "name": "Willian Galvani", "email": "willian@bluerobotics.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "

BlueOS-Water-Linked-DVL

\n

This is a docker implementation of a Waterlinked DVL-a50 driver for the new Blue Robotics BlueOS.

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/blueos:/root/.config --name=BlueOS-Water-Linked-DVL --restart=unless-stopped bluerobotics/blueos-water-linked-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://github.com/bluerobotics/BlueOS-Water-Linked-DVL", "requirements": "core > 1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "NetworkMode": "host" } } }, "repo_info": { "downloads": 260589, "last_updated": "2025-11-26T18:24:22.732171Z", "date_registered": "2022-06-01T23:43:43.19026Z" } }, { "identifier": "bluerobotics.yacht", "name": "Yacht", "website": "https://github.com/BlueOS-Community/blueos-yacht", "docker": "patrickelectric/blueos-yacht", "description": "Easy to use container management utility", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/yacht/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "1.0.0": { "identifier": "b8ab51f5-90f5-5552-b9fb-43485f0c944d", "type": "tool", "website": null, "images": [ { "expanded_size": 75237108, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:3cbb5d3ccef873e9d2c2f2887d1e833ab1cf74a37dbce0127eecdd93332d33cd" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "docker", "container", "dashboard", "manager" ], "extra_links": {}, "tag": "1.0.0", "docs": null, "readme": "

BlueOS yacht

\n

Yacht is a container management UI with a focus on templates and 1-click deployments.

", "support": null, "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "Privileged": true, "Binds": [ "/var/run/docker.sock:/var/run/docker.sock:rw" ], "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 3113, "last_updated": "2023-09-01T21:07:26.318216Z", "date_registered": "2023-09-01T20:11:40.559943Z" } }, { "identifier": "bluerobotics.navigator-webassistant", "name": "Navigator WebAssistant", "website": "https://github.com/RaulTrombin/blueos-navigator-web-assistant", "docker": "raulelektron/blueos-navigator-webassistant", "description": "Use navigator board through webservices.", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/navigator-webassistant/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "1.0.0": { "identifier": "70435ffb-6a29-5d30-b1c2-dbc82a34acd4", "type": "education", "website": null, "images": [ { "expanded_size": 32131212, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:de3eb587e89a12bef3bb7e7e701daa56cdf841063df8385b0a91b892b0d918a3" }, { "expanded_size": 32651314, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f40e068095246755e3790e0dc70f462304671906dec44f3652ad1b727aa9bf4f" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "rov", "robot" ], "extra_links": {}, "tag": "1.0.0", "docs": null, "readme": "

BlueOS's Navigator Extension

\n

Navigator Webassistant extension is a webserver that allows user to control navigator hardware.\nThis application uses the navigator-assistant to interface with navigator board, and users can control it from Websocket and RestAPI.

\n

Instructions

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:\nblueos.local/tools/extensions-manager\nParameters:

\n

```\nraulelektron.blueos_navigator_webassistant

\n

Navigator Assistant

\n

latest

\n

{\n \"ExposedPorts\": {\n \"8080/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"8080/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n }\n }\n}\n```

\n

You can also run Navigator Assistant locally or on other extensions. Please check navigator-web-assistant.

\n

You can also use the Jupyter extension to try some fast python and websocket applications.

", "support": null, "requirements": null, "company": { "about": "Control navigator hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Privileged": true, "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 594, "last_updated": "2025-06-18T16:58:38.273351Z", "date_registered": "2025-06-18T15:58:12.81427Z" } }, { "identifier": "bluerobotics.radcam-manager", "name": "RadCam Manager", "website": "https://github.com/bluerobotics/radcam-manager", "docker": "bluerobotics/blueos-radcam-manager", "description": "RadCam's official management interface", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/radcam-manager/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "0.2.0": { "identifier": "b5535e61-6f8b-526f-a667-8a74819da4ae", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58393909, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:d4c95e42c86fa185abfa78076e09ad0a9a881bd82f4e16e1877d6a9177d50953" }, { "expanded_size": 62806897, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6610387066e0ed8b4940e5a2a574d8e8b0d30cf7482da45c2605a5f5e3ae385c" }, { "expanded_size": 63450264, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6cf7ab3bcfa17c6514e457887936eafe38b857ef7a0cd5e3363882efd9eaea19" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.17": { "identifier": "bb7ddba4-5e83-508e-8cee-2dd03541ce10", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58393883, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:70dc19a3ea47973f00af6dffeda135f704ad38e01c84a077fec855051904afb0" }, { "expanded_size": 62806857, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:08506f5e9f10ade1a7309f735a4ff6688fbb24e9ff38d4f16383f3428b74fa55" }, { "expanded_size": 63450129, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8ef166338c1e86b794878d762f0e1f3ede49ffadd98079217f2896a9ef7069ba" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.17", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.16": { "identifier": "94cf5593-dec1-5c9b-8335-6395dbf52b4c", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58393808, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:d32e5f62bdf3ea2abdb63b9cf466cf8d354f3e3c0b7f02290d064e1b75f64a52" }, { "expanded_size": 62806748, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:7c302d4da3db50b23d16de53af72585df549d3e0082b1320b7b6c3518d5726c6" }, { "expanded_size": 63450053, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:213478a3e67e020e0a383e358aa7b479d5ce2bd0462aa3a7afe6dd2ca78a4a00" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.16", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.15": { "identifier": "20496d66-428c-54c1-8044-fba175e8fdaf", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58394927, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:188cb01146a7a0cd5d62dab5702d31b43036f4ea5f0a5e65f8b7fd112d3d8f63" }, { "expanded_size": 62808815, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:4b91f42fc076952cee5e63397528b2d624c6260562763a5557fbfcec431fde2f" }, { "expanded_size": 63450668, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:84d73ca6541d78531fc88a4051affcfba15229eb999b488a7bd6e4c07fd6a712" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.15", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.14": { "identifier": "08ff3960-c25c-5f0c-a9ea-b1bd9d184a4b", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58315260, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8c393a71190595b8457f1e14178274c5292eb617ac18e1cf31fe3a6dd2122fd6" }, { "expanded_size": 62719278, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5a39f4e038c5473ef6e443d67956cad523b9d880654f009d573eb497f8840600" }, { "expanded_size": 63368556, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:27e4df26fe17289fe25ccdc59220dd176e914aa6f8f278ffda0a6bd18356a2ed" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.14", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.13": { "identifier": "03def0de-e8d2-5021-8bc2-48c65fc0ea86", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58238707, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2c635a57fb6c729f31bd661cd097c1cd08ba106fe5240d7045a3aea557f29ccd" }, { "expanded_size": 62645588, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:706c571c93e65d178c2e8cacfbdeadeaff4d16d643cb38efc24df5987d81ae5e" }, { "expanded_size": 63294182, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:71044d912f614745b3dc913a1b4b30a4cc955e49fb16a156bf0a971c5e20f753" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.13", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.12": { "identifier": "2aaff342-110f-58fe-91d7-f705aa897dc4", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58466781, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bc74d75d1c3775ea1b77af930b2158a909d842202d00532ab21b1077a21899f6" }, { "expanded_size": 62851262, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:fc4cb599431f69ddd9655b59554d220948d44eacb6aca4bc81ed1aab56204fd1" }, { "expanded_size": 63515635, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:feb6d3e30e40128b68080bb49fc3ef28ec9724aa2a3978c322a63bed20fe8f3c" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.12", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.11": { "identifier": "593b4a9a-813a-53b1-bcbf-fc96118f42f4", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58464119, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b34236c2998375e02a0b47336f179a3cdfb6c7b5de376dd7be0ca160901ddb01" }, { "expanded_size": 62847850, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:ca05894f0f330389b2069570ed9367748cb222ba40a22a75b77e4887eed205dd" }, { "expanded_size": 63513217, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:bb147bef1ccbe6d951fa5810bb9e4930c6aab7b6ca0aa092342fdeee22befb5d" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.11", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.10": { "identifier": "aab47e2f-7b9b-5ebe-98b7-3fef1c82838e", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58508876, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c80d93f88710becd5cce9a8f77df3a00ddf0f0c0aa3519865e3e8cf95135d16a" }, { "expanded_size": 62887979, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:e5ee76f1da8bb70829b95c14d31ab031c90c0312ac8f20fc10fc77e7ee31e0e7" }, { "expanded_size": 63552330, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:be48d33acb70f32fce3569c6d962b2f817d5fda46dfc2f20bf9c2f0ad7be49ed" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.10", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.9": { "identifier": "c8abc748-c429-5c57-84aa-c554bb718c93", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58507784, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:afa53b6b6ee02cb58f117da3f7aacfe2a4607038302208713f89dff3c9e8dc36" }, { "expanded_size": 62887216, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5556a678fd4eedb1aa72c58103bb976ce731e166c5fb2d5916722aa22ebcfda8" }, { "expanded_size": 63551058, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:85e15cc11b1f73b5cd4885b9c9978c9e09cc0d94884b28aa59fecf9eadfa71c4" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.9", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.8": { "identifier": "5ae6f327-78bb-570f-adc5-2fd72f493998", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58400366, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6d75af14f393e98b740d739de413ed3805c3767ae9566503a169403b5e0363ea" }, { "expanded_size": 62738575, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:ed185e66ed70dc73515a9827f5d587cfa14ea1360fcd902faf33f9bd03339a90" }, { "expanded_size": 63436209, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:20393c9f4134308867617654c87a29bfe0108c7a1c027824b581eed355afbadd" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.8", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.7": { "identifier": "3f463932-4416-5af5-bd1e-a9015c1aeea9", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58147601, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:095290c2391a34f3654d086e3b442b2394aff62c1bdc2420ba235cdb9ac37c46" }, { "expanded_size": 62498898, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f5ef5438e306b8fd8be2878ac19eacf6eb04f01f0c3e8e2a9faf94c301036865" }, { "expanded_size": 63194434, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:c53a9a366e03244f9960e9c4d794d675577399157a3861e59071c46b01a0a76b" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.7", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.6": { "identifier": "fafb9a08-74d2-585c-8914-a6c7f94c5ba7", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58149928, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e644dd06a9e053730baabe8468dbe6a85b83d556ee82570bffed68a5f52ca77f" }, { "expanded_size": 62505667, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3c3f705ceece469afde5ce2c45d238a1344e6f7940482100db3f6eab4596f701" }, { "expanded_size": 63194519, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0a3a6b74bd8b6549b20778ff517a0a28bb6eb2d9b6a3a90584d47feee59733e4" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.6", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4.3\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.5": { "identifier": "51ac2c9b-7975-5004-9170-919dab6f2183", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58138598, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:77b5574c5550a33d420311228de09b4ba42383d3de3f39ef2b3cb48f94e41ffc" }, { "expanded_size": 62493039, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:73de12f896a4ed17d52d71cd99ce1e003a0c896c35b1d63e75baab0546c53944" }, { "expanded_size": 63181012, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6ca4118a4cc4db516b0923e23b5715d4039a7cd8ff8b0805dd180559af8b430f" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.5", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.4": { "identifier": "1bdc4b11-486d-51c1-b628-d9f1be2d62d1", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 58096430, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:143f895b9266fa2bbaabc43b0ec26750780e6b45451bca8ee17ba3302ca6ca96" }, { "expanded_size": 62398429, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:bdebf72a7f04af1d9838fcc11e52a69451fcbf768ec910d8e5eecb4ff9aa5316" }, { "expanded_size": 63118667, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:128921739071913be709ad5a8a08a3741b4ccb4b808dfd27a00216064dd89558" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.4", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.3": { "identifier": "ec29c71b-4a91-5848-a17d-dfc2174944eb", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 54374477, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e1fe257130ab711c180d5fcca916615537dc868a3ee8580b8a58495c52a4bc5c" }, { "expanded_size": 58641446, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:ba52e485a5482eec2915494f27d01bd0ea1d47542417cdc9755a54d2e5d43e6a" }, { "expanded_size": 59238473, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:f57c313d33919ea44d9d75815b10e34694fb11eac1a5465244330c62ef737940" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.3", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.2": { "identifier": "380e4171-6974-5b90-a35f-aff579acd465", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 54372469, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:97075d346074e33aba191817ff7f9b109766f811f00bc30044b3772a73b278bb" }, { "expanded_size": 58639375, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a02f9f2af18510bc25bcd8f1b2d1abc1a1ece6b260713e8d78d217466f26c6a4" }, { "expanded_size": 59235615, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:40c062062dc562c98f5b43f97954c700da33bdaa30baadd4bd74bd9df8aad15e" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.2", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.2.0-beta.1": { "identifier": "f57f1e1f-66c7-55e1-8cce-2a3a61d2a2af", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 54242846, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:0eb16a1d777143809456c3b9864cb24da97ccc83237d832d0fef3a9adc2616db" }, { "expanded_size": 58487529, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2b4afcf65d27798966e8fb4b862072ed5008f7eaf555da782cf85d739c3deeaa" }, { "expanded_size": 59074093, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:9120a43f18aa0246afa685158d90d8f4d780ee65d251d9d8101b1b6159a81195" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.2.0-beta.1", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs", "/usr/blueos/extensions/radcam-manager:/app", "/root/.config/blueos/ardupilot-manager/firmware/scripts:/scripts" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.1.4": { "identifier": "7c7e9fa1-3333-5330-8c6a-bfcf74ba1d6e", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 49590303, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8352d393769c271d5a16189d66fd5248bf169a3ef9834b6969168d16201b3b32" }, { "expanded_size": 53909463, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:256fb3e0bac2ee87ba60f44b7b464562b6a2362f6dc1ab1141e063f14e4ce829" }, { "expanded_size": 54394154, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:827546a0a9ea22ea6eac6a5e04674619fc5409ab16661e6812b535a670aa3f54" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.1.4", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "Binds": [ "/var/logs/blueos/extensions/radcam-manager:/logs" ], "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.1.3": { "identifier": "27983019-45c5-5847-83f4-3399fe56b267", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 49580344, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:01dbfc23dfc8b30041c9ce35a1a02a098a64e4dfeb22202479dd7268c58bd2c7" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.1.3", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } }, "0.1.2": { "identifier": "ba3214c2-03e3-533a-84ec-41aba5cc8ccd", "type": "device-integration", "website": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "images": [ { "expanded_size": 54336039, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:91239451d73a67476b3a348a29c008e45def18801aff6bef2d574d5837725bff" }, { "expanded_size": 58605864, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:d2dce576e9ebf39423261b048ce9accbc04a10424806f667ab91e4349d9d61d4" }, { "expanded_size": 58976404, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4f8bd482d8debbc6e56044a3c764d755ec7a8dd0bce8c85db9714e2bad515a47" } ], "authors": [ { "name": "Jo\u00e3o Ant\u00f4nio Cardoso", "email": "joao.maker@gmail.com" } ], "filter_tags": [ "rov", "camera", "cam", "radcam", "control" ], "extra_links": {}, "tag": "0.1.2", "docs": null, "readme": "

RadCam Manager

\n

This is the official RadCam management interface application.

\n

For the technical read, click here

", "support": "https://raw.githubusercontent.com/bluerobotics/radcam-manager/", "requirements": "[ \"core >= 1.4\", \"cockpit >= 1.7\" ]", "company": { "about": "RadCam's official management interface", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "ExtraHosts": [ "blueos.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 17555, "last_updated": "2026-03-25T17:07:27.426154Z", "date_registered": "2025-01-12T19:20:27.899002Z" } }, { "identifier": "bluerobotics.cockpit", "name": "Cockpit Lite", "website": "https://github.com/bluerobotics/cockpit", "docker": "bluerobotics/cockpit", "description": "Blue Robotics' next generation control interface; under development. Limited by browser.", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/cockpit/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "v1.18.0-beta.13": { "identifier": "40e5b65c-58e0-55ca-aaa4-f2a077252bd9", "type": "other", "website": null, "images": [ { "expanded_size": 26775027, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8c2df72857ff0b7b563ac21cbb027535e3e9f6f609d3eb07c57042e38d84040a" }, { "expanded_size": 26990128, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:991be1ad905b19a5b80b6241cfda47d2be49a5c15083b45642acab50ab79bd31" }, { "expanded_size": 27033684, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8ca10d091eac3adc7367ba332a691bbf76dbe2b322fbb9a663c97f1548e792d0" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.13", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.12": { "identifier": "39ee71e3-1690-5056-a079-6a6609c8b4cb", "type": "other", "website": null, "images": [ { "expanded_size": 26771146, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f09fe7c54ece8cb7cf80c5c59017da7f64191c52ae03d6800c87166eff9be460" }, { "expanded_size": 26986276, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:03642b5a829de03ba4695375dba73160e7c174f993e3ecd4422aa27bcef25ce0" }, { "expanded_size": 27029821, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:afe2ba641c4594ba1a3d89e2f953671a73f62989e63301426d3835bb0846e553" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.12", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.11": { "identifier": "238247d6-7ba6-5c63-bcb2-80835ee40d48", "type": "other", "website": null, "images": [ { "expanded_size": 26861523, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bf69191bba6a9676773d64306d5b04b922feaee574d31a5f4803d2291ed10a8b" }, { "expanded_size": 27076635, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2a8c0e3c102a0b1c0773da0bfea0f0735469fa376db471be429b388c9d0c634d" }, { "expanded_size": 27120195, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:12b691fe98ef91decc490d8cb344e448d87a39bd8e1f8946c29c552986d47833" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.11", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.10": { "identifier": "fbc4566f-81c2-5e4a-bf3a-d8c0ba17b31f", "type": "other", "website": null, "images": [ { "expanded_size": 27665648, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6d381d6cdd2a9ec0e5b2c78039dcd4c8568567bce783a04b8a3c1676bd6faedf" }, { "expanded_size": 27880756, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2f7174221f73615a2aa9939384e910ec1311348a8f73590955712546534c682e" }, { "expanded_size": 27924312, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a50128fc2c018cf96a96527db6ecfaeb736a3cad5a66c9900c8ab45e6332112f" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.10", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.9": { "identifier": "9a17aef7-dca6-589a-9aca-636d9da41016", "type": "other", "website": null, "images": [ { "expanded_size": 44777012, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c43f5e498ff8efe641e0d2eafee4c6a808ade66a75a396f47fa10a7cb1befe9e" }, { "expanded_size": 44992147, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:b083c928f6a8b25f104a1660ae69b737a0413a05ad097475242ea7f4c8c00e4c" }, { "expanded_size": 45035683, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:fc33f021405a4ec30d146a989d9cd427bfa5d583cab9de4fe7147ef6055d776c" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.9", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.8": { "identifier": "9a3c9edd-7494-59d9-8afc-dee074401a29", "type": "other", "website": null, "images": [ { "expanded_size": 44771934, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bc774876807077f1b2858dc9ddff8106cf94d893837d5a83a0a3f23b9f058300" }, { "expanded_size": 44987055, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:9665187f9e9ec10bfb90f4628c2220927b87663ce333b3b2972541ba6b40ff16" }, { "expanded_size": 45030605, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:c990c7d1b53a6108810ab22c34d896d3be6de1f09de62bcb722da9019a627406" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.8", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.7": { "identifier": "62ab29b8-02e7-5cb2-bf45-6c96512fbc41", "type": "other", "website": null, "images": [ { "expanded_size": 44763638, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1a81a2d6d8bd58b708e54ee67f5c2daa62660ac2e487ec681d0ed60a38d7e791" }, { "expanded_size": 44978749, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:404eac834a583125fe414848e3b1c4b591b3d0b1fbaf53c32439f626a54fd9d5" }, { "expanded_size": 45022289, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:cfc409fed6264388bafb9b4e32088bd97c860135fc6736f9047a6bf2dd1cb92b" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.7", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.6": { "identifier": "32fe2012-21ff-5772-9a2b-b9ae3907aa1b", "type": "other", "website": null, "images": [ { "expanded_size": 44761452, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:3b91234e6d03b2e216faec289ab14ccfa0c05d0c0f0d8d70b4b5235ba750cf2f" }, { "expanded_size": 44976556, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a49627800e38fe3aa9e455e8f1e6a645410633212498a8183929b3e06e8d071d" }, { "expanded_size": 45020104, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:31dd5cd168d23a5b00420b60408a0e41b484ff0cd6fb191c67477bcb9b509803" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.6", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.5": { "identifier": "a168503e-b962-5a62-8f51-fccd3c96905c", "type": "other", "website": null, "images": [ { "expanded_size": 44762266, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:12fcbe3ed87d86fdf0e8560f1be5e690b37703e588222af095eb6d36c6d510fd" }, { "expanded_size": 44977378, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:1e7e273be40d944d867891d4583d12ba870f2368ec76b3d77730bdcae5551e46" }, { "expanded_size": 45020919, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:9909cacb716dcac3eca914ede19b7ab6340960ea16f2b7ca4e9d4cd589a5cc4a" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.5", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.4": { "identifier": "7ab3ce67-4029-5bfb-8e31-fcb52b348239", "type": "other", "website": null, "images": [ { "expanded_size": 44758049, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:85d3418f4a92ce83fea853f83f10efddc22372ca6f743603a1e01f6badc449ef" }, { "expanded_size": 44973165, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:89fd982462145a1f724fca2f67c09ccf36ebeb6b0b941be003bbf14fa05ac346" }, { "expanded_size": 45016712, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5417770c556d11f8e0c5a36a5b7716df96e0ce667ffc60767c0162f540a9a294" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.4", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.3": { "identifier": "30a111e8-fa33-5ab4-8734-686cadf5b515", "type": "other", "website": null, "images": [ { "expanded_size": 44752277, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:afdb370c3ee1884e03134478564eb175af8dfef26460d87df44ba3c854596a05" }, { "expanded_size": 44967404, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3afe7d6d1ecb2f2908b5bbc9454d12c5a8c9bb1a939eda13e42d7d2afe593740" }, { "expanded_size": 45010932, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:7ac08a2b2901e12d5a2710a0356dd51ca1cc9606e8ec0568c1227b1e1a3d0682" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.3", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.2": { "identifier": "ac7a8782-a618-5e5c-960d-567792618eb6", "type": "other", "website": null, "images": [ { "expanded_size": 45076116, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ebbeab24f884000f67eab85cbaedf4772ce1db18c89f032176a902ecfd5c374f" }, { "expanded_size": 45291239, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:003b96d665eb0903c828f1737f08b967a40a35cdad1f599f18188a2153141e17" }, { "expanded_size": 45334790, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:cbb569201ece772feccf95c625a9435375768641a8ed4f872d70562cb77ffc42" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.2", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.18.0-beta.1": { "identifier": "09ffe504-0fa3-5ff6-a869-5e3cdacab55a", "type": "other", "website": null, "images": [ { "expanded_size": 45050697, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:1d46fd5d6e0054f05ccf9e0056f75f9fcd317b65b549ed910f3efdcefff0d538" }, { "expanded_size": 45265813, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:909d345d47fed6be677e7b99b305a7ddfe6a979c75729838a9cca87b376495be" }, { "expanded_size": 45309357, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:eb27ef67bc341a68d2395e3acd02d528026358e3560d9a49c2d407c3c9958c4e" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.18.0-beta.1", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0": { "identifier": "1f418ea9-5b3b-56c5-ae74-a86494dff3ec", "type": "other", "website": null, "images": [ { "expanded_size": 44902591, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fc00c947a0bfd2fb1d9e3747f0071023a74186cbe2be1c7cac1ed23ce43ca79b" }, { "expanded_size": 45117706, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f481b8e89ffc01aa102ac42bce559acf8f1fb7beee38a73f92f5da58d6d3bc8b" }, { "expanded_size": 45161259, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:60b4ec0b57d097e726347c64ac96bb33d9b8f30a6ff75e17a740fabc82c5d7b3" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.12": { "identifier": "78fe2ae3-89c5-5371-b02c-932a803b8788", "type": "other", "website": null, "images": [ { "expanded_size": 44902243, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:06a7b6460740d41c07405f3451c178497988995b7f33c0c6674b3cdfd8ed2fb6" }, { "expanded_size": 45117363, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3e5353a4dfcef1b2ee78bf6c10d0b5c355511214db45c828183e9067110399c1" }, { "expanded_size": 45160895, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:82b83f74839edf1eca66f66bb2fa11748466c623773ff19173ec2fabf6cefa40" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.12", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.11": { "identifier": "479219b3-682e-5f94-8b01-0073a360e866", "type": "other", "website": null, "images": [ { "expanded_size": 33450103, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:90190e1e208a1adf0e45fa9be5b6debbe7d347d7e865cb0bf7ff1cead09e72a6" }, { "expanded_size": 33665219, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:74e8368261c17fbfb36e82f15844a42f4416553cbd62943d59c7ae8bacbba71e" }, { "expanded_size": 33708759, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8d472f2800700a6b4ca02cedc06b5b7afe6e502fcdeccb3d2abd70e085c8848e" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.11", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.10": { "identifier": "1e6cdc35-2ae5-5f8b-9202-a99346cd8da6", "type": "other", "website": null, "images": [ { "expanded_size": 33665308, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5825426ca2877c664797cbc3d81ea084aed94d7bb1a3ae239d5a19bcb4bb2e5a" }, { "expanded_size": 33708850, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:f5d48c72d67194ef4aa8de72941c000922930375c56122e7b891b64b879b0daf" }, { "expanded_size": 33450199, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c31a1d7e8fc53b788dc3abef0eba5e0a682741115c770a55a43dfa0fcb63b431" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.10", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.9": { "identifier": "59d9a08a-3f06-5322-a477-71cd200cc53c", "type": "other", "website": null, "images": [ { "expanded_size": 33450130, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:eaa38c2f840f51be07e86388561a246422b02a4e590dc2e894d35d42ad9462eb" }, { "expanded_size": 33665256, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:68f03e6ca7eded1564cdd03009254568483747a8dafc33850050a85a3e097398" }, { "expanded_size": 33708795, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ccb67ff58e20b2c029017986315034ce292ebe50e92180c3dcadcb16435569dd" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.9", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.8": { "identifier": "b6215484-6de4-5481-b36b-369bbe291f61", "type": "other", "website": null, "images": [ { "expanded_size": 32019055, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b8d6e341883fcef164f2d5a91700385964340640c8070a7a523640e5c27b14fd" }, { "expanded_size": 32234165, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f39bb6a7426826db69e83ac69cc48887aca7d6b5c5b0abac81dbd11b787824bb" }, { "expanded_size": 32277714, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0772ab987c8e2678a883ebec97f1a9b6fd59bfba06954154cb0367d458fdda73" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.8", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.7": { "identifier": "a29d99a1-3298-579b-befd-a8b0b43ffee7", "type": "other", "website": null, "images": [ { "expanded_size": 32016470, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bcefddcdee317c0e0eff4e0a2509c0f9c9a335082c0758cff3aaf1ddb8dddb34" }, { "expanded_size": 32231593, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:179cba7d614d7723dd27d88b36059b96fc3987524eb2175c09f327c411b3bee5" }, { "expanded_size": 32275139, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:6761bdae4b0284f70bb817370653501bce7c93ffe8deac18aff3aedca46cef71" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.7", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.6": { "identifier": "902f8c19-4c3f-58e5-ba8f-8600bad2e3dc", "type": "other", "website": null, "images": [ { "expanded_size": 32018968, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6a95a65cb517d1d960f57a7f37a9268f4ee82710717853daae33e3bdac359fd9" }, { "expanded_size": 32234083, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:bbfbd1c3012cd32a935fafb29e8a36418ffae24b9c429cdb393d9c3589347255" }, { "expanded_size": 32277626, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4ccf468d83952857c7b68cfd4773b45db28eaa39621d76b0a2530c927fa2e0e5" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.6", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.5": { "identifier": "c72336e7-82f1-5794-ad50-b2e2c5d6cc34", "type": "other", "website": null, "images": [ { "expanded_size": 32020168, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:66d3bc836a15ed718607e17f1f19e5f7a009480ce270ab46e2a07156d33e6487" }, { "expanded_size": 32235280, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:22bf5be2db967c1dc9fd6c89709f3e8f35e85b32293aea2c13242f0c9cd447fb" }, { "expanded_size": 32278816, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:dce3e69b11c4c061a7a8d6e1a5561f08c669a1264faa7e01520baa48761efe76" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.5", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.4": { "identifier": "daf4e4cc-856a-564a-86b5-235474cb3f6a", "type": "other", "website": null, "images": [ { "expanded_size": 32017287, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:32c36ae330b01bfae26310bea8b5127653a44bcc0682d6d6f4b134ffe756c388" }, { "expanded_size": 32232410, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:1537ec8b497b65e2e19ccc6f9f8395f2ef2b5279b4cd74c060148905e3f92472" }, { "expanded_size": 32275952, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:0cd40c19c95603848858c0ba70832a590cb618aa7b42b42aa4c4c216fec8d642" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.4", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } }, "v1.17.0-beta.3": { "identifier": "aa9e8db5-c3b1-5498-9439-f42b37805758", "type": "other", "website": null, "images": [ { "expanded_size": 32012611, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:77bb3f00a5655122de36328126a7fdd29ac15fadf8bb218d5a9514c8abc74449" }, { "expanded_size": 32225824, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:04c733a7032e35fa836a7ebc3eee28d56ff824208bfc9aa874d0f9ce55451826" }, { "expanded_size": 32271289, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:fa033cf8990eeb2038d2c49ac3217c196cb3c4fbda093e81855f4e20a3be2060" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael@bluerobotics.com" }, { "name": "Patrick Jos\u00e9 Pereira", "email": "patrick@bluerobotics.com" }, { "name": "Arturo Manzoli", "email": "arturo@bluerobotics.com" } ], "filter_tags": [ "vehicle-control", "control-station", "ground-station", "navigation", "joystick", "mission-planning" ], "extra_links": {}, "tag": "v1.17.0-beta.3", "docs": null, "readme": "
\n
\n
\n
\n

Cockpit - A Modern Ground Control Software

\n

\n\ud83c\udf10 Live Demo \u2022\n \ud83d\udce6 Install \u2022\n \ud83d\udcd6 Documentation \u2022\n \ud83d\udcac Community\n

\n
\n


\n
\n
\n
\n


\n

\"Test,\n\"Downloads\"\n\"Latest\n\"Docker\"

\n
\n

\ud83c\udfaf What is Cockpit?

\n

An intuitive, customizable, and powerful ground control station software for remote vehicles of all types

\n

Cockpit is a web-based ground control station that aims to improve how you interact with remote vehicles. Whether you're piloting underwater ROVs, surface boats, aerial drones, or ground rovers, Cockpit provides an intuitive and highly customizable interface that adapts to your needs.

\n

\u2728 Key Highlights

\n
    \n
  • \ud83c\udf10 Universal Platform: Runs in your browser or as a native desktop application
  • \n
  • \ud83c\udfa8 Fully Customizable: Drag-and-drop widget interface that adapts to your workflow
  • \n
  • \ud83d\ude80 Multi-Vehicle Support: Control submarines, boats, drones and rovers from different interfaces in the same application
  • \n
  • \ud83d\udcf9 Advanced Video: Support for as many video streams as you need, with recording, snapshots, and real-time statistics
  • \n
  • \ud83d\uddfa\ufe0f Mission Planning: Sophisticated waypoint planning with automated survey patterns
  • \n
  • \ud83c\udfae Joystick Support: Extensive gamepad support with customizable button mappings
  • \n
  • \ud83d\udd27 Extensible: Advanced plugin system with DIY widgets, custom actions, data-lake variables, and input elements
  • \n
  • \ud83d\udcca Data Rich: Comprehensive telemetry logging and real-time data visualization
  • \n
\n
\n

\ud83d\ude80 Quick Start

\n

Accessing Cockpit

\n

- Option 1: Try it Online

\n

If you just want to take a look at Cockpit, you can visit our live demo to experience it instantly in your browser.

\n

- Option 2: Download the Native App (Recommended)

\n

Download the latest release of our native desktop app for your platform.\nIt offers the best performance, as well as all the features available in the app.

\n

We have dedicated builds for every Desktop platform, so make sure you're using the correct one to have the best possible experience.\n- Windows: .exe\n- macOS (Intel): x64 .dmg\n- macOS (Apple Silicon): arm64 .dmg\n- Linux: .AppImage\n- Steam OS: .Flatpak

\n

- Option 3: Install the BlueOS Extension (Lite version!)

\n

If you're using BlueOS, you can install Cockpit from the Extensions page.

\n
\n

\u26a0\ufe0f Due to technical limitations of web browsers, the BlueOS Extension has limited functionality compared to the native app.

\n

See below for details.

\n
\n

- Option 4: Docker (for Developers)

\n

bash\ndocker run -p 8080:8080 bluerobotics/cockpit:latest

\n

Once you have Cockpit running, it's time to connect to your vehicle:

\n

Connecting to your vehicle

\n

If you're running Cockpit as a BlueOS extension, it should automatically connect to your vehicle, but if you're running the native app and you have BlueOS in your vehicle, you can use the Vehicle Discovery dialog to easily connect to it. If for some reason you missed this dialog during boot you can just head to Menu>Settings>General and find the \"Search for vehicles\" button there.

\n

If you have your vehicle connected through a serial interface, like a USB-Serial radio, you should manually configure the connection address. To do that activate the checkmark for \"Mavlink2Rest connection\" under Menu>Settings>General and use serial:path/to/serial/device?baudrate=desired-baudrate there.

\n

Streaming video

\n

If you want to stream video from your vehicle and you're not using BlueOS, you will need to run mavlink-camera-manager manually in the same machine as Cockpit, activate the checkmark for \"WebRTC connection\" and use ws://127.0.0.1:6020 there.

\n
\n

\ud83d\udda5\ufe0f Browser vs Desktop: What's the Difference?

\n

Most of the motivation behind having distinct versions with different features is tied to browsers' limitations -- more specifically, the need for secure context to access the most powerful APIs (e.g., filesystem, geolocation, serial communication), which is usually not the case when you're serving Cockpit from a hosted webpage with issued certificates. To overcome this, we moved to shipping additional features in a native app, built over Electron, which also enables us to embed functionality beyond what the browser can provide.

\n

Below is a table summarizing the current status, but in general, you can expect more features and better performance on the native app:

\n
\n\n| **Feature** | **\ud83c\udf10 Browser** | **\ud83d\udda5\ufe0f Desktop** |\n|-------------|---------------|----------------|\n| **Joystick Support** | Only when tab and window are in focus | \u2705 Window can be unfocused and in the background |\n| **Video** | Needs to be downloaded and merged into a working video using the Desktop app | \u2705 Final MP4 file saved directly to your folders |\n| **Snapshots** | Needs to be downloaded | \u2705 Saved directly to your folders |\n| **Vehicle Discovery** | \u274c Not available | \u2705 Auto-scan for vehicles in the network|\n| **Updates** | Manual updates required | \u2705 Auto-updates / update notifications |\n| **System Monitoring** | Memory usage only | \u2705 CPU and Memory tracking |\n| **Workspace Capture** | \u274c Not available | \u2705 Full interface screenshots |\n| **Performance** | Standard | \u2705 Optimized build for each system |\n| **Installation** | \u2705 No install needed | Requires download |\n| **Multi-platform** | \u2705 Any device | Windows, macOS, Linux |\n\n
\n

\ud83c\udfaf Quick Decision Guide

\n

Choose Desktop for complete experience, auto-updates, system integration, and optimal performance.\nChoose Browser for testing, quick access, or when you can't install applications.

\n
\n

\ud83d\udca1 Pro Tip: Start with the live demo to get familiar with Cockpit, then download the desktop app for regular use to unlock all capabilities!

\n
\n
\n

\ud83c\udf9b\ufe0f Supported Vehicles

\n

Vehicle support is currently focused on ArduPilot-based autopilots communicating over MAVLink.

\n

Since Cockpit was created and is maintained by Blue Robotics, we actively test the application every day against ArduSub and ArduRover vehicles, which we sell, so you can expect the best experience with ROVs and boats.

\n

We currently consider the application to fully cover direct control for both submarines and boats, and partially cover automated missions. Currently, Cockpit supports creating missions with basic waypoints and polygon-based surveys. Missions requiring advanced navigation commands and control structures, like loitering, geofencing, and servo control, are not yet supported.

\n

Aerial vehicles (including those running ArduCopter and ArduPlane autopilot firmware) have initial support, including dedicated widgets for takeoff and landing.

\n

ArduCopter support has been physically tested, but the primary development team doesn't perform regular tests on any aerial vehicles, so use it at your own risk (also, PRs are very much welcome!).

\n
\n\n\n\n\n\n\n
\n
\nSubmarines
\nArduSub\n
\n
\nSurface Boats
\nArduRover\n
\n
\nDrones
\nArduCopter\n
\n
\n
\n

\ud83c\udfa8 Features Overview

\n

\ud83d\udda5\ufe0f Customizable Interface

\n
    \n
  • Drag-and-drop widgets for complete layout control
  • \n
  • Multiple views for different operational modes
  • \n
  • Responsive design that works on almost any screen size
  • \n
  • Custom themes with customizable colors and glass effects
  • \n
\n

\ud83c\udfae Vehicle Control

\n
    \n
  • ArduPilot support for submarines, drones, aerial vehicles and rovers
  • \n
  • MAVLink protocol for reliable communication
  • \n
  • Joystick integration with support for almost any controller, including custom ones
  • \n
  • Custom button mappings for different vehicle types
  • \n
  • Real-time telemetry with customizable data displays
  • \n
\n

\ud83d\udcf9 Video Streaming

\n
    \n
  • WebRTC-based streaming for low-latency video
  • \n
  • Multi-stream support with customizable screen placement
  • \n
  • Video recording with automatic processing and telemetry overlay generation
  • \n
  • Snapshot capture with GPS metadata
  • \n
  • Video statistics for monitoring stream quality
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning

\n
    \n
  • Interactive map interface with drag-and-drop waypoints
  • \n
  • Survey generation for automated area coverage
  • \n
  • Points of interest management
  • \n
  • Mission import/export for easy backup and reuse
  • \n
  • Real-time mission monitoring and execution
  • \n
\n

\ud83d\udcca Data Management

\n\n

\ud83d\udd0c Extensibility

\n
    \n
  • Plugin architecture for custom widgets
  • \n
  • JavaScript API for external integrations
  • \n
  • HTTP actions for calling external services
  • \n
  • MAVLink actions for sending custom commands
  • \n
  • JavaScript actions for completely custom integrations
  • \n
\n
\n

\ud83d\udce6 Available Widgets

\n

Cockpit provides an extensive list of widgets for you to customize your experience. They are divided into Regular and Mini Widgets and can be placed anywhere on your screen, including freely in your Views or inside Containers like the top and bottom bars.

\n

You can read more about the available widgets in our docs.

\n
\n

\ud83d\ude80 Advanced Features

\n

One of our goals in Cockpit is to provide powerful integration tools, so you can interface with any system, no matter how complex it is. To accomplish that, we designed tools like the Cockpit Actions, which allow you to perform custom tasks (e.g., run arbitrary code, call external APIs), and the Data Lake, which provides a centralized place for you to store and retrieve data.

\n

Be sure to check our docs for more information on how to take advantage of these powerful tools.

\n
\n

\u26a0\ufe0f Current Limitations

\n

While Cockpit is a powerful and feature-rich ground control station, there are some current limitations to be aware of:

\n

\ud83d\ude81 Vehicle Support Gaps

\n
    \n
  • [PX4 autopilots]: Cockpit's MAVLink functionality is mostly generic, so it is expected that most available features will also work with PX4 autopilot firmware. That said, the core development team does not actively test with PX4 vehicles, so please open a documenting issue (or ideally a solving pull request) for any problems you encounter.
  • \n
  • Aerial and Ground vehicles: Although recognized by the application, those types of vehicles have limited support and testing
  • \n
  • Contributions welcome: We're actively seeking community help to add support for PX4 vehicles as well as improve the support for Aerial and Ground vehicles on Ardupilot
  • \n
\n

\ud83d\uddfa\ufe0f Mission Planning Limitations

\n
    \n
  • Geofencing: Not currently supported in mission planning
  • \n
\n
\n

\ud83d\udca1 Help Us Improve: Many of these limitations represent opportunities for community contributions. Check our GitHub Issues for specific areas where help is needed!

\n
\n
\n

\ud83c\udfd7\ufe0f Architecture

\n

Cockpit is built with modern web technologies, which help us advance development quickly and easily receive external contributions. Here you can find part of our stack:

\n
    \n
  • Frontend: Vue.js 3 with TypeScript and Composition API
  • \n
  • UI Library: Vuetify 3 for Material Design components
  • \n
  • Build System: Vite for fast development and optimized builds
  • \n
  • Desktop: Electron for native application packaging
  • \n
  • Communication: WebSocket and WebRTC for real-time data
  • \n
\n
\n

\ud83e\udd1d Contributing

\n

We welcome contributions! We don't have a contribution guide yet, but you can help us in different ways:

\n
    \n
  • \ud83d\udc1b Bug Reports: Help us improve by reporting issues
  • \n
  • \ud83d\udca1 Feature Requests: Suggest new capabilities
  • \n
  • \ud83d\udd27 Code Contributions: Submit pull requests
  • \n
  • \ud83d\udcdd Documentation: Improve our docs and examples
  • \n
\n
\n

\ud83d\udee0\ufe0f Development Setup

\n

Prerequisites

\n
    \n
  • Node.js 18+ and yarn package manager
  • \n
  • Git with submodule support
  • \n
\n

Development Workflow

\n
    \n
  1. Fork the repository
  2. \n
  3. Create a feature branch
  4. \n
  5. Make your changes
  6. \n
  7. Submit a pull request
  8. \n
\n

Quick Development Start

\n

```bash

\n

Clone with submodules

\n

git clone --recurse-submodules https://github.com/bluerobotics/cockpit.git\ncd cockpit

\n

Install dependencies

\n

yarn install

\n

Start minimal development server (for testing the Lite version, in a browser)

\n

yarn dev

\n

Start Electron development server (for testing the full application)

\n

yarn dev:electron

\n

Fix style issues (before making a pull request)

\n

yarn lint:fix\n```

\n

The development server will start at http://localhost:5173 with hot reloading enabled.

\n
\n

\ud83d\udccc Submodules: This repository relies on Git submodules. When submodules are updated (e.g., after pulling changes), run the following command to keep your development environment working:\nbash\ngit submodule update --init --recursive

\n
\n

Testing PR Builds on ARM-based macOS machines (Apple Silicon)

\n

PR builds are not code-signed by Apple, so macOS will block them by default via Gatekeeper. To bypass that, after installing the .dmg, run the following command:\nbash\nxattr -d com.apple.quarantine /Applications/Cockpit.app

\n

Backend Services (Optional)

\n

For video support, Cockpit relies on a backend service called mavlink-camera-manager.\nThis service is included by default on BlueOS, but if you want to use Cockpit without BlueOS installed on your vehicle, you should install it in the vehicle or in your top-side computer.

\n

Vehicle Simulation

\n

If you don't have a vehicle, or prefer to test the application against a simulated one, you can do it with our Docker Compose:\n```bash

\n

Start ArduSub simulation

\n

docker-compose -f sim.yml --profile ardusub up

\n

Other profiles: arducopter, ardurover, arduplane

\n

```

\n
\n

\ud83d\udcda Documentation & Support

\n\n
\n

\ud83d\udcc4 License

\n

Cockpit is dual-licensed:\n- AGPL-3.0: For open-source use\n- Commercial License: For proprietary applications

\n

See LICENSE.md for details.

\n
\n

\ud83c\udfe2 About Blue Robotics

\n
\n\n

On a mission to enable the future of marine robotics

\n

\n\ud83c\udf10 Website \u2022\n \ud83d\udc19 GitHub \u2022\n \ud83d\udcfa YouTube\n

\n
\n
\n
\n

\u2b50 Star us on GitHub if you find Cockpit useful!

\n

Made with \ud83d\udc99 by the Blue Robotics team and contributors worldwide

\n
", "support": "https://discuss.bluerobotics.com/c/bluerobotics-software", "requirements": null, "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8000/tcp": {} }, "HostConfig": { "PortBindings": { "8000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 141209, "last_updated": "2026-04-01T00:30:50.178997Z", "date_registered": "2023-01-30T01:40:41.340441Z" } }, { "identifier": "bluerobotics.ping-viewer-next", "name": "Ping Viewer Next", "website": "https://github.com/bluerobotics/ping-viewer-next", "docker": "bluerobotics/blueos-ping-viewer-next", "description": "Use PingProtocol devices through webservices.", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/ping-viewer-next/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/bluerobotics/company_logo.png", "versions": { "1.0.0-beta.17": { "identifier": "d86e24b5-6c4f-5a9c-9a4f-ab7601b868a7", "type": "device-integration", "website": null, "images": [ { "expanded_size": 130713099, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:da642104898fa0ea89848a2c049dc8395899a96fddae25b24b01303dc84cba40" }, { "expanded_size": 132511127, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:72e894e7eb54567362da23a1f4a2543ffa118489c93c81ffa565cc21e00f050c" }, { "expanded_size": 132287350, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:df052d16a574337b70488ee85ec5d209d424f271f34b224641929c25d7b8d16d" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.17", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.16": { "identifier": "51672c55-a6a8-590f-8240-fce210d58839", "type": "device-integration", "website": null, "images": [ { "expanded_size": 130718740, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7834f95430d16473fc3ad3c281e5402cb0e3c51e3caad9e3846259eb639fbb7c" }, { "expanded_size": 132511775, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a8b3630e2f0db07ecd7ab958399d7fb6f4f69b2530168fe874a20c49fc31430b" }, { "expanded_size": 132287510, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:21598ab17dc93119d269ebffa638f19bc6a5808883e2027fe8317db25a23f827" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.16", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.15": { "identifier": "48573733-6aff-5cc3-b637-9e4cb5986ddd", "type": "device-integration", "website": null, "images": [ { "expanded_size": 130710083, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:44aa87b94305f5d34b431d0ddd48c14e1bbe2124b674b5d4484beaefdce783e2" }, { "expanded_size": 132505733, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:ba45f337d000bf234f715c4f34cbe80f938a3ed5ac20050c3f7855779c26cd35" }, { "expanded_size": 132282848, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a56562c469fc0f8bc937ab9ee83ba86d8e130ec02c26cf22af10a68823ed4f1a" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.15", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.14": { "identifier": "fa4b95b8-28b3-55f8-a84f-96205c0004f2", "type": "device-integration", "website": null, "images": [ { "expanded_size": 130781879, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:aff0919572c441a57cb51d610a1c58cbde8c6eb5b19109f33a6a5494a3ec49f4" }, { "expanded_size": 132549714, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3d56957d11732560d4228ef9169aab5cff0bc8cb57b12e1186b3eccf9c243df7" }, { "expanded_size": 132391513, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:2fdf3bc204e0191e1a6e4ae7b5f62891812a41455f1cb7a92a6d31c90992fbf2" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.14", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.13": { "identifier": "cdaa0625-4080-522b-ab2a-ec6ba8524a3e", "type": "device-integration", "website": null, "images": [ { "expanded_size": 130759650, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:852a6de44e0510b605d4ba7f1ef876e7127e3da5b82361a3ef498a3bb45409a1" }, { "expanded_size": 132531429, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:7f5937fc73e268fffe00c09ea15e57b351bd13d948eff99ff4a79aa3b72c8053" }, { "expanded_size": 132371017, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:9799e894d1804bb45c33faee760b7dc4af797ecafc587b1cc569336e1f3865ca" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.13", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.12": { "identifier": "1594964d-5a98-5178-ba5d-2f4af7af0b32", "type": "device-integration", "website": null, "images": [ { "expanded_size": 109174215, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:85f0efebd4b3a88bc7ce8069a4243f7307c0a449bf3865e07c2a5836b43930c1" }, { "expanded_size": 107559168, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:0eebf7eeae2da523bdef37e18c5a7767168505fa99b4488d20ab619b70c4cca7" }, { "expanded_size": 109337571, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0d8f5812e2b76d302415d70927418db6e43369c5b769c360886315760a55d5d4" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.12", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.11": { "identifier": "7a0fa5bb-f700-5211-b046-5ce1acbbd58f", "type": "device-integration", "website": null, "images": [ { "expanded_size": 107570730, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8552918b24f3472d6bf83d61df64e3bad4527fb669f15cca3a611800843befac" }, { "expanded_size": 109343569, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:4198fd56b168b38a43caa793480ac0fc82c50d573ad836547f1f0d14dce96daa" }, { "expanded_size": 109175399, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:701b49843c5e5e238507a42d0c8130fbdb00c101a9ffb617eaeffa9aaeac91b7" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.11", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.10": { "identifier": "e195f336-fb35-5826-ae9f-0db0491f35ce", "type": "device-integration", "website": null, "images": [ { "expanded_size": 95474107, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:60376c8105f66d141efc8b912495389cb9600dffeb754f77f9e875d88ff2306f" }, { "expanded_size": 93738049, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:624c27016cf1bc8c45b4726d4e2a4a1ae77c78316c86dce2ac795ae307feecde" }, { "expanded_size": 95302854, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b4386b8fefb39796403c35a632a741ef38a8004cd07ee3655bb7a65c5836009a" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.10", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.9": { "identifier": "f48e432e-f7d1-5e81-8662-151dd1a86174", "type": "device-integration", "website": null, "images": [ { "expanded_size": 93740408, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8c2e45c46491962d27858a6972dfcf4d98f19dd2fe94b477959e4764a726751c" }, { "expanded_size": 95281256, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:271a7c560f37648313a8482c57ab61a576ba9b08051a5e0417a9b1f7d5f824b9" }, { "expanded_size": 95257664, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:dca9b8afff5a2279c868d3e94bb09b89bce58f7e51cc718288ddde02ef27eddc" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.9", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.8": { "identifier": "8d104cbf-926e-5d43-be07-d560eaa3eae8", "type": "device-integration", "website": null, "images": [ { "expanded_size": 69717483, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:fdd42befee90ceddf9309f6ff0d542c65e0a54ba360d337e8ff53e37d0e4d90b" }, { "expanded_size": 71305228, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:293b42b7bfa916414ae09d9de098f2c26d6e64e3fe4f16b9d8b1627523f6ac0a" }, { "expanded_size": 71146357, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:201a1d28fbdfdf3a933b61812e01f07651439e188c5d3b1c4c919a645694d0a2" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.8", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs", "/usr/blueos/extensions/ping-viewer-next/recordings:/app/recordings" ] } } }, "1.0.0-beta.7": { "identifier": "94592f21-3c85-5b91-b107-88cd2dd0a7cd", "type": "device-integration", "website": null, "images": [ { "expanded_size": 69716844, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:5151c04f3120594eb31350b8604eac8434c0ec51359c2db6b0c743b724913010" }, { "expanded_size": 71305380, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:47b56ff781dc1f81dbf637959febc7773fe7032fcbb57282726371773c88e5eb" }, { "expanded_size": 71146639, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:93793f93b4c2c5955b12d308554fb607d9ca3322e8f8bac3b601686bec5b631d" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.7", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs" ] } } }, "1.0.0-beta.6": { "identifier": "c5d72555-9554-57c0-b153-a070d3e67143", "type": "device-integration", "website": null, "images": [ { "expanded_size": 67578651, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ec60fc73d20a0675d80124b14b6cd96f10acab00359eae440b2ef062636ebcae" }, { "expanded_size": 69218619, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:745ab26cc518cba1d701c0dcc6ca4b31750c6629e138e5579482cecfc9d5b62b" }, { "expanded_size": 69029826, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b91256b8c53c4e98ad7b1301c096c5572ef6242949f2046aeddc3c1af27f33b0" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "sonar", "ping-protocol" ], "extra_links": {}, "tag": "1.0.0-beta.6", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Manual Instalation

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nbluerobotics.ping-viewer-next

\n

Ping Viewer Next

\n

1.0.0-beta.6

\n

{\n \"ExposedPorts\": {\n \"6060/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"6060/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

\n

Cockpit Widgets

\n

For each connected ping device, provides a widget accessible through Cockpit as an\nAutomatic External Iframe.

\n

Requires BlueOS >= 1.4.

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs" ] } } }, "1.0.0-beta.5": { "identifier": "192bc28a-6abd-5d03-aeff-1940078a7a4c", "type": "education", "website": null, "images": [ { "expanded_size": 66844751, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:cb538b36b713081458cf25a42e8a55a67154f1471685a63f7380a1e9890cc69f" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "rov", "robot" ], "extra_links": {}, "tag": "1.0.0-beta.5", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nraulelektron.ping-viewer-next

\n

Ping Viewer Next

\n

0.0.0

\n

{\n \"ExposedPorts\": {\n \"8080/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"8080/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs" ] } } }, "1.0.0-beta.4": { "identifier": "3435f8ae-2417-5e6d-93fa-85dcb553d51b", "type": "education", "website": null, "images": [ { "expanded_size": 66778448, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:53abba4e8472e41fc2f150a64ce6df8a3afeb8347c085b59fd24d3a0186f7a5b" }, { "expanded_size": 68169943, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:1eddb2da1fa5bc7a520455b4c872c4b97ed4d5e91bde15d90f7303c490d6763e" } ], "authors": [ { "name": "Raul Victor Trombin", "email": "raulvtrombin@gmail.com" } ], "filter_tags": [ "rov", "robot" ], "extra_links": {}, "tag": "1.0.0-beta.4", "docs": null, "readme": "

BlueOS's Ping Viewer Next Extension

\n

Instructions

\n

Access the extensions manager and install with the following parameters:

\n

Extensions Manager:

\n

shell\nblueos.local/tools/extensions-manager

\n

Parameters:

\n

```shell\nraulelektron.ping-viewer-next

\n

Ping Viewer Next

\n

0.0.0

\n

{\n \"ExposedPorts\": {\n \"8080/tcp\": {}\n },\n \"HostConfig\": {\n \"Privileged\": true,\n \"PortBindings\": {\n \"8080/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n },\n \"NetworkMode\": \"host\"\n }\n}\n```

", "support": null, "requirements": null, "company": { "about": "Control PingProtocol based hardware using webservices", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "6060/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/usr/blueos/extensions/ping-viewer-next/logs:/app/logs" ] } } } }, "repo_info": { "downloads": 10278, "last_updated": "2026-03-16T23:21:06.030866Z", "date_registered": "2025-01-27T19:05:48.437826Z" } }, { "identifier": "rafaellehmkuhl.websocket-streamer-for-cockpit", "name": "Data Streaming to Cockpit via WebSocket (Example Extension)", "website": "https://github.com/rafaellehmkuhl/BlueOS-WebSocket-Server-For-Cockpit-Extension", "docker": "rafaellehmkuhl/blueos-websocket-server-for-cockpit", "description": "Example extension demonstrating how to create a WebSocket server that streams data-lake variables to Cockpit.", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rafaellehmkuhl/websocket-streamer-for-cockpit/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/rafaellehmkuhl/company_logo.png", "versions": { "0.1.2": { "identifier": "0ce8ff91-6d3a-50af-88ff-612d4641f5d5", "type": "example", "website": "https://github.com/rafaellehmkuhl/BlueOS-WebSocket-Server-For-Cockpit-Extension", "images": [ { "expanded_size": 49928806, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:eed5c78076a4f3c73efde7654ccd516c5be6af52ef37498197e1d7ccb4a321d2" }, { "expanded_size": 50224721, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6be20f6e54b4878cb60c0676887d008d072927bed6627eb8d30842ec131fdbf3" }, { "expanded_size": 45675955, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a8a32c040d89e863902a017a29c57c63af9ae05ddfd74489a3e87657f6b24e80" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael.lehmkuhl93@gmail.com" } ], "filter_tags": [ "websocket", "cockpit", "data-lake" ], "extra_links": {}, "tag": "0.1.2", "docs": null, "readme": "No README available", "support": "https://github.com/rafaellehmkuhl/BlueOS-WebSocket-Server-For-Cockpit-Extension/issues", "requirements": null, "company": { "about": "Blue Robotics - Underwater Robotics Made Accessible", "name": "Blue Robotics", "email": "rafael@bluerobotics.com" }, "permissions": { "HostConfig": { "NetworkMode": "host" } } }, "0.1.1": { "identifier": "0132057e-425a-521a-903d-7287a2d6087b", "type": "example", "website": "https://github.com/rafaellehmkuhl/BlueOS-WebSocket-Server-For-Cockpit-Extension", "images": [ { "expanded_size": 49928859, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8283528a72ca878aeacad0885ccee2bbc2029a58961ed6ecf772dc892c7fbf9f" }, { "expanded_size": 50224902, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:7643370e25a169fdfd68a899b7abbe011a00fd89e3152fd06a4cf29dc380c7fa" }, { "expanded_size": 45675979, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f59183d51d9e6c174efbf3e0a3e3d93c7bb21e4d93bf88f5b9ead88d373107aa" } ], "authors": [ { "name": "Rafael Araujo Lehmkuhl", "email": "rafael.lehmkuhl93@gmail.com" } ], "filter_tags": [ "websocket", "cockpit", "data-lake" ], "extra_links": {}, "tag": "0.1.1", "docs": null, "readme": "No README available", "support": "https://github.com/rafaellehmkuhl/BlueOS-WebSocket-Server-For-Cockpit-Extension/issues", "requirements": null, "company": { "about": "Blue Robotics - Underwater Robotics Made Accessible", "name": "Blue Robotics", "email": "rafael@bluerobotics.com" }, "permissions": { "ExposedPorts": { "8765/tcp": {} }, "HostConfig": { "PortBindings": { "8765/tcp": [ { "HostPort": "8765" } ] } } } } }, "repo_info": { "downloads": 735, "last_updated": "2026-01-30T21:25:13.839149Z", "date_registered": "2026-01-30T20:31:13.810756Z" } }, { "identifier": "sonardyne.navsync_pro", "name": "Sonardyne: NavSync Pro", "website": "https://github.com/Sonardyne/blueos-sprint-nav-extension", "docker": "sonardyne/blueos-sprint-nav-extension", "description": "An extension that uses SPRINT-Nav HNav data to provide position updates to the BlueROV. This allows both vehicle tracking and position hold.", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/sonardyne/navsync_pro/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/sonardyne/company_logo.png", "versions": { "v1.0.10": { "identifier": "ca834222-ab59-58c9-a1ec-6a8ba75feeed", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 326153248, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:98454a27945e1515788576cf14782bf6550761b78400fe1e761480c9daed4cf1" }, { "expanded_size": 326156296, "platform": { "architecture": "arm", "variant": "v8", "os": "linux" }, "digest": "sha256:77dc04bf8a94b6094daca84d1e89581efaa6b654533531ec722723e0fd7aeaa4" }, { "expanded_size": 359823688, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5cec900d5a78a0b66b424305f05288dc9f0f847f5d9d9a399dd4c60e19ff8bf4" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.10", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.9": { "identifier": "2532abcd-7f2f-51dc-806c-a3b63dce9a57", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 687453125, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f2983ab3732954ec5dcab7b8ff36297f4bf8b88b0659606222a1f7cf2bbe7600" }, { "expanded_size": 687450722, "platform": { "architecture": "arm", "variant": "v8", "os": "linux" }, "digest": "sha256:e38a76e1c7cb366151a42ccf2148c9dbdcd21c67b343fb95f4fd9ecde56132c9" }, { "expanded_size": 734876911, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:93107377ac320ccdd1c11106025e7d1d3fa8dc164fec6b5c1b6c25c1549ccf5c" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.9", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.8": { "identifier": "5b6cf889-1de8-56a9-a624-4353959f380f", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 550240488, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c4f7b5de29b423fdc57713525bf15968716de88d80dae000949947b4adef5ea2" }, { "expanded_size": 564014391, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f094c40df5262fa2632cfbe64f12b3d74e7bcb4529ba0cb733e47d4628aee5ae" }, { "expanded_size": 579809042, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:e56302ce656c6e4f09f560f2aea5d2ea340be69ec97a0b17e39b03e993c1ccab" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.8", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.7": { "identifier": "175c6cca-c4c6-5a27-a878-96f8458d701d", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 550721782, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8a8f30f7b9c8c2640fcfd3ef1626c10fa3f0d3a3b6d9d0275ee9c860dd9c7ed5" }, { "expanded_size": 564201748, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5f602f289e90a3271012076544f8791500543b20b656d193479e9b922183d677" }, { "expanded_size": 581063638, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:d56a22d957b00e417fa7dd7a540889d4d23161216cbe2814de2176e8eec04924" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.7", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.6": { "identifier": "99679a4d-e956-5010-af0c-ee08127e7c27", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543935068, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:09406e970a2bc715b3e383b396fd4b03dd6b083247168fe666b3a48b8a9ea472" }, { "expanded_size": 557308877, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0d35f9e0b0cee572a1a815de6aa744f85b67842bd3a0d33308c148e2e20aca11" }, { "expanded_size": 573073438, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:36bcf2800f4d9ef5d970e53c647898671cd78175a43aa82f9b1ecc11b5061431" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.6", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.5": { "identifier": "26d37fab-0109-500f-8e05-94c18f55246f", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543876880, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f19c446693d4f581c9c4f419572a90cdaa3ab53efd62c31e44c3227ca2168d12" }, { "expanded_size": 557304774, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:1d20c095a811e48724e50c70003e729cfa710d113bdc30659f77a8ebf588d81f" }, { "expanded_size": 573014975, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4316ddf7c214e90636d2b84e3350ff1395dfaba20fc5920c904a6fb7c2fd1cf5" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.5", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.4": { "identifier": "27832fd3-fbf3-5858-a829-02e11b852d90", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543868925, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:208e65a722024e93143a194a3002af2e488b0e3b74a5d2051a2db832ac7e1cb3" }, { "expanded_size": 557287579, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:9ed2221422a828912ce848048821cb6d6d9e8d4dbae465dffe3fe24009447039" }, { "expanded_size": 573029012, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:19c7ba226a9fed80cc401aef0483e85346664430b17ecbcd4e36cf8d5bd63a27" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.4", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.3": { "identifier": "511895ee-ff95-5882-8098-b19fd1934774", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543867774, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:78beaabd0a70d25ef5bc85157e1122421ef9f8c421f9869096e9b73e8e57eedd" }, { "expanded_size": 557268813, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:12670a0f7b0ed6e9c17ad44049e1f64837f95b0e410f59e3b6fb5007982384b1" }, { "expanded_size": 573010895, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:64ac8ba3d889896bec419d2bf09d52af507d43b4c0ac77452f861e7a8b37fd8d" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.3", "docs": null, "readme": "

BlueOS Extension Information

", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.2": { "identifier": "87b57f15-256e-5a94-a475-d561c83dfdc4", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543881443, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:41d260710ff0cdbb41f2ff5469518b8870823a069578601b9a9b0bbec475721b" }, { "expanded_size": 557323967, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0840f1d861197945db98b0ca17c2211dca2b039494b18ec259f6866400a5be68" }, { "expanded_size": 573055046, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:76d2a668ec8d8fdbbc82e0807a3b54b1002bed73f6a2a65f8d0d46dadce21987" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.2", "docs": null, "readme": "No README available", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.1": { "identifier": "783baccc-23cf-51ed-b6eb-d682fa3b85ab", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543877988, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c363af047b2c531181ed31c09b9d5b5a971b1e16400a5bac1691de08d265064b" }, { "expanded_size": 557310517, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:dee41c5e5aa8ab7cab546fe9ec34113afc0ba430a05a10be8d45e513ad7372d5" }, { "expanded_size": 573060500, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:aa8af326413f95815ed47cd54d3d994c156c9a3526a932dcd25cd609c061498f" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "No README available", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ], "PortBindings": { "9091/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "ccd83cc9-03fe-5b6e-986c-aa768c4e3224", "type": "device-integration", "website": "https://www.sonardyne.com/", "images": [ { "expanded_size": 543897122, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:4eca4dbd894c55822394eebc93cf01070157dc57d1e5b754cd01562eb42efb4a" } ], "authors": [ { "name": "Sonardyne International Limited", "email": "support@sonardyne.com" } ], "filter_tags": [ "positioning", "navigation", "dvl", "ins", "position-hold" ], "extra_links": {}, "tag": "v1.0.0", "docs": null, "readme": "No README available", "support": "https://www.sonardyne.com/support-centre/", "requirements": null, "company": { "about": "", "name": "Sonardyne International Limited", "email": "support@sonardyne.com" }, "permissions": { "NetworkMode": "host", "ExposedPorts": { "9091/tcp": {} }, "HostConfig": { "Privileged": true, "NetworkMode": "host", "Binds": [ "/dev:/dev", "/usr/blueos/extensions/data-logger:/webui/logs" ] } } } }, "repo_info": { "downloads": 25698, "last_updated": "2026-02-11T11:25:19.836431Z", "date_registered": "2024-09-16T13:23:53.464854Z" } }, { "identifier": "itskalvik.ros2", "name": "ROS2", "website": "https://github.com/itskalvik/blueos-ros2", "docker": "itskalvik/blueos-ros2", "description": "Robot Operating System 2 (ROS2) extension for BlueOS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/itskalvik/ros2/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/itskalvik/company_logo.png", "versions": { "0.1.0": { "identifier": "3635e6e0-4c90-564e-ae80-871466f46749", "type": "other", "website": null, "images": [ { "expanded_size": 910795950, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:3146714ba9c54e70304ae3efd219dbe53047b9ff450183c3e25098bbbfc82a7f" }, { "expanded_size": 807160158, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:bcac5259321c2a1caa991b2a0f221f69552532757675c0210d726f31cd53d33d" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "sonar", "camera", "foxglove", "navigation", "mapping", "data-collection", "communication", "interaction", "positioning" ], "extra_links": {}, "tag": "0.1.0", "docs": null, "readme": "

\n\n\n

\n

The BlueOS ROS2 Extension bridges the BlueOS and ROS2 ecosystems, enabling advanced robotic applications and research on ArduPilot-based vehicles such as the BlueBoat and BlueROV2.

\n

This extension provides drivers and tools for controlling vehicles and visualizing onboard sensor data. It simplifies the process of setting up a ROS 2 environment for marine robotics by offering pre-configured packages for sonar, cameras, and vehicle control\u2014ready to use out of the box.

\n

In addition, it includes a web-based terminal for convenient access to the ROS 2 environment and integrates seamlessly with Foxglove for browser-based data visualization.

\n

\n\n

\n

\ud83d\ude80 Features

\n

This extension includes the following ROS 2 Jazzy packages:

\n\n

A Python-based control interface built on MAVROS\n * Supports GPS waypoint navigation (BlueBoat) and RC control (BlueROV2)\n * Includes methods for arming/disarming, takeoff/landing, setting home location, and waypoint following\n * Easily subclass or use as-is to skip writing repetitive boilerplate code

\n\n

A ROS 2 driver for GStreamer-based video streams, with support for intra-process communication to maximize performance.

\n\n

Drivers for Blue Robotics Ping1D altimeter and Ping360 scanning sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

Drivers and data processing tools for the Sonoptix Echo sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

A WebSocket bridge to stream ROS 2 data into the Foxglove web interface.\n * Fully compatible with the BlueOS Foxglove plugin

\n

\ud83d\udccb Prerequisites

\n
    \n
  • A 64-bit version of BlueOS is required.
  • \n
\n

\ud83d\udc49 Download the latest Raspberry Pi image from the BlueOS Releases page.

\n

\ud83e\uddf0 Installation

\n

You can install the ROS 2 Extension directly from the BlueOS App Store

\n

\n\n

\n

\u2699\ufe0f Usage

\n
    \n
  • Automatic Launch: The extension launches automatically when BlueOS boots.
  • \n
  • Web Terminal: Access the extension\u2019s terminal via the left-hand panel in the BlueOS UI.
  • \n
  • Persistent Storage: The extension links the following directories
  • \n
  • Host path: /usr/blueos/extensions/ros2/
  • \n
  • Container path: /root/persistent_ws/
  • \n
\n

Use this to store files like custom ROS 2 workspaces or configuration files that need to survive reboots.

\n

\n\n

\n

\ud83d\udee0\ufe0f Build and Run Locally

\n

To build the extension for multiple architectures (arm64, amd64) using Docker:

\n

1. Set Up Multi-Architecture Builder

\n

bash\ndocker buildx create --name multi-arch \\\n --platform \"linux/arm64,linux/amd64\" \\\n --driver \"docker-container\"\ndocker buildx use multi-arch

\n

2. Clone the Repository and Build the Container

\n

bash\ngit clone --recurse-submodules https://github.com/itskalvik/blueos-ros2\ncd blueos-ros2\ndocker compose build

\n

3. Run the Container

\n

bash\ndocker compose up -d

\n

The extension will be accessible at: http://localhost:4717/

\n

\ud83e\udd13 Manual Installation in BlueOS

\n
    \n
  • Connect to BlueOS in your browser:
  • \n
  • Via Wi-Fi AP: http://blueos-hotspot.local/
  • \n
  • On the same network: http://blueos-avahi.local/
  • \n
  • Navigate to the Extensions tab, then switch to the INSTALLED tab.
  • \n
  • Click the + button (bottom-right), and fill in the fields:
      \n
    • Extension Identifier: ItsKalvik.ROS2
    • \n
    • Extension Name: ROS2
    • \n
    • Docker image: YOURDOCKERHUBUSER/YOURDOCKERHUBREPO
    • \n
    • Docker tag: latest
    • \n
    • Original Settings:\n json\n {\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\",\n \"/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\",\n \"CpuQuota\": 200000,\n \"CpuPeriod\": 100000,\n \"Memory\": 1097152000\n },\n \"Env\": []\n }
    • \n
    \n
  • \n
  • Click CREATE to complete the installation.
  • \n
", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw" ], "Privileged": true, "NetworkMode": "host", "CpuQuota": 200000, "CpuPeriod": 100000, "Memory": 1097152000 }, "Env": [] } }, "0.0.4": { "identifier": "c25a91b6-cf7b-52e1-9d0a-35e0e5fa481c", "type": "other", "website": null, "images": [ { "expanded_size": 809428982, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:8e755e22e2f4d2623642f171099462652c19f2c38509e6096e30b6f2864c960d" }, { "expanded_size": 772372339, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:9aaadda4dda1f5c6bcf70f1ce2ec2328fe9bca6920d00ff73c70fa9b8320d9eb" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "sonar", "camera", "foxglove", "ardusub", "blueos", "robot" ], "extra_links": {}, "tag": "0.0.4", "docs": null, "readme": "

\n\n\n

\n

The BlueOS ROS2 Extension bridges the BlueOS and ROS2 ecosystems, enabling advanced robotic applications and research on ArduPilot-based vehicles such as the BlueBoat and BlueROV2.

\n

This extension provides drivers and tools for controlling vehicles and visualizing onboard sensor data. It simplifies the process of setting up a ROS 2 environment for marine robotics by offering pre-configured packages for sonar, cameras, and vehicle control\u2014ready to use out of the box.

\n

In addition, it includes a web-based terminal for convenient access to the ROS 2 environment and integrates seamlessly with Foxglove for browser-based data visualization.

\n

\n\n

\n

\ud83d\ude80 Features

\n

This extension includes the following ROS 2 Jazzy packages:

\n\n

A Python-based control interface built on MAVROS\n * Supports GPS waypoint navigation (BlueBoat) and RC control (BlueROV2)\n * Includes methods for arming/disarming, takeoff/landing, setting home location, and waypoint following\n * Easily subclass or use as-is to skip writing repetitive boilerplate code

\n\n

A ROS 2 driver for GStreamer-based video streams, with support for intra-process communication to maximize performance.

\n\n

Drivers for Blue Robotics Ping1D altimeter and Ping360 scanning sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

Drivers and data processing tools for the Sonoptix Echo sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

A WebSocket bridge to stream ROS 2 data into the Foxglove web interface.\n * Fully compatible with the BlueOS Foxglove plugin

\n

\ud83d\udccb Prerequisites

\n
    \n
  • A 64-bit version of BlueOS is required.
  • \n
\n

\ud83d\udc49 Download the latest Raspberry Pi image from the BlueOS Releases page.

\n

\ud83e\uddf0 Installation

\n

You can install the ROS 2 Extension directly from the BlueOS App Store

\n

\n\n

\n

\u2699\ufe0f Usage

\n
    \n
  • Automatic Launch: The extension launches automatically when BlueOS boots.
  • \n
  • Web Terminal: Access the extension\u2019s terminal via the left-hand panel in the BlueOS UI.
  • \n
  • Persistent Storage: The extension links the following directories
  • \n
  • Host path: /usr/blueos/extensions/ros2/
  • \n
  • Container path: /root/persistent_ws/
  • \n
\n

Use this to store files like custom ROS 2 workspaces or configuration files that need to survive reboots.

\n

\n\n

\n

\ud83d\udee0\ufe0f Build and Run Locally

\n

To build the extension for multiple architectures (arm64, amd64) using Docker:

\n

1. Set Up Multi-Architecture Builder

\n

bash\ndocker buildx create --name multi-arch \\\n --platform \"linux/arm64,linux/amd64\" \\\n --driver \"docker-container\"\ndocker buildx use multi-arch

\n

2. Clone the Repository and Build the Container

\n

bash\ngit clone --recurse-submodules https://github.com/itskalvik/blueos-ros2\ncd blueos-ros2\ndocker compose build

\n

3. Run the Container

\n

bash\ndocker compose up -d

\n

The extension will be accessible at: http://localhost:4717/

\n

\ud83e\udd13 Manual Installation in BlueOS

\n
    \n
  • Connect to BlueOS in your browser:
  • \n
  • Via Wi-Fi AP: http://blueos-hotspot.local/
  • \n
  • On the same network: http://blueos-avahi.local/
  • \n
  • Navigate to the Extensions tab, then switch to the INSTALLED tab.
  • \n
  • Click the + button (bottom-right), and fill in the fields:
      \n
    • Extension Identifier: ItsKalvik.ROS2
    • \n
    • Extension Name: ROS2
    • \n
    • Docker image: YOURDOCKERHUBUSER/YOURDOCKERHUBREPO
    • \n
    • Docker tag: latest
    • \n
    • Original Settings:\n json\n {\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\",\n \"/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\",\n \"CpuQuota\": 200000,\n \"CpuPeriod\": 100000,\n \"Memory\": 1097152000\n },\n \"Env\": []\n }
    • \n
    \n
  • \n
  • Click CREATE to complete the installation.
  • \n
", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw" ], "Privileged": true, "NetworkMode": "host" }, "Env": [] } }, "0.0.3": { "identifier": "d76ab909-2618-5f4d-a08e-9ef159f3cada", "type": "other", "website": null, "images": [ { "expanded_size": 808371213, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:367ec6924c0c6b911600c9b89e6e5eb676cfe2e1568e8ef3dcfd7d397cf550b1" }, { "expanded_size": 771271455, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:38a1a03a2ba5828904cc9031ad30b6b9952904d83d858e7d9f4866996a2bd33f" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "sonar", "camera", "foxglove", "ardusub", "blueos", "robot" ], "extra_links": {}, "tag": "0.0.3", "docs": null, "readme": "

\n\n\n

\n

The BlueOS ROS2 Extension bridges the BlueOS and ROS2 ecosystems, enabling advanced robotic applications and research on ArduPilot-based vehicles such as the BlueBoat and BlueROV2.

\n

This extension provides drivers and tools for controlling vehicles and visualizing onboard sensor data. It simplifies the process of setting up a ROS 2 environment for marine robotics by offering pre-configured packages for sonar, cameras, and vehicle control\u2014ready to use out of the box.

\n

In addition, it includes a web-based terminal for convenient access to the ROS 2 environment and integrates seamlessly with Foxglove for browser-based data visualization.

\n

\n\n

\n

\ud83d\ude80 Features

\n

This extension includes the following ROS 2 Jazzy packages:

\n\n

A Python-based control interface built on MAVROS\n * Supports GPS waypoint navigation (BlueBoat) and RC control (BlueROV2)\n * Includes methods for arming/disarming, takeoff/landing, setting home location, and waypoint following\n * Easily subclass or use as-is to skip writing repetitive boilerplate code

\n\n

A ROS 2 driver for GStreamer-based video streams, with support for intra-process communication to maximize performance.

\n\n

Drivers for Blue Robotics Ping1D altimeter and Ping360 scanning sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

Drivers and data processing tools for the Sonoptix Echo sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

A WebSocket bridge to stream ROS 2 data into the Foxglove web interface.\n * Fully compatible with the BlueOS Foxglove plugin

\n

\ud83d\udccb Prerequisites

\n
    \n
  • A 64-bit version of BlueOS is required.
  • \n
\n

\ud83d\udc49 Download the latest Raspberry Pi image from the BlueOS Releases page.

\n

\ud83e\uddf0 Installation

\n

You can install the ROS 2 Extension directly from the BlueOS App Store

\n

\n\n

\n

\u2699\ufe0f Usage

\n
    \n
  • Automatic Launch: The extension launches automatically when BlueOS boots.
  • \n
  • Web Terminal: Access the extension\u2019s terminal via the left-hand panel in the BlueOS UI.
  • \n
  • Persistent Storage: The extension links the following directories
  • \n
  • Host path: /usr/blueos/extensions/ros2/
  • \n
  • Container path: /root/persistent_ws/
  • \n
\n

Use this to store files like custom ROS 2 workspaces or configuration files that need to survive reboots.

\n

\n\n

\n

\ud83d\udee0\ufe0f Build and Run Locally

\n

To build the extension for multiple architectures (arm64, amd64) using Docker:

\n

1. Set Up Multi-Architecture Builder

\n

bash\ndocker buildx create --name multi-arch \\\n --platform \"linux/arm64,linux/amd64\" \\\n --driver \"docker-container\"\ndocker buildx use multi-arch

\n

2. Clone the Repository and Build the Container

\n

bash\ngit clone --recurse-submodules https://github.com/itskalvik/blueos-ros2\ncd blueos-ros2\ndocker compose build

\n

3. Run the Container

\n

bash\ndocker compose up -d

\n

The extension will be accessible at: http://localhost:4717/

\n

\ud83e\udd13 Manual Installation in BlueOS

\n
    \n
  • Connect to BlueOS in your browser:
  • \n
  • Via Wi-Fi AP: http://blueos-hotspot.local/
  • \n
  • On the same network: http://blueos-avahi.local/
  • \n
  • Navigate to the Extensions tab, then switch to the INSTALLED tab.
  • \n
  • Click the + button (bottom-right), and fill in the fields:
      \n
    • Extension Identifier: ItsKalvik.ROS2
    • \n
    • Extension Name: ROS2
    • \n
    • Docker image: YOURDOCKERHUBUSER/YOURDOCKERHUBREPO
    • \n
    • Docker tag: latest
    • \n
    • Original Settings:\n json\n {\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\",\n \"/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\",\n \"CpuQuota\": 200000,\n \"CpuPeriod\": 100000,\n \"Memory\": 1097152000\n },\n \"Env\": []\n }
    • \n
    \n
  • \n
  • Click CREATE to complete the installation.
  • \n
", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/ros2/:/home/persistent_ws/:rw" ], "Privileged": true, "NetworkMode": "host" }, "Env": [] } }, "0.0.2": { "identifier": "73cb64ae-7c8d-5e9f-8cd2-ecc9354013a8", "type": "other", "website": null, "images": [ { "expanded_size": 376536797, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ea234e5a6c6fd020d0194a73ee344438ad5bc3ea410992b953175406846e6d74" }, { "expanded_size": 360291008, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f879efe8ee0fedb720b377bb15be170a3211e56c917330db20cb85aac5fcbb92" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "robot" ], "extra_links": {}, "tag": "0.0.2", "docs": null, "readme": "

\n\n\n

\n

The BlueOS ROS2 Extension bridges the BlueOS and ROS2 ecosystems, enabling advanced robotic applications and research on ArduPilot-based vehicles such as the BlueBoat and BlueROV2.

\n

This extension provides drivers and tools for controlling vehicles and visualizing onboard sensor data. It simplifies the process of setting up a ROS 2 environment for marine robotics by offering pre-configured packages for sonar, cameras, and vehicle control\u2014ready to use out of the box.

\n

In addition, it includes a web-based terminal for convenient access to the ROS 2 environment and integrates seamlessly with Foxglove for browser-based data visualization.

\n

\n\n

\n

\ud83d\ude80 Features

\n

This extension includes the following ROS 2 Jazzy packages:

\n\n

A Python-based control interface built on MAVROS\n * Supports GPS waypoint navigation (BlueBoat) and RC control (BlueROV2)\n * Includes methods for arming/disarming, takeoff/landing, setting home location, and waypoint following\n * Easily subclass or use as-is to skip writing repetitive boilerplate code

\n\n

A ROS 2 driver for GStreamer-based video streams, with support for intra-process communication to maximize performance.

\n\n

Drivers for Blue Robotics Ping1D altimeter and Ping360 scanning sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

Drivers and data processing tools for the Sonoptix Echo sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

A WebSocket bridge to stream ROS 2 data into the Foxglove web interface.\n * Fully compatible with the BlueOS Foxglove plugin

\n

\ud83d\udccb Prerequisites

\n
    \n
  • A 64-bit version of BlueOS is required.
  • \n
\n

\ud83d\udc49 Download the latest Raspberry Pi image from the BlueOS Releases page.

\n

\ud83e\uddf0 Installation

\n

You can install the ROS 2 Extension directly from the BlueOS App Store

\n

\n\n

\n

\u2699\ufe0f Usage

\n
    \n
  • Automatic Launch: The extension launches automatically when BlueOS boots.
  • \n
  • Web Terminal: Access the extension\u2019s terminal via the left-hand panel in the BlueOS UI.
  • \n
  • Persistent Storage: The extension links the following directories
  • \n
  • Host path: /usr/blueos/extensions/ros2/
  • \n
  • Container path: /root/persistent_ws/
  • \n
\n

Use this to store files like custom ROS 2 workspaces or configuration files that need to survive reboots.

\n

\n\n

\n

\ud83d\udee0\ufe0f Build and Run Locally

\n

To build the extension for multiple architectures (arm64, amd64) using Docker:

\n

1. Set Up Multi-Architecture Builder

\n

bash\ndocker buildx create --name multi-arch \\\n --platform \"linux/arm64,linux/amd64\" \\\n --driver \"docker-container\"\ndocker buildx use multi-arch

\n

2. Clone the Repository and Build the Container

\n

bash\ngit clone --recurse-submodules https://github.com/itskalvik/blueos-ros2\ncd blueos-ros2\ndocker compose build

\n

3. Run the Container

\n

bash\ndocker compose up -d

\n

The extension will be accessible at: http://localhost:4717/

\n

\ud83e\udd13 Manual Installation in BlueOS

\n
    \n
  • Connect to BlueOS in your browser:
  • \n
  • Via Wi-Fi AP: http://blueos-hotspot.local/
  • \n
  • On the same network: http://blueos-avahi.local/
  • \n
  • Navigate to the Extensions tab, then switch to the INSTALLED tab.
  • \n
  • Click the + button (bottom-right), and fill in the fields:
      \n
    • Extension Identifier: ItsKalvik.ROS2
    • \n
    • Extension Name: ROS2
    • \n
    • Docker image: YOURDOCKERHUBUSER/YOURDOCKERHUBREPO
    • \n
    • Docker tag: latest
    • \n
    • Original Settings:\n json\n {\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\",\n \"/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\",\n \"CpuQuota\": 200000,\n \"CpuPeriod\": 100000,\n \"Memory\": 1097152000\n },\n \"Env\": []\n }
    • \n
    \n
  • \n
  • Click CREATE to complete the installation.
  • \n
", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/ros2/:/home/persistent_ws/:rw" ], "Privileged": true, "NetworkMode": "host" }, "Env": [ "NAVIGATION_TYPE=0", "FOXGLOVE=True" ] } }, "0.0.1": { "identifier": "c1d98179-2821-5887-8139-9d454a33d024", "type": "other", "website": null, "images": [ { "expanded_size": 299133958, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:98851140b60814f9a02ff80ce4f269f69a19f76dcc08e64eb5445d2ad06e2af7" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "robot" ], "extra_links": {}, "tag": "0.0.1", "docs": null, "readme": "

\n\n\n

\n

The BlueOS ROS2 Extension bridges the BlueOS and ROS2 ecosystems, enabling advanced robotic applications and research on ArduPilot-based vehicles such as the BlueBoat and BlueROV2.

\n

This extension provides drivers and tools for controlling vehicles and visualizing onboard sensor data. It simplifies the process of setting up a ROS 2 environment for marine robotics by offering pre-configured packages for sonar, cameras, and vehicle control\u2014ready to use out of the box.

\n

In addition, it includes a web-based terminal for convenient access to the ROS 2 environment and integrates seamlessly with Foxglove for browser-based data visualization.

\n

\n\n

\n

\ud83d\ude80 Features

\n

This extension includes the following ROS 2 Jazzy packages:

\n\n

A Python-based control interface built on MAVROS\n * Supports GPS waypoint navigation (BlueBoat) and RC control (BlueROV2)\n * Includes methods for arming/disarming, takeoff/landing, setting home location, and waypoint following\n * Easily subclass or use as-is to skip writing repetitive boilerplate code

\n\n

A ROS 2 driver for GStreamer-based video streams, with support for intra-process communication to maximize performance.

\n\n

Drivers for Blue Robotics Ping1D altimeter and Ping360 scanning sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

Drivers and data processing tools for the Sonoptix Echo sonar.\n * Nodes for direct hardware interfacing and real-time data visualization

\n\n

A WebSocket bridge to stream ROS 2 data into the Foxglove web interface.\n * Fully compatible with the BlueOS Foxglove plugin

\n

\ud83d\udccb Prerequisites

\n
    \n
  • A 64-bit version of BlueOS is required.
  • \n
\n

\ud83d\udc49 Download the latest Raspberry Pi image from the BlueOS Releases page.

\n

\ud83e\uddf0 Installation

\n

You can install the ROS 2 Extension directly from the BlueOS App Store

\n

\n\n

\n

\u2699\ufe0f Usage

\n
    \n
  • Automatic Launch: The extension launches automatically when BlueOS boots.
  • \n
  • Web Terminal: Access the extension\u2019s terminal via the left-hand panel in the BlueOS UI.
  • \n
  • Persistent Storage: The extension links the following directories
  • \n
  • Host path: /usr/blueos/extensions/ros2/
  • \n
  • Container path: /root/persistent_ws/
  • \n
\n

Use this to store files like custom ROS 2 workspaces or configuration files that need to survive reboots.

\n

\n\n

\n

\ud83d\udee0\ufe0f Build and Run Locally

\n

To build the extension for multiple architectures (arm64, amd64) using Docker:

\n

1. Set Up Multi-Architecture Builder

\n

bash\ndocker buildx create --name multi-arch \\\n --platform \"linux/arm64,linux/amd64\" \\\n --driver \"docker-container\"\ndocker buildx use multi-arch

\n

2. Clone the Repository and Build the Container

\n

bash\ngit clone --recurse-submodules https://github.com/itskalvik/blueos-ros2\ncd blueos-ros2\ndocker compose build

\n

3. Run the Container

\n

bash\ndocker compose up -d

\n

The extension will be accessible at: http://localhost:4717/

\n

\ud83e\udd13 Manual Installation in BlueOS

\n
    \n
  • Connect to BlueOS in your browser:
  • \n
  • Via Wi-Fi AP: http://blueos-hotspot.local/
  • \n
  • On the same network: http://blueos-avahi.local/
  • \n
  • Navigate to the Extensions tab, then switch to the INSTALLED tab.
  • \n
  • Click the + button (bottom-right), and fill in the fields:
      \n
    • Extension Identifier: ItsKalvik.ROS2
    • \n
    • Extension Name: ROS2
    • \n
    • Docker image: YOURDOCKERHUBUSER/YOURDOCKERHUBREPO
    • \n
    • Docker tag: latest
    • \n
    • Original Settings:\n json\n {\n \"NetworkMode\": \"host\",\n \"HostConfig\": {\n \"Binds\": [\n \"/dev:/dev:rw\",\n \"/usr/blueos/extensions/ros2/:/root/persistent_ws/:rw\"\n ],\n \"Privileged\": true,\n \"NetworkMode\": \"host\",\n \"CpuQuota\": 200000,\n \"CpuPeriod\": 100000,\n \"Memory\": 1097152000\n },\n \"Env\": []\n }
    • \n
    \n
  • \n
  • Click CREATE to complete the installation.
  • \n
", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw" ], "Privileged": true, "NetworkMode": "host" } } } }, "repo_info": { "downloads": 6828, "last_updated": "2025-08-04T20:31:51.594462Z", "date_registered": "2024-11-10T22:07:32.150637Z" } }, { "identifier": "itskalvik.sgptools", "name": "SGP-Tools", "website": "https://www.itskalvik.com/sgp-tools/blueos.html", "docker": "itskalvik/sgp-tools", "description": "A BlueOS Extension for Autonomous Approximate Bathymetric Surveys", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/itskalvik/sgptools/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/itskalvik/company_logo.png", "versions": { "0.0.3": { "identifier": "27dd9b1e-c920-5232-89c3-740acebdb377", "type": "other", "website": null, "images": [ { "expanded_size": 1374059495, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:d511687b4c0e7c3d36b5a8c7133ef6891b3e347613c3c28681c2f9d79fbd7d56" }, { "expanded_size": 1876685154, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:aa2e805d0cbc6f6c17d93fc730f21a486e9db5bc04cf6f0f8d1e9639de4f6339" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "sonar", "camera", "foxglove", "navigation", "mapping", "data-collection", "communication", "interaction", "positioning" ], "extra_links": {}, "tag": "0.0.3", "docs": null, "readme": "
\n

\n\n

\n
\n

A BlueOS extension that enables fully autonomous and adaptive bathymetric surveys on the BlueBoat and any ArduPilot-based ASV using SGP-Tools. Powered by the latest research in Informative Path Planning (IPP).

\n

\ud83c\udf1f Features

\n
    \n
  • \n

    Automatic Waypoint Generation: Generates efficient survey routes from your QGroundControl geofence polygon.

    \n
  • \n
  • \n

    Autonomous & Adaptive Missions: Arms, runs, and disarms the ASV automatically, adapting routes in real time based on sensor data.

    \n
  • \n
  • \n

    Supported Sensors: Works with Ping1D, GPS, and more (fully configurable in config.yaml).

    \n
  • \n
  • \n

    Persistent Data Logging: Stores mission logs and collected data as HDF5 files for post-mission analysis and map reconstruction.

    \n
  • \n
  • \n

    Onboard Visualization: Easily publish mission results for real-time or offline viewing in Foxglove or Jupyter Notebook.

    \n
  • \n
  • \n

    Easy Plan Upload: Drag and drop QGroundControl plan files with geofence directly into /usr/blueos/extensions/sgptools.

    \n
  • \n
  • \n

    Web Terminal Access: Launch, debug, and analyze missions through the BlueOS browser UI.

    \n
  • \n
  • \n

    Configurable & Extensible: Quickly modify sensors, mission types, and planner options via YAML config\u2014add new models with ease.

    \n
  • \n
  • \n

    Integrated Simulator: Test, develop, and validate survey missions in a realistic Gazebo & SITL environment using our dedicated simulator docker container.

    \n
  • \n
  • \n

    Minimal Setup: Installs in seconds from the BlueOS App Store; no complex setup required.

    \n
  • \n
  • \n

    Multi-Arch & Platform Support: Runs on ARM64 (Raspberry Pi), AMD64, and any ArduPilot-compatible ASV with sufficient memory (4GB+). |

    \n
  • \n
\n

\ud83d\udccb Prerequisites

\n
    \n
  • 64-bit BlueOS running on Raspberry Pi 4 or similar (ARM64) or AMD64 platform
  • \n
  • At least 4GB RAM + swap (see Swap Setup below)
  • \n
  • Compatible sensors (e.g., Ping1D sonar)
  • \n
\n

\ud83e\uddf0 Installation

\n

Install Directly from the BlueOS App Store

\n
    \n
  1. Open BlueOS in your browser (e.g., http://blueos.local/)
  2. \n
  3. Go to Extensions tab
  4. \n
  5. Find SGP-Tools in the App Store and click Install
  6. \n
  7. The extension will auto-launch on boot
  8. \n
\n

\u2699\ufe0f Usage

\n

Upload Your Survey Area Plan

\n
    \n
  1. Use QGroundControl to draw your geofence and home position
  2. \n
  3. \n

    Save as mission.plan\n

    \n\n

    \n\n
  4. \n
  5. \n

    Upload to /usr/blueos/extensions/sgptools/ in BlueOS (using File Browser in Pirate Mode)\n

    \n\n

    \n\n
  6. \n
\n

Configure (Optional)

\n
    \n
  • \n

    Advanced users can edit /root/config.yaml in the SGP-Tools web terminal to:

    \n
      \n
    • Select/modify sensor config
    • \n
    • Change mission type (AdaptiveIPP, IPP, Waypoint)
    • \n
    • Adjust optimization parameters
    • \n
    \n

    See the ros_sgp_tools README for configuration details.

    \n
  • \n
\n

Start Your Mission

\n
    \n
  1. Open the SGP-Tools web terminal from the BlueOS UI (left menu)
  2. \n
  3. \n

    Start the planner:\n ros2 launch ros_sgp_tools asv.launch.py

    \n
      \n
    • The vehicle will arm, start the survey, and collect data automatically
    • \n
    \n

    \n\n

    \n\n
  4. \n
\n

Data Visualization

\n
    \n
  • After the mission, you can visualize collected data via:\n ros2 launch ros_sgp_tools visualize_data.launch.py
  • \n
  • \n

    Then open Foxglove in your browser, and connect to your ASV\u2019s IP to view the bathymetry data

    \n
  • \n
  • \n

    \u26a0\ufe0f Do not run this during the mission, as it will disrupt the path planner

    \n

    \n\n

    \n\n
  • \n
\n

\ud83d\udcbe Persistent Storage

\n

The extension maps:

\n
    \n
  • Host: /usr/blueos/extensions/sgptools/
  • \n
  • Container: /root/ros2_ws/src/ros_sgp_tools/launch/data/
  • \n
\n

This directory is persistent and stores:

\n
    \n
  • mission.plan
  • \n
  • config.yaml
  • \n
  • All mission logs: IPP-mission-<timestamp>/
  • \n
  • Swap configuration script: config_swap.sh
  • \n
\n

\ud83e\udde0 Swap Setup & Memory Requirements

\n
    \n
  • At least 4GB of RAM or swap is required.
  • \n
  • The extension includes a swap configuration script:\n/usr/blueos/extensions/sgptools/config_swap.sh
  • \n
  • \n

    Increase swap (if needed):

    \n
      \n
    • In BlueOS, open a terminal (Pirate Mode), then run:
    • \n
    \n

    bash\nred-pill

    \n

    bash\nsudo bash /usr/blueos/extensions/sgptools/config_swap.sh

    \n
  • \n
\n

\ud83e\uddea Simulation & Testing with the SGP-Tools Simulator

\n

Want to experiment, develop, or validate missions before deploying to the water?

\n

The docker-sgp-tools repository includes a fully integrated Gazebo simulator container with all the tools you need for realistic software-in-the-loop (SITL) testing.

\n

\ud83d\ude80 Simulator Features

\n
    \n
  • \n

    Gazebo Simulation: Realistic 3D environment with the BlueBoat ASV model and waves.

    \n
  • \n
  • \n

    ArduPilot SITL: Software-in-the-loop autopilot runs your real survey missions.

    \n
  • \n
  • \n

    SGP-Tools & ROS 2: The full path planning stack, exactly as on your robot.

    \n
  • \n
\n

\ud83d\udcdd Notes and Troubleshooting

\n
    \n
  • \n

    Extension won\u2019t launch / out of memory:

    \n

    Run the swap setup, and ensure enough memory is available.

    \n
  • \n
  • \n

    No mission data or logs:

    \n

    Make sure the Ping 1D port is correctly listed in the config.yaml

    \n
  • \n
  • \n

    Cannot connect via Foxglove:

    \n

    Verify network settings, and that Foxglove bridge is running.

    \n
  • \n
\n

\ud83d\udcda More Info & Documentation

\n\n

\u26a0\ufe0f Disclaimer

\n

This extension, when executed properly, will take control of the ASV and could potentially collide the vehicle with obstacles in the environment. Please use it with caution.

", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/sgptools/:/root/ros2_ws/src/ros_sgp_tools/launch/data/:rw" ], "Privileged": true, "NetworkMode": "host" }, "Env": [ "DATA_FOLDER=/root/ros2_ws/src/ros_sgp_tools/launch/data/", "FCU_URL=tcp://0.0.0.0:5777@", "ROS_LOG_DIR=/root/ros2_ws/src/ros_sgp_tools/launch/data/logs/", "RCUTILS_COLORIZED_OUTPUT=1" ] } }, "0.0.2": { "identifier": "06ef47a9-9da7-5fd3-81dd-a869bfe90664", "type": "other", "website": null, "images": [ { "expanded_size": 1330267526, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:feaff8281f4695e26622373134325beb2960f653d66816b6c604af50b0123c10" }, { "expanded_size": 1779937606, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:7e19e8f1117dd38480f59c896c8ce5dd0feb2a204a2e5b013f6a5c12abdcec66" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "sonar", "camera", "foxglove", "navigation", "mapping", "data-collection", "communication", "interaction", "positioning" ], "extra_links": {}, "tag": "0.0.2", "docs": null, "readme": "
\n

\n\n

\n
\n

A BlueOS extension that enables fully autonomous and adaptive bathymetric surveys on the BlueBoat and any ArduPilot-based ASV using SGP-Tools. Powered by the latest research in Informative Path Planning (IPP).

\n

\ud83c\udf1f Features

\n
    \n
  • \n

    Automatic Waypoint Generation: Generates efficient survey routes from your QGroundControl geofence polygon.

    \n
  • \n
  • \n

    Autonomous & Adaptive Missions: Arms, runs, and disarms the ASV automatically, adapting routes in real time based on sensor data.

    \n
  • \n
  • \n

    Supported Sensors: Works with Ping1D, GPS, and more (fully configurable in config.yaml).

    \n
  • \n
  • \n

    Persistent Data Logging: Stores mission logs and collected data as HDF5 files for post-mission analysis and map reconstruction.

    \n
  • \n
  • \n

    Onboard Visualization: Easily publish mission results for real-time or offline viewing in Foxglove or Jupyter Notebook.

    \n
  • \n
  • \n

    Easy Plan Upload: Drag and drop QGroundControl plan files with geofence directly into /usr/blueos/extensions/sgptools.

    \n
  • \n
  • \n

    Web Terminal Access: Launch, debug, and analyze missions through the BlueOS browser UI.

    \n
  • \n
  • \n

    Configurable & Extensible: Quickly modify sensors, mission types, and planner options via YAML config\u2014add new models with ease.

    \n
  • \n
  • \n

    Integrated Simulator: Test, develop, and validate survey missions in a realistic Gazebo & SITL environment using our dedicated simulator docker container.

    \n
  • \n
  • \n

    Minimal Setup: Installs in seconds from the BlueOS App Store; no complex setup required.

    \n
  • \n
  • \n

    Multi-Arch & Platform Support: Runs on ARM64 (Raspberry Pi), AMD64, and any ArduPilot-compatible ASV with sufficient memory (4GB+). |

    \n
  • \n
\n

\ud83d\udccb Prerequisites

\n
    \n
  • 64-bit BlueOS running on Raspberry Pi 4 or similar (ARM64) or AMD64 platform
  • \n
  • At least 4GB RAM + swap (see Swap Setup below)
  • \n
  • Compatible sensors (e.g., Ping1D sonar)
  • \n
\n

\ud83e\uddf0 Installation

\n

Install Directly from the BlueOS App Store

\n
    \n
  1. Open BlueOS in your browser (e.g., http://blueos.local/)
  2. \n
  3. Go to Extensions tab
  4. \n
  5. Find SGP-Tools in the App Store and click Install
  6. \n
  7. The extension will auto-launch on boot
  8. \n
\n

\u2699\ufe0f Usage

\n

Upload Your Survey Area Plan

\n
    \n
  1. Use QGroundControl to draw your geofence and home position
  2. \n
  3. \n

    Save as mission.plan\n

    \n\n

    \n\n
  4. \n
  5. \n

    Upload to /usr/blueos/extensions/sgptools/ in BlueOS (using File Browser in Pirate Mode)\n

    \n\n

    \n\n
  6. \n
\n

Configure (Optional)

\n
    \n
  • \n

    Advanced users can edit /root/config.yaml in the SGP-Tools web terminal to:

    \n
      \n
    • Select/modify sensor config
    • \n
    • Change mission type (AdaptiveIPP, IPP, Waypoint)
    • \n
    • Adjust optimization parameters
    • \n
    \n

    See the ros_sgp_tools README for configuration details.

    \n
  • \n
\n

Start Your Mission

\n
    \n
  1. Open the SGP-Tools web terminal from the BlueOS UI (left menu)
  2. \n
  3. \n

    Start the planner:\n ros2 launch ros_sgp_tools asv.launch.py

    \n
      \n
    • The vehicle will arm, start the survey, and collect data automatically
    • \n
    \n

    \n\n

    \n\n
  4. \n
\n

Data Visualization

\n
    \n
  • After the mission, you can visualize collected data via:\n ros2 launch ros_sgp_tools visualize_data.launch.py
  • \n
  • \n

    Then open Foxglove in your browser, and connect to your ASV\u2019s IP to view the bathymetry data

    \n
  • \n
  • \n

    \u26a0\ufe0f Do not run this during the mission, as it will disrupt the path planner

    \n

    \n\n

    \n\n
  • \n
\n

\ud83d\udcbe Persistent Storage

\n

The extension maps:

\n
    \n
  • Host: /usr/blueos/extensions/sgptools/
  • \n
  • Container: /root/ros2_ws/src/ros_sgp_tools/launch/data/
  • \n
\n

This directory is persistent and stores:

\n
    \n
  • mission.plan
  • \n
  • config.yaml
  • \n
  • All mission logs: IPP-mission-<timestamp>/
  • \n
  • Swap configuration script: config_swap.sh
  • \n
\n

\ud83e\udde0 Swap Setup & Memory Requirements

\n
    \n
  • At least 4GB of RAM or swap is required.
  • \n
  • The extension includes a swap configuration script:\n/usr/blueos/extensions/sgptools/config_swap.sh
  • \n
  • \n

    Increase swap (if needed):

    \n
      \n
    • In BlueOS, open a terminal (Pirate Mode), then run:
    • \n
    \n

    bash\nred-pill

    \n

    bash\nsudo bash /usr/blueos/extensions/sgptools/config_swap.sh

    \n
  • \n
\n

\ud83e\uddea Simulation & Testing with the SGP-Tools Simulator

\n

Want to experiment, develop, or validate missions before deploying to the water?

\n

The docker-sgp-tools repository includes a fully integrated Gazebo simulator container with all the tools you need for realistic software-in-the-loop (SITL) testing.

\n

\ud83d\ude80 Simulator Features

\n
    \n
  • \n

    Gazebo Simulation: Realistic 3D environment with the BlueBoat ASV model and waves.

    \n
  • \n
  • \n

    ArduPilot SITL: Software-in-the-loop autopilot runs your real survey missions.

    \n
  • \n
  • \n

    SGP-Tools & ROS 2: The full path planning stack, exactly as on your robot.

    \n
  • \n
\n

\ud83d\udcdd Notes and Troubleshooting

\n
    \n
  • \n

    Extension won\u2019t launch / out of memory:

    \n

    Run the swap setup, and ensure enough memory is available.

    \n
  • \n
  • \n

    No mission data or logs:

    \n

    Make sure the Ping 1D port is correctly listed in the config.yaml

    \n
  • \n
  • \n

    Cannot connect via Foxglove:

    \n

    Verify network settings, and that Foxglove bridge is running.

    \n
  • \n
\n

\ud83d\udcda More Info & Documentation

\n\n

\u26a0\ufe0f Disclaimer

\n

This extension, when executed properly, will take control of the ASV and could potentially collide the vehicle with obstacles in the environment. Please use it with caution.

", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/sgptools/:/root/ros2_ws/src/ros_sgp_tools/launch/data/:rw" ], "Privileged": true, "NetworkMode": "host" }, "Env": [ "DATA_FOLDER=/root/ros2_ws/src/ros_sgp_tools/launch/data/", "FCU_URL=tcp://0.0.0.0:5777@", "ROS_LOG_DIR=/root/ros2_ws/src/ros_sgp_tools/launch/data/logs/", "RCUTILS_COLORIZED_OUTPUT=1" ] } }, "0.0.1": { "identifier": "27f5395f-c846-5e5b-b18f-6eae933041aa", "type": "other", "website": null, "images": [ { "expanded_size": 1219010296, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:bab53082c7bb4fb0eadd51ed365b49b09ce2cb3309252742daf3b14a35e20240" }, { "expanded_size": 1661281637, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:57db6d238f6520a4a3738162ba8bfc4566e1f2ecbe78ee4b25c70fea279c9b0a" } ], "authors": [ { "name": "Kalvik Jakkala", "email": "itskalvik@gmail.com" } ], "filter_tags": [ "ros2", "robot" ], "extra_links": {}, "tag": "0.0.1", "docs": null, "readme": "
\n

\n\n

\n
\n

A BlueOS extension that enables fully autonomous and adaptive bathymetric surveys on the BlueBoat and any ArduPilot-based ASV using SGP-Tools. Powered by the latest research in Informative Path Planning (IPP).

\n

\ud83c\udf1f Features

\n
    \n
  • \n

    Automatic Waypoint Generation: Generates efficient survey routes from your QGroundControl geofence polygon.

    \n
  • \n
  • \n

    Autonomous & Adaptive Missions: Arms, runs, and disarms the ASV automatically, adapting routes in real time based on sensor data.

    \n
  • \n
  • \n

    Supported Sensors: Works with Ping1D, GPS, and more (fully configurable in config.yaml).

    \n
  • \n
  • \n

    Persistent Data Logging: Stores mission logs and collected data as HDF5 files for post-mission analysis and map reconstruction.

    \n
  • \n
  • \n

    Onboard Visualization: Easily publish mission results for real-time or offline viewing in Foxglove or Jupyter Notebook.

    \n
  • \n
  • \n

    Easy Plan Upload: Drag and drop QGroundControl plan files with geofence directly into /usr/blueos/extensions/sgptools.

    \n
  • \n
  • \n

    Web Terminal Access: Launch, debug, and analyze missions through the BlueOS browser UI.

    \n
  • \n
  • \n

    Configurable & Extensible: Quickly modify sensors, mission types, and planner options via YAML config\u2014add new models with ease.

    \n
  • \n
  • \n

    Integrated Simulator: Test, develop, and validate survey missions in a realistic Gazebo & SITL environment using our dedicated simulator docker container.

    \n
  • \n
  • \n

    Minimal Setup: Installs in seconds from the BlueOS App Store; no complex setup required.

    \n
  • \n
  • \n

    Multi-Arch & Platform Support: Runs on ARM64 (Raspberry Pi), AMD64, and any ArduPilot-compatible ASV with sufficient memory (4GB+). |

    \n
  • \n
\n

\ud83d\udccb Prerequisites

\n
    \n
  • 64-bit BlueOS running on Raspberry Pi 4 or similar (ARM64) or AMD64 platform
  • \n
  • At least 4GB RAM + swap (see Swap Setup below)
  • \n
  • Compatible sensors (e.g., Ping1D sonar)
  • \n
\n

\ud83e\uddf0 Installation

\n

Install Directly from the BlueOS App Store

\n
    \n
  1. Open BlueOS in your browser (e.g., http://blueos.local/)
  2. \n
  3. Go to Extensions tab
  4. \n
  5. Find SGP-Tools in the App Store and click Install
  6. \n
  7. The extension will auto-launch on boot
  8. \n
\n

\u2699\ufe0f Usage

\n

Upload Your Survey Area Plan

\n
    \n
  1. Use QGroundControl to draw your geofence and home position
  2. \n
  3. \n

    Save as mission.plan\n

    \n\n

    \n\n
  4. \n
  5. \n

    Upload to /usr/blueos/extensions/sgptools/ in BlueOS (using File Browser in Pirate Mode)\n

    \n\n

    \n\n
  6. \n
\n

Configure (Optional)

\n
    \n
  • \n

    Advanced users can edit /root/config.yaml in the SGP-Tools web terminal to:

    \n
      \n
    • Select/modify sensor config
    • \n
    • Change mission type (AdaptiveIPP, IPP, Waypoint)
    • \n
    • Adjust optimization parameters
    • \n
    \n

    See the ros_sgp_tools README for configuration details.

    \n
  • \n
\n

Start Your Mission

\n
    \n
  1. Open the SGP-Tools web terminal from the BlueOS UI (left menu)
  2. \n
  3. \n

    Start the planner:\n ros2 launch ros_sgp_tools asv.launch.py

    \n
      \n
    • The vehicle will arm, start the survey, and collect data automatically
    • \n
    \n

    \n\n

    \n\n
  4. \n
\n

Data Visualization

\n
    \n
  • After the mission, you can visualize collected data via:\n ros2 launch ros_sgp_tools visualize_data.launch.py
  • \n
  • \n

    Then open Foxglove in your browser, and connect to your ASV\u2019s IP to view the bathymetry data

    \n
  • \n
  • \n

    \u26a0\ufe0f Do not run this during the mission, as it will disrupt the path planner

    \n

    \n\n

    \n\n
  • \n
\n

\ud83d\udcbe Persistent Storage

\n

The extension maps:

\n
    \n
  • Host: /usr/blueos/extensions/sgptools/
  • \n
  • Container: /root/ros2_ws/src/ros_sgp_tools/launch/data/
  • \n
\n

This directory is persistent and stores:

\n
    \n
  • mission.plan
  • \n
  • config.yaml
  • \n
  • All mission logs: IPP-mission-<timestamp>/
  • \n
  • Swap configuration script: config_swap.sh
  • \n
\n

\ud83e\udde0 Swap Setup & Memory Requirements

\n
    \n
  • At least 4GB of RAM or swap is required.
  • \n
  • The extension includes a swap configuration script:\n/usr/blueos/extensions/sgptools/config_swap.sh
  • \n
  • \n

    Increase swap (if needed):

    \n
      \n
    • In BlueOS, open a terminal (Pirate Mode), then run:
    • \n
    \n

    bash\nred-pill

    \n

    bash\nsudo bash /usr/blueos/extensions/sgptools/config_swap.sh

    \n
  • \n
\n

\ud83e\uddea Simulation & Testing with the SGP-Tools Simulator

\n

Want to experiment, develop, or validate missions before deploying to the water?

\n

The docker-sgp-tools repository includes a fully integrated Gazebo simulator container with all the tools you need for realistic software-in-the-loop (SITL) testing.

\n

\ud83d\ude80 Simulator Features

\n
    \n
  • \n

    Gazebo Simulation: Realistic 3D environment with the BlueBoat ASV model and waves.

    \n
  • \n
  • \n

    ArduPilot SITL: Software-in-the-loop autopilot runs your real survey missions.

    \n
  • \n
  • \n

    SGP-Tools & ROS 2: The full path planning stack, exactly as on your robot.

    \n
  • \n
\n

\ud83d\udcdd Notes and Troubleshooting

\n
    \n
  • \n

    Extension won\u2019t launch / out of memory:

    \n

    Run the swap setup, and ensure enough memory is available.

    \n
  • \n
  • \n

    No mission data or logs:

    \n

    Make sure the Ping 1D port is correctly listed in the config.yaml

    \n
  • \n
  • \n

    Cannot connect via Foxglove:

    \n

    Verify network settings, and that Foxglove bridge is running.

    \n
  • \n
\n

\ud83d\udcda More Info & Documentation

\n\n

\u26a0\ufe0f Disclaimer

\n

This extension, when executed properly, will take control of the ASV and could potentially collide the vehicle with obstacles in the environment. Please use it with caution.

", "support": null, "requirements": null, "company": { "about": "", "name": "ItsKalvik", "email": "itskalvik@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/dev:/dev:rw", "/usr/blueos/extensions/sgptools/:/home/ros2_ws/src/ros_sgp_tools/launch/data/:rw" ], "Privileged": true, "NetworkMode": "host" }, "Env": [ "NAMESPACE=robot_0", "DATA_TYPE=Ping1D", "NUM_WAYPOINTS=20", "SAMPLING_RATE=2", "DATA_BUFFER_SIZE=200", "TRAIN_PARAM_INDUCING=False", "NUM_PARAM_INDUCING=40", "ADAPTIVE_IPP=True", "DATA_FOLDER=/home/ros2_ws/src/ros_sgp_tools/launch/data/", "FCU_URL=tcp://0.0.0.0:5777@", "PING1D_PORT=/dev/ttyUSB0", "KERNEL=RBF", "ROS_LOG_DIR=/home/ros2_ws/src/ros_sgp_tools/launch/data/logs/" ] } } }, "repo_info": { "downloads": 7025, "last_updated": "2026-01-12T19:56:58.274732Z", "date_registered": "2024-07-10T16:09:03.945501Z" } }, { "identifier": "vshie.pingSurvey", "name": "Simple Ping2 Survey", "website": "https://github.com/vshie/pingSurvey", "docker": "vshie/blueos-simplepingsurvey", "description": "Simple Ping2 Survey", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/vshie/pingSurvey/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/vshie/company_logo.png", "versions": { "v1.2.0": { "identifier": "a74a2595-5f47-5b01-9368-98691f545277", "type": "tool", "website": null, "images": [ { "expanded_size": 53317150, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:672bee7b87fd70b416ba65609830213417e6fcd75675d2fa49800359832b4701" }, { "expanded_size": 59063304, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a98ed6a49113cfdaebf764b0d888e74b2e764049ea08a0e114eb0e66c0fabff8" } ], "authors": [ { "name": "Tony White", "email": "tonywhite@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/vshie/pingSurvey" }, "tag": "v1.2.0", "docs": null, "readme": "

BlueOS Ping Survey Extension

\n

A simple extension for BlueOS that enables time-synchronized collection of sonar data from the Ping sonar, alongside GPS data. This extension provides both a full interface and a compact widget view for monitoring and recording survey data.

\n

Features

\n
    \n
  • Real-time sonar depth and confidence monitoring
  • \n
  • GPS position tracking
  • \n
  • Vessel heading display
  • \n
  • Data logging at 2Hz
  • \n
  • CSV data export
  • \n
  • Compact widget view for Cockpit integration
  • \n
  • Automatic system ID detection
  • \n
  • Support for multiple autopilot types (ArduPilot, PX4, Generic)
  • \n
\n

Installation

\n
    \n
  1. Install the extension through the BlueOS extension manager
  2. \n
  3. Follow the guide here: https://bluerobotics.com/learn/collecting-creating-bathymetry-blueboat-ping2/
  4. \n
\n

Usage

\n

Full Interface

\n

Access the full interface by navigating to the menu entry in BlueOS for Simple Ping Survey

\n

Cockpit Widget Integration

\n

To add the compact widget to your Cockpit interface:

\n
    \n
  1. Open Cockpit's edit interface
  2. \n
  3. Add a new iframe widget
  4. \n
  5. Set the iframe URL to:\nhttp://\"your.vehicle.ip\"/extension/simpleping2survey/widget?full_page=true
  6. \n
\n

Data Collection

\n
    \n
  1. Click the play button to start data collection
  2. \n
  3. The extension will automatically detect the correct system ID and begin logging
  4. \n
  5. Data is saved to a CSV file with timestamps
  6. \n
  7. Use the download button to retrieve the collected data
  8. \n
\n

Data Format

\n

The CSV file includes:\n- Unix Timestamp\n- Date\n- Time\n- Depth (cm)\n- Confidence (%)\n- Vessel heading (degrees)\n- Latitude\n- Longitude

\n

Simulation Mode

\n

You can test the interface without connecting to real hardware by using the simulation mode:

\n
    \n
  1. Create a file called simulation.csv in the /app/logs/ directory
  2. \n
  3. Format it with the same columns as the regular data export (see Data Format section)
  4. \n
  5. Click the \"Start Simulation\" button in the interface
  6. \n
  7. The interface will play back the data from your CSV file at 5x real-time speed
  8. \n
\n

This is useful for:\n- Testing the interface without hardware\n- Reviewing past survey data in the map view\n- Demonstrating the tool's capabilities\n- Development and testing\n- Quickly visualizing large datasets (5x speed playback)

\n

To create a simulation file from a previous survey, simply rename a downloaded data file to simulation.csv and place it in the logs directory.

\n

Future Features

\n
    \n
  • Fix bar at top that scrolls down to hide
  • \n
  • WP Survey speed parameter control on page
  • \n
  • User controlled confidence filter on live and/or logged data
  • \n
  • Better mobile experience - scaling corner logos
  • \n
\n

Discussion

\n

For more information and updates, visit the Blue Robotics discussion thread

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "5420/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ping-survey:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "5420/tcp": [ { "HostPort": "" } ] } } } }, "v1.1.0": { "identifier": "680983f6-4985-5ae2-8a03-da915f553ec0", "type": "tool", "website": null, "images": [ { "expanded_size": 53883372, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:19244603abc98ed2d65404c9495a7ea1b567ac964a283b67dd19b05f36692702" } ], "authors": [ { "name": "Tony White", "email": "tonywhite@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/vshie/pingSurvey" }, "tag": "v1.1.0", "docs": null, "readme": "

BlueOS Ping Survey Extension

\n

A simple extension for BlueOS that enables time-synchronized collection of sonar data from the Ping sonar, alongside GPS data. This extension provides both a full interface and a compact widget view for monitoring and recording survey data.

\n

Features

\n
    \n
  • Real-time sonar depth and confidence monitoring
  • \n
  • GPS position tracking
  • \n
  • Vessel heading display
  • \n
  • Data logging at 2Hz
  • \n
  • CSV data export
  • \n
  • Compact widget view for Cockpit integration
  • \n
  • Automatic system ID detection
  • \n
  • Support for multiple autopilot types (ArduPilot, PX4, Generic)
  • \n
\n

Installation

\n
    \n
  1. Install the extension through the BlueOS extension manager
  2. \n
  3. Follow the guide here: https://bluerobotics.com/learn/collecting-creating-bathymetry-blueboat-ping2/
  4. \n
\n

Usage

\n

Full Interface

\n

Access the full interface by navigating to the menu entry in BlueOS for Simple Ping Survey

\n

Cockpit Widget Integration

\n

To add the compact widget to your Cockpit interface:

\n
    \n
  1. Open Cockpit's edit interface
  2. \n
  3. Add a new iframe widget
  4. \n
  5. Set the iframe URL to:\nhttp://\"your.vehicle.ip\"/extension/simpleping2survey/widget?full_page=true
  6. \n
\n

Data Collection

\n
    \n
  1. Click the play button to start data collection
  2. \n
  3. The extension will automatically detect the correct system ID and begin logging
  4. \n
  5. Data is saved to a CSV file with timestamps
  6. \n
  7. Use the download button to retrieve the collected data
  8. \n
\n

Data Format

\n

The CSV file includes:\n- Unix Timestamp\n- Date\n- Time\n- Depth (cm)\n- Confidence (%)\n- Vessel heading (degrees)\n- Latitude\n- Longitude

\n

Simulation Mode

\n

You can test the interface without connecting to real hardware by using the simulation mode:

\n
    \n
  1. Create a file called simulation.csv in the /app/logs/ directory
  2. \n
  3. Format it with the same columns as the regular data export (see Data Format section)
  4. \n
  5. Click the \"Start Simulation\" button in the interface
  6. \n
  7. The interface will play back the data from your CSV file at 5x real-time speed
  8. \n
\n

This is useful for:\n- Testing the interface without hardware\n- Reviewing past survey data in the map view\n- Demonstrating the tool's capabilities\n- Development and testing\n- Quickly visualizing large datasets (5x speed playback)

\n

To create a simulation file from a previous survey, simply rename a downloaded data file to simulation.csv and place it in the logs directory.

\n

Future Features

\n
    \n
  • Fix bar at top that scrolls down to hide
  • \n
  • WP Survey speed parameter control on page
  • \n
  • User controlled confidence filter on live and/or logged data
  • \n
  • Better mobile experience - scaling corner logos
  • \n
\n

Discussion

\n

For more information and updates, visit the Blue Robotics discussion thread

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "5420/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ping-survey:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "5420/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.1": { "identifier": "91e2c1c5-9f3e-53aa-85a5-350c42bbe7f0", "type": "tool", "website": null, "images": [ { "expanded_size": 54415457, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2917a429dfc66a447295883b8de1ca551ff3e64109bd6bdcf8d943d535811ac7" } ], "authors": [ { "name": "Tony White", "email": "tonywhite@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/vshie/pingSurvey" }, "tag": "v1.0.1", "docs": null, "readme": "

BlueOS-ping Survey

\n

A simple extension for BlueOS intended for collection of time-sync'd sonar and GPS data.

\n

Read more about this extension here

\n

Future feature ideas:

\n
    \n
  • Fix bar at top that scrolls down to hide
  • \n
  • WP Survey speed parameter control on page?
  • \n
  • User controlled confidence filter on live and/or logged data?
  • \n
  • Show GPS speed over ground in table, HDOP
  • \n
  • User configurable color gradient to depth mapping
  • \n
  • Better mobile experience - scaling corner logos
  • \n
", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "5420/tcp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/ping-survey:/app/logs" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "5420/tcp": [ { "HostPort": "" } ] } } } }, "v1.0.0": { "identifier": "276e7852-159a-54f2-a476-0b623801fb8b", "type": "example", "website": null, "images": [ { "expanded_size": 54320169, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:f329aae26ef680843dd8b54ccb72f3e35ec80102b3d850a2c87ce4c522740a62" }, { "expanded_size": 61728796, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:9aafb8dbaf44f722cd2f10fd513666e8ea844745cb8142c353e73e33fb1c65e0" } ], "authors": [ { "name": "Tony White", "email": "tonywhite@bluerobotics.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/vshie/pingSurvey" }, "tag": "v1.0.0", "docs": null, "readme": "

BlueOS-ping Survey

\n

A simple extension for BlueOS intended for collection of time-sync'd sonar and GPS data.

\n

Future feature ideas:

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "5420/tcp": {} }, "HostConfig": { "Binds": [ "/root/.config/blueos/extensions/$IMAGE_NAME:/root/.config" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "5420/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 12139, "last_updated": "2026-02-26T22:30:07.570846Z", "date_registered": "2023-10-04T23:07:17.135228Z" } }, { "identifier": "patrickelectric.starlink-position", "name": "Starlink Position", "website": "https://github.com/patrickelectric/blueos-starlink-position", "docker": "patrickelectric/blueos-starlink-position", "description": "Vehicle position system using starlink antenna", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/patrickelectric/starlink-position/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/patrickelectric/company_logo.png", "versions": { "1.0.4": { "identifier": "e618f598-9beb-5290-ad93-0f553fb283a4", "type": "tool", "website": null, "images": [ { "expanded_size": 179259870, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2cf81a7225d871ae40dc6a4d01ac0f7c61b80927f1cdc4faf78c4932602f8a07" } ], "authors": [ { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/patrickelectric/blueos-starlink-position" }, "tag": "1.0.4", "docs": null, "readme": "

StarLink Position

\n

A simple extension that publishes MAVLink data based on starlink position information

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "1.0.3": { "identifier": "216de75c-6672-58b6-984c-dd2cd87a2ac0", "type": "tool", "website": null, "images": [ { "expanded_size": 179259887, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e1c600ba4baeb1f4c765a349e3145304c61b74da64b906c772a6c551c66b7339" } ], "authors": [ { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/patrickelectric/blueos-starlink-position" }, "tag": "1.0.3", "docs": null, "readme": "

StarLink Position

\n

A simple extension that publishes MAVLink data based on starlink position information

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "1.0.2": { "identifier": "b656e161-26b7-5938-99eb-f382d42d397d", "type": "tool", "website": null, "images": [ { "expanded_size": 179258766, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:de0e17ea0fb9d9c25771472346c90d1343cf1181cd69cb2a0efd6c7bb9c1fbb4" } ], "authors": [ { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/patrickelectric/blueos-starlink-position" }, "tag": "1.0.2", "docs": null, "readme": "

StarLink Position

\n

A simple extension that publishes MAVLink data based on starlink position information

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "1.0.1": { "identifier": "ff877584-305d-5b29-9307-c00188512ce5", "type": "tool", "website": null, "images": [ { "expanded_size": 179259372, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:337ece68c11acf4aacc92ea495dc217dfe00aed1b66e238f47a99d9ba1a6335d" } ], "authors": [ { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/patrickelectric/blueos-starlink-position" }, "tag": "1.0.1", "docs": null, "readme": "

StarLink Position

\n

A simple extension that publishes MAVLink data based on starlink position information

", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "1.0.0": { "identifier": "cfe9ae2f-4a0c-54ed-8dfe-9547e0535456", "type": "tool", "website": null, "images": [ { "expanded_size": 52783426, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:40a37f0c67fa7affdfb68a3e25e272105d6c1fd13d33a1bba63fd3198d6e94b8" } ], "authors": [ { "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": { "source": "https://github.com/patrickelectric/blueos-starlink-position" }, "tag": "1.0.0", "docs": null, "readme": "No README available", "support": null, "requirements": "core >= 1.1", "company": { "about": "", "name": "Patrick J. Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } } }, "repo_info": { "downloads": 9629, "last_updated": "2024-08-14T23:11:15.514761Z", "date_registered": "2024-08-07T21:20:39.693471Z" } }, { "identifier": "patrickelectric.mcm-cpu-analyzer", "name": "MCM CPU Analyzer", "website": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer", "docker": "patrickelectric/blueos-mcm-analyzer", "description": "Analyzer for the MAVLink-Camera-Manager", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/patrickelectric/mcm-cpu-analyzer/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/patrickelectric/company_logo.png", "versions": { "0.0.4": { "identifier": "36e20a53-d708-5464-a87b-fc8d6e4778bb", "type": "tool", "website": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer", "images": [ { "expanded_size": 54709030, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:26dc19fa1c27390cbb8480be6f9439c4a09dd76ecde30659e7a33a8984efff94" }, { "expanded_size": 57614727, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3be36e64a7865ca3c0668af0aad34e2c30e44fea1e493ffc0411df46092787c6" }, { "expanded_size": 57823630, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4bddfb14144eb06114e6a58255636a7420357e681155d334e766bfec761f2eba" } ], "authors": [ { "name": "Patrick Jose Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.4", "docs": null, "readme": "No README available", "support": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "3000/tcp": {} }, "HostConfig": { "Binds": [ "/var/run/docker.sock:/var/run/docker.sock" ], "PortBindings": { "3000/tcp": [ { "HostPort": "" } ] } } } }, "0.0.3": { "identifier": "3283d309-f65c-514b-9be2-a8a6743e257a", "type": "tool", "website": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer", "images": [ { "expanded_size": 54709029, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9742b19f92f3043044beeef061b58e1619323b503f009a458f1befa99fe3a585" }, { "expanded_size": 57614726, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:1095174c778c959bbbf09ed55c55651cd934ca07ddc36317c14565eed17a6418" }, { "expanded_size": 57823629, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:422f73a9e31c90a2cac13df4186eb96f9419ea8c07ba669a88a20a74b7766b71" } ], "authors": [ { "name": "Patrick Jose Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.3", "docs": null, "readme": "No README available", "support": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "3000/tcp": {} }, "HostConfig": { "Binds": [ "/var/run/docker.sock:/var/run/docker.sock" ], "PortBindings": { "3000/tcp": [ { "HostPort": "" } ] } } } }, "0.0.2": { "identifier": "d5f71846-74ba-5481-bcb2-592e9d26cf54", "type": "tool", "website": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer", "images": [ { "expanded_size": 54708939, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:990fab394e2460cf6ac5f0141055bb25c10cef7d34d96fb4dfd59ba46e64376a" }, { "expanded_size": 57614637, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:c4ab8a17c94b3b37d1701954f4617494a568b05bbbd5ecec20e8dae743dffa53" }, { "expanded_size": 57823540, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:ca0e36aed5e840efcd472c2ac05de5b2aec1baaaab7650338710eb3bc033b606" } ], "authors": [ { "name": "Patrick Jose Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.2", "docs": null, "readme": "No README available", "support": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "3000/tcp": {} }, "HostConfig": { "Binds": [ "/var/run/docker.sock:/var/run/docker.sock" ], "PortBindings": { "3000/tcp": [ { "HostPort": "" } ] } } } }, "0.0.1": { "identifier": "37a430bc-2c26-50da-82fa-77c7ecf834e0", "type": "tool", "website": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer", "images": [ { "expanded_size": 54708185, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:48b64bf5ee595b990f3900e65ecfad144710654e45e1fecfd19ddf0aa10482a4" }, { "expanded_size": 57613885, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:8d5330c481e4964c2d8fc923d64093f4e5b7da5c6c655e8a7dc897bfc1c43d4d" }, { "expanded_size": 57822785, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:b0b174d528248212a900f93622dba1ea6f67eb90c6f2c80bc94a67295a321dea" } ], "authors": [ { "name": "Patrick Jose Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [], "extra_links": {}, "tag": "0.0.1", "docs": null, "readme": "No README available", "support": "https://github.com/patrickelectric/blueos-mavlink-camera-manager-analyzer/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Blue Robotics", "email": "support@bluerobotics.com" }, "permissions": { "ExposedPorts": { "3000/tcp": {} }, "HostConfig": { "Binds": [ "/var/run/docker.sock:/var/run/docker.sock" ], "PortBindings": { "3000/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 794, "last_updated": "2026-02-14T11:38:51.179098Z", "date_registered": "2026-02-13T23:36:10.488489Z" } }, { "identifier": "patrickelectric.foxglove", "name": "BlueOs Foxglove", "website": "https://github.com/patrickelectric/blueos-foxglove", "docker": "patrickelectric/blueos-foxglove", "description": "BlueOS extension that integrates zenoh data to foxglove studio", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/patrickelectric/foxglove/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/patrickelectric/company_logo.png", "versions": { "0.0.4": { "identifier": "5bbb5301-d70e-5b18-b3b1-753e1b7738a9", "type": "other", "website": null, "images": [ { "expanded_size": 81194798, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:3f0def33deec7c0356df93c736d1b2928f927b1c28f85e13caafdcf77fbe1c92" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "zenoh", "foxglove", "mavlink" ], "extra_links": {}, "tag": "0.0.4", "docs": null, "readme": "

BlueOS-foxglove

", "support": null, "requirements": null, "company": { "about": "", "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "0.0.3": { "identifier": "2c35721b-07d2-53df-bad1-78f239c9f55a", "type": "other", "website": null, "images": [ { "expanded_size": 80536736, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:e17775d0de8b6f06cc14357d7e66a952e3a95181989bdf7f9303ace06a3ab07d" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "zenoh", "foxglove", "mavlink" ], "extra_links": {}, "tag": "0.0.3", "docs": null, "readme": "

BlueOS-foxglove

", "support": null, "requirements": null, "company": { "about": "", "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "0.0.2": { "identifier": "721a73ea-07ea-5cf0-a415-7ceeaf8dcdda", "type": "other", "website": null, "images": [ { "expanded_size": 78831119, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:4e55b7c994082aa0a5748e0ab0b8e643e22a1ec7df53831fccb8dbf35a22dac8" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "zenoh", "foxglove", "mavlink" ], "extra_links": {}, "tag": "0.0.2", "docs": null, "readme": "

BlueOS-foxglove

", "support": null, "requirements": null, "company": { "about": "", "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "0.0.1": { "identifier": "f366ae76-4849-53d9-9017-c08a19dd7700", "type": "other", "website": null, "images": [ { "expanded_size": 78739648, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a282434f9bc77ba76ec462a398b252e215a622b48a1d3c64640ce5a596861565" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "zenoh", "foxglove", "mavlink" ], "extra_links": {}, "tag": "0.0.1", "docs": null, "readme": "

BlueOS-foxglove

", "support": null, "requirements": null, "company": { "about": "", "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } }, "0.0.0": { "identifier": "523ad81d-118d-51aa-b28a-c85abe425b82", "type": "other", "website": null, "images": [ { "expanded_size": 80107116, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:bdd8ce9854a25c446c2ce6196422d0d073172d8c3bda3ab514cf7af6247b0818" } ], "authors": [ { "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" } ], "filter_tags": [ "zenoh", "foxglove", "mavlink" ], "extra_links": {}, "tag": "0.0.0", "docs": null, "readme": "

BlueOS-foxglove

", "support": null, "requirements": null, "company": { "about": "", "name": "Patrick Jos\u00e9 Pereira", "email": "patrickelectric@gmail.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Privileged": true, "NetworkMode": "host" } } } }, "repo_info": { "downloads": 5679, "last_updated": "2025-07-02T21:21:55.372997Z", "date_registered": "2025-05-15T18:03:05.507931Z" } }, { "identifier": "clydemcqueen.surftrak_fixit", "name": "Surftrak Fixit", "website": "https://github.com/clydemcqueen/surftrak_fixit", "docker": "clydemcqueen/surftrak_fixit", "description": "Find and fix common Surftrak problems", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/clydemcqueen/surftrak_fixit/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/clydemcqueen/company_logo.png", "versions": { "v1.0.0-beta.2": { "identifier": "4ecee07e-b90d-5881-b8a1-2e8c8cb188ce", "type": "tool", "website": "https://github.com/clydemcqueen/surftrak_fixit", "images": [ { "expanded_size": 365331591, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:98fbd29fe82059d0314a82aade3c29192f7d612594ab40887823b400b7867f7c" }, { "expanded_size": 331368598, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7974dbabcfbe92c237617c431b666fc24732cf9fd3c5423f069ec752c20aa827" } ], "authors": [ { "name": "Clyde McQueen", "email": "clyde@mcqueen.net" } ], "filter_tags": [ "surftrak" ], "extra_links": {}, "tag": "v1.0.0-beta.2", "docs": null, "readme": "

Surftrak Fixit

\n

Surftrak is a new flight mode in ArduSub 4.5.

\n

Surftrak Fixit is a BlueOS extension that can diagnose and fix Surftrak problems.

\n

Install

\n
    \n
  • Select Extensions in the sidebar
  • \n
  • Click on Surftrak Fixit
  • \n
  • Click Install
  • \n
\n

Releases

\n

v1.0.0-beta.2

\n
    \n
  • Display DISTANCE_SENSOR messages from well-known sources
  • \n
  • Check for bad RNGFND1_TYPE
  • \n
  • Add FIX IT buttons for some problems
  • \n
  • UI improvements, works in dark mode
  • \n
\n

v1.0.0-beta.1

\n
    \n
  • First version
  • \n
\n

Developer Notes

\n

Install a custom version

\n
    \n
  • Select Extensions in the sidebar, then the Installed tab
  • \n
  • Click on the + icon in the lower right
  • \n
  • Enter the following information, modifying as necessary
  • \n
  • Click Create
  • \n
\n

Extension Identifier\n~~~\nclydemcqueen.surftrak_fixit\n~~~

\n

Extension Name\n~~~\nsurftrak_fixit\n~~~

\n

Docker image\n~~~\nclydemcqueen/surftrak_fixit\n~~~

\n

Docker tag\n~~~\nv1.0.0-beta.2\n~~~

\n

Custom settings\n~~~\n{\n \"ExposedPorts\": {\n \"8080/tcp\": {}\n },\n \"HostConfig\": {\n \"ExtraHosts\": [\"host.docker.internal:host-gateway\"],\n \"PortBindings\": {\n \"8080/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n }\n },\n \"Env\": [\"MAVLINK2REST_URL=http://host.docker.internal/mavlink2rest/v1\"]\n}\n~~~

\n

Testing with ArduSub SITL

\n

Surftrak Fixit looks only at MAVLink messages, so it can be tested against ArduSub SITL and\nmavlink2rest.

\n

See these instructions to set up ArduSub SITL.

\n

Terminal 1: run SITL\n~~~\ncd $ARDUPILOT_HOME\nmkdir run_sim\ncd run_sim\nnice ../Tools/autotest/sim_vehicle.py -G -D -l 47.6302,-122.3982391,-0.1,270 -v Sub -f vectored --out \"127.0.0.1:14551\"\n~~~

\n

Terminal 2: run mavlink2rest in a docker container\n~~~\ndocker build --build-arg TARGET_ARCH=x86_64-unknown-linux-musl -t mavlink/mavlink2rest .\ndocker run --rm --init -p 8088:8088 -p 14550:14550/udp --name mavlink2rest mavlink/mavlink2rest\n~~~

\n

Terminal 3: run Surftrak Fixit\n~~~\n./main.py --mavlink2rest_url http://localhost:8088/v1\n~~~

\n

Terminal 4: emulate a MAVLink rangefinder\n~~~\n./fake_rf.py --ping\n~~~

\n

You can see the extension UI at http://localhost:8080/

", "support": "https://github.com/clydemcqueen/surftrak_fixit/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Discovery Bay", "email": "clyde@mcqueen.net" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } }, "Env": [ "MAVLINK2REST_URL=http://host.docker.internal/mavlink2rest/v1" ] } }, "v1.0.0-beta.1": { "identifier": "284c6155-4ffc-50aa-98dd-c7eae198eac5", "type": "tool", "website": "https://github.com/clydemcqueen/surftrak_fixit", "images": [ { "expanded_size": 354149671, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:92de85e3559f394ef9f96f4def2c6856099ba7d637a6864b9b1f505216230b6a" }, { "expanded_size": 313220600, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9cf0c02c92ef84c1964878116dd349fb923c0e220abb7a0a86583e6672213b73" } ], "authors": [ { "name": "Clyde McQueen", "email": "clyde@mcqueen.net" } ], "filter_tags": [ "surftrak" ], "extra_links": {}, "tag": "v1.0.0-beta.1", "docs": null, "readme": "

Surftrak Fixit

\n

Surftrak is a new flight mode in ArduSub 4.5.

\n

Surftrak Fixit is a BlueOS\nextension that can diagnose and suggest fixes for some common Surftrak problems.

\n

Install

\n

To install this extension in BlueOS:\n* Select Extensions in the sidebar, then the Installed tab\n* Click on the + icon in the lower right\n* Enter the following information, then click Create

\n

Extension Identifier\n~~~\nclydemcqueen.surftrak_fixit\n~~~

\n

Extension Name\n~~~\nsurftrak_fixit\n~~~

\n

Docker image\n~~~\nclydemcqueen/surftrak_fixit\n~~~

\n

Docker tag\n~~~\nv1.0.0-beta.1\n~~~

\n

Custom settings\n~~~\n{\n \"ExposedPorts\": {\n \"8080/tcp\": {}\n },\n \"HostConfig\": {\n \"ExtraHosts\": [\"host.docker.internal:host-gateway\"],\n \"PortBindings\": {\n \"8080/tcp\": [\n {\n \"HostPort\": \"\"\n }\n ]\n }\n },\n \"Env\": [\"MAVLINK2REST_URL=http://host.docker.internal/mavlink2rest/v1\"]\n}\n~~~

", "support": "https://github.com/clydemcqueen/surftrak_fixit/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Discovery Bay", "email": "clyde@mcqueen.net" }, "permissions": { "ExposedPorts": { "8080/tcp": {} }, "HostConfig": { "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "8080/tcp": [ { "HostPort": "" } ] } }, "Env": [ "MAVLINK2REST_URL=http://host.docker.internal/mavlink2rest/v1" ] } } }, "repo_info": { "downloads": 5320, "last_updated": "2024-06-23T16:01:49.148109Z", "date_registered": "2024-06-08T17:31:16.936347Z" } }, { "identifier": "clydemcqueen.wl_ugps_external", "name": "WL UGPS External", "website": "https://github.com/clydemcqueen/wl_ugps_external_extension", "docker": "clydemcqueen/wl_ugps_external_extension", "description": "Send GNSS compass data to WL UGPS", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/clydemcqueen/wl_ugps_external/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/clydemcqueen/company_logo.png", "versions": { "v1.1.0-beta.1": { "identifier": "37d18a9b-b24e-5389-914c-13f4e04a48d4", "type": "device-integration", "website": "https://github.com/clydemcqueen/wl_ugps_external_extension", "images": [ { "expanded_size": 59536302, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:1121dff230845ca93bb54ac543a3290d59dc639f7e796725143f2042d08c7127" }, { "expanded_size": 53131138, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:cd6803b56aeea2f0db28c744b3ca92a5325c7f27d367d3d348ec585926bfd3f1" } ], "authors": [ { "name": "Clyde McQueen", "email": "clyde@mcqueen.net" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.1.0-beta.1", "docs": null, "readme": "

WL UGPS External

\n

Send NMEA position information (GGA and HDT) to the Water Linked UGPS API.

\n

Typical Configuration

\n

Add a satellite compass to the topside vessel and connect it to the ROV Ethernet network.

\n
    \n
  • It should have a static IP address on the 192.168.2.X subnet
  • \n
  • It should send GGA and HDT messages via UDP to BlueOS at 192.168.2.2:6200
  • \n
\n

Install this extension in BlueOS:

\n
    \n
  • Select Extensions in the sidebar
  • \n
  • Click on WL UGPS External
  • \n
  • Click Install
  • \n
\n

After a few moments you should see the WL UGPS External entry in the sidebar.\nClick on it to see a very simple UI.

\n

Arguments

\n
    \n
  • Set UGPS_HOST to the IP address of the WL UGPS G2 box. The default is http://192.168.2.94.
  • \n
  • Set SEND_RATE to the rate to send position information to the G2 box. The default is 2Hz.
  • \n
  • Set POLL_RATE to the rate to poll the G2 box for acoustic and pose information. The default is 0 (no polling).
  • \n
  • If LOG_NMEA is --log_nmea, then NMEA messages will be logged. The default is blank (no logging).
  • \n
\n

You can provide custom arguments in BlueOS. For example, you can enable logging using these arguments:\n~~~\n{\n \"Env\": [\n \"UGPS_HOST=http://192.168.2.94\",\n \"SEND_RATE=2.0\",\n \"POLL_RATE=5.0\",\n \"LOG_NMEA=--log_nmea\"\n ]\n}\n~~~

\n

Logs can be found in BlueOS:

\n
    \n
  • Select File Browser in the sidebar
  • \n
  • Click on extensions
  • \n
  • Click on wl_ugps_external
  • \n
\n

Caveats

\n
    \n
  • The G2 box still needs a GPS fix to synchronize its clock.
  • \n
\n

Releases

\n

v1.1.0-beta.1

\n
    \n
  • Optional: Log GGA, HDT and PASHR messages
  • \n
  • Optional: Poll the G2 box for additional information (pose, acoustic solution) and log the results
  • \n
\n

v1.0.3

\n
    \n
  • Shorten company name
  • \n
  • No user-visible changes
  • \n
\n

v1.0.2

\n
    \n
  • Update requirements.txt, setup.py
  • \n
  • No user-visible changes
  • \n
\n

v1.0.1

\n
    \n
  • Simplify README
  • \n
\n

v1.0.0

\n
    \n
  • Initial release
  • \n
\n

Developer notes

\n

See wl_ugps_external for testing tools.

", "support": "https://github.com/clydemcqueen/wl_ugps_external_extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Discovery Bay", "email": "clyde@mcqueen.net" }, "permissions": { "ExposedPorts": { "8080/tcp": {}, "6200:6200/udp": {} }, "HostConfig": { "Binds": [ "/usr/blueos/extensions/wl_ugps_external:/data:rw" ], "PortBindings": { "6200/udp": [ { "HostPort": "6200" } ], "8080/tcp": [ { "HostPort": "" } ] } }, "Env": [ "UGPS_HOST=http://192.168.2.94", "SEND_RATE=2.0", "POLL_RATE=0.0", "LOG_NMEA=" ] } }, "v1.0.3": { "identifier": "f62c3d5a-716d-5f9d-89f4-1f44cb29fcd2", "type": "device-integration", "website": "https://github.com/clydemcqueen/wl_ugps_external_extension", "images": [ { "expanded_size": 51589275, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:847790ac52cc419d9cf8206c685353c0de21e2cd935f38cf31d79c03ef450f9c" }, { "expanded_size": 45696701, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2adff8e939478262b0cc0b35ee93d79f6a6d876902a10350e3ce93d7c7403dfe" } ], "authors": [ { "name": "Clyde McQueen", "email": "clyde@mcqueen.net" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.3", "docs": null, "readme": "

WL UGPS External

\n

Send NMEA position information (GGA and HDT) to the Water Linked UGPS API.

\n

Typical Configuration

\n

Add a satellite compass to the topside vessel and connect it to the ROV Ethernet network.\n* It should have a static IP address on the 192.168.2.X subnet\n* It should send GGA and HDT messages via UDP to BlueOS at 192.168.2.2:6200

\n

Install this extension in BlueOS:\n* Select Extensions in the sidebar\n* Click on WL UGPS External\n* Click Install

\n

After a few moments you should see the WL UGPS External entry in the sidebar.\nClick on it to see a very simple UI.

\n

Arguments

\n
    \n
  • UGPS_HOST is the IP address of the WL UGPS G2 box, the default is http://192.168.2.94
  • \n
  • SEND_RATE is the rate to send position information to the G2 box, the default is 2Hz
  • \n
\n

Caveats

\n
    \n
  • The G2 box still needs a GPS fix to synchronize its clock.
  • \n
\n

Releases

\n

v1.0.3

\n
    \n
  • Shorten company name
  • \n
  • No user-visible changes
  • \n
\n

v1.0.2

\n
    \n
  • Update requirements.txt, setup.py
  • \n
  • No user-visible changes
  • \n
\n

v1.0.1

\n
    \n
  • Simplify README
  • \n
\n

v1.0.0

\n
    \n
  • Initial release
  • \n
\n

Developer notes

\n

See https://github.com/clydemcqueen/wl_ugps_external for testing tools.

", "support": "https://github.com/clydemcqueen/wl_ugps_external_extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Discovery Bay", "email": "clyde@mcqueen.net" }, "permissions": { "ExposedPorts": { "8080/tcp": {}, "6200:6200/udp": {} }, "HostConfig": { "PortBindings": { "6200/udp": [ { "HostPort": "6200" } ], "8080/tcp": [ { "HostPort": "" } ] } }, "Env": [ "UGPS_HOST=http://192.168.2.94", "SEND_RATE=2.0" ] } }, "v1.0.2": { "identifier": "feba0cfb-e968-5301-b11e-90b6071bd828", "type": "device-integration", "website": "https://github.com/clydemcqueen/wl_ugps_external_extension", "images": [ { "expanded_size": 45696653, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:54e2275c5e9ea7aef7df80d3ace428f9ef287e9cd249ca6a70c22108a0ebfe9f" }, { "expanded_size": 51589213, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:9c87f6fec45bd621c73a25f1af997075aa140d73c45600cf11982ffa26c72a90" } ], "authors": [ { "name": "Clyde McQueen", "email": "clyde@mcqueen.net" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.2", "docs": null, "readme": "

WL UGPS External

\n

Send NMEA position information (GGA and HDT) to the Water Linked UGPS API.

\n

Typical Configuration

\n

Add a satellite compass to the topside vessel and connect it to the ROV Ethernet network.\n* It should have a static IP address on the 192.168.2.X subnet\n* It should send GGA and HDT messages via UDP to BlueOS at 192.168.2.2:6200

\n

Install this extension in BlueOS:\n* Select Extensions in the sidebar\n* Click on WL UGPS External\n* Click Install

\n

After a few moments you should see the WL UGPS External entry in the sidebar.\nClick on it to see a very simple UI.

\n

Arguments

\n
    \n
  • UGPS_HOST is the IP address of the WL UGPS G2 box, the default is http://192.168.2.94
  • \n
  • SEND_RATE is the rate to send position information to the G2 box, the default is 2Hz
  • \n
\n

Caveats

\n
    \n
  • The G2 box still needs a GPS fix to synchronize its clock.
  • \n
\n

Releases

\n

v1.0.2

\n
    \n
  • Update requirements.txt, setup.py
  • \n
  • No user-visible changes
  • \n
\n

v1.0.1

\n
    \n
  • Simplified README
  • \n
\n

v1.0.0

\n
    \n
  • Initial release
  • \n
\n

Developer notes

\n

See https://github.com/clydemcqueen/wl_ugps_external for testing tools.

", "support": "https://github.com/clydemcqueen/wl_ugps_external_extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Discovery Bay Robotics", "email": "clyde@mcqueen.net" }, "permissions": { "ExposedPorts": { "8080/tcp": {}, "6200:6200/udp": {} }, "HostConfig": { "PortBindings": { "6200/udp": [ { "HostPort": "6200" } ], "8080/tcp": [ { "HostPort": "" } ] } }, "Env": [ "UGPS_HOST=http://192.168.2.94", "SEND_RATE=2.0" ] } }, "v1.0.1": { "identifier": "32a5efd4-9364-5021-a677-9c6371f90e29", "type": "device-integration", "website": "https://github.com/clydemcqueen/wl_ugps_external_extension", "images": [ { "expanded_size": 50224616, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4341a15707d539c397b078a6e1817603d87fe1eb7f218a51a48c74bf9ea5f1b5" }, { "expanded_size": 44578751, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e0fab510697080cd9c972e1eeb987371fc49f11d64384574a1c80fd72da5c3a6" } ], "authors": [ { "name": "Clyde McQueen", "email": "clyde@mcqueen.net" } ], "filter_tags": [ "positioning", "navigation", "short-baseline" ], "extra_links": {}, "tag": "v1.0.1", "docs": null, "readme": "

WL UGPS External

\n

Send NMEA position information (GGA and HDT) to the Water Linked UGPS API.

\n

Typical Configuration

\n

Add a satellite compass to the topside vessel and connect it to the ROV Ethernet network.\n* It should have a static IP address on the 192.168.2.X subnet\n* It should send GGA and HDT messages via UDP to BlueOS at 192.168.2.2:6200

\n

Install this extension in BlueOS:\n* Select Extensions in the sidebar\n* Click on WL UGPS External\n* Click Install

\n

After a few moments you should see the WL UGPS External entry in the sidebar.\nClick on it to see a very simple UI.

\n

Arguments

\n
    \n
  • UGPS_HOST is the IP address of the WL UGPS G2 box, the default is http://192.168.2.94
  • \n
  • SEND_RATE is the rate to send position information to the G2 box, the default is 2Hz
  • \n
\n

Caveats

\n
    \n
  • The G2 box still needs a GPS fix to synchronize its clock.
  • \n
\n

Releases

\n

v1.0.1

\n
    \n
  • Simplified README
  • \n
\n

v1.0.0

\n
    \n
  • Initial release
  • \n
", "support": "https://github.com/clydemcqueen/wl_ugps_external_extension/issues", "requirements": "core >= 1.1", "company": { "about": "", "name": "Discovery Bay Robotics", "email": "clyde@mcqueen.net" }, "permissions": { "ExposedPorts": { "8080/tcp": {}, "6200:6200/udp": {} }, "HostConfig": { "PortBindings": { "6200/udp": [ { "HostPort": "6200" } ], "8080/tcp": [ { "HostPort": "" } ] } }, "Env": [ "UGPS_HOST=http://192.168.2.94", "SEND_RATE=2.0" ] } } }, "repo_info": { "downloads": 14129, "last_updated": "2024-11-26T18:07:23.087771Z", "date_registered": "2023-09-06T15:06:24.58823Z" } }, { "identifier": "anbsensors.pH_sensor", "name": "ANB Sensors GUI", "website": "https://github.com/dbtuna/BlueOS-UI", "docker": "dbtuna/anbsensors-gui", "description": "BlueOS extension for ANB Sensors pH Sensor", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/anbsensors/pH_sensor/extension_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/anbsensors/company_logo.png", "versions": { "1.2.7": { "identifier": "42020aa5-d87c-5d61-b694-65cb771250aa", "type": "device-integration", "website": "https://www.anbsensors.com", "images": [ { "expanded_size": 68307036, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:7fba1fa2941a1da7d555e78b85ecaecaff72c2cc4519bdb81b6967b3c594765d" }, { "expanded_size": 74534934, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:41ef5931c26396b9f522f413b2ffe7d9a6b06700168a44457686bdd65a676fb3" } ], "authors": [ { "name": "dbtuna", "email": "info@anbsensors.com" } ], "filter_tags": [ "data-collection", "ph-sensor" ], "extra_links": {}, "tag": "1.2.7", "docs": "https://www.anbsensors.com/newdocs/docs/intro/", "readme": null, "support": "mailto:support@anbsensors.com", "requirements": null, "company": { "name": "ANB Sensors Ltd", "about": "UK-based company developing calibration-free pH sensors", "email": "info@anbsensors.com" }, "permissions": { "ExposedPorts": { "6437/tcp": {} }, "HostConfig": { "CpuPeriod": 100000, "CpuQuota": 100000, "Binds": [ "/usr/blueos/extensions/anbsensors:/app/logs", "/dev/ttyUSB0:/dev/ttyUSB0" ], "ExtraHosts": [ "host.docker.internal:host-gateway" ], "PortBindings": { "6437/tcp": [ { "HostPort": "6437" } ] }, "NetworkMode": "host", "Privileged": true } } } }, "repo_info": { "downloads": 689, "last_updated": "2026-03-06T03:15:42.877712Z", "date_registered": "2025-05-20T15:43:22.289812Z" } }, { "identifier": "ceruleansonar.cerulean-dvl", "name": "Cerulean DVL", "website": "https://github.com/ceruleansonar/BlueOS-Cerulean-DVL/", "docker": "nicknothom/blueos-cerulean-dvl", "description": "BlueOS extension for Cerulean DVL", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/ceruleansonar/company_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/ceruleansonar/company_logo.png", "versions": { "v1.0.8": { "identifier": "aa686520-e5f6-5cfb-ac69-b414de3e694a", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 109619325, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:40bdaa212803402e97dcd013000c5991ddc950ce4120a93bdd8e30b876e26324" }, { "expanded_size": 100085882, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:e208ec461095ed3491a3c38ab7913afe855d9850b4f29f13e620c4f71715bc8c" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.8", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/root/.config/cerulean:/root/.config" ] } } }, "v1.0.7": { "identifier": "8f856745-ea5b-56a3-87fe-c893f0bf2a9a", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 100085651, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:cdc856ea07548d4cd6e2993ebd81baad2a018034b24085a13f71e6021ad969c5" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.7", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/root/.config/cerulean:/root/.config" ] } } }, "v1.0.6": { "identifier": "b52186e9-c76e-5768-bf31-d34231668d0e", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 109617694, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:2638f474a73f2eb41bb1a5f237cd72eac2078d55cc3501d04c503bfa82cbe854" }, { "expanded_size": 100082275, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:452ef69b3fff8ccf2e2ecd47d431b1ae5c4244802c8df2e7ed59259ae3e084f6" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.6", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/root/.config/cerulean:/root/.config" ] } } }, "v1.0.5": { "identifier": "eb83e2bc-7f5a-5eb5-b5ab-95ca97364c27", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 100029465, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b31f7996252e37ad56b7a84df851ced94adaf815b688abffeaa79c1f2bcfaa1f" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.5", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "NetworkMode": "host", "HostConfig": { "Binds": [ "/root/.config/blueos:/root/.config" ] } } }, "v1.0.4": { "identifier": "2056eda3-d739-511c-a708-054d2ef830c2", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 99947116, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8c3edb7d465c05b9b735cc55291fa323deb95f3f11c086ecd47729f0d78a5249" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.4", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.2": { "identifier": "57d15a76-04cd-515d-a297-58a4bb60088e", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 100174048, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:19f8215cae9fa37e89c9e8596ec2010d520430d46bf3fb93d58ed7f6e7745fac" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.2", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.1": { "identifier": "5fda492f-72b4-54c0-bd0f-fca4761a0bfd", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 109912491, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:d5e8e487e02db3573da4b82b5c1bffcfd7dc56115aabc9e31d46b441205e8678" }, { "expanded_size": 100174019, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:11543c36b10be611293248778bc7b924eea38b7bfa47f39701c1b72d3b9a288f" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.1", "docs": "", "readme": "

BlueOS-Cerulean-DVL

\n

Cerulean DVL driver, compatible with Blue Robotics BlueOS.

\n

Manual Installation:

\n

To set this up, ssh into the Raspberry Pi (or access via red-pill in BlueOS Terminal) and run

\n

sudo docker run -d --net=host -v /root/.config/cerulean:/root/.config --name=BlueOS-Cerulean-DVL --restart=unless-stopped nicknothom/blueos-cerulean-dvl:latest

\n

The service will show in the \"Available Services\" section in BlueOS, where there are some configuration options.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "NetworkMode": "host" } } }, "repo_info": { "downloads": 33614, "last_updated": "2023-05-17T18:58:43.418901Z", "date_registered": "2023-01-17T21:41:45.289578Z" } }, { "identifier": "ceruleansonar.sonarview", "name": "SonarView", "website": "https://sonarview.io/", "docker": "nicknothom/sonarview", "description": "Cross platform sonar viewing application", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/ceruleansonar/company_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/ceruleansonar/company_logo.png", "versions": { "1.14.48-dev": { "identifier": "09fa1d32-1eb7-5d85-ba02-fe5964f3961b", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81277747, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:e41f60e7928b3285e182dab21540e258cea901159185016ed8aeb8568641b647" }, { "expanded_size": 80790527, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:2283c7710423d24478e5b72b791f660f8610b6a9b5e02d56a04ca6dd8b597997" }, { "expanded_size": 78633525, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c637b4a58c579f620bb5f41b33772413328ffdb6af543527e34d4dc93990a013" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.48-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.47-dev": { "identifier": "bc324e29-e93d-5258-9674-abe1326d1039", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81017673, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:73442fbeffa1243e5df050fd372d409d32fb51d91db35fdf9458145d989acccd" }, { "expanded_size": 80532393, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:47483d6860914647d9a9503cac2be27c45aa478d602b3c5e3b15c126f8a67229" }, { "expanded_size": 78378427, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:195e73f6d863cdfc02f435f136228bac380e2b92f0f224099c353ede0d140765" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.47-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.46-dev": { "identifier": "ca8c22b0-373e-5c7e-99b6-9af4ec469a5a", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81017536, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:307b5b4db502e6ab88c587902d0d638de1f0ffb9e2eb338c4478331deca5bae3" }, { "expanded_size": 80531982, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0cf3d01ffb0bb432d1031bf18ec7931179b679d867bd1ffd23803c6c15be46e6" }, { "expanded_size": 78380027, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:001d6c09a466a572e9b6033b19ba84b17380c2ebcee2cd59ce06e9060b6d1229" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.46-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.40": { "identifier": "1738631d-95b1-526a-ac6d-2e64d89de3fc", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81010813, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:fcbc451e08dbcd5fa245aea42f346cc87867cd014eb9d5e752e77c13f47aaa57" }, { "expanded_size": 80524954, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a605b9e878ebd22ad0e6a7c4197eb5df9049d9a1249bf7c779d470938ee1834d" }, { "expanded_size": 78371363, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:35a67eab6320016e9f2f3e676251b5a3c796e2238c324e601da7c24e49988a73" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.40", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.39": { "identifier": "efa11059-452d-5f4f-9c74-3e644533428d", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81004329, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:f6e3c7879a2fbea51146fdbad249764bed45932dfda458a92a67c1db6b5e4573" }, { "expanded_size": 80518942, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:a70337c40b5bf93fa01a63a56a1cfad0418e889b3606510ade35184cc66294c0" }, { "expanded_size": 78365522, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:eb44c958d75b5667a7966246f9afd64aae39d13eb6930d25e7c2b9dd59f27c0c" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.39", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.38": { "identifier": "b6f780e2-4000-5aae-ab39-27a680123a51", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81000407, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5ee1b41c82ff23d09c7fb1388ebf76c3d16cfbd35d7aa968437866aa192d9ee1" }, { "expanded_size": 80516752, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:f88b191cb9f52e379baf60f07546552787e03d3b5979a0b87a8ec804c685a79e" }, { "expanded_size": 78362789, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:4cbeec4b200be0c95fdaa165ca838472862dd4220e1dfe36c1b07df6dec92007" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.38", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.37": { "identifier": "c0ade922-bb53-55fb-8ae7-824f4802204a", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 81004495, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:88cf6f449ed6c679e262ad1028c3ec2510d779c6dcceeb802003465e90521694" }, { "expanded_size": 80518943, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6cfacc8679a16ee2ae7d9924936808437cc39541ddea196cc852f2ef4aae9177" }, { "expanded_size": 78365423, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ccbb280f67239f1637da293b9526b01cbf8c9fe6d7e8be826af4b1868dc63d7c" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.37", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.36": { "identifier": "44264fc8-e174-5660-92b1-ce273ecded88", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 98348843, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:170e3fb5322684fbc0b53d4f4be019aa7135e17304f269afb19b8d395c251b56" }, { "expanded_size": 97863892, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:cabdb595d63a27666c28f2ada2a9e2c08b6ec5c0b1b304e856514715f94d2275" }, { "expanded_size": 95710165, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:26b3f6e2c2887e4358eefc49ff8b55823381e491bddaa88feec10ea0169c2928" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.36", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.35-beta": { "identifier": "fd9e05ec-7b3e-5209-ba50-76cbb49edc84", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 98333688, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:3571458e6bffdcf1ea39047d87e045d0751446d1140241566bf8997dadd75e6c" }, { "expanded_size": 97847420, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:af89dfca74cd8abda4b41a8ca3727ffb675d06bb8a3f579028ea207d9729e203" }, { "expanded_size": 95694933, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:92ff0cf3db0d70109c3e44b1437f5293abd1d6928011c91dd6803b933a852a19" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.35-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.34-beta": { "identifier": "15ae708b-42fd-519c-9a3c-3ff20f77e2b8", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 97772011, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4b93bdaa85e41e185377eb62121e4ec6242966a41e90b2aed32ce800052c1489" }, { "expanded_size": 97286524, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:73c3fb10b7c06b7ad7da798f7ffd581dac9edaa4bfdb5fab799676c152d624ff" }, { "expanded_size": 95132950, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:6492e7ac17e8ba75dc20f30bea1f39f8789b1dfd66dbb7db735de1712a47a581" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.34-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.33-beta": { "identifier": "e0e040c1-f11b-5bcb-954b-1c912a5282ec", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 97770524, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:947e0404587bf52f2ee3370e232a4f4de5d6cc79c8d15ecf16ffc163f01fd261" }, { "expanded_size": 97284866, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:20c2d51769552f34173f00326c0b1d202342ba3f9a5b7230d2c72d579b8a0ff5" }, { "expanded_size": 95131774, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ababbf75ab86091aa5d3b68b525f81d8b76ccd614a692cda00f65b9be1a01135" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.33-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.32-beta": { "identifier": "b460e6b2-ac3b-5c9c-a219-6f7a6396b8d6", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 94815420, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:880525a16689be5f26102208cf41705f24bfe773dfade85e1ad7ffee9805a2d4" }, { "expanded_size": 94327900, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6255236d7e9f95bacd681419bd2e8d98b55a70187da3f914d60acce01851df5f" }, { "expanded_size": 92173924, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:4508f9b7ca6d01f7b767e13d7f26f481570f720c93858260e49543216948f972" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.32-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.31-beta": { "identifier": "226ae432-ec6c-5dce-bcc8-ec8c34f1d8f4", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 94813180, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:9e28df3713b79591b23e5425d90d6cb1822528b76be2540276956ee2e1acc52a" }, { "expanded_size": 94322712, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:4e5b9a64718f924ed7615a1cd2dce75956b1daa74644335ecb6bceda7c131cfd" }, { "expanded_size": 92170013, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:975532ace270d32932b14ffd5c518a49cd07c6ad95ad260601437dce68b2a20b" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.31-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.30-beta": { "identifier": "9d32ceb9-4634-572c-b6bb-eab8e79d7191", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 95069751, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:2b8dd3c6069605c4ba0b20d9b4ca130927e9afd987487f12dd123aa4576110c8" }, { "expanded_size": 94586351, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5bfa08e61abde8a4c95767cc05778376840dee1236b994ca73c9e73c282146e5" }, { "expanded_size": 92423475, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2c66af5fb4fd1a22768d38252ac14e694782a34e8d733869860dd1abd614ac13" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.30-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.29-beta": { "identifier": "ff022c81-0ea1-5396-aa79-1ba93a8a0678", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 95066671, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:5d426a6fb5fbfb019aa446f26677a15c7e00c86de9531a57868f6dc57add02e9" }, { "expanded_size": 94584264, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:633ceaf3ebcd2d86db984e1b66d6926bce5ee778cb1e16261dcc8ad6c9c87a6e" }, { "expanded_size": 92421861, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:66806b954b553c17f92f61cdbb5056733205d9d020b30d40a9edadada98a1d8d" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.29-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.27-beta": { "identifier": "ebb3ccf9-5166-57cb-a7a4-9a31a30de133", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 95071702, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:f80197e01390dbc56b1b2023e7c078ad49e880bfeb9adc113ca888eca0de479e" }, { "expanded_size": 92427812, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:b994b054587f6226eba780653b1ede898bd573c87df816d3ec013b158187175a" }, { "expanded_size": 94595195, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:6080a9c97a2f26aff96b185cdeac7eda22b36432047838f8cf7c2e9f37f9cba4" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.27-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.26-beta": { "identifier": "e58e13e7-f59a-57a9-9a9d-d1a454591abb", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 95072095, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:19d468b4388912dba20cb63d5c010fef01b631a903ab79ebc0e00851d92dbfbe" }, { "expanded_size": 92427827, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2df15c5f5e0f4377222517577bba757c7c170061f0c1d665780d0faaaee1d94a" }, { "expanded_size": 94595049, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:7018e5209204743626073ec5572a0ca26d59c3c08d844947293702aa03054ba9" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.26-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.25-beta": { "identifier": "7d06f4b0-f57c-506f-810f-b9b12460dd54", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 114717168, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:894087cf1355567b118b3769e4ea5e6b5cb53bf3c053446a17d502f11de2dc6e" }, { "expanded_size": 111511586, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8f4005cb5741933671b859f97dc7c25eeed59dab9679ac4490e335a2f605c789" }, { "expanded_size": 115287299, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:946befc61846c105fca128a89a87aa6252ba98ca053f8379715ccc88ac807ef6" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.25-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.24-dev": { "identifier": "84f3f4ac-9c99-5077-80df-a87435fc24c9", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 114641989, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:1cff05f04cc87fe1a20d44b56b3c3071e016458983350d8be0f061c8dab50e46" }, { "expanded_size": 111445255, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:2668f1b5ff50b456b3576973e3b211470f17804bb27c7d34ae139806ee93b5fa" }, { "expanded_size": 115227066, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:cfadd0af2d8a0f6697862726eab7e50d49215063ebc0e619cdc8ec8c1816ddc7" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.24-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.23-dev": { "identifier": "82a7cbf3-b856-540b-8244-55049868bcee", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 114644365, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:de05c1a62936f236cd09908e16dae144c7d73db9a5bde8c8fba67621dfec9808" }, { "expanded_size": 111445065, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:ed0a84217f954462cb027cbc4860fdd62ea6be5ab129c2aff3166f4207da0352" }, { "expanded_size": 115218738, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:5fdd539480cf241093c870dfe18ef5a3f45833ad48e7d4d0333d0962eb128fe9" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.23-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.21-dev": { "identifier": "f58a5aa8-6e5e-5dbc-8dfc-34c343466bf0", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 114547472, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:4c5257c4fb5fbba6bfcfd4764bead7d9d4b4795d6ded61655bb56f2973afb341" }, { "expanded_size": 111346480, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:c2e34dc28978f9b31e820a6f86afafc6c4fe4f7f4b5fa1a93d475a0fbbf3556d" }, { "expanded_size": 115131677, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:b3824b396294168fb7d4274cb10bf28f6aa87974155ed3f0ea2c0db9b1e54652" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.21-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.20-beta": { "identifier": "7d962d7b-3c85-5dd8-992e-b8f9d61a176c", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 92660557, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a7d8600b27cb9955867deaa69f93787a667578aca9f6e6a2610e8e134bd1113a" }, { "expanded_size": 90005172, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:9916cab134b0cdd2e448446736186b44923f48e2eae7042ff3e05f66923973c6" }, { "expanded_size": 92201327, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:0226f74f67382ba4127415bd634b764fd1507073ac8eb8666507790acd03716b" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.20-beta", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.15-dev": { "identifier": "6e74b697-82a1-56ee-a3f0-a496ae3b7d38", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 92667864, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:a16b0b90e1dafb3edb54b14c01714a21f8589bea0c832e259773f40d403bcd6d" }, { "expanded_size": 90012036, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:18463131d225d22ff863f4939b0b7d642175860ae09f110e7a7b071be6eda7dc" }, { "expanded_size": 92208939, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:fce2537b9530289486ccb09c9286820c7398b578a1b273e1065af3349f7bf42d" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.15-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } }, "1.14.11-dev": { "identifier": "2c871ccb-f2c8-5ea2-9eea-94c872d56de9", "type": "device-integration", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 92663713, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:32a3d381bdd343fb850cfa61646061dc8e809e0f52dcefe9b95c8a9a38ba82db" }, { "expanded_size": 90008855, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:8a21153b8ff97b01e8da3f10c071dba924dab2bce0b67915f025b71143dd0a1b" }, { "expanded_size": 92205219, "platform": { "architecture": "arm64", "variant": null, "os": "linux" }, "digest": "sha256:d51462c377e9374be8aac0e637182ea24e2f35106ee1284888855c827a74e5fb" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "1.14.11-dev", "docs": null, "readme": "

SonarView

\n

SonarView is a cross-platform application for controlling and communicating with sonar devices.

\n

This repository hosts the build and release process for SonarView.

\n", "support": "https://forum.ceruleansonar.com/categories", "requirements": null, "company": { "about": "Cerulean Sonar: Advanced Technology. Sensibly Priced.", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "HostConfig": { "NetworkMode": "host", "Binds": [ "/usr/blueos/userdata/SonarView:/userdata" ], "ReadonlyRootfs": true, "ExtraHosts": [ "host.docker.internal:127.0.1.1", "blueos.local:127.0.1.1" ] } } } }, "repo_info": { "downloads": 103831, "last_updated": "2026-03-31T15:04:49.080376Z", "date_registered": "2023-02-09T18:16:56.606258Z" } }, { "identifier": "ceruleansonar.cerulean-docs", "name": "Cerulean Docs", "website": "https://github.com/ceruleansonar/BlueOS-Cerulean-Docs/", "docker": "nicknothom/blueos-cerulean-docs", "description": "Offline access for Cerulean Documentation", "extension_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/ceruleansonar/company_logo.png", "company_logo": "https://docs.bluerobotics.com/BlueOS-Extensions-Repository/repos/ceruleansonar/company_logo.png", "versions": { "v1.1.0": { "identifier": "d50945d9-c307-5261-b40d-1f260ac0b6a4", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 175566507, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:bd71575157ca09fdb6a1b2f8072d56ea27ff0ef9176375d789d893f70cfa7a50" }, { "expanded_size": 170030192, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:bb85774c6ced6dae9b9b75cc66a3c0f2aeb20c61b5cb5ad37e393f688c93e843" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.1.0", "docs": "", "readme": "

BlueOS Cerulean Docs

\n

Hosts a mirror of the Cerulean Docs on the ROV so they can be viewed offline.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": "core > 1", "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "NetworkMode": "host" } }, "v1.0.0": { "identifier": "e6424a8a-3f3c-5312-9511-6d58f284e9fe", "type": "other", "website": "https://ceruleansonar.com", "images": [ { "expanded_size": 175622566, "platform": { "architecture": "amd64", "variant": null, "os": "linux" }, "digest": "sha256:16039d43f4823cf408e2a44d93438c33caf6d00f4b716e4028b2e3314d04b40e" }, { "expanded_size": 170033285, "platform": { "architecture": "arm", "variant": "v7", "os": "linux" }, "digest": "sha256:a4dc00ddc3a2398ff400d2533b4f9eea53d19cce0a8df24b0f9595fa1c09fc4f" } ], "authors": [ { "name": "Nick Nothom", "email": "nick.nothom@ceruleansonar.com" } ], "filter_tags": [], "extra_links": {}, "tag": "v1.0.0", "docs": "", "readme": "

BlueOS Cerulean Docs

\n

Hosts a mirror of the Cerulean Docs on the ROV so they can be viewed offline.

", "support": "https://forum.ceruleansonar.com/categories", "requirements": "core > 1", "company": { "about": "", "name": "Cerulean Sonar", "email": "dennys.bisogno@ceruleansonar.com" }, "permissions": { "ExposedPorts": { "80/tcp": {} }, "HostConfig": { "PortBindings": { "80/tcp": [ { "HostPort": "" } ] } } } } }, "repo_info": { "downloads": 9069, "last_updated": "2023-03-15T20:41:07.344116Z", "date_registered": "2023-03-02T18:19:41.09439Z" } } ]