diff --git a/content/development/bootstrap/index.md b/content/development/bootstrap/index.md index ab1bb07..cb717bf 100644 --- a/content/development/bootstrap/index.md +++ b/content/development/bootstrap/index.md @@ -18,6 +18,45 @@ top = false BlueOS-bootstrap is responsible for making sure [BlueOS-core](../core) is running as expected, as well as gracefully restarting core during BlueOS updates and if it is detected to have unexpectedly stopped/crashed. For an update the current core image gets shut down and the newly installed image gets started in its place, whereas in the case of a crash bootstrap reverts to running a known working core image, which is currently the one tagged as `factory` (which is whatever it was first flashed with), so that it's at least possible to access the interface. +### BlueOS Startup Configuration + +It is possible to view and configure how BlueOS is started via the built in [File Browser](@/usage/advanced/index.md#file-browser), in the `configs/bootstrap/startup.json` file. + +The file includes a variety of relevant fields, and can be used to inject environment variables through the `environment` variable: + +```json +{ + "core": { + "binds": { + .... + }, + "enabled": true, + "environment": [ + "BLUEOS_DISABLE_SERVICES='ping'" + ], + "image": "bluerobotics/blueos-core", + "network": "host", + "privileged": true, + "tag": "master" + } +} +``` + +#### Environment Variables + +The currently available environment variables include: + +| Variable | Purpose | +| --- | --- | +| `BLUEOS_DISABLE_SERVICES` | A comma-separated list of [service names](https://github.com/bluerobotics/BlueOS/tree/master/core/services) to disable. | +| `BLUEOS_DISABLE_PATCHES` | A comma-separated list of [patch names](https://github.com/bluerobotics/BlueOS/blob/master/core/tools/blueos_startup_update/blueos_startup_update.py#L696-L726) to disable. | +| `BLUEOS_DISABLE_STARTUP_UPDATE` | An existence flag which prevents BlueOS from automatically starting. | +| `BLUEOS_DISABLE_MEMORY_LIMIT` | An existence flag to allow BlueOS services to run without a memory limit. | +| `SSH_USER` | An optional username as an alternative to the default `pi` user, required by some systems. | +| `SSH_PASSWORD` | An optional password as an alternative to the default `raspberry`. | +| `USER_UID` | An optional user ID for SSH key storage ownership, as an alternative to the default `1000`. | +| `USER_GID` | An optional group ID for SSH key storage ownership, as an alternative to the default `1000`. | + ## Codebase [BlueOS-bootstrap](https://github.com/bluerobotics/BlueOS/tree/master/bootstrap) is open source, and lives within the broader [BlueOS](https://github.com/bluerobotics/BlueOS) GitHub repository. [Issues](https://github.com/bluerobotics/BlueOS/issues) can be used to report bugs or suggest features, and [Pull Requests](https://github.com/bluerobotics/BlueOS/pulls) fixing bugs or adding new features are welcomed. diff --git a/content/development/extensions/index.md b/content/development/extensions/index.md index 82c37df..d7411b1 100644 --- a/content/development/extensions/index.md +++ b/content/development/extensions/index.md @@ -222,7 +222,6 @@ For an Extension to be properly managed and shareable, the Dockerfile it's creat - will likely be something like `repo/extension-name >= version` - `LABEL type` - Useful for broad-strokes filtering when searching for/browsing Extensions - - Not yet implemented in the Extensions Manager - Should be one of the following strings: - `"device-integration"` - `"other"` @@ -230,7 +229,6 @@ For an Extension to be properly managed and shareable, the Dockerfile it's creat - `"example"` (for Extension examples) - `LABEL tags` - Useful for finer-grained filtering to help find relevant Extensions - - Not yet implemented in the Extensions Manager - Must be alpha-numeric (no capital letters, no symbols except dashes) - Limited to 10 tags per extension - Some examples (focused around possible Extension functions): @@ -268,19 +266,19 @@ To do so requires the Extension to run a HTTP server[^1], at which it must serve - The official URL for the extension - `"api"` - The official URL for the extension's API -- `"extra_query"` (optional) +- `"extra_query"` (optional, `New in 1.4`) - A string of extra query parameters to include when the extension is accessed through the sidebar - `"avoid_iframes"` (optional) - Boolean (`true`/`false`) specifying whether to avoid embedding the extension interface in an iframe. - `"new_page"` (optional) - Boolean (`true`/`false`) specifying whether to open the extension in a new page instead of in a BlueOS frame -- `"works_in_relative_paths"` (optional) +- `"works_in_relative_paths"` (optional, `New in 1.4`) - Boolean (`true`/`false`) specifying whether the extension can be served at an arbitrary base URL (i.e. it does not access its resources using absolute paths) - This is required for extensions to be accessible remotely (e.g. via a cloud proxy), and is recommended for all extensions - Makes the extension available at `/extensionv2//` - The sanitized name is the `name` field in lowercase, with all non alphanumeric characters removed -- `"extras"` (optional) +- `"extras"` (optional, `New in 1.4`) - A dictionary of string keys and values, intended for convenience use (e.g. for simplifying integration with other extensions) As an example: diff --git a/content/usage/advanced/dhcp-server.png b/content/usage/advanced/dhcp-server.png new file mode 100644 index 0000000..e8004b0 Binary files /dev/null and b/content/usage/advanced/dhcp-server.png differ diff --git a/content/usage/advanced/ethernet.png b/content/usage/advanced/ethernet.png index 8d84b3b..08e45cc 100644 Binary files a/content/usage/advanced/ethernet.png and b/content/usage/advanced/ethernet.png differ diff --git a/content/usage/advanced/extensions-store.png b/content/usage/advanced/extensions-store.png index 34dc3f6..3f474f2 100644 Binary files a/content/usage/advanced/extensions-store.png and b/content/usage/advanced/extensions-store.png differ diff --git a/content/usage/advanced/index.md b/content/usage/advanced/index.md index 7ee4121..813b3e6 100644 --- a/content/usage/advanced/index.md +++ b/content/usage/advanced/index.md @@ -1,7 +1,7 @@ +++ title = "Advanced Usage" description = "BlueOS advanced usage documentation." -date = 2024-09-26T16:00:00+11:00 +date = 2025-04-16T06:20:00+10:00 template = "docs/page.html" sort_by = "weight" weight = 30 @@ -43,6 +43,7 @@ in) Pirate Mode are shown in [dark mode](#display-mode-management), and describe with grey text. ### Safe Mode +`New in 1.4` Operating a vehicle involves some risks to both the vehicle and the operator. When BlueOS detects that the vehicle is armed it engages safe mode, which requires explicit @@ -68,6 +69,12 @@ operation: {{ easy_image(src="widgets", width=350) }} +Widgets are also generated for any enabled network interfaces, which allows monitoring +real time data bandwidth being downloaded/received by the BlueOS computer and +uploaded/transmitted from it `(New in 1.4)`: + +{{ easy_image(src="widgets-network-usage", width=280) }} + There is also a prominent indicator when the vehicle is in [Safe Mode](#safe-mode): {{ easy_image(src="safe-mode-widget", width=100) }} @@ -85,11 +92,17 @@ On the right side of the header you'll find: ##### Wired network management (ethernet / USB-OTG) {{ service(service="Cable Guy", port=9090, link="/services/cable_guy", based=true) }} -For each interface, choose between: +An ethernet connection can generally be accessed through the +[http://blueos-ethernet.local](http://blueos-ethernet.local) mDNS address. + +When configuring a wired interface, choose between: - A static IP - A dynamic IP - A DHCP server - Serves the lease range 101-200 `(New in 1.4)` + - Can be configured as a backup, which only runs if no existing DHCP server is detected on the network `(New in 1.4)` + +{{ easy_image(src="dhcp-server", width=300, center=true) }} It is possible to have multiple connections per interface type. @@ -131,6 +144,7 @@ easily connect to it from a phone {% pirate() %} - Configure network priority ordering - Determines which network interface is used for internet connection + - Displays internet availability on each network - Generally `wlan0` should be at the top (for internet via wifi) - Move `eth0` to the top if using internet passthrough via the tether {% end %} @@ -351,6 +365,15 @@ versions changes (e.g. during development) - Allows updating the [bootstrap image](@/development/bootstrap/index.md) to match the current version - Allows loading remote versions (including from custom docker-hub repositories) +- Allows logging in to one or more docker registries, to access private repositories, +and to help avoid rate limiting + - By default, logs in to the registry for Docker Hub + - Custom registries can be authenticated to by specifying the relevant registry index after enabling the switch + - Credentials are saved to `.docker/config.json`, by default for the normal `pi` user (and optionally the root user) + - Accounts authenticated to the root user are displayed with a shield icon, and are valid for `sudo docker` commands +{% end %} +{{ easy_image(src="version-chooser-docker-login", width=400, class="pirate") }} +{% pirate() %} - Allows manually uploading docker images from the surface computer - If an undetected failure somehow occurs in BlueOS (or if a broken version gets installed) it's possible to easily roll back to a working version from @@ -588,44 +611,114 @@ view of the model, with a transparent background. {{ easy_image(src="vehicle-setup-overview", width=600) }} {% pirate() %} -It is possible to override the displayed 3D model by placing an appropriate `.glb` -file at `userdata/modeloverrides//.glb` (e.g. -`userdata/modeloverrides/sub/VECTORED_6DOF.glb`), or `userdata/modeloverrides/ALL.glb`. - -Documentation for the recommended process for creating a `.glb` file from a vehicle -model is coming soon. +It is possible to override the displayed 3D model by providing +[an appropriate glTF file](#vehicle-model). In future this page will also allow - using custom highlighting logic for model components - displaying device statuses from extensions {% end %} +#### PWM Outputs + The PWM Outputs tab allows configuring the servo function mappings (for motors, lights, camera tilt, etc), as well as manually testing the motors, and an automated check to detect motors that spin backwards. Relevant motors can be set to run on reversed control signals, so they spin in the expected direction. +Hovering over a motor or output function will attempt to highlight the related component +in the 3D model. + {{ easy_image(src="vehicle-setup-pwm-outputs", width=600) }} +Clicking on an output in the right side table allows changing its assigned function, +and configuring its PWM limits and trim value `(New in 1.4)`: + +{{ easy_image(src="vehicle-setup-pwm-function", width=450) }} + +#### Autopilot Configuration +`New in 1.3` + The Configure tab provides configuration and calibration options for the vehicle sensors and peripherals, including failsafes, and reverting parameters to their defaults. -
`New in 1.3` +{% note() %} +Pages with configurable options usually include info icons above the interface components, which can be +hovered over for extra information about the underlying autopilot parameters. +{% end %} + +##### Parameters +- Parameters can be reset to the default values defined and stored in the firmware +- Full sets of recommended parameters are available for Blue Robotics vehicles {{ easy_image(src="vehicle-setup-configure-params", width=600) }} +##### Gyroscope +- Gyroscope calibration affects the vehicle attitude (orientation) estimates, and +particularly the measured rotation rates {{ easy_image(src="vehicle-setup-configure-gyro", width=600) }} +##### Accelerometer +- [Accelerometer calibration](https://ardupilot.org/sub/docs/common-accelerometer-calibration.html) +affects the detected gravity direction, as well as speed estimates + - Full calibration is a detailed calibration of all three axes, and requires rotating + the vehicle + - Quick calibration is a simplified, lower-quality calibration which only requires + placing the vehicle on a level surface + - This can be sufficient for vehicles that mostly operate in a level orientation {{ easy_image(src="vehicle-setup-configure-accel", width=600) }} +##### Compass +- [Compass calibration](https://ardupilot.org/sub/docs/common-compass-calibration-in-mission-planner.html) +affects the vehicle yaw (heading) estimate + - It compensates for constant magnetic effects caused by the vehicle structure, and large scale + compass declination effects using a world magnetic model, but cannot compensate for local + [magnetic interference](https://ardupilot.org/sub/docs/common-magnetic-interference.html#common-magnetic-interference) + - The world magnetic model requires an estimate of the vehicle's position, and can get + outdated when using an old autopilot version + - In case there is no global positioning sensor available, an option is provided to + determine a rough position estimate using [GeoIP](https://en.wikipedia.org/wiki/Internet_geolocation), + or to specify coordinates manually + - A rough position estimate is saved persistently when calibrating, but may need to be changed + [in the autopilot parameters](https://ardupilot.org/sub/docs/parameters.html#origin-lat-backup-latitude-for-ekf-origin) + if the vehicle is operating in a significantly different part of the world to where it was configured + - Full onboard calibration is a detailed calibration which requires rotating the vehicle about + all three of its axes + - Large vehicle calibration is a simplified, lower-quality calibration which only requires + pointing the vehicle (true) North + - Results can be improved afterwards using Compass Learn + - Compass Learn calibrates the compasses automatically through operation of the vehicle + - It requires a valid global position estimate, and a period of driving the vehicle around + - Log-based calibration analyses a log from a previous flight, and usually provides the best results + - It is not currently available through the Vehicle Setup page, but can be accessed via the Mag Fit + tool in the [Log Browser](#log-browser) (when replaying a log), and the resulting values can be + copied across to the autopilot parameters +- Available compasses can be disabled or reordered, and flagged as internal or external to the flight +controller board {{ easy_image(src="vehicle-setup-configure-compass", width=600) }} +##### Barometer +- Barometer calibration sets the reference pressure for altitude/depth measurements, and the +internal pressure for vehicles with enclosed electronics + - It should generally be performed at the start of each dive/flight {{ easy_image(src="vehicle-setup-configure-baro", width=600) }} +##### Lights +- ROV lights configuration allows specifying the output pins for two sets of PWM-controlled +lights, and the number of steps the control is split into {{ easy_image(src="vehicle-setup-configure-lights", width=600) }} +##### Failsafes +- Failsafe configuration exposes important autopilot failsafe features through an intuitive interface +- Failsafes should be set up as part of responsible operation, and can provide early warnings of +problems, and trigger automated safe behaviours if a critical issue occurs {{ easy_image(src="vehicle-setup-configure-failsafes", width=600) }} +##### Camera Gimbal `New in 1.4` +- Pitch control for the camera gimbal requires specifying the PWM limits of the gimbal servo +motor, and their relationship with its tilt angle range +- Auto-stabilization allows the camera to maintain its current pitch angle (relative to Earth), +by compensating for pitch rotations of the vehicle {{ easy_image(src="vehicle-setup-configure-gimbal", width=600) }} ### Video Streams @@ -656,6 +749,9 @@ connected at that time, with UDP streams counting up from port `5600` {{ simple_pirate_image(src="video-stream-example", width=400, center=true) }} +- H264-encoded streams can be repackaged as WebRTC, and viewed and recorded in +[Cockpit](https://blueos.cloud/cockpit/docs/latest/usage/advanced/#video-widgets) + - H265-encoded streams also work, but currently only on macOS `(New in 1.4)` - By default the streams are also presented via MAVLink, so QGroundControl (>=v4.1.7) can toggle between them without needing to know specific ports {% pirate() %} @@ -666,13 +762,13 @@ can toggle between them without needing to know specific ports {{ easy_image(src="qgc_switch_streams", width=400, center=true) }} - Camera settings (brightness, exposure, etc) that are exposed via UVC can be -configured with the "Configure" button +configured with the "Device Controls" button {{ easy_image(src="video-config-example", width=500, center=true) }} - Camera settings are also exposed via the [MAVLink camera protocol](https://mavlink.io/en/services/camera.html), so are -controllable in QGroundControl +controllable in applications like QGroundControl - Switching streams in QGroundControl while recording stops the current recording - If you are regularly switching streams it may be worth doing a screen recording either instead of or as well as recording the base video @@ -688,11 +784,9 @@ controllable in QGroundControl - Detection requires turning on legacy camera support: 1. turn on via the settings button in the buttom right corner 2. reboot the onboard computer to enable -{% pirate() %} - It is possible to use the "Redirect source" element to make an ethernet camera -available via the BlueOS camera manager, which allows QGroundControl to detect -it automatically (via MAVLink) -{% end %} +available via the BlueOS camera manager, which allows Cockpit and QGroundControl +to detect it automatically {{ simple_pirate_image(src="video", width=600) }} @@ -706,7 +800,7 @@ The Extensions Manager is in charge of fetching, installing, updating, and manag [Extensions](@/development/extensions/index.md). The Store tab shows the available extensions, with a default filter which excludes -the development example extensions. +the development example extensions. Beta versions show a red marker on the card corner. {{ easy_image(src="extensions-store", width=600) }} @@ -738,6 +832,12 @@ versions by setting the docker tag. ## Interface Theme ### Theme Content +#### Company Logo + +- square images work best + +{{ easy_image(src="theme-logo", width=500, center=true) }} + #### Vehicle Icon - square images work best @@ -750,6 +850,7 @@ versions by setting the docker tag. - the vehicle name makes it easier to determine which vehicle you are connected to - changing the mDNS hostname changes the address you connect to for the browser interface - wired connection (ethernet tether / USB-OTG) -> [http://custom.local](http://custom.local) + - ethernet can also be accessed through [http://custom-ethernet.local](http://custom-ethernet.local) - wifi connection -> [http://custom-wifi.local](http://custom-wifi.local) - BlueOS hotspot -> [http://custom-hotspot.local](http://custom-hotspot.local) - [http://blueos.local](http://blueos.local) will still be available for wired connections, @@ -766,13 +867,60 @@ versions by setting the docker tag. {{ easy_image(src="theme-name-mdns", width=400, center=true) }} -#### Company Logo +{% pirate() %} +#### Vehicle Model -- square images work best +The 3D model used in the [Vehicle Setup](#vehicle-setup) pages can be replaced with a +custom glTF file: +{% end %} -{{ easy_image(src="theme-logo", width=500, center=true) }} +{{ easy_image(src="vehicle-setup-custom-model", width=600, class="pirate") }} {% pirate() %} +There are a variety of ways to create such a file, but our standard process is to: +1. Export a model of your vehicle as an STL file + - triangle meshes are bad for designing, but nice for rendering +1. Import it into [Blender](https://www.blender.org/) +1. Remove small parts (including cutting off the threads of screws) + - This helps improve performance, with minimal effect on what can be seen +1. Merge/group pieces that are part of a single component + - Select them and press `CTRL+J` + - We'll typically rename the groups with meaningful component names as we go +1. Add materials, to "paint" the parts in different colours + - `CTRL+L` can help to select connected faces + - Transparent materials can be made by setting low alpha values, and setting the blend mode to "Alpha Blend" +1. For parts that should sometimes be highlighted in the Vehicle Setup page, start the names of their materials with their [servo function enum name](https://github.com/bluerobotics/BlueOS/blob/master/core/frontend/src/types/autopilot/parameter-sub-enums.ts#L100-L162) + - Not case sensitive + - E.g. thruster 1 should only use materials with names that start with `motor1` +1. Merge the parts, set the shading to smooth, and adjust the auto-smoothing of normals to a value that looks right for your components +1. Reduce the model triangles by adding a decimate modifier + - We typically drag the Ratio slider down until the model looks bad, then bring it back up until it looks acceptable +1. Export as a glTF (`.glb`) file, so it can be read by the BlueOS model viewer + - `Mesh / Apply Modifiers` and `Compression` should both be enabled in the export configuration +1. Save it into the relevant folder in the BlueOS [File Browser](#file-browser) + - `userdata/modeloverrides//.glb` + - e.g. for a BlueROV2 Heavy, `` would be `sub`, and `` would be `VECTORED_6DOF` + - to ignore vehicle type switching, you can instead save the file as `/userdata/modeloverrides/ALL.glb` +1. If you want, it's possible to add annotations (like we have for the motors, in the default model) via the glTF https://modelviewer.dev/editor/ + - "Add Hotspot" to create a new annotation + - Copy the resulting "data surface" attribute into a json file like the following: + ```json + { + "annotations": { + "Motor1": { + "surface": "3 1 2510 2509 2511 0.356 0.124 0.521", + "text": "Motor 1" + }, + "Motor2": { + "surface": "2 1 2642 2643 2674 0.638 0.230 0.133", + "text": "Motor 2" + }, + } + } + ``` + - annotation names should match the [`SERVOn_FUNCTION`](https://ardupilot.org/sub/docs/parameters.html#servo1-function-servo-output-function) parameter value names + - Save the file in the same place as and with the same base name as the model file, e.g. `VECTORED_6DOF.json` + ### Theme Styling It is possible to customise the styling of the BlueOS interface by adding a `theme_style.css` file at `userdata/styles/` in the [File Browser](#file-browser). @@ -853,6 +1001,7 @@ The explanatory diagram colours are also configurable `(New in 1.4)`: ``` {% end %} + diff --git a/content/usage/overview/index.md b/content/usage/overview/index.md index 70fbcd6..e997d8d 100644 --- a/content/usage/overview/index.md +++ b/content/usage/overview/index.md @@ -1,7 +1,7 @@ +++ title = "Overview" description = "BlueOS overview." -date = 2024-04-10T11:45:00+10:00 +date = 2025-04-16T07:35:00+10:00 template = "docs/page.html" sort_by = "weight" weight = 0 @@ -17,6 +17,14 @@ top = false {{ easy_image(src="blueos-banner", width=460, center="true") }} {{ easy_image(src="interface-highlight", width=650, center="true") }} +## Quick links + +1. [Documentation](@/_index.md) +2. [Source code](https://github.com/bluerobotics/BlueOS) +3. [Releases, changelogs, files](https://github.com/bluerobotics/BlueOS/releases) +4. [Extensions gallery](https://docs.bluerobotics.com/BlueOS-Extensions-Repository) +5. [Support](#community) + ## A bit of context... The [original Companion Software](https://www.ardusub.com/reference/companion-web-ui.html) project (started in 2015) was originally created with the simple intent to route an underwater vehicle's video stream and communications to the surface computer, and provide some basic configuration of those features and the vehicle firmware. The simple scope was great to get things started, but also meant that new and complex features weren't designed in from the start, so maintenance and developing functionality became increasingly challenging. @@ -68,15 +76,30 @@ This covers a summary of the major changes and new features in BlueOS-1.4. Where - [Autopilot Parameters](../advanced/#autopilot-parameters) - Added parameter description override functionality, for custom parameter support - [MAVLink Endpoints](../advanced/#mavlink-endpoints) - - Added MAVLink Server as a routing alternative, with all-endpoint logging and a detailed debugging interface + - Added MAVLink Server as a routing alternative, with all-endpoint logging and a detailed debugging interface, + and basic support for Zenoh communication - [Vehicle Setup](../advanced/#vehicle-setup) + - Added servo limit sliders on the PWM outputs page - Added camera mount configuration options - Added GPS yaw to the compass page (when available) + - Added info tooltips to expose underlying autopilot parameters - [Video Streams](../advanced/#video-streams) - Added support for H265-encoded video streams + - Improved camera manager robustness, and interface intuitiveness +- [BlueOS Version](../advanced/#blueos-version) + - Added an option for Docker login, to reduce rate limiting and improve private registry support +- [System Information](../advanced/#system-information) + - Added hardware board model information ### Device/Hardware Support - Added support for running the Navigator [flight controller](@/integrations/hardware/required/flight-controller/index.md) with 64-bit operating systems +- Added Raspberry Pi 5 support +- Added [startup configuration options](@/development/bootstrap/index.md#blueos-startup-configuration) for SSH and system limits, +to improve support for alternative hardware and development setups + +### Connectivity +- Added a [backup DHCP server](../advanced/#wired-network-management-ethernet-usb-otg) to the ethernet network interface, +which starts automatically if no other DHCP servers are detected on the network ### [Data Privacy](../privacy/) - Added Sentry reports for user-generated feedback @@ -88,17 +111,17 @@ BlueOS has almost all features from the old Companion, and several hotly-request {% horizontal_scroll(width="1200px") %} | Feature | BlueOS 1.4 | BlueOS 1.3 | BlueOS 1.2 | BlueOS 1.1 | BlueOS 1.0 | Companion | |---|---|---|---|---|---|---| -| [**Onboard Computer**](@/integrations/hardware/required/onboard-computer/index.md) | → | →
+ Raspberry Pi CM4 | → | →
+ Other Linux-based SBCs images to come | + Raspberry Pi 3B / 3B+ / 4B supported
+ You can install from scratch using the installation script in any Linux computer. (Modifications may be necessary for your hardware configuration) | Raspberry Pi 3B required | +| [**Onboard Computer**](@/integrations/hardware/required/onboard-computer/index.md) | →
+ Raspberry Pi 5 | →
+ Raspberry Pi CM4 | → | →
+ Other Linux-based SBCs images to come | + Raspberry Pi 3B / 3B+ / 4B supported
+ You can install from scratch using the installation script in any Linux computer. (Modifications may be necessary for your hardware configuration) | Raspberry Pi 3B required | | [**Flight Controller**](@/integrations/hardware/required/flight-controller/index.md) | →
+ 64-bit Navigator | → | → | →
+ Cube Orange
+ Pixhawk 6X | →
+ Navigator
+ Pixhawk 4 | Pixhawk | | [**Video Streams**](../advanced/#video-streams) | →
+ H265 support | →
+ RTSP variants | → | →
+ MPEG and YUYV encodings

+ Supports Raspberry Pi cameras | + Easily manage *multiple streams*

+ UDP and RTSP outputs

- Audio streaming
*not yet supported* ([#990](https://github.com/bluerobotics/BlueOS-docker/issues/990)) | Select a *single* camera to stream over UDP
+ Supports Raspberry Pi cameras ([except HQ Camera](https://discuss.bluerobotics.com/t/raspberry-pi-camera-stream-not-working/11976/18))
+ Supports a single audio stream over UDP | | [**WIFI Manager**](../advanced/#indicators-and-network-configuration) | → | →
+ External adapter support | → | →
+ Vehicle provides local hotspot | →
+ Connect to and manage *multiple networks*, like a cellphone or computer WIFI manager | Connect to a *single network*
+ Visible and hidden networks supported | -| [**Ethernet Manager**](../advanced/#indicators-and-network-configuration) | → | → | → | → | *Multiple* static IPs *and* DHCP configuration | *Single* DHCP (client or server) *or* static network | +| [**Ethernet Manager**](../advanced/#indicators-and-network-configuration) | →
+Backup DHCP server | → | → | → | *Multiple* static IPs *and* DHCP configuration | *Single* DHCP (client or server) *or* static network | | [**Notification system**](../advanced/#header-indicators-and-blueos-configuration) | → | → | → | → | Notifications about issues, new releases, and the status of your system. | - | | [**File Browser**](../advanced/#file-browser) | → | → | →
+ Folder for extension data and configuration files | → | →
+ *Edit files* from the browser | Download and upload files | | [**Log Browser**](../advanced/#log-browser) | → | → | → | → | *Download and manage logs* from the browser
+ *Visualise and analyse logs* from the built in viewer | Ssh/terminal only | | [**MAVLink inspector**](../advanced/#mavlink-inspector) | → | → | → | →
+ MAVLink2REST "watcher" option for individual message types | See and *inspect MAVLink messages in real time* from the browser | See latest MAVLink messages via MAVLink2REST | | [**Network test**](../advanced/#network-test) | →
+ Live usage widget | → | → | →
+ Graph during speed tests | →
+ Check *real time latency* | Check upload and download speed from the Control Station Computer to the vehicle's Onboard Computer | -| [**System information**](../advanced/#system-information) | → | → | → | → | Provides all the necessary information about the hardware, operating system, running processes, CPU, memory, disk, network usage and status | Basic usage statistics, list of connected devices | +| [**System information**](../advanced/#system-information) | →
+ Board model | → | → | → | Provides all the necessary information about the hardware, operating system, running processes, CPU, memory, disk, network usage and status | Basic usage statistics, list of connected devices | | [**Web Terminal**](../advanced/#terminal) | → | → | →
+ Support for non-`pi` users | → | →
+ Uses a tmux session | Access Linux terminal from the browser | | [**Autopilot Firmware**](../advanced/#autopilot-firmware) | → | → | → | → | →
+ *General ArduPilot* downloads;
+ *select vehicle* to update | `stable`, `beta`, and `devel` releases, custom uploads, and restore default parameters;
*ArduSub-only* downloads | | [**Autopilot Parameters**](../advanced/#autopilot-parameters) | →
+ Custom description overrides | →
+ Intuitive ArduPilot calibrations and configuration
+ PX4 parameter descriptions | → | View, search, and edit ArduPilot vehicle parameters | - | - | @@ -128,8 +151,14 @@ When BlueOS is connected to the internet, a notification appears if a newer vers It's worth noting that the [Version Chooser](../advanced/#blueos-version) in general offers several major robustness and versatility improvements over the previous 'latest update only' approach, which should benefit both users and developers. -## Quick links +## Community -1. [Documentation](@/_index.md) -2. [Source code](https://github.com/bluerobotics/BlueOS) -3. [Releases, changelogs, files](https://github.com/bluerobotics/BlueOS/releases) +### Discussions and Support + +- [Discussion Forum](https://discuss.bluerobotics.com/c/bluerobotics-software/blue-os/85) +- [Issues and Feature Requests](https://github.com/bluerobotics/BlueOS/issues) +- [Chat (Discord)](https://discord.gg/w2yZK6Qkdr) + +### Developer Presentations + +See [development docs](@/development/overview/index.md#developer-presentations).