diff --git a/content/usage/advanced/diy-widget-config.png b/content/usage/advanced/diy-widget-config.png index fda7d83..f716ccf 100644 Binary files a/content/usage/advanced/diy-widget-config.png and b/content/usage/advanced/diy-widget-config.png differ diff --git a/content/usage/advanced/ekf-status-mini-widget.png b/content/usage/advanced/ekf-status-mini-widget.png new file mode 100644 index 0000000..eeec679 Binary files /dev/null and b/content/usage/advanced/ekf-status-mini-widget.png differ diff --git a/content/usage/advanced/index.md b/content/usage/advanced/index.md index f09ae71..bec0ca4 100644 --- a/content/usage/advanced/index.md +++ b/content/usage/advanced/index.md @@ -141,20 +141,22 @@ Users are mostly helpful for the following situations: For individuals with their own vehicles and control computers, it is generally fine to set a username once and then ignore that the "user" level exists. -Switching users is done through [`Settings / General`](#general): -{{ easy_image(src="user-manager", width=500, center=true) }} +Switching users is done through [`Settings / General > Manage Users`](#general): +{{ easy_image(src="user-switcher", width=500, center=true) }} + +Turning on admin mode, in the bottom left corner, it is possible to add new users or delete +existing ones: -Creating new users is possible by clicking the "Add New" button, and choosing a unique name. -The new user copies the Profiles of the currently selected user (if one exists - otherwise -it uses Cockpit's default profiles). +{{ easy_image(src="user-manager", width=500, center=true) }} -It is [not currently possible to delete users](https://github.com/bluerobotics/cockpit/issues/1384). +Users must have unique names, and creating a new user copies the Profiles of the currently selected +user (if one exists - otherwise it uses Cockpit's default profiles). ### Profiles A "profile" is a collection of [views](#views) that are relevant to a particular use-case or vehicle, -together with any configured [custom widgets](#do-it-yourself-widget), [custom Actions](#custom-actions), -and persistent [data-lake](#data-lake) variables. +together with any configured [custom widgets](#do-it-yourself-diy-widget), +[custom Actions](#custom-actions), and persistent [data-lake](#data-lake) variables. If one control station computer is used for multiple complex use-cases (which each require multiple separate Views), then they can be separated into Profiles and the most relevant one can be switched @@ -304,13 +306,16 @@ The vehicle connection mini-widget provides a continuous indication: The joystick connection mini-widget indicates whether a joystick is disconnected, disabled, or connected: {{ easy_image(src="joystick-mini-widget", width=120, center=true) }} -Clicking on the widget allows manually disabling the connection: +Clicking on the widget allows manually disabling the joystick pipeline: {{ easy_image(src="joystick-config", width=300, center=true) }} which can be useful if multiple users are switching control of the vehicle between separate devices with Cockpit open, or to prevent a faulty joystick from sending errant commands without needing to physically disconnect or unpair it. +The joystick pipeline is disabled by default if Cockpit detects another control station software sending +joystick commands to the vehicle when it starts up. + ##### GPS Connection Indicator For vehicles that use satellite positioning, the GPS connection mini-widget indicates the number of connected satellites, and the status of the position lock: @@ -327,6 +332,11 @@ presenting the current state. ##### Flight Mode {{ easy_image(src="flight-mode-mini-widget", width=150, center=true) }} +##### EKF Status +For help with understanding and debugging the autopilot's state estimates, the EKF status can be checked +to see which estimates are undefined or uncertain: +{{ easy_image(src="ekf-status-mini-widget", width=600, center=true) }} + #### Interface Controls While some interface controls (like changing Views) are available as [Cockpit Actions](#cockpit-actions) @@ -574,6 +584,17 @@ convenient video playback: If a recording is ongoing, Cockpit will try to prevent the tab/application from closing, with a warning: {{ easy_image(src="video-recording-termination-warning", width=550, center=true) }} +##### Snapshot Recorder +The Snapshot mini-widget allows capturing the current frame from one or more WebRTC video streams, or the +entire visible View (in the self-contained application) and saving them as timestamped image files with EXIF +metadata specified for the vehicle's location and orientation: +{{ easy_image(src="snapshot-mini-widget", width=230, center=true) }} + +Snapshots can be captured by clicking the button, or configured to trigger repeatedly with a timer: +{{ easy_image(src="snapshot-config", width=350, center=true) }} + +The saved images can be accessed through the [Snapshot Library](#snapshot-library). + ##### URL Video Player The URL video player widget displays a video from a URL. This is useful for testing IP cameras that are not @@ -671,11 +692,15 @@ modifying basic appearance characteristics: It is possible to change the decimal resolution of the displayed statistics, and the limit the number of plotted samples to improve visibility and performance. -#### Do It Yourself Widget +#### Do It Yourself (DIY) Widget - Completely custom elements, code logic, and styling {{ easy_image(src="diy-widget-config", width=550, center=true) }} - Runs code automatically when Cockpit starts/refreshes +- Can save and apply updates automatically (while editing), or be configured to only apply changes manually + - Auto-save should generally be disabled while editing JavaScript functionality, but can be convenient + while modifying a widget's visual interface / styling +- Can inherit styles from the Cockpit interface, or use completely independent styles - Can listen to, create, and modify [data-lake variables](#data-lake), and register and/or execute Actions using the Cockpit API (`window.cockpit.*`) - Can be exported to or imported from a JSON file with `"html"`, `"css"`, and `"js"` string fields @@ -771,8 +796,8 @@ detailed debugging interface provided. Cockpit's data lake is an accessible data management and storage system. It is designed to expose Cockpit's internals to the interface (including [displaying](#very-generic-indicators) -and [plotting](#data-plotting)), and for use in user-defined functions (through [custom widgets](#do-it-yourself-widget) -and [custom Actions](#custom-actions)). +and [plotting](#data-plotting)), and for use in user-defined functions (through +[custom widgets](#do-it-yourself-diy-widget) and [custom Actions](#custom-actions)). The data lake: - Includes information about Cockpit, the vehicle, video streams, MAVLink telemetry, and widget and Action internals @@ -832,17 +857,30 @@ Cockpit is intended to work with arbitrary joystick types, and allows mapping jo various [protocol functions](#joystick-protocols), which can send inputs and commands to the vehicle, or trigger interface events. -{% note() %} -Cockpit provides three independent sets of function mappings, which are automatically selected between -based on the connected vehicle type. Changes to a mapping are synchronised to/from the [User](#users), -including changes to which vehicle type(s) a mapping gets selected for. It is also possible -to manually export the function mappings as a file, and import them into another User or a different -Cockpit instance/device. -{% end %} +#### Function Mapping + +Cockpit provides three independent sets of function mappings, which are automatically pre-selected +based on the connected vehicle type: + +{{ easy_image(src="joystick-function-mapping", width=600, center=true) }} + +Non-active mappings can be previewed by clicking on them, and switched to by clicking the switch +button that appears while previewing: + +{{ easy_image(src="joystick-mapping-switch", width=250, center=true) }} + +Changes to a mapping are synchronised to/from the [User](#users), including changes to +which vehicle type(s) a mapping gets selected for. It is also possible to manually export the function +mappings as a file, and import them into another User or a different Cockpit instance/device. + +##### Buttons and Axes Known joystick types have an interactive diagram for mapping button and axis functions visually: {{ easy_image(src="joystick-button-mapping", width=600, center=true) }} +Joysticks can be individually enabled/disabled from the toggle-switch under their name, or the entire +joystick pipeline can be disabled via the [Joystick Connection Indicator](#joystick-connection-indicator). + Button presses and axis movements should be mirrored on the diagram, and clicking on a button element in the diagram allows remapping its mapped function. @@ -861,6 +899,21 @@ Support is built in for simultaneous input from multiple sources, including mult default each joystick can provide up to 32 axis ranges and 32 buttons. {% end %} +#### Axis Calibration + +Axis calibration options are provided to improve control and compensate for joystick degradation: +{{ easy_image(src="joystick-calibration", width=600, center=true) }} + +- Exponential scaling reduces the output change near the center of an axis, and increases it towards the edges + - Higher values can improve fine control at low thrust levels (e.g. slow speeds), at the expense of + less control fidelity at higher thrusts/speeds +- Dead-bands zero-out inputs at the center + - This helps to avoid undesired input values when there is slop in the axis spring (i.e. "stick drift") + - The auto-calibration option allows wiggling the axis sticks in the region where the spring is not + engaging, to detect the zone the axes will return to when released + - Large dead-zones make fine control difficult, so if your joystick is suffering from signficant stick drift + it is a good idea to repair or replace it + #### Joystick Protocols When mapping the functionality of a joystick button or axis, there are multiple protocols to choose from, which can be mixed and matched across different buttons and axes: @@ -1079,6 +1132,7 @@ There are some predefined Actions built into Cockpit for convenience, including: - `hold_to_confirm` - `start_recording_all_streams` - `stop_recording_all_streams` +- `toggle_recording_all_streams` - `mavlink_arm` - `mavlink_disarm` @@ -1128,6 +1182,10 @@ More detailed breakdowns and examples will be coming in future. first file in the batch, or selecting a set of individual files using `CTRL+Click` or `CMD+Click` (for macOS). {{ easy_image(src="video-recording-library", width=500, center=true) }} +### Snapshot Library +- Allows downloading and deleting [snapshots](#snapshot-recorder) +{{ easy_image(src="snapshot-library", width=500, center=true) }} + ### Telemetry Logs / Subtitle Files Cockpit can optionally record some of its received telemetry values, which can then be turned into subtitle diff --git a/content/usage/advanced/joystick-button-mapping.png b/content/usage/advanced/joystick-button-mapping.png index 90ecac6..20b11f2 100644 Binary files a/content/usage/advanced/joystick-button-mapping.png and b/content/usage/advanced/joystick-button-mapping.png differ diff --git a/content/usage/advanced/joystick-calibration.png b/content/usage/advanced/joystick-calibration.png new file mode 100644 index 0000000..52fec08 Binary files /dev/null and b/content/usage/advanced/joystick-calibration.png differ diff --git a/content/usage/advanced/joystick-function-mapping.png b/content/usage/advanced/joystick-function-mapping.png new file mode 100644 index 0000000..8732665 Binary files /dev/null and b/content/usage/advanced/joystick-function-mapping.png differ diff --git a/content/usage/advanced/joystick-mapping-switch.png b/content/usage/advanced/joystick-mapping-switch.png new file mode 100644 index 0000000..62f1663 Binary files /dev/null and b/content/usage/advanced/joystick-mapping-switch.png differ diff --git a/content/usage/advanced/snapshot-config.png b/content/usage/advanced/snapshot-config.png new file mode 100644 index 0000000..c9036bf Binary files /dev/null and b/content/usage/advanced/snapshot-config.png differ diff --git a/content/usage/advanced/snapshot-library.png b/content/usage/advanced/snapshot-library.png new file mode 100644 index 0000000..28904f9 Binary files /dev/null and b/content/usage/advanced/snapshot-library.png differ diff --git a/content/usage/advanced/snapshot-mini-widget.png b/content/usage/advanced/snapshot-mini-widget.png new file mode 100644 index 0000000..6e1e620 Binary files /dev/null and b/content/usage/advanced/snapshot-mini-widget.png differ diff --git a/content/usage/advanced/user-manager.png b/content/usage/advanced/user-manager.png index 03a8b7e..49a1313 100644 Binary files a/content/usage/advanced/user-manager.png and b/content/usage/advanced/user-manager.png differ diff --git a/content/usage/advanced/user-switcher.png b/content/usage/advanced/user-switcher.png new file mode 100644 index 0000000..2b27dab Binary files /dev/null and b/content/usage/advanced/user-switcher.png differ diff --git a/content/usage/installation.md b/content/usage/installation.md index 63f25f9..05c403b 100644 --- a/content/usage/installation.md +++ b/content/usage/installation.md @@ -40,19 +40,15 @@ Download the latest version for your operating system here: | Operating System | x86_64 | arm64 | | --- | --- | --- | | Windows | Cockpit.exe | Not available | -| macOS[¹](#1) | Cockpit-Intel.dmg | Not yet available, use x86_64 version | +| macOS | Cockpit-Intel.dmg | Cockpit-M-series.dmg | | iOS / iPadOS | N/A | use the BlueOS Extension in a browser | -| Linux[²](#2) | Cockpit-x86_64.AppImage
Cockpit-x86_64.flatpak | Cockpit-arm64.AppImage
Cockpit-arm64.flatpak | +| Linux[¹](#1) | Cockpit-x86_64.AppImage
Cockpit-x86_64.flatpak | Cockpit-arm64.AppImage
Cockpit-arm64.flatpak | | Android | N/A | use the BlueOS Extension in a browser | {% end %} or check the [releases](https://github.com/bluerobotics/cockpit/releases), for a list of all available versions, and the main changes between them. -[^1]: Cockpit is not yet registered with Apple, so may get flagged as a potential security threat. For now, the first open on macOS may require - right-clicking Cockpit in your Applications folder, selecting "Open", then choosing to "Open anyway" if prompted, or opening the security - preferences and scrolling down to "Allow" opening if there is no prompt. - -[^2]: Steam Deck users are recommended to use at least `v.16.0-beta.13`, as versions before this were [incapable of recording vidoes](https://github.com/bluerobotics/cockpit/pull/1974), and had performance issues. +[^1]: Steam Deck users are recommended to use at least `v.16.0`, as versions before this were [incapable of recording vidoes](https://github.com/bluerobotics/cockpit/pull/1974), and had performance issues. ### Application Updates @@ -92,7 +88,11 @@ async function setDownloadURLs() { setLinkURL("win-x64", artifact); break; case ".dmg": // macOS - setLinkURL("mac-x86_64", artifact); + if (name.includes("x64")) { + setLinkURL("mac-x64", artifact); + } else if (name.includes("arm64")) { + setLinkURL("mac-arm64", artifact); + } break; case ".AppImage": // Linux (AppImage) if (name.includes("x86_64")) {